Skip to content

feat(core/config): 新增提示词变更事件与文件监控支持#69

Merged
Sakura520222 merged 1 commit intomainfrom
feature
Mar 20, 2026
Merged

feat(core/config): 新增提示词变更事件与文件监控支持#69
Sakura520222 merged 1 commit intomainfrom
feature

Conversation

@Sakura520222
Copy link
Owner

@Sakura520222 Sakura520222 commented Mar 18, 2026

  • 新增 PromptChangedEvent 事件类,用于传递提示词变更信息
  • 扩展 FileWatcher 支持监控 prompt.txt、poll_prompt.txt、qa_persona.txt 文件
  • 实现提示词变更处理逻辑,区分配置文件与提示词文件的重载
  • 在 main.py 中订阅提示词变更事件并打印更新日志
  • 更新 all 导出列表,包含 PromptChangedEvent

- 新增 PromptChangedEvent 事件类,用于传递提示词变更信息
- 扩展 FileWatcher 支持监控 prompt.txt、poll_prompt.txt、qa_persona.txt 文件
- 实现提示词变更处理逻辑,区分配置文件与提示词文件的重载
- 在 main.py 中订阅提示词变更事件并打印更新日志
- 更新 __all__ 导出列表,包含 PromptChangedEvent
@sakura-pr-reviewer sakura-pr-reviewer bot added the enhancement New feature or request label Mar 18, 2026
Copy link

@sakura-pr-reviewer sakura-pr-reviewer bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🌸 Sakura AI 审查报告 - ⚡️ 快速审查

💬 审查评论

评分:7/10

🟡 重要问题(建议修复)

🟡 core/config/file_watcher.py:125

问题: 文件路径匹配使用 endswith("config.json") 可能会误匹配 xxxconfig.json
建议: 使用 endswith("/config.json")Path(file_path).name == "config.json" 进行精确匹配

🟡 core/config/file_watcher.py:149-154

问题: _get_prompt_type 使用简单的 endswith 匹配,可能与 PROMPT_FILES 常量不一致
建议: 改为基于 PROMPT_FILES 常量的字典映射,确保一致性:

PROMPT_TYPE_MAP = {
    "prompt.txt": "summary",
    "poll_prompt.txt": "poll",
    "qa_persona.txt": "qa_persona"
}
def _get_prompt_type(self, file_path: str) -> str:
    filename = Path(file_path).name
    return PROMPT_TYPE_MAP.get(filename, "unknown")

🟡 core/config/file_watcher.py:129

问题: _handle_prompt_changed 返回值为 None,但创建的 async task 没有被 await,如果后续需要依赖这个 task 会出问题
建议: 确保调用者了解这是"即发即弃"(fire-and-forget)的操作,或者改为返回 task 引用

💡 优化建议

💡 core/config/file_watcher.py:176-192

问题: _load_prompt_content 方法中的 import 放在函数内部,虽然避免了循环导入,但每次调用都会执行 import
建议: 如果担心循环导入,可以在文件顶部使用 TYPE_CHECKING

from typing import TYPE_CHECKING
if TYPE_CHECKING:
    from core.infrastructure.config.prompt_manager import load_prompt

💡 core/config/file_watcher.py:157

问题: _handle_prompt_changed 的职责较重,包含内容加载和事件发布
建议: 考虑拆分为两个方法,提高可测试性

💡 main.py:167-174

问题: on_prompt_changed 回调函数只做了日志记录,没有实际业务逻辑
建议: 添加注释说明这是占位实现,未来会添加具体的提示词更新逻辑,例如:

# TODO: 未来实现具体的提示词更新逻辑
# - 重新加载 AI 配置
# - 清除相关缓存
# - 通知相关模块

💡 core/config/events.py:21-22

问题: content 字段包含完整的提示词内容,对于大型提示词可能会占用较多内存
建议: 考虑添加 content_length 字段,让 content 变为可选字段,或者在日志中只显示长度而非完整内容


总体评价

优点

  • ✅ 事件驱动架构设计合理,符合项目现有的架构模式
  • ✅ 防抖逻辑处理得当,避免了频繁重载
  • ✅ 向后兼容性考虑周全(_trigger_reload 保留了默认参数)
  • ✅ 使用 Literal 类型限制提示词类型,类型安全
  • ✅ 错误处理较为完善,有异常捕获和日志记录

需要改进

  • 🟡 文件路径匹配不够严谨,可能存在边界情况误匹配
  • 🟡 _get_prompt_typePROMPT_FILES 常量分离,容易出现不一致
  • 💡 可以提取一些常量和辅助方法,提高代码可维护性

整体来说,这是一个功能完整、设计合理的实现,没有严重的 bug 或安全问题,主要是细节上的一些优化建议。

代码质量评分:7/10
AI审查决策:请人工复审

🟡 重要问题 (3个)

  • core/config/file_watcher.py:125

  • core/config/file_watcher.py:149-154

  • core/config/file_watcher.py:129

💡 优化建议 (12条)

🏷️ 标签建议

✅ 已自动应用的标签

  • enhancement (98%) - PR标题明确标注为'feat',代码变更新增了提示词变更事件(PromptFileChangedEvent)及文件监控逻辑,属于典型的新功能增强

@Sakura520222 Sakura520222 enabled auto-merge March 18, 2026 05:46
@Sakura520222 Sakura520222 disabled auto-merge March 18, 2026 05:46
@Sakura520222 Sakura520222 enabled auto-merge March 20, 2026 03:59
@Sakura520222 Sakura520222 disabled auto-merge March 20, 2026 04:00
@Sakura520222 Sakura520222 merged commit fc0ecdf into main Mar 20, 2026
6 checks passed
@Sakura520222 Sakura520222 deleted the feature branch March 20, 2026 04:00
@github-actions
Copy link
Contributor

📝 已更新 Release v1.7.3 描述

## 🎉 Release v1.7.3 - 2026-03-20

### 新增功能

- feat(core): 升级项目版本至 1.7.3 (PR #64) [enhancement,重构]
- feat: 使ChannelManager订阅配置变更 (PR #64) [enhancement,重构]
- feat: 集成ConfigManager和FileWatcher到main (PR #64) [enhancement,重构]
- feat: 实现Telegram错误通知器,支持重试按钮 (PR #64) [enhancement,重构]
- feat: 添加config模块导出 (PR #64) [enhancement,重构]
- feat: 实现ConfigManager,支持原子性重载 (PR #64) [enhancement,重构]
- feat: 实现FileWatcher,带500ms防抖 (PR #64) [enhancement,重构]
- feat: 实现ConfigValidator,提供详细的错误报告 (PR #64) [enhancement,重构]
- feat: 实现AsyncIOEventBus,支持优先级和超时保护 (PR #64) [enhancement,重构]
- feat(core/config): 新增提示词变更事件与文件监控支持 (PR #69) [enhancement]


### 问题修复

- fix(file_watcher): 扩展热重载文件监控范围 (PR #63) [enhancement]
- fix(file_watcher): 扩展热重载文...

✅ 变更已记录到 GitHub Releases

📦 附件正在打包中,请稍候...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant