
Paper Analyzer
- 785 installs
- 971 repo stars
- Updated May 29, 2026
- zsyggg/paper-craft-skills
Turns an academic paper (arXiv URL, PDF, or pasted text) into an in-depth shareable HTML article via a forced 6-round workflow with code-repo search and formula rendering.
About
A skill that converts a research paper into a long-form HTML explainer using a mandatory six-round pipeline covering full-text retrieval, source-code cross-referencing, deep analysis, and self-review. A developer uses it to produce a polished, ready-to-share article that explains a paper more clearly than the paper itself.
- Six forced rounds: fetch full text, search open-source code, deep analysis, ask user, write HTML, self-review
- Three writing styles (storytelling, academic) with Mermaid diagrams and formula rendering
Paper Analyzer by the numbers
- 785 all-time installs (skills.sh)
- Ranked #320 of 1,335 Generative Media skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/zsyggg/paper-craft-skills --skill paper-analyzerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 785 |
|---|---|
| repo stars | ★ 971 |
| Last updated | May 29, 2026 |
| Repository | zsyggg/paper-craft-skills ↗ |
What it does
Turns an academic paper (arXiv URL, PDF, or pasted text) into an in-depth shareable HTML article via a forced 6-round workflow with code-repo search and formula rendering.
Files
Paper Analyzer — 学术论文深度解析
⚠️ 这是生产级指令。你的唯一任务:产出一篇让读者觉得"比我读论文还清楚"的深度HTML长文。
快速使用
/paper-analyzer https://arxiv.org/abs/2605.07363
/paper-analyzer /path/to/paper.pdf
/paper-analyzer 粘贴文本---
强制工作流(每一步必须执行,不可跳过)
Round 1:获取论文全文 ⛔
| 输入 | 执行 |
|---|---|
| arxiv URL | 同时读 arxiv.org/abs/(摘要)和 arxiv.org/html/(全文HTML) |
| PDF路径 | 用PDF读取工具读全文。分多次直到全部获取 |
| 文本 | 全部使用 |
自检:有没有完整内容?没有 → 换方式继续。
Round 2:搜索开源代码 ⛔
1. 从论文中提取代码仓库链接(通常在页脚或 Introduction 末) 2. 没有则用论文标题+作者名搜索 GitHub 3. 克隆:git clone --depth 1 <url> /tmp/paper_code 4. 阅读 README → 核心源码文件 → 配置文件
根据代码状态分支处理:
| 状态 | 处理 | 文章体现 |
|---|---|---|
| ✅ 已发布 | 读核心文件,找 ≥2 处论文方法↔源码对应 | 贴代码段(≤30行),标注 文件路径:行号 |
| ⏳ 待发布 | 检查 README/Release 标记 | 标注状态+仓库链接 |
| ❌ 无代码 | 搜索替代实现/相关项目 | 注明"本文未提供公开代码" |
Round 3:深度分析 ⛔ 内部完成,不展示过程
1. 核心创新:论文做了什么别人没做的?(1-3个,每个一句话提炼) 2. 方法细节:输入→处理→输出→为什么更好(每个创新画清楚这条线) 3. 关键实验:哪个结果最有说服力?为什么? 4. 论文弱点:作者自述 + 你的判断 5. 代码对应:每个 component 对应哪个文件/函数
Round 4:询问用户 ⛔
必须问风格选择,用户未回则默认 academic。
Round 5:写作输出HTML ⛔
按选定风格的要求写,输出完整HTML。模板见下文。
Round 6:自我审查 ⛔
逐项检查,不通过则修改直到通过。
---
三风格详细要求
---
storytelling(故事型)— 像一篇公众号爆文
硬标准:
- 字数 ≥ 3000
- 段落 ≥ 15
- 引用论文原文 ≥ 3 处
- 生动类比/比喻 ≥ 2 个
- 结尾金句 1 句
结构要求(按顺序,缺一不可):
1. 钩子开头(2-3段)
— 反常识问题 / 引人共鸣的场景 / 让人"等等再说一遍?"的事实
— 不要直接讲技术。先让读者好奇。
2. "为什么会这样"(3-4段)
— 解释现有方法的逻辑和它的瓶颈
— 用简单例子说明
— 让读者感到"确实需要一种新方法"
3. 核心洞察(1-2段)
— 论文最关键的那一句话发现
— 用一句话说清楚 + 一个类比强化
4. 方法详解(5-8段,全文最重点)
— 分步骤展开:怎么做 → 为什么这样设计 → 和旧方法的关键区别
— 每个步骤配一个类比
— 引用论文原文(公式/算法描述)≥ 3 处
— 用对比表呈现新旧方法差异
5. 实验效果(3-4段)
— 最重要的实验结果 + 数据解读
— 不只是报数字,要解释"这意味着什么"
— 用表格呈现关键对比数据
6. 深层意义(2-3段)
— 这个工作对行业意味着什么
— 不止一个角度:技术意义、产业意义、方法学意义
7. 局限(1-2段)
— 作者自述的局限 + 你的判断
8. 收束(1段)
— 回到开头的场景/问题,形成闭环
— 读者带着"我懂了"的感觉离开
9. 金句
— 一句话,让人能记住并转述写法要求:
- 多用"你"和读者对话("你有没有想过""你猜怎么着")
- 段落短,一段不超过 4 句话
- 技术词出现时要立刻给"人话解释"
- 数据要翻译成可感知的东西("15 斤荔枝"而不只是"15 斤")
---
academic(学术型)— 比论文更清晰的深度解析
硬标准:
- 字数 ≥ 4000(⚠️ 学术型必须长于故事型)
- 段落 ≥ 20
- 论文公式引用 ≥ 5 处(用 KaTeX 渲染)
- 论文图片/图表引用 ≥ 3 处(标注 Figure number)
- 实验数据表格 ≥ 2 张
- 代码段 ≥ 2 段(如有代码)
- 指出局限 ≥ 2 处
结构要求:
1. 论文元信息
标题 · 作者 · 链接 · 代码状态
2. 一句话总结(100字内)
3. 研究背景与动机(4-5段)
— 这个领域在解决什么问题
— 现有方法及其局限(按时间线或方法论分类)
— 本文的出发点
4. 预备知识(2-3段,如需要)
— 理解本文需要的核心概念
— 本文用到的基础方法简介
5. 方法详解(8-10段,全文最重点)
— 对每个创新点独立成节
— 每个创新点包含:①问题 ②怎么做(配公式)③为什么有效 ④与已有方法的差异
— 公式用 $$...$$ KaTeX 渲染
— 引论文原文 Figure/Table 编号
— 有代码则穿插源码分析
6. 实验分析(4-6段)
— 实验设置概述
— 主要结果(配表格 + 深入解读)
— 不同维度的对比分析
— 消融实验说明了什么
— 不是报数据,是解读数据背后的含义
7. 讨论(2-3段)
— 方法的适用边界
— 未解决的问题
— 对未来工作的启示
8. 局限分析(2-3段)
— 作者自述 ≥ 1 处
— 你的独立判断 ≥ 1 处
9. 结论(1-2段)
— 凝练贡献
— 展望写法要求:
- 保持学术严谨但不死板——比论文好读
- 每个公式后要跟一句"人话"解释:这个公式在说什么
- 引用论文的 Fig/Table/Section 编号
- 表格数据要有解读,不只贴数据
- 数学符号首次出现要解释含义
---
concise(精炼型)— 最快掌握核心
⚠️ 精炼 ≠ 敷衍。精炼是信息密度极高、但该有的全有。
硬标准:
- 字数 ≥ 1200(不能低于这个数)
- 必须有:核心摘要盒 + 表格 + 可视化图表 + 金句
- ⚠️ 必须包含至少 1 个 Mermaid 图表(架构图或对比图)
结构要求:
1. 头图(Mermaid图表)—— 全文最核心架构/对比的一张图
类型可以是:flowchart(流程图)、graph(对比图)、或 timeline
2. 核心摘要盒
— 5 行以内
— 覆盖:做什么 / 怎么做 / 效果 / 适用场景
3. 关键创新(3-5 个,编号列出)
— 每个 2-4 句
— 一句话说创新点 → 一句话说怎么做的 → 一句话说为什么重要
4. 核心数据表
— 最多 5 行数据
— 突出和 baseline 的对比
5. 金句收尾Mermaid 图表示例(⚠️ 节点文本避免中文特殊字符,用英文或简单ASCII。用 <br/> 换行):
flowchart TB
subgraph DSA["DSA: 64 heads scan all L tokens"]
Q1[Query] --> H1[Head 1..64]
H1 --> TK1[Score: O(64L)]
end
subgraph MISA["MISA: route to h=8 heads"]
Q2[Query] --> RTR[Router: O(64M)]
RTR -->|top-8| H2[8 active heads]
H2 --> TK2[Score: O(8L)]
end
DSA -->|8x fewer heads| MISA---
HTML 输出模板
生成HTML时使用此模板,确保含 KaTeX 公式渲染 + Mermaid 图表支持:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>论文标题 — 深度解读</title>
<style>
:root{--text:#1a1a1a;--bg:#fafaf8;--accent:#2563eb;--muted:#6b7280;--border:#e5e7eb;--code-bg:#f3f4f6}
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:-apple-system,"PingFang SC","Noto Serif SC",serif;color:var(--text);background:var(--bg);line-height:1.85;padding:2.5rem 1.5rem;max-width:720px;margin:0 auto;font-size:17px}
h1{font-size:2rem;margin:0 0 .3rem;line-height:1.3}
h2{font-size:1.35rem;margin:2.8rem 0 .8rem;color:var(--accent);padding-bottom:.4rem;border-bottom:1px solid var(--border)}
h3{font-size:1.1rem;margin:1.5rem 0 .5rem;color:#333}
.meta{color:var(--muted);font-size:.9rem;margin-bottom:2.5rem;line-height:1.8}
.meta a{color:var(--accent);text-decoration:none}
blockquote{border-left:3px solid var(--accent);padding:.6rem 1.2rem;margin:1.5rem 0;background:#f0f4ff;border-radius:0 8px 8px 0}
pre{background:var(--code-bg);padding:1rem 1.2rem;border-radius:8px;overflow-x:auto;font-size:.85rem;line-height:1.5;margin:1.5rem 0;border:1px solid var(--border)}
code{font-family:"SF Mono","Fira Code",monospace;font-size:.9em}
p{margin:1rem 0}
strong{color:#111}
table{width:100%;border-collapse:collapse;margin:1.5rem 0;font-size:.93rem}
td,th{border:1px solid var(--border);padding:.6rem .9rem;text-align:left}
th{background:#f9fafb;font-weight:600}
.summary-box{background:linear-gradient(135deg,#f0f4ff,#faf5ff);padding:1.5rem;border-radius:12px;margin:1.5rem 0}
.summary-box h3{margin:0 0 .5rem;color:var(--accent)}
.golden{font-size:1.25rem;font-weight:600;color:var(--accent);text-align:center;padding:2rem 1rem;border-top:2px solid var(--accent);border-bottom:2px solid var(--accent);margin:2.5rem 0;line-height:1.5}
@media(max-width:600px){body{font-size:16px;padding:1.2rem 1rem}h1{font-size:1.5rem}}
</style>
<!-- KaTeX -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js"
onload="renderMathInElement(document.body,{delimiters:[{left:'$$',right:'$$',display:true},{left:'$',right:'$',display:false}]})"></script>
<!-- Mermaid -->
<script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
<script>mermaid.initialize({startOnLoad:true,theme:'default',securityLevel:'loose'});</script>
</head>
<body>
<!-- 内容 -->
</body>
</html>公式用 `$$...$$` 或 `$...$`,KaTeX 自动渲染。
- ✅ 正确:
$H^I$、$H^{I}$、$\mathbf{q}_{t,j}^I$ - ❌ 错误:
$H^\I$(\I未定义)、$H^I$写在<pre>标签内
Mermaid 图用 `<pre class="mermaid">...</pre>` 包裹。节点文本避免中文标点和特殊字符。
---
自我审查清单(Round 6)
生成后逐条检查,不通过则修改:
通用
- [ ] 字数达标?(story≥3000 / academic≥4000 / concise≥1200)
- [ ] 引用论文原文 ≥ 3 处?
- [ ] 每个核心创新独立深度展开?
- [ ] 至少 1 个实验结果做深入解读?
- [ ] 代码状态已提及?
- [ ] 有代码则源码 ≥ 2 段 + 文件路径?
- [ ] 指出局限 ≥ 2 处(至少 1 处是作者自述的)?
- [ ] HTML 格式完整,可在浏览器打开?
- [ ] 无 AI 套话("深入探讨""至关重要""值得注意的是")?
storytelling 专属
- [ ] 有钩子开头?
- [ ] 有 ≥ 2 个类比/比喻?
- [ ] 用"你"和读者对话?
- [ ] 有收束段落形成闭环?
- [ ] 有金句?
academic 专属
- [ ] 字数 ≥ storytelling?
- [ ] 公式 ≥ 5 处(KaTeX 渲染)?
- [ ] 论文图/表引用 ≥ 3 处(Fig/Table 编号)?
- [ ] 实验数据表 ≥ 2 张?
- [ ] 方法部分 ≥ 8 段?
concise 专属
- [ ] 有 Mermaid 图表?
- [ ] 有核心摘要盒?
- [ ] 有对比数据表?
- [ ] 有金句?
- [ ] 字数 ≥ 1200?
---
参考文件
styles/storytelling.md— 故事型补充规范styles/academic.md— 学术型补充规范styles/concise.md— 精炼型补充规范styles/with-formulas.md— 公式详解styles/with-code.md— 代码分析规范scripts/generate_html.py— HTML生成辅助脚本
Create a minimalist, Notion-style cover image for an academic paper analyzer tool.
Visual elements:
- An open book or academic paper in the center
- Clean, simple icons floating around it: a clock (representing "5 minutes"), a chart/graph icon, text symbols
- Chinese text "论文速读" (Paper Speed Reading) as the main title
- Chinese subtitle "5分钟精炼分享" (5-Minute Refined Sharing)
Style:
- Minimal, clean Notion aesthetic
- Flat design with no gradients
- Color scheme: Deep gray (#2C2C2C) for text, soft blue (#5B9BD5) accents, off-white background (#F7F7F5)
- Plenty of white space
- 16:9 aspect ratio for GitHub README banner
- Professional but approachable
The overall feel should be clean, modern, and emphasize the "5-minute reading" concept.
Cover theme: 学术论文5分钟速读 Style: minimal
Title text: 论文速读 Subtitle: 5分钟精炼分享
Visual composition:
- Main visual: 一本打开的学术论文书籍,周围飘散着简洁的图标(时钟、图表、文字符号),象征快速理解和精炼提取
- Layout: 中心对称布局,标题在上方,主视觉在中心,副标题在下方
- Decorative elements: 简洁的线条、圆点、极简图标,呼应 Notion 的简约美学
Color scheme:
- Primary: 深灰色 (#2C2C2C) 用于标题
- Background: 米白色/浅灰 (#F7F7F5) 干净的背景
- Accent: 柔和的蓝色 (#5B9BD5) 用于关键元素
Style notes:
- Notion 风格的极简设计
- 留白充足,不拥挤
- 线条简洁流畅
- 图标风格统一
- 整体专业但不失亲和力
- 强调"5分钟"和"精炼"的概念
- 适合 GitHub README 封面展示
Image specifications:
- Aspect ratio: 16:9 (适合 GitHub README 横幅)
- Resolution: 1200x675px
- Style: Flat design, minimalist, Notion-inspired
- No gradients, solid colors only
- Clean typography for Chinese characters
#!/usr/bin/env python3
"""
提取论文元数据信息
"""
import os
import sys
import re
import json
from pathlib import Path
from typing import Dict, List
def extract_title(text: str) -> str:
"""提取论文标题"""
lines = text.split('\n')
for line in lines[:20]:
line = line.strip()
# 跳过空行和太短的行
if len(line) < 10:
continue
# 跳过明显不是标题的行
if line.startswith('#'):
return line.lstrip('#').strip()
if len(line) < 150 and not line.startswith('http'):
return line
return "Unknown Title"
def extract_abstract(text: str) -> str:
"""提取摘要"""
# 查找 Abstract 部分
patterns = [
r'(?i)abstract\s*\n(.*?)(?=\n\s*(?:introduction|1\.|keywords))',
r'(?i)abstract[:\s]+(.*?)(?=\n\n)',
]
for pattern in patterns:
match = re.search(pattern, text, re.DOTALL)
if match:
abstract = match.group(1).strip()
if len(abstract) > 50:
return abstract[:1000]
return ""
def extract_sections(text: str) -> List[str]:
"""提取章节标题"""
sections = []
patterns = [
r'^#+\s+(.+)$', # Markdown 标题
r'^(\d+\.?\s+[A-Z][^.]+)$', # 数字编号标题
r'^([A-Z][A-Z\s]+)$', # 全大写标题
]
for line in text.split('\n'):
line = line.strip()
for pattern in patterns:
if re.match(pattern, line) and 5 < len(line) < 100:
sections.append(line.lstrip('#').strip())
break
return sections[:30]
def extract_figures(text: str, images_dir: Path) -> List[Dict]:
"""提取图片信息"""
figures = []
# 从 markdown 中提取图片引用
img_pattern = r'!\[([^\]]*)\]\(([^)]+)\)'
for match in re.finditer(img_pattern, text):
caption, path = match.groups()
figures.append({"caption": caption, "path": path})
# 从 images 目录获取实际图片
if images_dir.exists():
for img_file in sorted(images_dir.glob("*")):
if img_file.suffix.lower() in ['.png', '.jpg', '.jpeg', '.gif']:
if not any(f["path"].endswith(img_file.name) for f in figures):
figures.append({
"caption": img_file.stem,
"path": f"images/{img_file.name}"
})
return figures
def extract_paper_info(md_path: Path, images_dir: Path) -> Dict:
"""提取论文完整信息"""
with open(md_path, 'r', encoding='utf-8') as f:
text = f.read()
return {
"title": extract_title(text),
"abstract": extract_abstract(text),
"sections": extract_sections(text),
"figures": extract_figures(text, images_dir),
"word_count": len(text.split()),
"char_count": len(text)
}
def main():
if len(sys.argv) < 2:
print("Usage: python extract_paper_info.py <md_path> [output.json]")
sys.exit(1)
md_path = Path(sys.argv[1])
output_path = sys.argv[2] if len(sys.argv) > 2 else "paper_info.json"
if not md_path.exists():
print(f"Error: File not found: {md_path}")
sys.exit(1)
images_dir = md_path.parent / "images"
info = extract_paper_info(md_path, images_dir)
with open(output_path, 'w', encoding='utf-8') as f:
json.dump(info, f, indent=2, ensure_ascii=False)
print(f"Extracted: {info['title'][:50]}...")
print(f"Sections: {len(info['sections'])}")
print(f"Figures: {len(info['figures'])}")
print(f"Saved to: {output_path}")
if __name__ == "__main__":
main()
#!/usr/bin/env python3
"""
生成 HTML 文件,支持 base64 嵌入图片
"""
import os
import sys
import base64
import re
from pathlib import Path
from typing import Optional
try:
import markdown
except ImportError:
markdown = None
HTML_TEMPLATE = '''<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{title}</title>
<style>
body {{ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
line-height: 1.8; max-width: 800px; margin: 0 auto; padding: 20px; color: #333; }}
h1 {{ color: #1a1a1a; border-bottom: 2px solid #333; padding-bottom: 10px; }}
h2 {{ color: #2c2c2c; margin-top: 30px; }}
img {{ max-width: 100%; height: auto; display: block; margin: 20px auto;
border: 1px solid #ddd; border-radius: 4px; }}
pre {{ background: #f5f5f5; padding: 15px; overflow-x: auto; border-radius: 4px; }}
code {{ background: #f0f0f0; padding: 2px 6px; border-radius: 3px; }}
blockquote {{ border-left: 4px solid #ddd; margin: 0; padding-left: 20px; color: #666; }}
table {{ border-collapse: collapse; width: 100%; margin: 20px 0; }}
th, td {{ border: 1px solid #ddd; padding: 8px 12px; text-align: left; }}
th {{ background: #f5f5f5; }}
</style>
</head>
<body>
{content}
</body>
</html>'''
def get_mime_type(ext: str) -> str:
"""获取图片 MIME 类型"""
types = {'.png': 'image/png', '.jpg': 'image/jpeg',
'.jpeg': 'image/jpeg', '.gif': 'image/gif'}
return types.get(ext.lower(), 'image/png')
def embed_image(img_path: Path) -> str:
"""将图片转换为 base64"""
with open(img_path, 'rb') as f:
data = base64.b64encode(f.read()).decode()
mime = get_mime_type(img_path.suffix)
return f"data:{mime};base64,{data}"
def process_images(content: str, base_dir: Path) -> str:
"""处理 markdown 中的图片,转换为 base64"""
def replace_img(match):
alt, src = match.groups()
img_path = base_dir / src
if img_path.exists():
b64 = embed_image(img_path)
return f''
return match.group(0)
return re.sub(r'!\[([^\]]*)\]\(([^)]+)\)', replace_img, content)
def md_to_html(md_content: str) -> str:
"""Markdown 转 HTML"""
if markdown:
return markdown.markdown(md_content, extensions=['tables', 'fenced_code'])
# 简单的备选转换
html = md_content
html = re.sub(r'^### (.+)$', r'<h3>\1</h3>', html, flags=re.M)
html = re.sub(r'^## (.+)$', r'<h2>\1</h2>', html, flags=re.M)
html = re.sub(r'^# (.+)$', r'<h1>\1</h1>', html, flags=re.M)
html = re.sub(r'!\[([^\]]*)\]\(([^)]+)\)', r'<img src="\2" alt="\1">', html)
html = re.sub(r'\n\n', '</p><p>', html)
return f'<p>{html}</p>'
def main():
if len(sys.argv) < 2:
print("Usage: python generate_html.py <md_path> [output.html]")
sys.exit(1)
md_path = Path(sys.argv[1])
output_path = Path(sys.argv[2] if len(sys.argv) > 2 else "article.html")
if not md_path.exists():
print(f"Error: File not found: {md_path}")
sys.exit(1)
with open(md_path, 'r', encoding='utf-8') as f:
content = f.read()
# 处理图片为 base64
base_dir = md_path.parent
content = process_images(content, base_dir)
# 转换为 HTML
html_content = md_to_html(content)
# 提取标题
title_match = re.search(r'^#\s+(.+)$', content, re.M)
title = title_match.group(1) if title_match else "Article"
# 生成完整 HTML
html = HTML_TEMPLATE.format(title=title, content=html_content)
with open(output_path, 'w', encoding='utf-8') as f:
f.write(html)
print(f"Generated: {output_path}")
print(f"Size: {output_path.stat().st_size / 1024:.1f} KB")
if __name__ == "__main__":
main()
academic
专业严谨,术语准确,适合学术交流
写作特点
- 使用标准学术术语,不做过度简化
- 准确引用论文中的定义和公式
- 客观陈述,减少主观评价
- 注重方法论和实验设计的完整性
语言风格
- 正式书面语
- 使用"本文提出"、"实验表明"等学术表达
- 保留原文关键术语(中英对照)
- 避免口语化和比喻
结构特点
- 摘要 → 背景与动机 → 方法 → 实验 → 分析 → 结论
- 每个章节有明确的技术目标
- 强调与相关工作的对比
示例开头
本文提出 Engram,一种基于条件记忆(Conditional Memory)的稀疏架构。
该方法将 N-gram 查表机制与 Transformer 主干网络相结合,
通过可扩展的哈希检索实现 O(1) 复杂度的静态知识获取。
与传统 MoE(Mixture of Experts)的动态路由不同,
Engram 的检索索引完全由输入 token 决定,具有确定性和可预取性。适用场景
学术报告、论文综述、研究组分享
concise
精炼直接,重点突出,快速阅读
写作特点
- 直击核心,省略铺垫
- 每段一个要点,不展开
- 用表格和列表提高信息密度
- 适合已有背景知识的读者
语言风格
- 简短句子,避免从句嵌套
- 直接陈述结论,再给证据
- 使用"核心是"、"关键在于"等提示词
- 不用比喻和故事
结构特点
- 一句话总结 → 核心创新 → 关键结果 → 局限性
- 大量使用表格对比
- 每节控制在 2-3 段
示例开头
**核心创新**:Engram 在 Transformer 中引入 O(1) 查表机制,
将静态知识从计算中分离。
**关键设计**:
- N-gram 哈希检索:多头哈希映射到嵌入表
- 上下文门控:用隐藏状态决定是否采纳记忆
- 确定性索引:支持预取,推理开销 <3%
**主要结果**:等参数下 MMLU +3.4,BBH +5.0适用场景
快速了解、论文速览、技术调研
storytelling
朴素接地气,从直觉出发,像讲故事一样
写作特点
- 从问题和直觉切入,不直接讲技术
- 用生动比喻让抽象概念具象化
- 选一个简单例子贯穿全文
- 逻辑递进,层层深入
语言风格
- 口语化表达,像和朋友聊天
- 使用"你有没有想过"、"说白了"等引导
- 允许个人见解和 PS 标注
- 避免学术腔调
结构特点
- 直觉引入 → 背景知识 → 核心创新 → 实验验证 → 思考展望
- 每个技术点都从"为什么需要"开始
- 用类比连接新旧概念
示例开头
你有没有想过这个问题:当我们问 ChatGPT "中国的首都在哪里",它是怎么知道答案的?
直觉上,我们可能会觉得模型"记住"了这个知识。但实际上,大模型根本没有这样的"记忆模块"——它所有的答案都是**算**出来的。
这种方式有个明显的问题:**大炮打蚊子**。适用场景
技术博客、公众号文章、科普分享
with-code
结合 GitHub 开源代码进行讲解
使用方式
- 克隆或浏览论文的 GitHub 仓库
- 找到核心实现代码
- 贴出关键代码片段并讲解
- 将论文概念与代码实现对应
示例
论文中的门控机制在代码中是这样实现的:
engram/model.py
def compute_gate(self, hidden_state, memory_key):
计算隐藏状态和记忆 key 的对齐分数
score = torch.matmul(hidden_state, memory_key.T) gate = torch.sigmoid(score / self.temperature) return gate
可以看到,门控值就是隐藏状态和记忆 key 的点积,
经过 sigmoid 归一化到 0-1 之间。适用场景
想要复现或深入理解实现细节的读者
with-formulas
包含公式图片和详细讲解
使用方式
- 插入 MinerU 提取的公式图片
- 对每个关键公式进行解读
- 解释符号含义和计算过程
- 说明公式的直觉意义
示例

这个公式定义了记忆向量的构建方式:
- $e_t$ 是最终的记忆向量
- 不同 n-gram 长度和哈希头的结果被拼接
- 这种设计让表容量可以独立扩展适用场景
需要深入理解数学细节的读者