Commit Graph

35 Commits

Author SHA1 Message Date
3d12f9d065 feat: add rag context and filters,增加了对rag提取的加强 2025-12-19 13:35:04 +08:00
cdc9b1d757 feat: auto table rendering for markdown outputs
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-12-05 16:26:40 +08:00
f0c29304c7 feat: separate parent summaries from child content
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-12-05 14:57:34 +08:00
61026cd1b6 refactor: automate content filling and default rag
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-12-05 10:19:50 +08:00
08db5a66bb feat: default tender doc rag selection
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-11-19 16:24:56 +08:00
c1292fcacc feat: add validation and toc pipeline upgrades
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-11-19 10:11:21 +08:00
e028e4fa96 feat: add context-aware toc automation 2025-11-18 17:54:44 +08:00
6f785c9f2c feat: enhance chapter prompt planning
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-11-18 16:02:00 +08:00
d887e7c313 fix: 优化超时输入倒计时提示
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2025-10-15 10:07:21 +08:00
bf7eb9ca9d refactor: 提取所有AI提示词到配置文件并实现统一管理
- 新增 config/prompts.yaml 提示词配置文件,包含10个核心提示词
- 新增 src/bidmaster/config/prompt_manager.py 提示词管理工具类
- 重构 src/bidmaster/tools/llm.py 使用配置化系统消息
- 重构 src/bidmaster/tools/parser.py 使用配置化解析提示词(3个)
- 重构 src/bidmaster/tools/rag.py 使用配置化RAG生成提示词
- 重构 src/bidmaster/nodes/toc/llm_helper.py 使用配置化TOC提示词(2个)
- 重构 src/bidmaster/nodes/toc/adjust_chapters.py 使用配置化章节调整提示词
- 重构 src/bidmaster/nodes/toc/optimize_with_feedback.py 使用配置化优化反馈提示词

优势:
- 集中管理: 所有提示词统一配置,易于维护
- 易于调优: 修改提示词无需改动代码
- 版本控制: 提示词变更可独立追踪
- A/B测试: 方便测试不同提示词效果
- 可扩展性: 支持未来多语言提示词

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-10 10:12:25 +08:00
18f85a1fa7 fix: 延长用户输入超时时间从10秒到60秒
修复用户输入超时问题:
- 将默认交互超时从10秒延长到60秒,给用户充足输入时间
- 避免用户在第9秒开始输入但来不及完成的问题
- 更新timeout_prompt和timeout_choice_prompt默认参数
- 在config.yaml添加interaction_timeout配置项
- 更新settings.py中的默认配置值

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-09 17:08:17 +08:00
2702e5020c fix: 修复RAG工具关键方法缺少返回值导致的失败问题
- add_document()方法添加return True,修复添加文档失败的bug
- reset_database()方法添加return True,修复重置失败的bug
- reset_database()重新创建集合时添加embedding_function参数
- 修复get_or_create_collection导致的embedding函数冲突问题
- 优化集合初始化逻辑,先尝试获取已存在集合再创建新集合

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-09 16:29:27 +08:00
9e4f2379fa feat: 添加用户交互超时自动继续功能
新增独立的超时输入工具类,实现Word内容生成时如果用户10秒内未输入则自动使用默认值继续流程。

主要改动:
- 新建 utils/timeout_input.py 工具类,提供 timeout_prompt 和 timeout_choice_prompt
- 在 settings.py 添加 interaction_timeout 配置项(默认10秒)
- 修改 interaction.py 的 _handle_text 和 _handle_choice 使用超时输入
- 超时后显示友好提示并自动使用默认值

设计优势:
- 独立封装,解耦业务逻辑
- 配置化,可通过 config.yaml 或环境变量自定义超时时间
- 可复用,其他交互场景也可使用
- 不影响 SILENT/PROGRAMMATIC 模式

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-02 08:40:27 +08:00
81e4947b99 refactor: 全面修复Word填充Agent代码规范问题
## 核心改进

