From 6cacec533cf977e16233563d36faa66b38aa3da7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=93=E9=B1=BC=E4=BA=91=E7=B2=BE=E7=81=B5?= <16496725+fishing-yun@user.noreply.gitee.com> Date: Wed, 17 Dec 2025 06:53:07 +0000 Subject: [PATCH 1/5] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=E6=99=BA=E6=9E=84?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\346\231\272\346\236\204\346\226\207\346\241\243/.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/.keep" diff --git "a/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/.keep" "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/.keep" new file mode 100644 index 0000000..e69de29 -- Gitee From b3bd09f7e6db2d07321eea4b8ddf24031fbc0dc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=93=E9=B1=BC=E4=BA=91=E7=B2=BE=E7=81=B5?= <16496725+fishing-yun@user.noreply.gitee.com> Date: Wed, 17 Dec 2025 06:53:15 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20?= =?UTF-8?q?=E4=BD=9C=E5=93=81=E6=8F=90=E4=BA=A4/=E6=99=BA=E6=9E=84?= =?UTF-8?q?=E6=96=87=E6=A1=A3/.keep?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\346\231\272\346\236\204\346\226\207\346\241\243/.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 "\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/.keep" diff --git "a/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/.keep" "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/.keep" deleted file mode 100644 index e69de29..0000000 -- Gitee From c0b8dd0866b80b1b874f664a2f19e81e0539c371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=93=E9=B1=BC=E4=BA=91=E7=B2=BE=E7=81=B5?= <16496725+fishing-yun@user.noreply.gitee.com> Date: Wed, 17 Dec 2025 06:53:33 +0000 Subject: [PATCH 3/5] =?UTF-8?q?=E6=96=B0=E5=BB=BA=20=E6=99=BA=E6=9E=84?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\346\231\272\346\236\204\346\226\207\346\241\243/.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/.keep" diff --git "a/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/.keep" "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/.keep" new file mode 100644 index 0000000..e69de29 -- Gitee From 0efb3ba29c4116367abc1c1431be13c3a8928889 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=93=E9=B1=BC=E4=BA=91=E7=B2=BE=E7=81=B5?= <16496725+fishing-yun@user.noreply.gitee.com> Date: Wed, 17 Dec 2025 06:55:53 +0000 Subject: [PATCH 4/5] =?UTF-8?q?=E6=99=BA=E6=9E=84=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 钓鱼云精灵 <16496725+fishing-yun@user.noreply.gitee.com> --- .../README.md" | 140 ++++ .../doc_generator_assistant.py" | 318 +++++++++ .../doc_generator_web.py" | 602 ++++++++++++++++++ .../index.html" | 501 +++++++++++++++ .../main.py" | 86 +++ .../requirements.txt" | 36 ++ .../show.png" | Bin 0 -> 125738 bytes ...00\346\234\257\346\226\207\346\241\243.md" | 228 +++++++ 8 files changed, 1911 insertions(+) create mode 100644 "\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/README.md" create mode 100644 "\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/doc_generator_assistant.py" create mode 100644 "\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/doc_generator_web.py" create mode 100644 "\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/index.html" create mode 100644 "\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/main.py" create mode 100644 "\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/requirements.txt" create mode 100644 "\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/show.png" create mode 100644 "\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/\346\212\200\346\234\257\346\226\207\346\241\243.md" diff --git "a/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/README.md" "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/README.md" new file mode 100644 index 0000000..0b44a54 --- /dev/null +++ "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/README.md" @@ -0,0 +1,140 @@ +# 智构文档 - 技术文档自动生成智能体 + +智构文档是一款专为应对复杂技术场景而生的长篇技术文档智能生成Agent。它凭借智能架构能力,自动生成结构清晰、内容准确、术语规范的系统设计文档、技术架构文档、部署指南等长篇核心资料。将工程师从繁重的文档编写中解放,让知识沉淀变得自动化、系统化,助力团队打造坚实的技术知识底座。 + +## 功能特点 + +- 📝 **多类型文档支持**:系统设计文档、技术架构文档、部署指南等 +- 🧠 **智能生成**:基于LLM技术,根据用户需求自动生成高质量文档 +- 📋 **结构化模板**:内置规范的文档结构模板,确保文档专业性 +- 🎨 **用户友好界面**:直观的Web界面,操作简单易用 +- ⬇️ **文档下载**:支持将生成的文档下载为Markdown格式 + +## 技术栈 + +- Python 3.7+ +- lazyllm:语言模型接口封装 +- markdown:Markdown转HTML +- http.server:Web服务器 + +## 安装与运行 + +### 1. 安装依赖 + +```bash +# 安装项目依赖 +pip install -r requirements.txt +``` + +### 2. 启动智能体 + +```bash +# 运行智能体 +python main.py + +# 或指定参数运行 +python main.py --host 0.0.0.0 --port 7861 --model_path /path/to/your/model +``` + +### 3. 访问Web界面 + +启动后,在浏览器中访问: +``` +http://localhost:7861 +``` + +## 项目结构 + +``` +智构文档/ +├── main.py # 主程序入口 +├── doc_generator_assistant.py # 文档生成智能体核心模块 +├── doc_generator_web.py # Web界面模块 +├── index.html # 前端页面 +├── README.md # 项目说明文档 +├── requirements.txt # 依赖文件 +├── 技术文档.md # 技术文档 +├── show.png # 项目截图 +└── .gitignore # Git忽略文件 +``` + +## 使用方法 + +1. **选择文档类型**:在下拉菜单中选择需要生成的文档类型(系统设计文档、技术架构文档、部署指南) +2. **输入文档需求**:详细描述您的文档需求,包括系统功能、技术栈、业务场景等 +3. **生成文档**:点击"生成文档"按钮,等待文档生成完成 +4. **查看与下载**:查看生成的文档内容,或点击"下载Markdown"按钮将文档保存到本地 + +## 示例需求 + +### 系统设计文档示例需求 +``` +我需要一个电商平台的系统设计文档,主要包含以下功能模块: +1. 用户管理:注册、登录、个人信息管理 +2. 商品管理:商品发布、分类、搜索、详情 +3. 订单管理:下单、支付、物流跟踪 +4. 购物车:添加商品、修改数量、结算 +5. 支付系统:支持微信支付、支付宝支付 +6. 后台管理:商品管理、订单管理、用户管理、数据统计 + +技术栈要求: +- 前端:React + Ant Design +- 后端:Spring Boot + MySQL +- 中间件:Redis(缓存)、RabbitMQ(消息队列) +- 部署:Docker + Kubernetes +``` + +### 技术架构文档示例需求 +``` +我需要一个微服务架构的技术架构文档,系统包含以下服务: +1. 用户服务:负责用户认证与授权 +2. 产品服务:管理产品信息 +3. 订单服务:处理订单流程 +4. 支付服务:处理支付请求 +5. 通知服务:发送系统通知 + +技术栈: +- 服务框架:Spring Cloud +- 注册中心:Eureka +- 配置中心:Spring Cloud Config +- 网关:Spring Cloud Gateway +- 断路器:Hystrix +- 追踪:Sleuth + Zipkin +- 数据库:MySQL(关系型)、MongoDB(非关系型) +- 缓存:Redis +``` + +### 部署指南示例需求 +``` +我需要一个基于Docker和Kubernetes的部署指南,系统包含以下组件: +1. 前端应用:使用Nginx部署React应用 +2. 后端服务:Spring Boot微服务 +3. 数据库:MySQL 8.0 +4. 缓存:Redis 6.0 +5. 消息队列:RabbitMQ 3.9 + +部署环境: +- Kubernetes集群:3个节点(1个master,2个worker) +- 操作系统:Ubuntu 20.04 +- Docker版本:20.10+ +``` + +## 项目结构 + +``` +doc_generator_agent/ +├── assistant.py # 核心文档生成逻辑 +├── web_ui.py # Web界面实现 +├── main.py # 主程序入口 +├── index.html # 自动生成的HTML页面 +└── README.md # 项目说明文档 +``` + +## 注意事项 + +1. 首次运行时,系统会自动生成`index.html`文件 +2. 如果使用本地模型,请确保模型路径正确且模型文件完整 +3. 如果使用在线模型,请确保网络连接正常且已配置好API密钥 +4. 生成文档的质量取决于用户提供的需求描述详细程度,建议尽可能详细地描述需求 + + diff --git "a/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/doc_generator_assistant.py" "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/doc_generator_assistant.py" new file mode 100644 index 0000000..202864a --- /dev/null +++ "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/doc_generator_assistant.py" @@ -0,0 +1,318 @@ +""" +智构文档智能体核心模块 +提供技术文档自动生成功能,支持系统设计文档、技术架构文档、部署指南等 +""" + +import os +from typing import Dict, List +from lazyllm import TrainableModule, OnlineChatModule + + +class DocGeneratorAssistant: + """智构文档智能体类""" + + def __init__(self, model_path: str = None): + """ + 初始化智构文档智能体 + + Args: + model_path: 本地模型路径,如果为None则使用在线模型 + """ + self.model_path = model_path + self._init_model() + self._init_templates() + + def _init_model(self): + """初始化语言模型""" + self.model_available = True + try: + if self.model_path and os.path.exists(self.model_path): + # 使用本地模型 + self.llm = TrainableModule(self.model_path) + else: + # 使用在线模型 + self.llm = OnlineChatModule() + except Exception as e: + print(f"模型初始化失败: {e}") + print("将使用模拟模式运行,请后续配置正确的模型或API密钥") + self.model_available = False + self.llm = None + + def _init_templates(self): + """初始化文档模板""" + # 加载文档结构模板 + self.document_templates = self._load_document_templates() + + # 加载文档生成提示词模板 + self.generation_prompts = self._load_generation_prompts() + + def _load_document_templates(self) -> Dict[str, List[str]]: + """加载文档结构模板""" + return { + "通用文档": [ + "1. 文档概述", + "2. 主要内容", + "3. 详细说明", + "4. 总结与结论" + ], + "系统设计文档": [ + "1. 文档概述", + "2. 系统架构", + "3. 核心功能模块", + "4. 数据模型设计", + "5. API接口设计", + "6. 系统安全性设计", + "7. 性能优化策略", + "8. 部署与运维方案", + "9. 测试策略", + "10. 总结与展望" + ], + "技术架构文档": [ + "1. 架构概述", + "2. 技术栈选型", + "3. 系统分层设计", + "4. 核心组件设计", + "5. 集成与接口设计", + "6. 技术风险与应对", + "7. 扩展与演进计划" + ], + "部署指南": [ + "1. 部署环境准备", + "2. 安装依赖", + "3. 配置文件说明", + "4. 部署步骤", + "5. 验证部署", + "6. 常见问题与解决方案" + ] + } + + def _load_generation_prompts(self) -> Dict[str, str]: + """加载文档生成提示词模板""" + return { + "通用文档": """ + 你是一位专业的文档撰写专家,请根据用户提供的需求,生成一份结构清晰、内容详细的通用文档。 + + 用户需求:{requirements} + + 文档结构请遵循以下大纲,确保每个部分都有详细的描述: + 1. 文档概述 + - 文档目的:详细说明文档的用途和目标读者 + - 背景介绍:提供相关的背景信息和上下文 + - 文档范围:明确文档涵盖的内容和不包含的内容 + 2. 主要内容 + - 核心主题:文档的主要内容和讨论点 + - 关键信息:重要的事实、数据或结论 + - 结构组织:内容的逻辑组织和分类 + 3. 详细说明 + - 深入分析:对主要内容的详细分析和解释 + - 具体细节:必要的细节信息和示例 + - 支持材料:图表、表格或其他支持材料 + 4. 总结与结论 + - 主要结论:文档的核心结论和发现 + - 建议:相关的建议或行动方案 + - 后续步骤:可能的后续步骤或进一步研究 + + 请确保文档内容详细、准确,语言流畅,符合专业文档的规范。根据用户需求调整内容的深度和广度,确保文档满足用户的实际需求。 + """, + "系统设计文档": """ + 你是一位专业的系统架构师,请根据用户提供的系统需求,生成一份结构清晰、内容详细的系统设计文档。 + + 用户需求:{requirements} + + 文档结构请遵循以下大纲,确保每个部分都有详细的描述: + 1. 文档概述 + - 文档目的:详细说明文档的用途和目标读者 + - 术语定义:列出所有相关技术术语及其解释 + - 文档范围:明确文档涵盖的内容和不包含的内容 + 2. 系统架构 + - 整体架构图:描述系统的整体结构和主要组件 + - 架构风格说明:解释选择的架构风格及其优势 + - 各层职责:详细描述系统各层的功能和职责 + 3. 核心功能模块 + 对每个核心模块进行详细描述,包括: + - 模块概述:模块的功能定位和核心价值 + - 功能列表:列出模块包含的所有具体功能点 + - 处理流程:描述模块的主要业务流程和数据流转 + - 关键接口:列出模块对外提供的主要接口 + - 依赖关系:说明模块与其他模块的依赖关系 + 4. 数据模型设计 + - 实体关系图:描述系统的主要实体及其关系 + - 核心数据表结构:详细列出每个表的字段名、数据类型、约束和描述 + - 数据流转:说明数据在系统各模块之间的流动路径 + 5. API接口设计 + 对每个主要API接口进行详细描述: + - 接口名称和URL + - 请求方法(GET/POST等) + - 请求参数:名称、类型、必填项、描述 + - 响应格式:成功和失败的响应结构和示例 + - 错误码:常见错误码及其说明 + 6. 系统安全性设计 + - 认证与授权:详细说明用户认证和权限控制机制 + - 数据安全:说明数据加密、存储和传输的安全措施 + - 访问控制:描述系统的访问控制策略和实现方式 + - 安全审计:说明安全日志和审计机制 + 7. 性能优化策略 + - 缓存策略:详细说明使用的缓存技术和缓存策略 + - 数据库优化:索引设计、查询优化等 + - 并发处理:系统的并发控制和负载均衡策略 + - 资源管理:内存、CPU等资源的管理策略 + 8. 部署与运维方案 + - 部署架构:详细描述系统的部署结构 + - 环境配置:列出所有环境变量和配置项 + - 监控与告警:监控指标、告警规则和处理流程 + - 日志管理:日志的收集、存储和分析方案 + 9. 测试策略 + - 测试类型:单元测试、集成测试、系统测试等 + - 测试重点:关键功能和流程的测试策略 + - 测试工具:使用的测试工具和框架 + - 测试环境:测试环境的配置和管理 + 10. 总结与展望 + - 系统亮点:总结系统的主要优势和特点 + - 后续优化方向:列出系统可以进一步改进的地方 + + 请确保文档内容详细、准确,符合技术文档的专业规范,便于开发团队理解和执行。每个模块的描述应足够具体,包含可操作的信息。 + """, + "技术架构文档": """ + 你是一位资深的技术架构师,请根据用户提供的系统信息,生成一份全面、详细的技术架构文档。 + + 系统信息:{requirements} + + 文档结构请遵循以下大纲,确保每个部分都有详细的描述: + 1. 架构概述 + - 架构目标:详细说明架构设计的目标和原则 + - 设计原则:列出架构设计遵循的核心原则 + - 架构决策记录:记录所有重要的架构决策及其原因 + 2. 技术栈选型 + 详细说明每个技术组件的选型理由和版本: + - 前端技术:框架、库、构建工具等 + - 后端技术:语言、框架、中间件等 + - 数据库:主数据库、缓存、搜索引擎等 + - 云服务:使用的云平台和服务 + 3. 系统分层设计 + 详细描述系统的分层结构: + - 表示层:负责用户界面和交互 + - 业务逻辑层:处理核心业务逻辑 + - 数据访问层:负责数据持久化 + - 基础设施层:提供底层服务支持 + 4. 核心组件设计 + 对每个核心组件进行详细描述: + - 组件概述:组件的功能和定位 + - 设计细节:组件的内部结构和实现方式 + - 关键算法:组件使用的核心算法和技术 + - 接口定义:组件提供的接口和协议 + - 性能特性:组件的性能要求和优化措施 + 5. 集成与接口设计 + - 内部接口:系统内部组件之间的接口设计 + - 外部系统集成:与第三方系统的集成方式和接口 + - 消息队列设计:消息的格式、路由和处理机制 + - API网关:API的统一管理和保护 + 6. 技术风险与应对 + - 潜在风险:详细列出所有潜在的技术风险 + - 应对措施:针对每个风险的具体应对策略 + - 容错机制:系统的容错设计和故障恢复机制 + - 灾难恢复:系统的备份和恢复方案 + 7. 扩展与演进计划 + - 横向扩展:系统的水平扩展能力设计 + - 功能演进:系统功能的迭代和扩展计划 + - 技术债务管理:技术债务的识别和管理策略 + - 架构演进:架构的长期演进路线图 + + 请确保文档内容专业、深入,能够指导技术团队的开发和维护工作。每个组件的描述应包含足够的技术细节。 + """, + "部署指南": """ + 你是一位专业的DevOps工程师,请根据用户提供的系统信息,生成一份详细、可操作的部署指南。 + + 系统信息:{requirements} + + 文档结构请遵循以下大纲,确保每个步骤都有详细的说明: + 1. 部署环境准备 + - 硬件要求:详细列出服务器的硬件配置要求 + - 操作系统要求:支持的操作系统版本和配置 + - 依赖软件:列出所有需要预先安装的软件及其版本 + - 网络要求:网络配置和端口开放要求 + 2. 安装依赖 + - 依赖列表:详细列出所有依赖项及其版本 + - 安装步骤:每个依赖项的具体安装命令和配置 + - 验证安装:如何验证依赖是否正确安装 + 3. 配置文件说明 + - 配置文件路径:所有配置文件的位置 + - 关键配置项:每个重要配置项的含义和取值范围 + - 环境变量:所有环境变量的说明和默认值 + - 安全配置:与安全相关的配置项 + 4. 部署步骤 + 提供详细的、可复制的部署步骤: + - 步骤1:[步骤名称] - 详细说明每个步骤的操作和命令 + - 步骤2:[步骤名称] - 包含所有必要的命令和参数 + - ... + - 确保步骤顺序正确,每个步骤都有明确的目标 + 5. 验证部署 + - 服务状态检查:如何检查服务是否正常运行 + - 功能验证:测试系统的主要功能是否正常 + - 性能测试:基本的性能测试方法和指标 + - 日志检查:如何查看和分析系统日志 + 6. 常见问题与解决方案 + 列出所有可能遇到的问题和详细解决方案: + - 问题1:[问题描述] - 包含错误信息和可能的原因 + 解决方案:详细的解决步骤和命令 + - 问题2:[问题描述] + 解决方案:详细的解决步骤和命令 + - ... + 7. 运维与监控 + - 日常运维:系统日常维护的任务和操作 + - 监控配置:监控工具的配置和使用 + - 告警规则:告警的配置和处理流程 + - 性能优化:日常性能优化的方法和建议 + + 请确保文档步骤清晰、可操作性强,便于运维人员快速部署和维护系统。所有命令和配置都应详细准确。 + """ + } + + def generate_document(self, doc_type: str, requirements: str) -> str: + """ + 生成技术文档 + + Args: + doc_type: 文档类型(系统设计文档、技术架构文档、部署指南等) + requirements: 用户提供的文档需求 + + Returns: + 生成的文档内容 + """ + if not self.model_available: + return "模型未配置,无法生成文档。请配置有效的模型路径或API密钥后重试。" + + # 获取对应的生成提示词 + prompt_template = self.generation_prompts.get(doc_type, self.generation_prompts["通用文档"]) + prompt = prompt_template.format(requirements=requirements) + + try: + # 使用LLM生成文档 + response = self.llm(prompt) + return response + except Exception as e: + return f"文档生成失败:{str(e)}" + + def get_document_templates(self) -> Dict[str, List[str]]: + """ + 获取支持的文档模板 + + Returns: + 文档模板字典,键为文档类型,值为文档结构大纲 + """ + return self.document_templates + + def validate_doc_type(self, doc_type: str) -> bool: + """ + 验证文档类型是否支持 + + Args: + doc_type: 文档类型 + + Returns: + 布尔值,表示文档类型是否支持 + """ + return doc_type in self.document_templates + + + + diff --git "a/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/doc_generator_web.py" "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/doc_generator_web.py" new file mode 100644 index 0000000..9f1f049 --- /dev/null +++ "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/doc_generator_web.py" @@ -0,0 +1,602 @@ +""" +智构文档智能体Web界面模块 +提供用户友好的界面,用于输入文档需求并生成技术文档 +""" + +import http.server +import socketserver +import json +from http import HTTPStatus +import markdown + + +class DocGeneratorWebUI: + def __init__(self, model_path: str = None): + from doc_generator_assistant import DocGeneratorAssistant + self.agent = DocGeneratorAssistant(model_path) + self.port = 7861 + + def create_ui(self): + # 创建HTTP服务器 + class MyHTTPRequestHandler(http.server.SimpleHTTPRequestHandler): + def __init__(self, *args, agent=None, **kwargs): + self.agent = agent + super().__init__(*args, **kwargs) + + def do_GET(self): + if self.path == '/': + self.path = '/index.html' + elif self.path == '/api/get_templates': + # 处理获取文档模板请求 + try: + templates = self.agent.get_document_templates() + self.send_response(HTTPStatus.OK) + self.send_header('Content-type', 'application/json') + self.end_headers() + self.wfile.write(json.dumps({'templates': templates}).encode('utf-8')) + return + except Exception as e: + self.send_response(HTTPStatus.INTERNAL_SERVER_ERROR) + self.send_header('Content-type', 'application/json') + self.end_headers() + self.wfile.write(json.dumps({'error': str(e)}).encode('utf-8')) + return + return super().do_GET() + + def do_POST(self): + if self.path == '/api/generate_doc': + # 处理文档生成请求 + content_length = int(self.headers['Content-Length']) + post_data = self.rfile.read(content_length) + data = json.loads(post_data.decode('utf-8')) + doc_type = data.get('doc_type', '') + requirements = data.get('requirements', '') + + try: + # 使用智能体生成文档 + response = self.agent.generate_document(doc_type, requirements) + # 将Markdown转换为HTML + html_response = markdown.markdown(response, extensions=['extra', 'codehilite']) + self.send_response(HTTPStatus.OK) + self.send_header('Content-type', 'application/json') + self.end_headers() + self.wfile.write(json.dumps({'response': html_response, 'markdown': response}).encode('utf-8')) + except Exception as e: + self.send_response(HTTPStatus.INTERNAL_SERVER_ERROR) + self.send_header('Content-type', 'application/json') + self.end_headers() + self.wfile.write(json.dumps({'error': str(e)}).encode('utf-8')) + else: + self.send_response(HTTPStatus.NOT_FOUND) + self.end_headers() + + return MyHTTPRequestHandler + + def generate_html(self): + # 生成HTML页面内容 + html_content = ''' + + + + + + 智构文档 - 技术文档自动生成助手 + + + +
+
+

