For AI agents: the complete documentation index is available at /druce-website/llms.txt, the full documentation bundle is available at /druce-website/llms-full.txt, and this page is available as Markdown at /druce-website/development/codebase-map.md.

代码导览

本页把 PRD 章节和验收标准映射到 app/ 下的具体模块,让一个新贡献者能在 5 分钟内知道"某个功能在哪个文件里"。

PRD 章节 ↔ 代码模块

PRD 章节模块文件一句话职责对应 AC
一、产品定位app/streamlit_app.pyStreamlit 单页前端,顶部文案即产品定位
三、核心功能app/decompose.py问题拆解为 3-5 个子搜索词AC-01
三、核心功能app/search.py多轮联网搜索(Tavily > Bing > Mock)AC-02
三、核心功能app/report.py报告生成,结构化四段输出AC-03
五、技术栈app/config.py环境变量与运行配置,模式判定
五、技术栈app/llm.pyOpenAI 兼容 LLM 客户端
六、数据流app/pipeline.py核心编排:拆解 → 搜索 → 验证 → 报告
数据模型app/models.pySource / DataPoint / Report 数据模型

模块依赖关系

各模块要点

app/pipeline.py — 编排核心

run_pipeline(question, on_progress) 是唯一入口,按 PRD 第六节串联四个阶段。on_progress 是 Streamlit 的进度回调。

report_to_markdown(report) 把结构化 Report 渲染为 Markdown,供前端展示。

app/decompose.py — 问题拆解(AC-01)

有 LLM 时调模型拆解;无 LLM 时回退基于规则的 mock 拆解(去停用词 + 取前几个 token)。拆解结果对用户可见,满足"便于人工校验"。

app/search.py — 多轮联网搜索(AC-02)

SearchBackend Protocol 定义统一接口,三个适配器:TavilyBackendBingBackendMockBackend_pick_backend() 按 key 优先级选择。

app/report.py — 报告生成(AC-03)

有 LLM 时调模型整合搜索结果为结构化报告;无 LLM 时基于 Source 直接合成 mock 报告。输出固定四段:摘要 → 分点详述 → 风险提示 → 参考资料。

app/config.py — 运行配置

Settings dataclass 从环境变量读取密钥与拆解参数。has_llm / has_search / is_mock 三个属性判定整体运行模式。

app/llm.py — LLM 客户端

OpenAI 兼容接口,llm_complete(system, user, *, temperature, max_tokens) → str。无 OPENAI_API_KEY 时上层应走 mock 流程,不直接调用本模块。

app/models.py — 数据模型

Pydantic 模型,定义流程中各阶段的结构化产物:

模型含义
Source一条搜索结果(标题、url、snippet、来源类型、权威等级)
DataPoint报告中的一个论点(claim、sources、conflict、has_evidence)
Report结构化报告(question、subqueries、summary、points、risks、references)

入口脚本

run.py 是启动入口,拼接 streamlit run 的命令行参数,支持 python run.py [port] 指定端口。

想在本地改这些代码?读 本地开发