7.0 KiB
7.0 KiB
Human Voice Rewrite Demo — 使用说明(给接手同事)
这是一个可以自己改、自己调的独立 Demo:前端(单页 HTML)+ 后端(FastAPI)+ 真实 OpenRouter 大模型调用。产品逻辑按《Human_Voice_Rewrite_PRD_v1.1》实现:AI 读懂与诊断 → 顾问人工重写 → AI 全文复检与精准返工。前台外观对齐 v6 Core Color Match 两栏原型。
一、快速启动
环境要求:本机有 Python 3.10+(macOS 一般自带;Windows 到 python.org 安装并勾选 Add to PATH)。
macOS / Linux:
./local_start.sh # 若提示无执行权限,先 chmod +x local_start.sh
Windows:双击 start.bat(或在 cmd / PowerShell 里运行 start.bat)。
⚠️ 必须用上面的启动脚本启动,不要直接运行
uvicorn main:app: 脚本负责从.env把 OpenRouter Key 导出到环境变量。直接跑 uvicorn 服务虽然能起来 (健康检查正常),但所有 AI 调用会报「分析失败:缺少 OpenRouter Key」。
首次运行会自动创建 .venv 并安装依赖(需要联网)。看到
Human Voice Rewrite Demo: http://127.0.0.1:8000 后,浏览器打开该地址即可。
- Key 已内置在本目录
.env(从公司后端环境变量导出,见第五节保密提醒) - 端口冲突:macOS/Linux 用
HVR_PORT=8001 ./local_start.sh;Windows 先set HVR_PORT=8001(PowerShell 用$env:HVR_PORT=8001)再运行start.bat - 停止:终端
Ctrl+C
二、目录结构
| 文件 | 作用 | 同事常改的点 |
|---|---|---|
index.html |
前端单页(两栏 Workbench、聚焦/全文、批注、调后端 API) | 示例文书 SAMPLE_ESSAY、示例题目 SAMPLE_PROMPT、页面文案 |
main.py |
FastAPI 入口与五个业务端点 | 一般不动 |
prompts.py |
AI 提示词(分析/诊断/复检/写作起点/参考片段)+ Pattern 库 | 调 AI 行为和输出质量主要改这里 |
llm.py |
OpenRouter 客户端(模型、温度、超时、重试) | 模型默认值 DEFAULT_MODEL、temperature、max_tokens |
schemas.py |
前后端接口数据结构(对齐 PRD v1.1 §31) | 增删字段时前后端同步改 |
evidence.py |
Pattern / Annotation 证据核对(原文命不中则不画高亮) | 一般不动 |
local_start.sh / start.bat |
一键启动(建 venv、读 .env、起服务) | 端口、env 路径 |
.env |
OpenRouter Key + 代理地址 | 换 Key / 换代理在这里 |
test_demo.py |
离线测试(不消耗模型调用) | 改了逻辑后跑 .venv/bin/pytest |
README.md |
项目说明 | — |
三、三阶段业务流(真实模型)
- 文章理解
POST /api/analyze:全文理解 + 每段中文理解 + 语义锚点(PRD §31.1) - 人味诊断
POST /api/diagnose:命中 P01–P12 + 每段 Rewrite Direction / Inline Annotation / Context Hint / Scaffold(PRD §31.2);顾问在对话里补充的理解和约束优先 - 全文复检
POST /api/recheck:六维度验收,通过即结束;需返工只返回一个段落 + 单一 返工目标,并绑定rewrite_version(PRD §31.3);/api/scaffold、/api/reference只在顾问主动展开时使用,并写入 exposure 记录
前端流程:进入页(可粘贴自己的文章,自动分段)→ 开始分析 → 对话确认/纠偏 → 诊断 →
两栏逐段手写(左原文+批注,右安静写作区)→ 提交复检。段落数量按实际 1–N 动态渲染。
四、可以调什么(按频率)
| 想调什么 | 改哪里 |
|---|---|
| 换模型 | llm.py 的 DEFAULT_MODEL,或启动前 export HVR_LLM_MODEL=别的模型 |
| 输出更稳/更发散 | llm.py 的 temperature(默认 0.3)、max_tokens(默认 16000) |
| 复检更严/更松 | prompts.py 的 build_recheck_prompt(High Precision 规则在系统提示里) |
| Pattern 判定行为 | prompts.py 的 PATTERN_LIBRARY(P01–P12 定义 + 改写动作) |
| 示例文书/题目 | index.html 顶部的 SAMPLE_ESSAY / SAMPLE_PROMPT |
| 接口字段 | schemas.py(改后 index.html 里对应渲染处同步) |
| 重试/超时 | llm.py complete_json(任何失败自动重试 1 次)与 timeout |
改完重启服务即可生效(后端代码改动重启启动脚本;纯前端改 index.html 直接刷新页面)。
五、Key 与保密提醒(重要)
.env内是公司真实 OpenRouter Key(含区域代理地址),已随包分发,仅限内部使用:- 不要把整个文件夹/压缩包发到外网、公开仓库、微信群外;
- 同事间拷贝前先确认接收人是内部人员;
- 若怀疑泄露,请更换
prodream_backend/.env里的PRODREAM_BACKEND_OPENROUTER_API_KEY并同步更新本包.env。
- 本目录在仓库里是 gitignored 的,不会误提交。
六、常见问题
| 现象 | 处理 |
|---|---|
错误:找不到环境变量文件 |
本目录缺 .env,或设置了 HVR_BACKEND_ENV 指向了不存在的文件 |
服务能启动、健康检查正常,但分析时报分析失败:缺少 OpenRouter Key |
没用启动脚本,直接跑了 uvicorn main:app。用 start.bat / local_start.sh 启动(脚本负责从 .env 导出 Key 到环境变量) |
| 端口被占用 | HVR_PORT=8001 ./local_start.sh(Windows 先 set HVR_PORT=8001) |
分析时报 调用大模型失败(HTTP …) |
看错误后半段:Key 失效→换 .env;403→代理问题(检查 .env 的代理地址);超时→网络 |
模型未返回内容(可能被截断或拒绝) |
已自动重试 1 次仍失败,多半是网络抖动,点页面「重试」即可 |
| 页面空白 | 确认是从 http://127.0.0.1:8000 访问(不是直接双击 index.html,那样没有后端) |
| 想完全不用代理直连 | 把 .env 里 PRODREAM_BACKEND_OPENROUTER_PROXY_URL 那行删掉(国内网络可能不通) |
| 右侧显示「已保存」 | 只表示草稿已持久化,不等于这段已经改完,也不等于 AI 通过 |
七、V1.1 不要再按旧 Demo 理解的几点
- Workbench 是两栏,不再有独立第三栏 Writing Coach
已保存≠已改写;提交复检只看各段rewrite_text是否非空- 段落导航和进度必须按实际段数动态生成,不能写死 4 段
- Recheck 检查的是提交时的 Snapshot;提交后继续改会进入新版本
- 只有顾问真正展开过的 Scaffold / Reference 才会进入复制检测
- 分析中(AI 初审 / 诊断 / 复检进行中)在对话页输入框输入并点发送:输入框内显示红色「AI 分析中,请稍候…」,已输入文本不清除(可继续输入,发送会被拦截,不会丢字)
- 刷新位置规则:改写进行中刷新 → 回 Workbench(改写与进度保留);理解/诊断结果态刷新 → 回对话页(历史卡完整);复检结果已返回(pass 卡/返工卡在对话页)刷新 → 停留对话页;只有复检请求进行中刷新才回 Workbench(可重新提交复检)