### 1. 移除静默降级,快速失败 (interact_user.py)
- 删除无交互处理器时返回默认值的静默逻辑
- 改为立即抛出异常暴露配置缺失问题
- 符合"暴露问题、快速失败"原则

### 2. 统一配置源 (word.py + settings.py)
- 删除FormatConstants类,消除配置冗余
- Word格式参数统一从settings读取
- 新增Word格式配置项到settings.py
- 实现单一数据源原则

### 3. 统一RAGTool实例化 (init_config.py)
- 在InitConfigNode统一创建RAGTool实例
- generate_content.py和interact_user.py改为验证式获取
- 消除重复实例化逻辑
- 修复single_chapter_agent.py状态传递丢失rag_tool问题

### 4. 拆分复杂方法 (word.py)
- fill_placeholder拆分为6个原子操作:
  * _parse_chapter_number_from_placeholder
  * _find_heading_by_chapter_id
  * _get_chapter_level_from_heading
  * _parse_markdown_to_paragraphs
  * _insert_parsed_paragraphs
  * 保存文档
- 符合"小步快跑"原则

### 5. 优化配置继承 (init_config.py + generate_content.py)
- 新增_expand_config_inheritance预展开继承链
- _get_chapter_config从O(n)降为O(1)查找
- 移除运行时while循环向上查找

### 6. 统一异常处理策略
- 所有错误立即抛出,移除静默返回默认值
- interact_user.py: 获取知识库失败抛出异常
- generate_content.py: RAGTool未初始化抛出异常

### 7. 修复状态传递问题 (single_chapter_agent.py)
- 使用{**state, ...}继承所有字段
- 避免硬编码字典遗漏rag_tool和expanded_configs
- 确保初始化数据正确传递

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-02 08:25:15 +08:00
5d319fd2a6 feat: 实现标书内容填写完整流程并修复关键bug
新增功能:
- 实现ContentWriterAgent内容填写协调器
- 实现SingleChapterAgent单章节处理流程
- 新增write命令组支持标书内容自动填写
- 支持深度优先遍历章节队列
- 实现每章节生成后立即保存到Word

核心修复:
1. 修复章节排序bug:改用数字排序避免 chapter_1_10 排在 chapter_1_2 前面
2. 修复占位符替换丢失格式:保留段落格式而非直接替换paragraph.text
3. 修复占位符缺失问题:添加降级策略,无占位符时自动在标题后插入
4. 实现Markdown到Word格式智能转换:
   - 根据章节层级自动映射样式
   - ## 标题 → 3级内容用加粗段落,2级内容用Heading 4
   - 有序列表 → 1)2)3)编号格式
   - 无序列表 → • 实心圆点
   - 自动应用正文格式:首行缩进、1.5倍行距、宋体12磅

技术改进:
- 使用python-docx底层XML API精确控制段落插入位置
- 实现增量保存避免内容丢失
- 添加详细的段落格式配置

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-01 16:53:44 +08:00
5d16d8badc feat: 实现Word文档标题格式自动调整功能
- 新增WordFormatter工具,支持多种编号格式(中文/阿拉伯/罗马/字母)
- 支持用户自定义格式输入(如"一. 一.1 一.1.1")
- 支持从参考Word文档提取格式
- 在project new命令中集成格式调整交互
- 新增UserFeedbackNode支持目录优化循环
- 优化TocAgent工作流,支持用户反馈优化

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-30 15:39:39 +08:00
922c43e65b fix: 修复用户反馈优化流程中AI返回结果被丢失的问题
问题:
- 用户提供目录优化反馈后,AI返回了正确的优化结果,但最终显示时优化内容丢失
- 验证逻辑缺少对"质量安全"等章节的关键词识别

修复:
1. 修复数据流:optimize_with_feedback更新adjusted_chapters,finalize_chapters从adjusted_chapters读取
2. 添加"质量安全"关键词到验证逻辑
3. 清理调试日志(删除🔥符号和JSON打印)

影响:
- 用户反馈优化功能现在能正确保留AI的修改结果
- 验证逻辑能准确识别更多章节类型
- 日志输出更简洁

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-30 10:07:19 +08:00
e20768fa4e fix: 修复交互模式下InteractionHandler未正确创建导致的交互提示问题
问题:
- 交互模式下AnalysisAgent未创建InteractionHandler,导致交互提示无法显示
- console.status动画干扰了Agent内部的交互提示

解决方案:
- 在BaseAgentFactory中添加create_interactive()方法,统一交互模式的创建方式
- 修改project.py使用AnalysisAgent.create_interactive()
- 移除console.status动画,改为清晰的提示信息,避免干扰交互
- 优化交互提示格式,添加分隔线让提示更明显

影响:
- 用户能正确看到并响应AI审查建议等交互提示
- 交互体验更加清晰流畅

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-29 15:53:39 +08:00
52733d68c2 feat: 在标题生成Agent中增加AI审核交互节点
1. 新增ApplyReviewSuggestionsNode节点
   - 展示AI审查建议给用户
   - 支持用户选择要应用的建议
   - 支持交互/静默/程序化三种模式

2. 新增AdjustChaptersNode节点
   - 根据用户选择的AI建议调整章节结构
   - 完全基于AI的智能调整,无硬编码逻辑
   - 安全的错误处理和回退机制

3. 更新工作流架构
   - 新流程: ReviewStructure → ApplyReviewSuggestions → AdjustChapters → FinalizeChapters
   - 专业的单一职责原则,每个节点功能明确
   - 完善的状态传递和错误处理

4. 修复AnalysisAgent集成问题
   - 保留TocAgent的完整审查结果
   - 正确使用调整后的章节结构
   - 修复interaction_handler传递问题

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-29 15:08:41 +08:00
bc3ea2e439 fix: 精准修复BaseNode._add_warning方法返回None导致的NoneType错误
- 修改BaseNode._add_warning方法返回状态字典而不是None
- 解决review_structure节点中state = self._add_warning(state, warning_msg)导致的NoneType错误
- 保持最小化代码改动,确保所有现有功能正常工作

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-29 11:35:35 +08:00
c96c3696ca fix: 修复技术目录生成Agent中的NoneType错误
- 修复safe_execute方法中的None返回值处理
- 增强所有NodeStateManager方法的None状态处理
- 确保状态管理方法始终返回有效的字典对象
- 增加错误情况下的降级处理和日志记录

修复了重构过程中引入的'NoneType' object does not support item assignment错误

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-29 11:25:35 +08:00
b5b727a61d refactor: 消除技术目录生成Agent中的重复代码
- 统一条件判断函数,移除analysis.py中的重复别名
- 创建BaseAgentFactory基类,抽取共同的工厂方法
- AnalysisAgent和TocAgent继承工厂基类,移除重复代码
- 增强BaseNode状态更新功能,添加进度和警告辅助方法

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-29 11:05:52 +08:00
692e54ecdd refactor: 重构目录生成Agent,消除重复代码并统一接口
主要优化:
- 统一表格文本提取功能:将重复的_extract_table_text函数合并到parser.py
- 创建通用工作流条件判断:新增workflow_utils.py提供统一的should_continue函数
- 统一LLM调用接口:所有LLM调用统一使用LLMHelper.call_llm_with_retry
- 统一JSON解析逻辑:使用LLMHelper.parse_ai_json_response统一处理AI响应
- 清理冗余导入:移除不再使用的json模块导入

效果:
- 减少约120行重复代码
- 提高代码一致性和可维护性
- 简化调试和问题定位
- 符合DRY原则

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-29 10:52:52 +08:00
0a06aad7f5 refactor: 目录生成Agent重构 - 消除重复代码并优化架构
## 重构成果
- 新增统一组件: ChapterFactory, CategoryManager, LLMHelper
- 重构核心节点: 精简代码量30%,消除重复逻辑
- 清理无效代码: 移除残留导入和未使用方法
- 优化导入结构: 解决循环导入风险

## 新增文件
- factories.py: 统一章节创建逻辑
- category_manager.py: 整合类别相关操作
- llm_helper.py: 封装LLM调用和解析
- constants.py: 常量定义
- utils.py: 迁移指引

