所有重要的项目更改都将记录在此文件中。
格式基于 Keep a Changelog, 并且本项目遵循 语义化版本。
- Windows 兼容性全面加固:
- 路径持久化优化:引入
utils/paths.py统计管理路径,配置文件 (.env.config) 和日志目录改为“应用目录优先,回退用户目录”策略,解决在只读目录(如Program Files)下无法运行的问题。 - 终端初始化增强:在
terminal.py中显式初始化 Windows 控制台(windows_console.py),强制启用 UTF-8 和 VT 模式,解决中文乱码与输入异常。 - 默认路径稳定性:将知识库默认路径设为应用目录下的
kb-docs,解决从快捷方式启动时路径偏移问题。 - 打包兼容性:移除了
dify_chat_tester.spec中对 VC 运行库 DLL 的排除规则,提升在未安装运行库环境下的启动成功率。 - 输入法与按键修复:加固
termios导入逻辑,增加异常捕获,确保即使在平台检测失效时也能优雅降级。
- 路径持久化优化:引入
- 批量处理鲁棒性:
- 空问题对齐:并发模式下空问题会写入日志并计入保存,保证行号与断点续传准确。
- 中断清理:Ctrl+C 退出改为正常返回并保存进度,避免终端状态异常或输出丢失。
- 输出目录兜底:当输入目录不可写时,自动回退到用户数据目录并提示。
- 插件加载可靠性:
- 目录定位:源码模式优先从当前工作目录查找
external_plugins,否则回退到项目根目录,降低路径误判。
- 目录定位:源码模式优先从当前工作目录查找
- 导出路径兼容:
- 聊天日志:尊重用户传入的绝对路径;若不可写则自动回退并提示。
- QA 断点续传:兼容旧版在当前目录生成的任务文件,恢复逻辑按更新时间选择。
- 版本号升级至 v1.5.1。
requires-python提升至 >= 3.10,并同步 README 版本标识。- 安装入口脚本修正为
dify_chat_tester.cli.app:run_app。
- OpenAI 非流式模式:修复了非流式请求在部分路径下返回空字符串的问题,确保返回实际响应内容。
- 批量并发模式:修复了并发批量处理与失败重试阶段对
metadata的解构/取值错误,避免日志与统计字段错乱。 - Windows 兼容性:
input_api_key在 Windows 下使用msvcrt读取按键,避免termios/tty导致的崩溃。- 并发批量键盘监听在 Windows 下使用
msvcrt,保持暂停/停止交互可用。
- Zip Slip 防护:外部 zip 插件解压前增加路径校验,阻断路径穿越写文件风险。
- 移除未使用的
pandas依赖,并同步更新锁文件。
- 功能 4:批量生成 QA 问答对:
- 新增核心模块
core/qa.py,支持基于 Markdown 文档批量生成 "问题+答案" 对。 - 支持 Excel (含 Token/Latency 统计) 和 Markdown 格式导出。
- 集成实时流式显示、Token 消耗统计面板。
- 稳健性增强:新增失败自动重试机制与任务断点续传功能。
- 新增核心模块
- UI 稳定性:
- 修复了并发批量处理模式下,控制台日志输出(stderr)干扰 Rich 库 UI 渲染,导致界面撕裂、表格重复显示的问题。现在并发执行期间会自动挂起控制台日志输出。
- 插件系统增强:
- 支持动态生成唯一的菜单 ID,解决插件与主程序菜单 ID 冲突的问题。
- 主菜单现可自动显示已加载插件的版本号(如
(v0.2.0))。 - 增强选择器逻辑 (
selectors.py),支持返回包含回调函数的完整菜单对象,为插件扩展提供底层支持。
- 思维链标签注入:
OpenAIProvider和iFlowProvider现支持将流式响应中的reasoning_content自动包装为<thinking>...</thinking>标签并追加到最终响应,便于下游分析工具提取。
- 核心逻辑修复:
- 修复了
dify_chat_tester/core/batch.py中存在的变量名引用错误 (doc_name_col_name未定义),解决了串行批量处理时的 Crash 问题。
- 修复了
- 核心稳定性:
- 测试全覆盖:补全
ConfigLoader、PluginManager及main.py启动逻辑的单元测试。 - 启动重构:重构了
main.py的启动依赖检查逻辑,显著提升其可测试性与健壮性。 - 代码规范:全项目执行
ruff format和ruff check --fix,修复了多处 Python 兼容性隐患。 - CLI 交互:重构了
terminal.py中的提示信息组件,统一使用rich.console进行渲染,代码结构更简洁。 - 配置与隐私:更新
.gitignore规则,默认忽略外部插件目录(白名单制)及会话历史文件,提升项目安全性。
- 测试全覆盖:补全
- 移除了冗余的
scripts/scan_plugin_deps.py脚本,功能已完全整合进主程序。
- 平均任务耗时显示:批量处理界面底部新增平均任务耗时统计(如"4.8 秒/任务"或"1.25 分钟/任务")。
- Dify 并发建议:在选择供应商时,Dify 选项后显示并发数建议提示(建议 ≤3)。
- 友好错误提示:QueuePool 连接池错误现在会显示友好的中文提示和解决建议。
- 统计结果优化:批量处理完成后的“总用时长”字段支持自动转换为分钟/小时单位(例如 "10 小时 45 分 29 秒")。
- 报错信息优化:增强
_friendly_error_message,识别 "inappropriate content" 等内容安全错误,返回中文提示。 - 键盘交互体验:优化 Q 键中断操作,按下后立即刷新 UI 显示"正在停止"状态。
- Ctrl+C 退出机制:
- 优化中断退出逻辑,按 Ctrl+C 后会保存当前进度并快速退出。
- 彻底禁用
multiprocessingsemaphore 泄漏警告,退出更干净。 - 修复警告图标重复显示问题(串行模式和并行模式均已修复)。
- Rich Live UI:修复批量处理时多表格叠加问题,固定表格宽度确保显示稳定。
- 进度条布局:缩短进度条宽度,确保进度信息、剩余时间、平均耗时在同一行显示。
- Dify 客户端标识:将发送给 Dify 的 user 标识从
chat_tester改为dify_chat_tester。 - 并发模式错误静默:Dify 返回的错误信息不再打印到控制台干扰 UI,只记录在日志中。
- 代码风格:全项目执行
ruff format,统一代码格式规范。
- 错误处理增强:
_friendly_error_message增强了对 Dify 数据库连接池错误的识别精确度,避免将普通网络超时误判为连接池错误。
- 覆盖率提升:新增串行模式单元测试 (
TestRunSequentialBatch) 和 UI 逻辑测试 (tests/test_cli_ui.py)。 - 新增 13 个测试用例,覆盖友好错误信息转换、带重试处理函数、高级表格功能。
- 测试用例总数从 15 个增加到 39 个,整体通过率 100%。
- 删除重复的配置文件(
dify_chat_tester/.env.config等)。 - 清理未使用的变量和导入。
-
导出功能:新增
/export命令,支持将当前对话记录导出到 剪切板 或 Markdown 文件。 -
插件增强:
AIProvider基类新增select_model和select_role钩子方法,允许插件接管默认的模型/角色选择逻辑(实现“零配置”交互)。 -
剪切板支持:引入
pyperclip库,实现跨平台的剪切板操作支持。 -
示例插件 (Demo Plugin):
- 新增全功能示例插件
external_plugins/demo_plugin,展示思维链、工具调用、流式输出等高级特性。 - 支持通过
--enable-demo-plugin参数按需启用,默认不加载,保持界面整洁。
- 新增全功能示例插件
- 并发批处理体验:
- 工具参数透传:在回复预览列中显示工具调用的具体参数,并自动截断过长内容。
- 优雅退出:在并发处理时按
Q键进入优雅停止模式,等待当前正在运行的任务完成后再安全退出。 - 实时保存:修复了并发模式下进度未实时写入 Excel 的问题,确保中断时不丢失数据。
- 交互逻辑:修复了主菜单退出选项(输入
0)无法正确退出的 Bug。
- Loguru 日志系统集成:
- 全面替换标准
logging库,提供 colorized 输出和更好的性能。 - 支持更灵活的日志轮转策略(10MB 切割 + 7 天保留 + zip 压缩)。
- InterceptHandler:自动捕获并接管第三方库(如
requests)的标准日志。 - 插件独立日志:支持外部插件(External Plugins)将 Debug 日志写入独立文件,互不干扰。
- 全面替换标准
- macOS 打包:修复了
build_macos.sh脚本未包含kb-docs知识库文档目录的问题。
- 代码规范:全项目执行
black+isort格式化,统一代码风格。 - 测试增强:大幅补全单元测试用例,覆盖日志工具、批量处理等核心模块,并适配了新的日志系统。
- 模块化重构:将所有源代码重组为清晰的子模块(
cli,core,config,utils,providers),极大提升了代码的可维护性。 - 配置与日志分离:创建独立的
config/目录存放配置文件和日志逻辑,优化了项目根目录结构。 - 版本管理:引入
_version.py统一管理版本号,解决了循环导入问题。
- 外部插件隔离:支持通过
EXTERNAL_PLUGINS_PATH环境变量加载外部自定义插件,实现核心代码与扩展功能的物理隔离。 - 配置加载增强:
ConfigLoader现在能智能识别开发环境、打包环境及新的配置文件路径。
- 超时问题:移除私有插件 RAG 长耗时任务的 HTTP 请求超时限制,解决了
ReadTimeoutError。 - 显示优化:修复了工具调用前思考过程文本丢失的问题,现在会通过“记录”面板持久化显示。
- 循环依赖:彻底解决了
cli.app与main之间的循环导入问题。 - 流式输出:修复了部分插件在流式响应时 Excel 日志为空的问题。
- 路径兼容性:修复了在不同目录下运行程序可能导致找不到配置文件的 Bug。
- 断点续传:
- 彻底移除了
.batch_state_*.json临时缓存文件。 - 新增基于日志文件(
[文件名]_log.xlsx)的智能断点续传机制,自动检测并恢复进度。 - 简化了恢复流程,不再需要管理额外的状态文件。
- 彻底移除了
- 移除了项目根目录下冗余的临时配置文件和过时文档。
- 统一异常处理:引入
exceptions.py模块,定义标准化的异常类体系,提供更友好的错误提示信息。 - 配置化批量保存:新增
BATCH_SAVE_INTERVAL配置项,允许用户自定义批量处理时的自动保存间隔(默认 10 条)。
- 架构重构:
- 服务层抽离:将问题生成逻辑抽离为独立的
QuestionService,降低控制器耦合度。 - 依赖注入:重构
AppController,支持外部注入配置和环境管理器,提升可测试性。
- 服务层抽离:将问题生成逻辑抽离为独立的
- 优雅退出机制:
- 在
main.py中添加顶层KeyboardInterrupt捕获,用户按Ctrl+C时显示友好提示而非 Traceback。 - 在批量处理循环中添加中断捕获,确保用户中断操作时自动保存当前处理进度,防止数据丢失。
- 在
- 覆盖率提升:新增针对服务层和异常处理模块的单元测试,确保核心逻辑稳健。
- 新增“AI 生成跨知识点测试提问点”主菜单功能:
- 主菜单增加选项 3:AI 生成跨知识点测试提问点;
- 原有生成测试提问点功能更名为“AI 生成单一知识点测试提问点”;
- 支持从多个文档、多个知识点组合生成跨知识点测试问题。
- 提示词配置增强:
- 单一知识点和跨知识点的生成提示词均可在
.env.config中单独配置; - 支持使用多行三引号格式书写复杂提示词,维护更加方便。
- 单一知识点和跨知识点的生成提示词均可在
- 单一知识点生成逻辑:
- 不再强制“至少 15-20 个问题”,而是根据知识点数量和用户真实提问概率动态决定问题数量;
- 对高概率知识点会多生成不同角度的提问,对中低概率知识点做适度覆盖。
- 跨知识点生成逻辑:
- 提示词从“严格只生成中/高概率场景”调整为“优先高概率,但允许合理的一般场景”,减少全为空结果的情况;
- 更强调从“真实用户具体场景”角度寻找组合使用方式(流程前后、工具协同、角色协同等)。
- 配置与交互体验:
- 对 Dify、OpenAI 兼容接口、iFlow 的基础 URL 和 API Key,如果在
.env.config中已配置,交互时会先展示并询问是否直接使用; - 在非交互环境(如 pytest、CI)下自动跳过交互确认,直接使用配置值,避免阻塞测试。
- 对 Dify、OpenAI 兼容接口、iFlow 的基础 URL 和 API Key,如果在
- 跨知识点迭代策略:
- 新增
CROSS_KNOWLEDGE_MIN_ITERATIONS与CROSS_KNOWLEDGE_MAX_ITERATIONS配置项,控制随机组合轮数下限和上限; - 默认最少执行 5 轮、最多 20 轮,可按业务需要调整(例如提升为 50~100 轮以覆盖更多组合)。
- 新增
- 修复配置加载器文档字符串中示例三引号导致的语法/缩进问题,确保在所有 Python 版本下正常导入。
- 智能日志系统:改进日志目录检测逻辑,自动处理权限问题(优先程序目录,无权限时回退至用户目录)。
- 流式输出优化:新增
StreamDisplay组件,提供更友好的 AI 思考过程展示(带机器人图标和边框)。 - Excel 导出增强:生成的测试问题文件现在包含美化的表头和自动调整的列宽。
- 测试增强:全面提升单元测试覆盖率,新增
selectors、terminal_ui和question_generator模块的测试用例。 - UI 优化:改进 API 密钥隐藏逻辑,优化输入提示交互。
- AI 提示词自定义 (新功能):
- 支持通过
.env.config配置文件自定义系统提示词 - 新增
SYSTEM_PROMPT配置项 - 支持
{role}占位符替换 - 用户可调整 AI 对话风格和行为(专业领域/回答风格/多语言)
- 详细配置文档:
AI_PROMPT_CONFIG.md
- 支持通过
- 配置管理重构:统一供应商设置模块 (
provider_setup.py) 的配置读取逻辑。 - 问题解析优化:增强
question_generator的问题提取算法,支持识别带编号/列表形式的问题,只保留以问号结尾或原本为列表项的行,提升生成问题的准确性和稳定性。 - 测试覆盖率再提升:在
ai_providers、app_controller、config_loader、terminal_ui、batch_manager、chat_manager、console_platform等模块补充大量单元测试用例,覆盖更多异常分支和回退逻辑。 - 代码规范:引入
isort进行导入排序,统一代码格式。 - 文档完善:大幅更新《用户使用指南》,补充了详细的环境准备、安装步骤和多种运行方式说明。
- 新增“AI 生成测试提问点”功能:支持读取指定目录下的 Markdown 文档,自动生成测试问题并导出为 Excel 文件。
- 完善了单元测试覆盖率。
- 修复了 Dify 供应商识别逻辑,现在使用唯一 ID 而不是显示名称进行判断,解决了自定义名称导致多轮对话失效的问题。
- 修复了代码中的未使用的变量和导入,提升代码质量。
- 优化了终端 UI 的面板宽度一致性。
- 批量查询模式默认显示响应内容(Y/n)
- k2sonnet API 特殊支持和自动流式检测
- 流式响应失败自动回退机制
- Dify 渠道实现真正的流式输出
- 改进流式响应解析,支持实时显示
- 增加请求超时时间到 60 秒
- 优化错误处理和异常信息
- 修复 Dify 应用 ID 传递方式(通过 inputs 参数)
- 修复 OpenAI 兼容接口的流式处理问题
- 修复 iFlow 渠道的响应解析逻辑
- 修复代码质量问题(清理未使用导入)
- 删除所有测试文件和调试文件
- 清理缓存目录和构建产物
- 优化项目结构,只保留核心文件
- 支持多 AI 供应商(Dify、OpenAI 兼容接口、iFlow)
- 会话模式:实时多轮对话,自动维护上下文
- 批量询问模式:从 Excel 文件批量处理问题
- 自动创建配置文件功能
- 跨平台打包支持(Windows 和 macOS)
- 完整的中文用户指南
- AI 等待动画显示优化,避免信息截断
- 支持自定义角色和模型
- Excel 日志记录,包含时间戳、对话轮次等信息
- 批量请求间隔可配置
- 支持流式和非流式响应
- 使用 uv 包管理器管理依赖
- PyInstaller 打包,生成独立可执行文件
- 智能配置文件路径检测(开发环境/打包环境)
- 完善的.gitignore 配置
- 详细的用户使用指南
- 完整的 API 配置说明
- 故障排除指南
- 主版本号:不兼容的 API 修改
- 次版本号:向下兼容的功能性新增
- 修订号:向下兼容的问题修正