这是一个本地运行的学术论文阅读 agent 骨架,能够自动扫描新添加的论文并生成对应笔记。项目结构以 LangGraph 为中心。agent 启动后会自动扫描论文、生成缺失摘要、展示待读摘要;用户不是控制流调度者,而是 graph 中的 human-in-the-loop 节点。
核心是一张自动执行的图:
initialize_memory: 初始化长期记忆数据库scan_library: 递归扫描 PDF 文件夹并登记论文select_unsummarized_paper: 从数据库选择摘要未生成的论文generate_summary: 读取 PDF 文件并以 base64 形式发送给模型,生成摘要、关键词、分类load_review_queue: 加载摘要已生成但用户未读的论文human_summary_review: 暂停给用户看摘要,用户只选择“深度分析”或“跳过”record_summary_decision: 记录用户选择prepare_deep_analysis_context: 准备论文 PDF 和同分类历史笔记draft_deep_analysis_note: 生成深度分析笔记初稿,并立即写入*.notes.mdhuman_note_review: 暂停给用户看当前已落盘笔记,用户可以提问、结束问答并修订,或直接确认终稿question_and_answer: 基于论文 PDF 和当前笔记回答用户问题,并记录问答历史revise_deep_analysis_note: 基于累计问答记录改写笔记,然后直接进入保存save_final_note: 保存终稿并更新数据库
LangGraph 入口在 langgraph.json 中声明:
{
"dependencies": ["."],
"graphs": {
"research_agent": "./scholar_agent/agent.py:graph"
},
"env": "./.env"
}cd /home/hjr/sholarAgentinLangGraph
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"python -m venv .venv 会创建项目自己的 Python 虚拟环境。
source .venv/bin/activate 会启用这个虚拟环境。
pip install -e ".[dev]" 会用可编辑模式安装当前项目,并安装测试、LangGraph CLI 等开发工具。
cp .env.example .env核心配置:
SHOLAR_DB_PATH: SQLite 数据库路径,默认./data/scholar_agent.sqlite3SHOLAR_PDF_ROOT: 默认递归扫描 PDF 的根目录,默认./papersSHOLAR_LLM_PROVIDER:placeholder时使用占位实现,其他值都会走远程 LLM 接口SHOLAR_API_KEY: 调用模型生成摘要和笔记时使用的 API KeySHOLAR_LLM_MODEL: 模型名SHOLAR_BASE_URL: 远程 LLM 的完整请求 URL,直接按.env配置使用,不做额外拼接
langgraph devLangGraph 会读取 langgraph.json,加载 research_agent 这张图。你可以在 LangGraph Studio 或 SDK 中启动 graph。graph 启动后会自动执行:
- 初始化数据库
- 扫描 PDF 目录
- 为所有摘要未生成的论文生成摘要
- 逐篇展示“摘要已生成且用户未读”的论文
- 用户选择
d深度分析或s跳过 - 如果深度分析,agent 生成笔记初稿并立即落盘,然后暂停等待用户修改、提问或确认
- 用户可以围绕论文细节多轮追问,看到单独答案后再输入
done结束问答 - agent 基于问答记录修订笔记并保存终稿,然后继续处理下一篇待读论文
用户介入通过 LangGraph interrupt() 完成:human_summary_review 返回 deep_analysis 或 skip;human_note_review 中以 confirm 开头表示直接确认终稿,输入 done 表示结束问答并开始修订,其他输入会先进入问答节点生成单独答案。
主表:papers
title: 论文标题,主键,作为唯一 idconference: 论文所属会议publication_time: 论文发表时间summary_generated: 论文是否生成摘要user_read: 用户是否已读摘要deep_analyzed: 是否深度分析note_path: 论文笔记文件位置pdf_path: 论文 PDF 文件位置summary: 摘要内容keywords_json: 关键词列表 JSONcategories_json: 分类列表 JSONcreated_at,updated_at: 本地记录时间
辅助表:deep_analysis_sessions 记录深度分析确认状态和终稿路径。