config.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. # agent/config.py
  2. """
  3. Agent配置文件
  4. 定义所有Agent相关的配置参数,便于调优
  5. 配置说明:
  6. - 所有阈值参数都支持运行时调整,无需重启应用
  7. - 置信度参数范围通常在 0.0-1.0 之间
  8. - 迭代次数参数影响性能和准确性的平衡
  9. """
  10. AGENT_CONFIG = {
  11. # ==================== 问题分类器配置已迁移到 classifier_dict.yaml ====================
  12. # 注意:问题分类器的所有配置参数已迁移到 agent/classifier_dict.yaml 文件的 weights 部分
  13. # ==================== 数据库Agent配置 ====================
  14. "database_agent": {
  15. # Agent最大迭代次数:防止无限循环,每次迭代包含一轮工具调用
  16. # 建议范围:3-10,过少可能无法完成复杂查询,过多会影响响应时间
  17. # 典型流程:1.生成SQL → 2.执行SQL → 3.生成摘要 = 3次迭代
  18. "max_iterations": 5,
  19. # 是否启用详细日志:True时会输出Agent的详细执行过程,便于调试
  20. # 生产环境建议设为False以减少日志量,开发环境建议设为True
  21. "enable_verbose": True,
  22. # 早停策略:当Agent认为任务完成时的停止方法
  23. # 可选值:"generate"(生成完成即停止) | "force"(强制完成所有步骤)
  24. # "generate"更高效,"force"更稳定但可能产生冗余步骤
  25. "early_stopping_method": "generate",
  26. },
  27. # ==================== 聊天Agent配置 ====================
  28. "chat_agent": {
  29. # 聊天Agent最大迭代次数:聊天场景通常比数据库查询简单,迭代次数可以更少
  30. # 建议范围:1-5,通常1-2次就能完成聊天响应
  31. "max_iterations": 3,
  32. # 是否启用详细日志:同数据库Agent,控制日志详细程度
  33. "enable_verbose": True,
  34. # 是否注入分类上下文信息:True时会将分类原因作为上下文传递给聊天Agent
  35. # 帮助聊天Agent更好地理解用户意图,但会增加prompt长度
  36. "enable_context_injection": True,
  37. },
  38. # ==================== 健康检查配置 ====================
  39. "health_check": {
  40. # 健康检查使用的测试问题:用于验证系统基本功能是否正常
  41. # 建议使用简单的问候语,避免复杂查询影响检查速度
  42. "test_question": "你好",
  43. # 是否启用完整流程测试:True时会执行完整的问题处理流程
  44. # False时只检查基本组件状态,True时更全面但耗时更长
  45. "enable_full_test": True,
  46. },
  47. # ==================== 性能优化配置 ====================
  48. "performance": {
  49. # 是否启用Agent实例重用:True时会预创建Agent实例并重复使用
  50. # 优点:减少初始化时间,提高响应速度
  51. # 缺点:占用更多内存,可能存在状态污染风险
  52. # 生产环境建议启用,内存受限环境可关闭
  53. "enable_agent_reuse": True,
  54. },
  55. # ==================== SQL验证配置 ====================
  56. "sql_validation": {
  57. # 是否启用禁止词检查:检查SQL中是否包含危险操作
  58. # 禁止词检查优先级高于语法检查,失败时不尝试修复
  59. "enable_forbidden_check": True,
  60. # 是否启用语法验证:使用EXPLAIN SQL验证语法正确性
  61. # 语法验证失败时可以尝试LLM修复
  62. "enable_syntax_validation": True,
  63. # 是否启用自动修复:当语法验证失败时,调用LLM尝试修复
  64. # 仅对语法错误有效,禁止词错误不会尝试修复
  65. "enable_auto_repair": True,
  66. # 禁止的SQL操作:这些操作会被直接拒绝,不允许执行
  67. # 系统只支持查询操作,不允许修改数据
  68. "forbidden_operations": ['UPDATE', 'DELETE', 'DROP', 'ALTER', 'INSERT'],
  69. # LLM修复超时时间:单次修复调用的最大等待时间(秒)
  70. # 超时后将放弃修复,直接返回失败
  71. "repair_timeout": 60,
  72. # 修复重试次数:目前固定为1次,不进行多次重试
  73. # 这是设计约束,避免无限修复循环
  74. "max_repair_attempts": 1,
  75. },
  76. }
  77. def get_nested_config(config: dict, key_path: str, default=None):
  78. """
  79. 获取嵌套配置值
  80. Args:
  81. config: 配置字典
  82. key_path: 嵌套键路径,如 "classification.high_confidence_threshold"
  83. default: 默认值,当配置项不存在时返回
  84. Returns:
  85. 配置值或默认值
  86. Example:
  87. >>> config = {"database_agent": {"max_iterations": 10}}
  88. >>> get_nested_config(config, "database_agent.max_iterations", 5)
  89. 10
  90. >>> get_nested_config(config, "database_agent.missing_key", 5)
  91. 5
  92. """
  93. keys = key_path.split('.')
  94. current = config
  95. try:
  96. for key in keys:
  97. current = current[key]
  98. return current
  99. except (KeyError, TypeError):
  100. return default
  101. def get_current_config() -> dict:
  102. """
  103. 获取当前配置
  104. Returns:
  105. 完整的Agent配置字典
  106. Note:
  107. 此函数返回的是配置的引用,修改返回值会影响全局配置
  108. 如需修改配置,建议创建副本后再修改
  109. """
  110. return AGENT_CONFIG
  111. # ==================== 分类器词典配置加载 ====================
  112. try:
  113. from .dict_loader import load_classifier_dict_config, get_dict_loader
  114. def get_classifier_dict_config(force_reload: bool = False):
  115. """
  116. 获取分类器词典配置
  117. Args:
  118. force_reload: 是否强制重新加载
  119. Returns:
  120. ClassifierDictConfig: 词典配置对象
  121. """
  122. return load_classifier_dict_config(force_reload)
  123. def reload_classifier_dict_config():
  124. """重新加载分类器词典配置"""
  125. return load_classifier_dict_config(force_reload=True)
  126. # 导出词典配置函数
  127. __all__ = [
  128. 'get_current_config',
  129. 'get_nested_config',
  130. 'AGENT_CONFIG',
  131. 'get_classifier_dict_config',
  132. 'reload_classifier_dict_config'
  133. ]
  134. except ImportError as e:
  135. # 如果dict_loader模块不存在,提供空实现
  136. def get_classifier_dict_config(force_reload: bool = False):
  137. raise ImportError("词典加载器模块不可用,请检查dict_loader.py是否存在")
  138. def reload_classifier_dict_config():
  139. raise ImportError("词典加载器模块不可用,请检查dict_loader.py是否存在")