OpenClaw实战:第五期智能体协作——7个AI员工如何联手干活
OpenClaw实战:从0到1搭建招投标AI系统
后端API + 前端界面 + Docker部署全流程
7个智能体有了,知识库有了,怎么变成一个真正能用的系统?这篇讲清楚
📖 前情回顾
前四期我们走完了:
第一期:OpenClaw部署,让AI住进你的服务器
第二期:智能体设计,7个AI角色怎么分工
第三期:知识库建设,690个法规文件怎么喂给AI
第四期:智能体协作,一个指令7个AI联手干活
但有个问题——每次用都要打开终端敲命令,这玩意儿谁用得起?
老板要的是:打开浏览器,点两下,招标文件就出来了。
所以第五期,我们干一件事:把智能体封装成Web应用。
整体架构:三层分离
先看全貌:
为什么选这个技术栈?
⚡ FastAPI
Python生态,和知识库脚本无缝衔接,自带API文档
🎨 Vue.js + Element Plus
企业级后台标配,表单/表格/步骤条开箱即用
🐳 Docker
一键部署,不用在服务器上装一堆依赖
后端API:5个核心接口
2.1 项目结构
bidding-agents/├── main.py# FastAPI入口├── api/│ ├── tender.py# 招标文件API│ ├── bid.py# 投标文件API│ ├── legal.py# 法规查询API│ ├── knowledge.py# 知识库搜索API│ └── feishu.py# 飞书集成API├── services/│ ├── template_service.py# 模板匹配│ ├── generation_service.py# 内容生成│ ├── compliance_service.py# 合规检查│ ├── export_service.py# 文件导出│ └── simple_search.py# 知识库检索├── enterprise-data/# 企业数据└── docker/ ├── Dockerfile └── docker-compose.yml
2.2 招标文件生成API
这是最核心的接口,一个POST请求搞定:
@router.post("/generate")async defgenerate_tender(request: TenderRequest): # 1. 匹配模板 template = template_service.match( project_type=request.projectType, procurement_method=request.procurementMethod ) # 2. 生成内容(调用OpenClaw智能体) content = await generation_service.generate( template=template, project_info=request.dict(), agent_id="tender-agent" ) # 3. 合规检查(调用法规顾问) compliance = await compliance_service.check(content) # 4. 返回结果return { "content": content, "compliance_report": compliance, "template_used": template.name }
💡 关键设计
不是AI直接生成完事,而是 模板匹配 → AI填充 → 合规检查 三步走。
为什么?因为纯AI生成的招标文件格式不稳定,今天长这样明天长那样。用模板兜底,AI只负责填内容,格式由模板控制。
图1:招投标AI系统整体架构与数据流转
2.3 知识库搜索API
@router.get("/search")async defsearch_knowledge(q: str, category: str = None): results = simple_search.search( query=q, category=category, top_k=5 ) return {"results": results}
这个搜索不是简单的关键词匹配,而是做了三层:
标题匹配:文件名包含关键词,权重最高
内容匹配:正文包含关键词,按出现频率排序
时效性过滤:优先返回”现行有效”的文件,”需核实”的降权
2.4 飞书集成API
@router.post("/notify")async defnotify_feishu(task_id: str, event_type: str): awaitsend_feishu_card( title="招标文件已生成", content=f"项目:{task_id}\n状态:{event_type}", url=f"/tender/detail/{task_id}" )
这个接口让系统和企业办公流打通——文件生成完了,飞书自动弹卡片,不用盯着网页等。
前端界面:4个核心页面
3.1 新建招标——分步表单
用Element Plus的步骤条组件实现,把一个复杂的招标文件拆成3步填完:
基本信息
评标办法
生成文件
3.2 新建投标——4步向导
投标比招标更复杂,因为要分析对手、选策略:
上传招标文件 → AI自动解析
填写企业信息 → 资质自动匹配
选择投标策略 → AI推荐最优方案
生成投标文件 → 一键下载
3.3 法律审查——一键查询
输入项目描述,AI自动检索相关法规,标注风险点:
⚠️ 投标保证金超过估算价2%(违反87号令第33条)
✅ 评标委员会人数符合要求(5人单数)
⚠️ 投标有效期不足20日(违反招标投标法第24条)
3.4 知识库搜索——全文检索
每个搜索结果都带时效性标签——这是第四期做的知识库治理成果,直接在前端体现。
图2:招投标AI系统前端界面功能展示
合规检查:AI+规则双保险
这是整个系统最关键的部分。纯AI检查不可靠(可能漏判),纯规则检查不灵活(覆盖不全),所以用双保险:
classComplianceChecker: RULES = [ {"id": "R001", "law": "招标投标法第24条", "check": "投标有效期≥20日"}, {"id": "R002", "law": "87号令第33条", "check": "投标保证金≤估算价2%"}, {"id": "R003", "law": "招标投标法第37条", "check": "评标委员会≥5人单数"}, {"id": "R004", "law": "87号令第59条", "check": "履约保证金≤合同金额10%"}, ] async defcheck(self, content: str) -> ComplianceReport: # 第一步:规则引擎硬检查 rule_results = [self._apply_rule(r, content) for r in self.RULES] # 第二步:AI语义检查(调用法规顾问智能体) ai_result = await self._ai_check(content) # 合并结果,去重return self._merge(rule_results, ai_result)
📏 规则引擎
负责”绝对不能错”的硬性规定
🤖 AI语义检查
负责”可能有问题”的模糊判断
两者互补,漏判率大幅降低。
Docker部署:3条命令上线
5.1 docker-compose.yml
version: '3.8'services: api: build: . ports: - "8088:8088"volumes: - ./knowledge-base-md-new:/app/knowledge-base - ./output:/app/outputenvironment: - OPENCLAW_API_URL=http://host.docker.internal:3000depends_on: - redisfrontend: build: ./src/frontendports: - "80:80"depends_on: - apiredis: image: redis:7-alpineports: - "6379:6379"
5.2 一键启动
# 构建并启动docker-compose up -d# 查看状态docker-compose ps# 查看日志docker-compose logs -f api
就这么简单。不需要装Python、不需要装Node.js、不需要配环境变量——Docker全包了。
5.3 访问地址
图3:Docker部署架构与容器运行状态
踩过的坑
⚠️ 坑1:知识库搜索不能用向量数据库
一开始想用Milvus做向量检索,结果发现:
-
772个中文法规文件,分词效果差
-
法律条文语义相似度高,向量检索区分不开”87号令”和”18号令”
-
部署Milvus又多一个服务,运维成本翻倍
最终方案:先用BM25关键词搜索,够用。等数据量大了再换向量库。
⚠️ 坑2:AI生成内容格式不稳定
同一个模板,今天生成的招标文件格式是对的,明天就可能变。AI不会100%遵守模板格式。
解决方案:模板用占位符({{项目名称}}),AI只生成占位符的内容,格式由代码控制。
⚠️ 坑3:Docker里访问不到宿主机的OpenClaw
OpenClaw跑在宿主机上,Docker容器里访问localhost:3000访问不到。
解决方案:用host.docker.internal代替localhost(Docker Desktop支持),Linux上加 --add-host=host.docker.internal:host-gateway
当前进度与下一步
✅ 已完成
| 模块 | 状态 | 说明 |
|---|---|---|
|
|
✅ |
|
|
|
✅ |
|
|
|
✅ |
|
|
|
✅ |
|
|
|
✅ |
|
|
|
✅ |
|
📋 下一步
-
OCR转换:130个扫描版PDF还没处理,知识库覆盖还差一截
-
用户测试:找几个招标代理公司试用,收集反馈
-
性能优化:AI生成慢(30-60秒),考虑流式输出+进度条
-
权限管理:多租户隔离,不同公司数据互不可见
总结:从”能用”到”好用”有多远
回顾五期走过的路:
部署OpenClaw → 让AI住进来
设计7个智能体 → 让AI有分工
建设知识库 → 让AI有知识
智能体协作 → 让AI能联手
封装成Web应用 → 让人能用
五期下来,从0到1的系统搭完了。但“能用”和”好用”之间,还差着:
-
知识库质量:772个文件,时效性标注做了,但”需核实”的还有几百个
-
AI输出质量:生成的招标文件能用,但离”直接提交”还有距离
-
用户体验:前端页面有了,但交互细节还粗糙
下一步的核心任务不是加功能而是打磨质量——让每个模块从”能跑”变成”可靠”
🔮 下期预告
知识库精简与质量提升——772个文件砍到150个核心文件,每个都确保准确可用
📚 系列文章
第一期:OpenClaw部署——让AI住进你的服务器
第二期:智能体设计——7个AI角色怎么分工
第三期:知识库建设——690个法规文件怎么喂给AI
第四期:智能体协作——一个指令7个AI联手干活
第五期:系统开发实战——从0到1搭建招投标AI应用(本篇)
💬 你在搭建AI系统时遇到过哪些坑?
欢迎在评论区分享你的经验点赞 👍 收藏 ⭐ 转发 🔄 让更多人看到
📌 更多AI实战内容,关注主页查看~
夜雨聆风