# Research Worker(深度研究微服务) 为政智通提供"综合研判 / 政策解读"能力:给定研究题目,自动**拆解问题 → 检索 → 阅读摘要 → 合成带引用的 Markdown 报告**。异步任务模式,仿 `ppt-worker`。 ## 设计要点 - **净室实现**:研究流水线为对通用方法(plan → search → read → synthesize)的独立实现,未复制任何第三方代码。 - **避开 AGPL**:检索层可插拔(默认 Tavily 商用 API),**刻意不使用 AGPL 许可的 SearXNG**;HTML 抽取用标准库。 - **提示注入防护**:抓取到的外部网页内容一律经 `untrusted.py` 包裹为"数据"传给模型(与后端 `pkg/promptguard` 同理念)。 - **可测试**:`pipeline.py` 仅依赖标准库,IO 全部注入,`python3 -m unittest test_core` 即可在无 httpx/psycopg 环境下测试。 ## 结构 | 文件 | 说明 | |------|------| | `pipeline.py` | 研究流水线(纯逻辑,IO 注入) | | `untrusted.py` | 外部内容提示注入防护 | | `htmltext.py` | HTML→纯文本(标准库) | | `search.py` | 可插拔检索 provider + 抓取 | | `llm_client.py` | OpenAI 兼容 LLM 客户端(支持本地) | | `db.py` | `research_tasks` 读写 | | `worker.py` | Redis 队列消费者 | | `app.py` | FastAPI(状态查询/健康检查) | | `test_core.py` | 纯逻辑单测 | ## 运行 ```bash pip install -r requirements.txt cp .env.example .env # 按需填写 python app.py # 启动 HTTP(8091) + 后台 worker 线程 ``` ## 任务流转 1. Go 后端写入 `research_tasks` 行并 `LPush` 到 Redis 队列 `research:tasks`。 2. worker `brpop` 取任务,执行流水线,过程中更新 Redis 状态(`research:status:`)与数据库。 3. Go 后端轮询任务状态,完成后读取 `report` 与 `sources`。 ## 测试 ```bash python3 -m unittest test_core -v ```