## 重构节点
- 所有节点使用统一的BaseNode增强方法
- 消除重复的AI响应解析、状态管理、日志记录
- 使用工厂模式统一章节创建

## 代码质量提升
- 代码行数从960行优化到949行
- 清晰的职责分离和模块化设计
- 统一的错误处理和状态管理
- 消除所有重复功能和无效代码

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-29 10:32:35 +08:00
fb3e704bef refactor: 架构优化 - 移除重复代码并统一工具类模式
重大架构改进:
1. 移除重复的TocGeneratorAgent实现(585行),保留模块化的TocAgent
2. 修复LLMService模块级强制初始化问题,采用标准单例模式
3. 统一所有工具类的使用模式,提高架构一致性

具体更改:
- 删除 src/bidmaster/agents/toc_generator.py(完全重复实现)
- 移除 llm.py 中的模块级实例化(llm_service = LLMService())
- 更新 tools/__init__.py 导出LLMService类而非实例
- 更新使用方改为LLMService()调用(generate_sub_chapters.py, review_structure.py)
- 清理agents/__init__.py和analysis.py中的旧版本引用

收益:
- 减少约600行重复代码
- 解决模块导入时的配置加载错误
- 实现惰性加载,配置只在使用时加载
- 提高代码可维护性和架构一致性

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-29 09:59:45 +08:00
c74ae0b418 fix: 修复CLI导入问题并简化交互流程
主要修改:
- 修复CLI模块导入:添加__main__.py和正确的包配置
- 修复InteractionHandler调用错误:使用__call__而非.interact()
- 删除重复交互:AnalysisAgent和TocAgent都询问生成模式
- 简化生成方式:删除模板选项,只保留AI生成
- 消除代码重复:BidParser专注解析,TocAgent负责生成

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-28 20:21:10 +08:00
46a60fe00b refactor: 实现Agent节点抽离架构,支持可配置化交互
## 主要改进

### 节点抽离架构
- 创建独立的节点基类 (BaseNode, NodeContext)
- 将TocGenerator的5个节点抽离为独立模块
- 支持节点间的松耦合和可重用设计

### Agent构建器模式
- 实现AgentBuilder基类支持灵活的工作流组装
- 提供TocAgentBuilder用于构建目录生成Agent
- 支持条件边和无条件边的配置

### 多模式交互管理
- 实现InteractionHandler支持三种模式:
  - INTERACTIVE: CLI交互模式
  - SILENT: 静默模式(使用默认值)
  - PROGRAMMATIC: 程序化模式(使用预设值)
- 通过NodeContext实现交互与业务逻辑解耦

### 测试验证
- 所有测试通过,验证架构设计正确性
- 支持AI智能生成和模板生成两种模式
- 完整的错误处理和日志记录

## 技术细节

### 新增文件
- `nodes/base.py`: 节点基础接口
- `nodes/toc/*`: TocGenerator各节点实现
- `agents/base.py`: Agent构建器基类
- `agents/builders/toc_builder.py`: Toc构建器
- `agents/interaction.py`: 交互管理器

### 架构优势
- 节点可独立测试和复用
- 支持不同交互模式的无缝切换
- 遵循开闭原则,易于扩展新节点
- 符合PROJECT_SPEC.md的模块化规范

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-28 17:20:15 +08:00
24880dcb71 refactor: 使用Word原生编号功能替代手动编号
- 删除WordProcessor中的手动编号逻辑
- 添加_extract_title_text提取纯文本标题
- 修改TocGeneratorAgent生成不含编号的标题
- 让Word通过Heading样式自动管理编号
- 支持Word原生目录功能

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 10:39:53 +08:00
2ff96ea544 refactor: 将目录生成功能抽取为独立的TocGeneratorAgent
- 创建独立的TocGeneratorAgent,专门负责目录生成
- 从AnalysisAgent中移除700+行冗余代码
- 添加统一的LLM服务层,避免重复创建客户端实例
- 修复所有违反PROJECT_SPEC.md规范的代码:
  - 移除防御编程(copy()方法)
  - 实现立即失败原则(异常直接抛出)
  - 统一常量定义(CATEGORY_NAMES)
  - 规范import语句位置
  - 修复私有方法调用问题
