mirror of
https://github.com/Zippland/Bubbles.git
synced 2026-01-19 09:41:17 +08:00
5.2 KiB
5.2 KiB
Function Call 参数调用参考
调用流程概览
- Function Call 路由器会将所有消息交给
FunctionCallLLM.run,模型基于已注册的函数规格选择要调用的工具(function_calls/router.py:47)。 - 每个处理器都通过
@tool_function装饰器注册,它会读取参数类型注解并生成 JSON Schema,用于 LLM 约束和运行期验证(function_calls/handlers.py:24,function_calls/registry.py:64)。 - LLM 返回的参数会在
_create_args_instance中转为对应的 Pydantic 模型;若字段缺失或类型不符则会抛错并被记录(function_calls/router.py:147)。
下表总结了当前仍启用的 5 个函数及其参数 Schema 与业务用途。
所有关键字段已通过 Pydantic Field(..., description=...) 写入属性说明,LLM 在工具定义中可以读取这些 description 以理解含义。
函数明细
reminder_set
- Handler:
function_calls/handlers.py:24 - 模型:
ReminderArgs(function_calls/models.py:19) - Schema 摘要:
{ "type": "object", "required": ["type", "time", "content"], "properties": { "type": { "type": "string", "enum": ["once", "daily", "weekly"], "description": "提醒类型:once=一次性提醒,daily=每天,weekly=每周" }, "time": { "type": "string", "description": "提醒时间。once 使用 'YYYY-MM-DD HH:MM',daily/weekly 使用 'HH:MM'" }, "content": { "type": "string", "description": "提醒内容,将直接发送给用户" }, "weekday": { "type": ["integer", "null"], "default": null, "description": "当 type=weekly 时的星期索引,0=周一 … 6=周日" } } } - 参数含义:
type:提醒频率。一次性(once)用于绝对时间点;daily为每天定时;weekly需要同时给出星期索引。time:触发时间。一次性提醒要求未来时间,格式YYYY-MM-DD HH:MM;每日/每周提醒使用HH:MM24 小时制。content:提醒内容文本,最终会被发送给触发对象。weekday:仅在type=weekly时有效,使用 0-6 表示周一到周日。
- 调用方式:处理器从
args.model_dump()得到完整参数字典并传给提醒服务的create_reminder(function_calls/handlers.py:37)。weekday仅在type="weekly"时使用;未提供值时默认为null。
reminder_list
- Handler:
function_calls/handlers.py:46 - 模型:
ReminderListArgs(function_calls/models.py:28) - Schema 摘要:空对象,没有任何必填字段。
- 调用方式:函数只验证请求体为空对象,然后调用
list_reminders读取当前用户/群的提醒列表(function_calls/handlers.py:59)。
reminder_delete
- Handler:
function_calls/handlers.py:63 - 模型:
ReminderDeleteArgs(function_calls/models.py:33) - Schema 摘要:
{ "type": "object", "required": ["reminder_id"], "properties": { "reminder_id": { "type": "string", "description": "提醒列表中的 ID(日志或界面可显示前几位帮助用户复制)" } } } - 参数含义:
reminder_id即提醒列表返回的唯一 ID,用于定位要删除的记录。 - 调用方式:直接读取
args.reminder_id并转交给delete_reminder执行删除逻辑(function_calls/handlers.py:76)。
perplexity_search
- Handler:
function_calls/handlers.py:80 - 模型:
PerplexityArgs(function_calls/models.py:39) - Schema 摘要:
{ "type": "object", "required": ["query"], "properties": { "query": { "type": "string", "description": "要搜索的问题或主题" } } } - 参数含义:
query即用户想让 Perplexity 查找的自然语言问题或主题。 - 调用方式:使用
args.query调用run_perplexity,若外部服务已自行回复则返回空消息,否则把搜索结果转成回复文本(function_calls/handlers.py:87)。
summary
- Handler:
function_calls/handlers.py:96 - 模型:
SummaryArgs(function_calls/models.py:49) - Schema 摘要:空对象,无需参数。
- 调用方式:只要模型选择该函数即执行
summarize_messages(ctx),返回群聊近期消息总结(function_calls/handlers.py:104)。
运行时验证逻辑
- 模型侧约束:
FunctionCallLLM会把上述 Schema 转成 OpenAI 样式的工具定义,使模型在生成参数时遵循字段、类型与枚举限制(function_calls/llm.py:112)。 - 路由二次校验:收到工具调用后,路由器会再次调用
validate_arguments确认必填字段存在且类型正确(function_calls/llm.py:215)。 - Pydantic 转换:最后在
_create_args_instance中实例化 Pydantic 模型,确保所有字段通过严格校验并可在 handler 中以args访问(function_calls/router.py:147)。
若未来新增函数,只需为 handler 的 args 参数提供 Pydantic 模型或 dataclass,装饰器会自动生成相应 Schema 并同步到本流程中。