用Python+React打造一个开源的AI写标书智能体~ **完整代码已开源** 代码很多,文章只放主要代码和提示词,完整代码可以查看开源项目 Github: https://github.com/yibiaoai/yibiao-simple Gitee: https://gitee.com/yibiao-ai/yibiao-simple 今天是第三期,根据生成好的提纲,填充标书内容。 ![](https://oss.agnet.top:443/keep/2025/12/05/20251205105804603.png) 正文生成,并不像上一节讲的提纲生成那么复杂,核心难点只有两个: - **标书需求字数太多:** 一份标书动辄几万几十万字,直接让AI生成必然行不通。有了上一节生成提纲的经验,我们已经知道答案了,那就是把正文也打碎,让AI按照提纲的叶子节点,逐节生成正文。 - **上下文不连贯,或内容重复:** 这就引出了我们第二个难点,分布生成,多部分内容之间不连贯是肯定的,可以更大的问题是,都是基于一份招标文件生成的技术方案,很可能生成意思过于相近的内容,俗称车轱辘话。 下面,咱们就来逐项分析一下,如何解决上述难点。 # 一、获取生成内容所需信息 从前端拆分提纲,提纲的每一个叶子节点都发起一个生成请求,需要传递以下参数 ``` python class ChapterContentRequest(BaseModel): """单章节内容生成请求""" chapter: Dict[str, Any] = Field(..., description="章节信息") parent_chapters: Optional[List[Dict[str, Any]]] = Field(None, description="上级章节列表") sibling_chapters: Optional[List[Dict[str, Any]]] = Field(None, description="同级章节列表") project_overview: str = Field("", description="项目概述") ``` - **chapter:** 本章节信息,不多说,这是必须的 ``` { "id": "3.2.2", "title": "技术实力", "description": "技术研发能力和创新情况" } ``` - **parent_chapters:** 上级章节列表,为了保持连贯性 - **sibling_chapters:** 同级章节列表,为了生成内容不重复 - **project_overview:** 项目概述,这是核心,让AI知道自己要写的标书的核心需求 # 二、核心提示词 **SystemPrompt** ``` markdown 你是一个专业的标书编写专家,负责为投标文件的技术标部分生成具体内容。 要求: 1. 内容要专业、准确,与章节标题和描述保持一致 2. 这是技术方案,不是宣传报告,注意朴实无华,不要假大空 3. 语言要正式、规范,符合标书写作要求,但不要使用奇怪的连接词,不要让人觉得内容像是AI生成的 4. 内容要详细具体,避免空泛的描述 5. 注意避免与同级章节内容重复,保持内容的独特性和互补性 6. 直接返回章节内容,不生成标题,不要任何额外说明或格式标记 ``` **UserPrompt** 这个就需要拼接一下了 ``` markdown 项目概述信息: {project_overview} 请为以下标书章节生成具体内容: {context_info if context_info else ''} 当前章节信息: 章节ID: {chapter_id} 章节标题: {chapter_title} 章节描述: {chapter_description} 请根据项目概述信息和上述章节层级关系,生成详细的专业内容,确保与上级章节的内容逻辑相承,同时避免与同级章节内容重复,突出本章节的独特性和技术方案的优势。 ``` context_info是拼接的上级、统计节点信息 ``` python # 构建上下文信息 context_info = "" # 上级章节信息 if parent_chapters: context_info += "上级章节信息:\n" for parent in parent_chapters: context_info += f"- {parent['id']} {parent['title']}\n {parent['description']}\n" # 同级章节信息(排除当前章节) if sibling_chapters: context_info += "同级章节信息(请避免内容重复):\n" for sibling in sibling_chapters: if sibling.get('id') != chapter_id: # 排除当前章节 context_info += f"- {sibling.get('id', 'unknown')} {sibling.get('title', '未命名')}\n {sibling.get('description', '')}\n" ``` 拼接后的完整user_prompt示例 > 请为以下标书章节生成具体内容: > 上级章节信息: > - 1 投标文件技术要求响应程度 > 对项目技术要求的响应和符合情况 > - 1.1 技术规格响应 > 详细描述投标产品技术参数与招标技术要求的符合性 > > 同级章节信息(请避免内容重复): > - 1.1.2 技术文件完整性 > 提供的技术文件是否齐全、规范 > 当前章节信息: > 章节ID: 1.1.1 > 章节标题: 灯具规格符合性 > 章节描述: 逐项说明各灯具规格与招标文件要求的匹配情况 > > 请根据项目概述信息和上述章节层级关系,生成详细的专业内容,确保与上级章节的内容逻辑相承,同时避免与同级章节内容重复,突出本章节的独特性和技术方案的优势。 就这么简单,生成正文不需要过多的逻辑推理,用最普通的大模型即可实现稳定输出,也几乎不存在生成失败的问题~ # 完整代码已开源 Github: https://github.com/yibiaoai/yibiao-simple Gitee: https://gitee.com/yibiao-ai/yibiao-simple