Files
Bubbles/function_call_review.md
zihanjian 33731cb83b refactor
2025-09-24 20:01:22 +08:00

2.5 KiB
Raw Permalink Blame History

Function Call 改造代码审核

阻塞问题(必须修复)

  • [已完成] FunctionResult 结果封装统一

    • 处理位置:function_calls/spec.py:9function_calls/router.py:195commands/context.py:66robot.py:296
    • 现状:结果模型已改为 at: str 并提供 dispatch 方法,路由器不再手动拼接 @ 列表。python3 -m compileall function_calls 验证通过,群聊场景使用新的 at 字段。
  • [已完成] 提醒功能使用结构化参数

    • 处理位置:function_calls/models.py:19function_calls/services/reminder.py:36function_calls/handlers.py:70function_calls/router.py:70
    • ReminderArgs 改为 type/time/content/weekday 等字段,移除了对旧 commands.handlers 的依赖,并删除路由层对提醒的直接自然语言拼装。

重要改进项

  • [已完成] Handler 逻辑脱离旧命令体系

    • 现状:所有 handler 均迁移到 function_calls/services天气、新闻、提醒、Perplexity、骂人、群工具等不再篡改 ctx.msg.content 或调用旧命令模块。
  • [已完成] 直接命令路径参数校验

    • 现状:function_calls/router.py:102-119 对直接匹配的函数调用 validate_arguments,与 LLM 分支保持一致。
  • [已完成] FunctionSpec 类型标注同步

    • 现状:function_calls/spec.py:27-34 中的 handler 类型现为 Callable[[MessageContext, Any], FunctionResult]

架构一致性评估

  • 当前所有功能均通过 Function Call 服务层完成,提醒/骂人/搜索等不再依赖自然语言解析。
  • LLM 适配层维持兼容,必要时可扩展 jsonschema 校验和重试策略。
  • robot.py:163-231 仅初始化和调用 FunctionCallRouter,旧的命令/AI 路由器已移除,配置项也同步精简。

建议的下一步

  1. 扩充 function_calls/services 层的单元测试例如提醒设置、Perplexity fallback 等),确保服务纯函数行为稳定。
  2. 若后续新增工具函数,遵循 FunctionResult + service 的模式,并及时更新 FUNCTION_CALL_USAGE.md
  3. 观察线上日志,确认精简后的路由无遗漏场景;如需更多指令,优先在 direct-match 表中补充结构化参数生成逻辑。

如按以上步骤推进,可逐步达到“标准 Function Call 模式”预期:所有工具能力通过结构化 schema 暴露handler 仅消费结构化参数,无需再回退自然语言解析。