--- name: pipeline-opportunity description: "商机产线能力包——招标市场情报(数据爬取平台)→热点软件推荐→每日AI招标→研发报告→人工确认→研发审批。含爬虫平台接入配置与工具清单。" --- # pipeline_opportunity 商机产线能力包:把中国招标市场情报转化为软件研发商机。挂载到宿主应用(pipeline-app)即生效, 项目 `sd_projects.pipeline_id='opportunity_general'` 时自动启用全部工具。 ## 平台边界(必读) ``` 数据爬取平台 (ebpe.cc:/d/ymq/work/tender_opp) 产线平台 (本模块) 采集/存储/去重/只读查询 商机业务闭环 ┌──────────────────────────┐ ┌──────────────────────────┐ │ ccgp+ggzy 采集 (30min) │ 内网HTTP只读 │ 热点推荐/每日AI招标 │ │ SQLite 持久 (1700+条) │ ←──────────────── │ 研发报告→人工确认→研发审批 │ │ http_api.py :9085 +token │ │ opp_reports/opp_approvals │ └──────────────────────────┘ └──────────────────────────┘ ``` - 本模块**不爬取、不存**招标原始数据,只消费爬虫平台;报告/审批状态落产线库。 - 爬虫平台侧细节见其仓库 `BOUNDARY.md`/`README.md`(HTTP 端点 /api/tenders 等)。 ## Architecture ``` pipeline_opportunity/ ├── init.py # load_pipeline_opportunity()(幂等挂载) ├── opp_common.py # DB上下文/爬虫HTTP客户端/状态机/人工任务 ├── opp_data_capability.py # 爬虫平台只读封装(热点/搜索/详情/每日AI/健康度) ├── opp_report_capability.py # 报告+审批状态机(draft→confirmed→approval→approved/rejected) ├── opp_ability.py # 12工具+prompt+2角色+4 slash 命令(PipelineAbility 注册) ├── wwwroot/ # opp_reports / opp_approvals CRUD 页面(xls2ui 生成) ├── models/ + json/ # DDL 与 CRUD 源 └── scripts/load_path.py # RBAC 路径注册 ``` ## 爬虫平台接入(配置不硬编码) appbase `params` 表两个键(`opp_common.get_crawler_config` 读取,默认内网地址兜底): | 键 | 值 | |----|-----| | `tender_api_base` | `http://192.168.16.2:9085`(内网网卡绑定,公网不可达) | | `tender_api_token` | 爬虫平台 `state/api.env` 的 TENDER_API_TOKEN | ## 工具(主 agent,opp_ 前缀) | 工具 | 用途 | |------|------| | `opp_hot_software(days,top)` | 热点软件推荐:招标量+预算+地区排名 | | `opp_daily_ai_tenders(date)` | 每日 AI/Agent 招标展示数据 | | `opp_search_tenders(keyword,days,source,limit)` | 关键词检索 | | `opp_tender_detail(tender_id)` | 单条详情(原文/预算/联系人/来源链接) | | `opp_crawler_stats()` | 爬虫平台采集健康度 | | `opp_create_report / opp_update_report` | 报告草稿创建/补写 | | `opp_list_reports / opp_get_report` | 报告列表/全文 | | `opp_submit_report(report_id)` | 提交人工确认(创建门禁任务) | | `opp_list_approvals` | 审批单列表 | | `opp_diagnose` | 产线诊断 | 角色:`agent.opp_analyst` / `agent.opp_writer`;slash:`/hot` `/ai` `/reports` `/oppdiag`。 ## 状态机与门禁(不要绕过) ``` draft ──人工确认──> confirmed ──发起──> approval_initiated ──人工结论──> approved ↑ └ rejected ──> draft(可重来) ``` - 确认/审批都是 `pipeline_human_tasks` 人工任务(task_type: `opp_report_confirm` / `opp_dev_approval`),结论由人工回流,agent 禁止自批自审。 - 非法迁移一律拒绝(`REPORT_TRANSITIONS`)。 - 报告中的招标数字必须来自工具返回的真实数据,禁止编造;引用带来源链接。 ## 部署清单(宿主侧) 1. `build.sh`(建表+种子+wwwroot 软链+pip install) 2. app 入口 `load_pipeline_opportunity()`(已接线,try/except 兜底) 3. `scripts/load_path.py` 注册 RBAC 4. i18n 合并 `i18n/{zh,en}/msg.txt` 5. params 表配 `tender_api_base` / `tender_api_token` 6. 重启 → 驾驶舱验证 `/hot` 或 `opp_diagnose`