引导用户从 IMA 知识库下载文献 PDF 到本地,然后进行纯本地的结构化分析和总结生成。
| 之前(v1.x) | 现在(v2.0) |
|---|---|
| ------------- | ------------- |
| 自动调用 IMA API 获取文献列表 | 引导用户手动下载 PDF 到本地 |
| 通过 COS 自动上传总结到 IMA 知识库 | 总结 MD 保存在本地文件系统 |
| 依赖 IMA 凭证(client_id/api_key) | 零 API 依赖,纯本地运行 |
| 需要 COS 上传的复杂凭证处理 | 取消 COS 上传流程 |
[推断]。绝不编造数据。%PDF-),非PDF文件不处理。pdfplumber(已安装 v0.11.9)。~/.local/share/ima-kb-backup/paper-summaries/TEMPLATE.md 作为总结模板。# 检查本地知识库目录
BACKUP_DIR="$HOME/.local/share/ima-kb-backup"
mkdir -p "$BACKUP_DIR"/{raw-pdfs,paper-summaries,literature-catalog,scripts}
ls "$BACKUP_DIR/papers.db" && echo "✅ 本地数据库存在" || echo "⚠️ 本地数据库不存在(首次使用会自动创建)"
# 检查 pdfplumber
~/.hermes/hermes-agent/venv/bin/python3 -c "import pdfplumber; print('✅ pdfplumber:', pdfplumber.__version__)" || echo "❌ pdfplumber 缺失"
这是本 skill 的核心改变——不再自动调用 IMA API,而是引导用户手动操作。
当用户说"分析一下IMA里的某篇文献"时,引导用户:
📋 请按以下步骤操作:
1. 打开 IMA(腾讯元宝)知识库
2. 找到你要分析的文献
3. 点击下载/导出,将 PDF 保存到本地
4. 告诉我文件路径,我来分析
或者,如果你希望我直接从 IMA 知识库里拉取,需要你先配置 IMA API 凭证
(配置方式:在 ~/.config/ima/ 下创建 client_id 和 api_key 文件)
用户也可以直接给出本地 PDF 路径:
# 把 PDF 放到 raw-pdfs 目录
cp /path/to/paper.pdf ~/.local/share/ima-kb-backup/raw-pdfs/
如果用户已配置 IMA 凭证且在同一个 Hermes 环境,可以用旧流程自动下载。
# 检查是否有 IMA 凭证
if test -f ~/.config/ima/client_id && test -f ~/.config/ima/api_key; then
echo "✅ IMA 凭证已配置,可以自动从知识库拉取"
else
echo "⚠️ 未配置 IMA 凭证,请使用方式 A 或 B"
fi
PDF_PATH="/path/to/your/paper.pdf"
# 验证 PDF
head -c 4 "$PDF_PATH" | grep -q "%PDF" && echo "✅ 有效PDF" || echo "❌ 不是PDF文件"
# 提取文本和表格
PYTHON="$HOME/.hermes/hermes-agent/venv/bin/python3"
$PYTHON -c "
import pdfplumber, json, sys
pdf_path = sys.argv[1]
with pdfplumber.open(pdf_path) as pdf:
text_parts = []
tables = []
for i, page in enumerate(pdf.pages, 1):
text = page.extract_text()
if text:
text_parts.append(f'[第{i}页]\\n{text}')
for j, table in enumerate(page.extract_tables()):
if table:
tables.append({'page': i, 'index': j, 'data': table})
print('TEXT_START')
print('\\n\\n'.join(text_parts))
print('TABLES_START')
print(json.dumps(tables, ensure_ascii=False))
" "$PDF_PATH"
对提取的文本,按以下 12 个要素逐一分析:
| 要素 | 提取内容 | 来源位置 |
|---|---|---|
| ------ | ---------- | ---------- |
| 研究背景 | 实践/理论/政策背景 | 引言开头 |
| 研究问题 | 核心研究问题 + 子问题 | 引言/摘要 |
| 研究结论 | 对研究问题的直接回答 | 结论部分 |
| 文献综合 | 已有研究的分类梳理 | 文献综述 |
| 文献批评 | Research Gap | 文献综述结尾 |
| 研究方法 | 范式/数据来源/样本/工具 | 方法论 |
| 理论框架 | 理论基础 + 概念界定 | 理论部分 |
| 一致性发现 | 与已有研究一致的发现 | 讨论部分 |
| 不一致性发现 | 与已有研究不一致的发现 | 讨论部分 |
| 研究贡献 | 理论/实践/方法贡献 | 结论 |
| 研究不足 | 作者自述或推断的局限 | 结论 |
| 未来展望 | 未来研究方向 | 结论 |
使用模板生成总结文件,保存在本地文件系统。
TEMPLATE="$HOME/.local/share/ima-kb-backup/paper-summaries/TEMPLATE.md"
if [ ! -f "$TEMPLATE" ]; then
# 创建默认模板
cat > "$TEMPLATE" << 'TMPL'
# {论文标题}
> **文献类型**:{期刊/会议/学位论文}
> **来源**:{期刊名/会议名}
> **年份**:{年份}
## 基本信息
| 项目 | 内容 |
|------|------|
| 标题 | {标题} |
| 作者 | {作者} |
| 年份 | {年份} |
| 期刊/来源 | {来源} |
| 关键词 | {关键词} |
## 摘要
{原文摘要}
## 结构化分析
### 1. 研究背景
{背景}
### 2. 研究问题
{研究问题}
### 3. 研究结论
{研究结论}
### 4. 文献综合
{文献综合}
### 5. 文献批评(Research Gap)
{文献批评}
### 6. 研究方法
{研究方法}
### 7. 理论框架
{理论框架}
### 8. 一致性发现
{一致性发现}
### 9. 不一致性发现
{不一致性发现}
### 10. 研究贡献
{研究贡献}
### 11. 研究不足
{研究不足}
### 12. 未来展望
{未来展望}
## 阅读笔记
{个人笔记区域}
---
*本总结由 AI 辅助生成,所有事实性陈述均来自原文。推断内容已标注 `[推断]`。*
*生成时间:{日期}*
TMPL
echo "✅ 已创建默认模板: $TEMPLATE"
fi
生成总结文件:
# 保存位置
OUTPUT_DIR="$HOME/.local/share/ima-kb-backup/paper-summaries"
FILENAME="{论文简称}_{第一作者}.md"
OUTPUT_PATH="$OUTPUT_DIR/$FILENAME"
# 将 LLM 分析结果填入模板,保存到 OUTPUT_PATH
# 如果存在 papers.db,插入记录
DB_PATH="$HOME/.local/share/ima-kb-backup/papers.db"
python3 -c "
import sqlite3, os
db_path = '$DB_PATH'
if os.path.exists(db_path):
conn = sqlite3.connect(db_path)
conn.execute('''CREATE TABLE IF NOT EXISTS papers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
authors TEXT,
year INTEGER,
filename TEXT,
summary_path TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)''')
conn.execute('INSERT OR IGNORE INTO papers (title, authors, filename, summary_path) VALUES (?, ?, ?, ?)',
('论文标题', '作者', '文件名.pdf', 'paper-summaries/文件名.md'))
conn.commit()
conn.close()
"
交付前执行以下检查:
1. 检查每个事实性陈述是否有来源标注(页码/图表编号)
2. 检查统计数据是否与原文一致
3. 检查推断内容是否正确标注 [推断]
4. 检查"阅读笔记"区域是否与原文内容分隔
5. 检查是否有编造或模糊表述
向用户报告:
✅ 分析完成!
📄 文献:{论文标题}
📁 PDF 位置:{PDF路径}
📝 总结位置:{输出路径}
[推断]标注:N 处
引用页码:N 处
⚠️ 需要你手动确认的事项:
- 检查 [推断] 标注的内容是否需要调整
- 在"阅读笔记"区域补充你的个人理解
| 组件 | 路径 | 说明 |
|---|---|---|
| ------ | ------ | ------ |
| Hermes Python | ~/.hermes/hermes-agent/venv/bin/python3 | 3.11.15 |
| pdfplumber | Hermes venv v0.11.9 | PDF文本提取 |
| 备份目录 | ~/.local/share/ima-kb-backup/ | 所有本地文件 |
| PDF存放 | raw-pdfs/ | 下载的PDF文件 |
| 总结存放 | paper-summaries/ | 生成的MD文件 |
| 文献目录 | literature-catalog/ | 目录索引文件 |
| 数据库 | papers.db | 文件索引(可选) |
| 错误类型 | 处理方式 |
|---|---|
| ---------- | ---------- |
| PDF 路径不存在 | 提示用户检查路径,引导重新下载 |
| 非 PDF 文件 | 检查 magic bytes 后拒绝,提示用户重新下载 |
| 文本提取为空 | 标注 [OCR识别],提醒用户对照原文核对 |
| 模板文件缺失 | 自动创建默认模板 |
| 数据库写入失败 | 不影响分析流程,仅给出提示 |
| 操作 | 旧版(v1.x) | 新版(v2.0) |
|---|---|---|
| ------ | ------------- | ------------- |
| 获取文献 | 自动调用 IMA API | 引导用户手动下载 PDF |
| 保存总结 | 上传到 IMA 知识库 | 保存到本地文件系统 |
| 凭证要求 | 需要 IMA client_id/api_key | 不需要任何 API 凭证 |
| COS 上传 | 需要处理复杂的 COS 凭证 | 不需要 |
| 适用场景 | 当前 Hermes 环境已有 IMA 凭证 | 任何环境,包括代配服务器 |
> 用户说: "帮我分析这篇论文,路径是 ~/Downloads/paper.pdf"
>
> Agent 执行:
> 1. 检查 PDF 有效性(magic bytes)
> 2. 用 pdfplumber 提取文本和表格
> 3. 按 12 要素进行结构化分析
> 4. 生成总结 MD 文件到 paper-summaries/
> 5. 报告结果
> 用户说: "帮我分析一下IMA知识库里那篇关于会展竞争力的文献"
>
> Agent 回应:
> ```
> 好的,请先按以下步骤操作:
>
> 1. 打开 IMA 知识库
> 2. 搜索"会展竞争力"相关的文献
> 3. 点击下载 PDF 到本地
> 4. 然后告诉我文件路径
>
> 或者你把文件放到 ~/.local/share/ima-kb-backup/raw-pdfs/ 下
> 我来扫描并分析新增的文献
> ```
> 用户说: "把 raw-pdfs 里所有还没分析的 PDF 都处理了"
>
> Agent 执行:
> 1. 扫描 raw-pdfs/ 目录
> 2. 对比 paper-summaries/ 找出未处理的
> 3. 逐篇分析并生成总结
> 4. 报告完成情况
共 1 个版本