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

33 lines
2.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Function Call 改造代码审核
## 阻塞问题(必须修复)
- **[已完成] FunctionResult 结果封装统一**
- 处理位置:`function_calls/spec.py:9``function_calls/router.py:195``commands/context.py:66``robot.py:296`
- 现状:结果模型已改为 `at: str` 并提供 `dispatch` 方法,路由器不再手动拼接 `@` 列表。`python3 -m compileall function_calls` 验证通过,群聊场景使用新的 `at` 字段。
- **[已完成] 提醒功能使用结构化参数**
- 处理位置:`function_calls/models.py:19``function_calls/services/reminder.py:36``function_calls/handlers.py:70``function_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 仅消费结构化参数,无需再回退自然语言解析。