- 保持向后兼容性,不改变原有接口

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-27 10:12:44 +08:00
e6103c711f refactor: 按照PROJECT_SPEC.md规范重构代码
修复架构和代码规范违规问题:

架构修复:
- 创建internal目录(内部模块,禁止外部import)
- 恢复ARCHITECTURE.md文档
- 移除未定义的utils目录
- 清理临时测试目录

代码规范修复(严格遵循核心哲学):
- 移除所有try-except,让错误立即暴露
- 移除所有防护编程(不返回bool/错误字符串)
- 简化为MVP版本(每个命令组只保留核心功能)
- 移除所有美化输出,使用简单print

功能实现:
- 实现generate命令(只保留task子命令)
- 实现assemble命令(只保留tables子命令)
- 修复bidmaster/__init__.py导出
- 添加缺失的TableGenerator类

文件精简:
- generate.py: 262行 → 66行
- assemble.py: 293行 → 64行
- 移除所有延迟导入和内部import

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-26 20:02:59 +08:00
a01fa47a00 fix: 修复章节编号错乱问题并优化子标题生成
## 主要修复
- 修复子标题编号与父章节编号不匹配的问题
- 从Agent层移除编号处理逻辑,改为在Word生成时动态计算编号
- 优化编号识别算法,支持多级编号格式(1.、1.1、1.1.1等)

## 技术改进
- 在WordProcessor中实现动态章节编号功能
- 使用正则表达式准确提取编号和内容
- 简化Agent工作流,专注于内容生成而非格式化
- 添加original_index字段到ScoringCriteria模型

## 工作流优化
- 调整LangGraph节点执行顺序:生成章节→映射→生成子标题→AI审核→最终确定
- 章节顺序严格遵循招标文件评分表原始顺序
- 职责分离:Agent专注内容,Word处理器专注格式

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-26 09:52:38 +08:00
43f56eeffa feat: 实现Word标书模板生成功能
- 新增WordProcessor类,支持从三级章节结构生成专业Word模板
- 集成Word生成功能到project new命令,实现完整工作流
- 自动生成标题层级结构,支持1-3级标题格式
- 为评分项添加占位符和评分提示,指导用户编写
- 添加目录占位符提示,支持Word自动更新功能
- 项目创建现在输出:JSON解析结果 + 任务清单 + Word模板
- 符合开发规范:解析招标文件,生成任务清单和Word框架

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-25 15:25:00 +08:00
835f4b604c feat: 实现交互式project new命令
- 简化project new命令为交互式体验,移除复杂参数
- 添加友好的文件路径输入引导和验证
- 自动生成带日期的默认项目名称
- 添加目录冲突检测和确认机制
- 创建完整的项目结构(analysis_result.json + tasks.json)
- 生成结构化任务清单,支持后续内容生成
- 显示详细的创建结果和三级目录结构
- 符合开发规范要求的简洁易用设计

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-25 15:17:01 +08:00
f48971cf67 feat: 实现完整三级标题生成功能
- 扩展DocumentChapter模型支持嵌套结构和评分值
- 新增智能分组算法,按关键词和前缀对评分项进行分类
- 重写章节生成逻辑,支持一级、二级、三级标题完整结构
- 优化显示系统,支持递归显示和颜色区分
- 增强表格解析能力,处理复杂的合并单元格结构
- 改进AI识别逻辑,更好地识别评分表格类型
- 完善.gitignore文件,添加项目相关忽略规则

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-25 14:33:30 +08:00
47fc26f3f0 feat: 初始化BidMaster-CLI项目
- 实现三层架构(CLI/Agent/Tools)
- 完成招标文件解析器(支持Excel/CSV/Word)
- 实现AI智能表格识别和分类
- 支持商务/技术评分项智能分离
- 实现RAG知识库管理
- 完成专业目录结构生成
- 修复编码规范违规问题

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-25 13:50:13 +08:00