forked from admin/PlantAI-rag-new
- paper_writer_service(8097):FastAPI + MCP streamable-http 单端点,9 工具
(propose_paper_outline/write_paper_section/get_paper_progress/search_refs/
revise_paper_section/revise_paper/get_paper/complete_paper/cancel_paper),
SQLite 三表(papers/paper_sections/citations,WAL),GB/T 7714 引用协议
- BFF:services/paper/{mcp_client,agent}.py(裸 JSON-RPC 客户端 + 规则状态机)、
routers/paper.py、schemas.py 4 个 Paper*Block + ArtifactBlock 加 paper_id/citation_count、
config.py 开关、main.py 条件注册、docgen.py 抽 insert_artifact 公共 helper
- 前端:intent.js paperIntent 纯函数、Composer docgen 分支 sub-route、sendPaper/轮询、
PaperBriefCard/PaperOutlineCard/PaperProgressCard、DocPane cite-chip
- deploy/paper_restart.sh + toggle_paper.sh;compile_sdk.sh 白名单追加 paper 文件
- tests/paper 26 条(工具逻辑 + MCP 协议 + BFF 状态机 + 块 schema + 前端 intent 单测)
2.3 KiB
2.3 KiB
论文撰写功能 手工验收手册
前置(175 服务器,dev 树明文)
paper_writer_service8097 已拉起(bash deploy/paper_restart.sh)。- BFF 8090 已启用论文路由(
bash deploy/toggle_paper.sh on,即.env里PAPER_WRITER_ENABLED=true)。 - 前端 Vite dev(5180)或 BFF 静态托管 dist 就绪,Mac 侧走 SSH 隧道访问。
探活自检:
curl -s http://127.0.0.1:8097/health # {"ok":true,...,"db":{"connected":true}}
curl -s http://127.0.0.1:8090/api/paper/health # 应透传 8097 /health
curl -s http://127.0.0.1:8090/api/paper/papers/nope # {"ok":false,...,"code":"NOT_FOUND"}(路由已注册)
验收剧本(10 步)
- 触发:输入「帮我写一篇水稻 SPL 基因家族的综述论文」→ 出现 NL 引导 +
paper_brief表单卡(预填已抽取字段,缺失项待补)。 - 补全 brief:类型=综述 / 篇幅=5000字 / 语言=中文 / 格式=GB/T 7714 → 点「生成大纲」→ 出现
paper_outline大纲卡(5-6 节)。 - NL 改大纲:输入「把展望合并到讨论」→ 系统复述确认并更新大纲卡。
- 确认:点「确认并开始撰写」→ 出现
paper_progress进度卡,逐节推进,每节完成有 NL 小结。 - 完成:全部节完成后自动挂
artifact块并切右侧「文档」TAB;全文含文末 GB/T 7714 参考文献列表 + 降级 disclaimer(无 DOI/PMID 的知识库资料)。 - 引用点击:点击正文
[3]→ popover 显示标题 / GB 文本 / 来源片段。 - 修改:输入「把讨论部分第二段改得更严谨」→ 修改确认,文献编号已重排。
- 导出:文档 TAB 点「导出 PDF」/「导出 DOCX」→ 成功下载。
- 关服务降级:
bash deploy/paper_restart.sh停掉后(或 kill 8097)→ 前端触发词落 docgen 单发(无 paper 入口)。 - 恢复续写:重启 paper 服务 + BFF 后 resume → 跳过已完成节继续。
备注
- 引用为知识库(vstore 8094)自动检索注入;知识库 chunk 无 DOI/PMID 元数据,故多为降级格式 + disclaimer(见方案 §3.3)。
- 长文一致性:citations 全局只增不改,complete 按首次出现顺序重排编号;正文与文末列表同源生成。