1. OpenSpec 项目概述
OpenSpec 是一个面向企业级应用的专业长文档生成平台,采用 RAG(检索增强生成)结合三智能体工作流架构,专门解决建筑设计、招投标、汽车维修、医疗等行业中结构化长文档生成的痛点问题。作为一个开源项目(GPLv3协议),它通过智能化的多智能体协作机制,显著提升了专业文档生成的准确性、一致性和规范性。
在实际应用中,专业文档生成面临几个关键挑战:首先是上下文丢失问题,当文档长度超过通用大模型的上下文窗口时,模型会"遗忘"前面章节的内容;其次是幻觉问题,模型可能编造不存在的规范编号或错误引用条文;最后是缺乏有效的审核机制,单个AI模型难以发现自身的错误。OpenSpec 通过创新的三智能体架构和RAG知识库,系统性地解决了这些问题。
提示:OpenSpec 特别适合需要频繁产出50页以上技术文档的行业场景,如建筑设计说明、招投标技术方案、汽车维修手册等。在这些场景中,文档的专业性、规范符合性和数据一致性至关重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构设计解析
2.1 三智能体工作流机制
OpenSpec 的核心创新在于其基于 LangGraph 构建的三智能体协作系统:
code复制 ┌─────────────────────────────┐
│ Knowledge Base (RAG) │
│ Standards / Cases / Docs │
└──┬────────────┬────────────┬─┘
│ │ │
query on query on query on
demand demand demand
│ │ │
┌────────┐ ┌──────────▼─┐ ┌─────▼─────┐ ┌▼──────────┐ ┌────────┐
│ Input │──▶│ Researcher │──▶│ Generator │──▶│ Auditor │──▶│ Export │
│ │ │ │ │ │ │ │ │ │
└────────┘ └────────────┘ └─────▲─────┘ └─────┬─────┘ └────────┘
│ │
└── revise ──────┘
每个智能体都有明确的职责边界和协作机制:
-
Researcher(检索智能体):负责从知识库中检索相关规范、案例和参考资料。它采用两步式执行策略:先流式输出推理链(思考阶段),再生成工具调用检索内容(行动阶段)。检索过程有三个关键控制参数:
MAX_RESEARCH_LOOPS = 3:限制最大检索次数MIN_CONTENT_THRESHOLD = 1000:设置最小内容阈值- 提前退出机制:当内容充足或连续空结果时终止检索
-
Generator(生成智能体):基于检索到的上下文逐章生成文档内容。它的核心能力包括:
- 跨章节关联分析(
extract_previous_chapters()) - 相关章节查找(
find_related_chapters()) - 智能Token计数(
calculate_available_tokens()) - 占位符处理(替换XX、___为[待填写])
- 跨章节关联分析(
-
Auditor(校验智能体):对生成内容进行五维度质量检查:
- 逻辑一致性:开头声明与表格数据是否匹配
- 参数合理性:数值是否在规范允许范围内
- 规范符合性:国标编号是否正确引用
- 内容完整性:必要章节和数据是否完整
- 格式规范性:符号、单位是否正确
2.2 RAG知识库设计
OpenSpec 采用 RAGFlow 实现知识检索功能,提供两类核心检索工具:
python复制@tool
def retrieve_case(query: str) -> str:
"""从知识库检索历史案例"""
return _retrieve_from_kb(query, CASE_KB_IDS, "案例库")
@tool
def retrieve_standard(query: str) -> str:
"""从知识库检索行业规范"""
return _retrieve_from_kb(query, STAND_KB_IDS, "规范库")
通用检索函数采用以下参数配置:
similarity_threshold=0.55:相似度阈值page_size=10:每页返回结果数- 结果格式:【来源: XXX | 相关度: 0.95】内容...
知识库支持动态扩展,通过set_kb_ids()可追加企业特定知识库,retrieve_from_project_kb()支持按项目ID查询,这为不同企业的个性化需求提供了灵活性。
3. 技术实现细节
3.1 智能体控制逻辑
Researcher 智能体的工具绑定和循环控制实现:
python复制researcher_tools = [retrieve_case, retrieve_standard]
researcher_llm = llm.bind_tools(researcher_tools)
Auditor 智能体采用类似的工具绑定方式,但增加了更严格的调用限制:
MAX_AUDIT_LOOPS = 1:限制最大审核轮次MAX_AUDITOR_TOOL_CALLS = 5:限制最大工具调用次数
这种差异化的参数设置反映了不同智能体的职责特点:Researcher 需要更充分的检索机会,而 Auditor 则需要更严格的控制以避免过度消耗资源。
3.2 Prompt管理系统
OpenSpec 使用 Langfuse 进行集中化的 Prompt 管理:
python复制prompt_manager = PromptManager()
researcher_prompt = prompt_manager.get_prompt("langchain_researcher")
generator_prompt = prompt_manager.get_prompt("construction_agent_system")
auditor_prompt = prompt_manager.get_prompt("langchain_auditor")
这种设计带来了两个显著优势:
- 支持在线调整Prompt而无需重新部署
- 便于进行Prompt版本控制和效果对比
3.3 API接口设计
系统提供两类核心API端点:
- 流式生成API(单章节,含审核):
python复制POST /chat/stream
# 参数:message, project_id, template, enable_audit, document_id, chapter_name...
- 批量生成API(多章节,简化流程):
python复制POST /chat/batch
# 简化流水线:Researcher → Generate,无 Auditor
API设计考虑了不同场景下的需求差异:流式API适合交互式文档编写,而批量API则适用于后台自动化生成任务。
4. 技术栈与项目结构
4.1 全栈技术选型
| 层级 | 技术 | 说明 |
|---|---|---|
| 前端 | Vue 3 + TypeScript + Vite | 单页应用 |
| 后端 | Spring Boot 3 + Java 17 | RESTful API |
| AI工作流 | Python + LangGraph + LangChain | 状态机式多智能体编排 |
| 知识检索 | RAGFlow | 向量检索,支持多知识库 |
| 可观测性 | Langfuse | Prompt管理+LLM调用追踪 |
| 数据库 | PostgreSQL | 项目和文档数据存储 |
| 部署 | Docker Compose | 一键部署全部服务 |
这种技术组合既考虑了AI能力的先进性,又保证了企业级应用的稳定性和可维护性。
4.2 项目目录结构
code复制apps/
├── web/ # Vue 3 前端
├── backend/ # Spring Boot 后端
└── agent/ # AI Agent(核心)
├── service/workflow/
│ ├── construction_agent.py # 完整流程(Router + 三智能体)
│ ├── batch_construction_agent.py # 批量生成(无 Auditor)
│ └── rag_graph.py # RAG 简化流程
├── service/tools/
│ └── construction_tools.py # RAG 检索工具
└── api/
└── workflow_api.py # API 端点
项目结构清晰划分了前端、后端和AI核心逻辑,特别是将智能体工作流实现集中放在agent目录下,便于独立开发和维护。
5. 应用场景与部署指南
5.1 典型应用场景
| 领域 | 知识库内容 | 生成文档 |
|---|---|---|
| 建筑设计 | 国标/地方标准、历史设计说明 | 施工图设计说明、可研报告 |
| 招投标 | 历史方案、施工规范、企业资质 | 投标技术方案 |
| 汽车维修 | 维修手册、故障案例、配件标准 | 维修技术手册 |
| 医疗健康 | 临床指南、诊疗规范 | 临床试验报告 |
每个场景都强调专业知识的准确引用和文档结构的规范性,这正是OpenSpec的优势所在。
5.2 快速部署指南
部署过程仅需几个简单步骤:
bash复制git clone https://github.com/zhuzhaoyun/OpenSpec.git
cd OpenSpec
cp deploy/docker/.env.example deploy/docker/.env
# 编辑 .env,填入必要配置
cd deploy/docker
docker compose up -d
关键环境变量配置:
| 变量 | 说明 | 必填 |
|---|---|---|
RAGFLOW_API_KEY |
RAGFlow API密钥 | 是 |
RAGFLOW_BASE_URL |
RAGFlow服务地址 | 是 |
DASHSCOPE_API_KEY |
LLM API密钥(默认通义千问) | 是 |
LANGFUSE_SECRET_KEY |
Langfuse私钥 | 否 |
LANGFUSE_PUBLIC_KEY |
Langfuse公钥 | 否 |
部署完成后,访问 http://localhost 即可开始使用系统。
6. 实操经验与优化建议
在实际使用OpenSpec生成建筑设计说明文档时,有几个关键经验值得分享:
-
知识库建设策略:
- 优先上传高频引用的国家标准和行业规范
- 按项目类型分类存储历史案例(如住宅、商业、工业等)
- 定期更新过时的规范版本
-
生成质量控制技巧:
- 对于关键参数,在Prompt中明确指定取值范围
- 设置章节模板时,标注必须包含的数据项
- 利用Auditor的修订意见迭代优化生成质量
-
性能优化建议:
- 对大型文档采用分批生成策略
- 调整相似度阈值平衡召回率和准确率
- 监控Langfuse中的耗时分析,优化慢查询
一个典型的建筑设计说明生成过程大约需要3-5分钟(50页左右),其中检索环节约占40%的时间。通过优化知识库索引和调整检索参数,我们成功将总生成时间缩短了30%。
对于企业用户,建议根据自身业务特点定制智能体的行为参数。例如,招投标场景可能需要更严格的Auditor检查,而维修手册生成则可以适当放宽格式要求以提高效率。