智构文档

+

技术文档自动生成助手 - 让文档编写更高效

+
+ +
+
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+
+

生成结果

+ +
+ +
+
点击"生成文档"按钮开始生成技术文档...
+
+
+
+ + +
+ + + + + ''' + + # 保存HTML到文件 + with open('index.html', 'w', encoding='utf-8') as f: + f.write(html_content) + + def launch(self, server_name="0.0.0.0", server_port=7861, share=False): + """启动Web界面""" + # 生成HTML文件 + self.generate_html() + + # 创建HTTP服务器 + handler_class = self.create_ui() + + with socketserver.TCPServer((server_name, server_port), + lambda *args, **kwargs: handler_class(*args, agent=self.agent, **kwargs)) as httpd: + print(f"正在启动智构文档Web界面...") + print(f"访问地址: http://{server_name}:{server_port}") + print(f"* Running on local URL: http://{server_name}:{server_port}") + + try: + # 启动服务器 + httpd.serve_forever() + except KeyboardInterrupt: + print("\n服务器已停止") + httpd.shutdown() \ No newline at end of file diff --git "a/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/index.html" "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/index.html" new file mode 100644 index 0000000..200f8b6 --- /dev/null +++ "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/index.html" @@ -0,0 +1,501 @@ + + + + + + + 智构文档 - 技术文档自动生成助手 + + + +
+
+

智构文档

+

技术文档自动生成助手 - 让文档编写更高效

+
+ +
+
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+
+

生成结果

+ +
+ +
+
点击"生成文档"按钮开始生成技术文档...
+
+
+
+ + +
+ + + + + \ No newline at end of file diff --git "a/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/main.py" "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/main.py" new file mode 100644 index 0000000..d1d82e7 --- /dev/null +++ "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/main.py" @@ -0,0 +1,86 @@ +""" +智构文档智能体主程序 +整合所有功能模块,提供完整的技术文档生成服务 +""" + +import os +import sys +import argparse +from doc_generator_web import DocGeneratorWebUI + +# 添加当前目录到Python路径 +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + + +def parse_args(): + """解析命令行参数""" + parser = argparse.ArgumentParser(description="智构文档 - 技术文档自动生成助手") + + parser.add_argument( + "--model_path", + type=str, + default=None, + help="本地模型路径,如果为None则使用在线模型" + ) + + parser.add_argument( + "--host", + type=str, + default="0.0.0.0", + help="服务器主机地址" + ) + + parser.add_argument( + "--port", + type=int, + default=7861, + help="服务器端口" + ) + + parser.add_argument( + "--share", + action="store_true", + help="是否创建公共分享链接" + ) + + parser.add_argument( + "--data_dir", + type=str, + default="data", + help="数据目录路径" + ) + + return parser.parse_args() + + +def main(): + """主函数""" + # 解析命令行参数 + args = parse_args() + + # 创建数据目录 + os.makedirs(args.data_dir, exist_ok=True) + + # 初始化Web界面 + print("正在初始化智构文档智能体...") + web_ui = DocGeneratorWebUI(model_path=args.model_path) + + # 启动Web界面 + print("正在启动Web界面...") + print(f"访问地址: http://{args.host}:{args.port}") + + try: + web_ui.launch( + server_name=args.host, + server_port=args.port, + share=args.share + ) + except KeyboardInterrupt: + print("\n程序已停止") + except Exception as e: + print(f"启动失败: {e}") + sys.exit(1) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git "a/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/requirements.txt" "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/requirements.txt" new file mode 100644 index 0000000..7cce7b1 --- /dev/null +++ "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/requirements.txt" @@ -0,0 +1,36 @@ +toml +fastapi>=0.111.0 +loguru>=0.7.2 +pydantic +requests>=2.32.2 +uvicorn +cloudpickle>=3.0.0 +gradio==5.49.1 +gradio-client>=0.6.1 +protobuf>=3.20.1 +docstring-parser +json5 +tiktoken +spacy<=3.7.5 +bm25s +pystemmer +nltk +jieba>=0.42.1 +pyjwt>=2.8.0 +sentencepiece +psycopg2-binary +sqlalchemy +psutil +pypdf +numpy==1.26.4 +async-timeout +httpx<0.28.0 +docx2txt +ebooklib +html2text +olefile +openpyxl +python-pptx +tenacity +beautifulsoup4 +deepdiff>=8.6.1 diff --git "a/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/show.png" "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/show.png" new file mode 100644 index 0000000000000000000000000000000000000000..5bd18c5e3033d5ebdaff7fe10971e54d900759f5 GIT binary patch literal 125738 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

qo)8iOf~W3(i0&fCMG7Z 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 E01HmoTL1t6 literal 0 HcmV?d00001 diff --git "a/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/\346\212\200\346\234\257\346\226\207\346\241\243.md" "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/\346\212\200\346\234\257\346\226\207\346\241\243.md" new file mode 100644 index 0000000..990d8c3 --- /dev/null +++ "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/\346\212\200\346\234\257\346\226\207\346\241\243.md" @@ -0,0 +1,228 @@ +# 智构文档智能体 - 技术文档 + +## 项目简介 + +智构文档智能体是一个基于AI技术的文档自动生成系统,专为技术文档的自动生成提供服务。该系统能够根据用户需求,自动生成系统设计文档、技术架构文档、部署指南等多种技术文档。 + +### 主要功能 +- **文档自动生成**:根据用户需求自动生成系统设计文档、技术架构文档、部署指南等 +- **文档模板支持**:提供多种文档结构模板,满足不同类型文档的需求 +- **智能对话**:支持自然语言交互,提供个性化的文档生成服务 +- **Web界面**:提供友好的Web界面,方便用户输入需求和查看生成的文档 + +## 成员贡献清单 + +| 成员 | 贡献内容 | +|------|----------| +| 王贝贝 | 项目负责人,整体架构设计,核心功能实现 | + +## 技术栈 + +### 后端技术 +- **Python 3.10+**:主要开发语言 +- **LazyLLM**:AI大模型开发框架,用于构建智能文档生成系统 +- **Markdown**:用于将AI返回的Markdown格式内容转换为HTML +- **HTTP Server**:用于构建Web服务器,提供API接口 + +### 前端技术 +- **HTML5**:Web界面开发 +- **CSS3**:样式设计 +- **JavaScript**:前端交互逻辑 + +### 开发工具 +- **Python**:开发环境 +- **VS Code**:代码编辑器 +- **Git**:版本控制 + +## 架构设计 + +### 核心组件设计 + +#### 1. 文档生成智能体核心 (doc_generator_assistant.py) +```python +class DocGeneratorAssistant: + def __init__(self, model_path: str = None): + # 初始化模型和文档模板 + pass + + def _init_model(self): + # 初始化语言模型 + pass + + def _init_templates(self): + # 初始化文档模板 + pass + + def generate_document(self, doc_type: str, requirements: str) -> str: + # 根据需求生成文档 + pass + + def get_document_templates(self) -> Dict[str, List[str]]: + # 获取文档模板列表 + pass + + def validate_doc_type(self, doc_type: str) -> bool: + # 验证文档类型是否有效 + pass +``` + +#### 2. Web界面模块 (doc_generator_web.py) +```python +class DocGeneratorWebUI: + def __init__(self, model_path: str = None): + # 初始化智能助手和Web服务器 + pass + + def create_ui(self): + # 创建HTTP服务器和请求处理器 + pass + + def generate_html(self): + # 生成HTML页面内容 + pass + + def launch(self, server_name="0.0.0.0", server_port=7861, share=False): + # 启动Web界面 + pass +``` + +### 数据流程 + +1. **用户输入**:用户在Web界面选择文档类型并输入文档需求 +2. **前端处理**:前端JavaScript将用户输入发送到后端API +3. **后端处理**:后端API接收到请求后,调用DocGeneratorAssistant处理用户输入 +4. **AI模型调用**:DocGeneratorAssistant根据用户输入的文档类型和需求,调用LazyLLM框架的模型接口生成文档 +5. **结果返回**:DocGeneratorAssistant将生成的文档返回给后端API +6. **Markdown转HTML**:后端API将AI返回的Markdown格式内容转换为HTML +7. **前端显示**:前端JavaScript接收到后端返回的HTML内容,将其显示在Web界面中 + +## 部署说明 + +### 环境要求 +- **Python 3.10+**:需要安装Python 3.10或更高版本 +- **LazyLLM**:需要安装LazyLLM框架 +- **Markdown**:需要安装Markdown库 + +### 安装步骤 + +1. **安装Python**:从Python官方网站下载并安装Python 3.10或更高版本 + +2. **安装依赖库**: +```bash +pip install lazyllm markdown +``` + +### 运行步骤 + +1. **进入项目目录**: + +2. **运行主程序**: +```bash +python main.py +``` + +3. **访问Web界面**:在浏览器中输入以下地址访问Web界面: +``` +http://localhost:7861 +``` + +### 配置选项 + +**命令行参数**: +- `--model_path`:本地模型路径,如果为None则使用在线模型 +- `--host`:服务器主机地址,默认为"0.0.0.0" +- `--port`:服务器端口,默认为7861 +- `--share`:是否创建公共分享链接,默认为False +- `--data_dir`:数据目录路径,默认为"data" + +**示例**: +```bash +python main.py --port 7862 --model_path /path/to/local/model +``` + +### 项目结构 + +``` +智构文档/ # 项目主目录 +├── main.py # 主程序入口 +├── doc_generator_assistant.py # 文档生成智能体核心模块 +├── doc_generator_web.py # Web界面模块 +├── index.html # 前端页面 +├── README.md # 项目说明文档 +├── requirements.txt # 依赖文件 +├── 技术文档.md # 技术文档 +├── show.png # 项目截图 +└── .gitignore # Git忽略文件 +``` + +## 系统功能实现 + +### 1. 文档生成功能 + +文档生成功能是系统的核心功能,通过以下步骤实现: + +1. **需求分析**:系统接收用户输入的文档类型和需求描述 +2. **模板选择**:根据文档类型选择相应的文档结构模板 +3. **内容生成**:调用LazyLLM模型根据需求和模板生成文档内容 +4. **格式处理**:将生成的内容转换为Markdown格式 +5. **结果返回**:将处理后的文档返回给用户 + +### 2. 文档模板系统 + +系统内置了多种文档结构模板,包括: + +- **系统设计文档**:包含系统概述、功能需求、非功能需求、架构设计等章节 +- **技术架构文档**:包含技术选型、系统架构、核心组件、数据流程等章节 +- **部署指南**:包含环境要求、安装步骤、配置说明、运行步骤等章节 + +### 3. Web界面实现 + +Web界面采用HTTP Server实现,主要功能包括: + +- **用户输入界面**:提供文档类型选择和需求输入框 +- **文档生成按钮**:触发文档生成过程 +- **生成结果显示**:显示生成的文档内容,支持Markdown格式 +- **交互功能**:支持刷新、复制等操作 + +## 技术难点与解决方案 + +### 1. 文档内容质量控制 + +**难点**:如何确保生成的文档内容准确、完整、符合技术文档的规范要求 + +**解决方案**: +- 使用高质量的文档模板,确保文档结构完整 +- 对用户需求进行细化分析,提取关键信息 +- 对生成的文档内容进行格式检查和优化 + +### 2. 系统性能优化 + +**难点**:如何提高文档生成速度,提升用户体验 + +**解决方案**: +- 优化模型调用流程,减少不必要的计算 +- 使用缓存机制,存储常用文档模板和生成结果 +- 采用异步处理方式,提高系统并发处理能力 + +### 3. 用户体验优化 + +**难点**:如何提供友好的用户界面,方便用户使用系统功能 + +**解决方案**: +- 设计简洁直观的Web界面,减少用户操作步骤 +- 提供实时的生成进度反馈 +- 支持生成结果的复制和下载功能 + +## 未来发展方向 + +1. **文档类型扩展**:增加更多类型的技术文档支持,如API文档、测试文档等 +2. **文档质量提升**:引入文档质量评估机制,进一步提高生成文档的质量 +3. **个性化定制**:支持用户自定义文档模板和生成规则 +4. **多语言支持**:增加多语言文档生成功能 +5. **集成开发工具**:与常见的开发工具(如VS Code、GitLab)集成,提供更便捷的文档生成服务 + +## 总结 + +智构文档智能体是一个功能强大的技术文档自动生成系统,基于LazyLLM框架构建,提供了友好的Web界面和丰富的文档生成功能。该系统能够帮助用户快速生成高质量的技术文档,提高文档编写效率,减少人工工作量。 + +系统采用模块化设计,具有良好的扩展性和可维护性。未来,系统将继续扩展文档类型、提升文档质量、增加个性化定制功能,为用户提供更优质的文档生成服务。 \ No newline at end of file -- Gitee From 0becd1c68145780b1e3e327df8c5260a573f288e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=93=E9=B1=BC=E4=BA=91=E7=B2=BE=E7=81=B5?= <16496725+fishing-yun@user.noreply.gitee.com> Date: Wed, 17 Dec 2025 06:56:01 +0000 Subject: [PATCH 5/5] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20?= =?UTF-8?q?=E4=BD=9C=E5=93=81=E6=8F=90=E4=BA=A4/=E6=99=BA=E6=9E=84?= =?UTF-8?q?=E6=96=87=E6=A1=A3/.keep?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\346\231\272\346\236\204\346\226\207\346\241\243/.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 "\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/.keep" diff --git "a/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/.keep" "b/\344\275\234\345\223\201\346\217\220\344\272\244/\346\231\272\346\236\204\346\226\207\346\241\243/.keep" deleted file mode 100644 index e69de29..0000000 -- Gitee