《60天AI学习计划启动 | Day 27: Function Calling & 工具设计最佳实践》
Day 27:Function Calling & 工具设计最佳实践
学习目标
- 梳理 工具(functions)在实际业务里的定位
- 掌握 函数 Schema 设计要点(参数、类型、幂等性)
- 会设计 一套“AI 只做决策,人类/服务做执行”的调用模式
核心知识点
-
1. 工具职责划分
- LLM 负责:理解意图 + 选择工具 + 组装参数
- 工具负责:真实世界操作 / 数据查询 / 写入 / 调用外部服务
- 关键原则:
- 工具要 清晰、单一职责(一个函数只干一件事)
- 工具名 + description 要让 LLM 一眼知道“什么时候该用它”
-
2. 函数 Schema 设计
- 参数设计:
- 尽量用 简单扁平结构(string/number/enum/object),减少嵌套
- 对枚举/范围用
enum/minimum/maximum明确约束 - 所有必填字段放在
required里,description 写清楚业务含义
- 返回值:
- 工具返回真实数据结构(如订单详情、配置 JSON),不要塞“自然语言”;自然语言让 LLM 来生成
- 返回里带上 trace 信息(requestId / source 等),方便日志和排错
- 参数设计:
-
3. 调用模式(两阶段)
- 推荐模式(你项目也容易集成):
- 阶段1:LLM 分析意图 → 选择工具 + 构造参数(function_call)
- 阶段2:后端接 function_call → 真正执行 → 把结果再喂回 LLM 做自然语言解释
- 好处:
- 在阶段2 可以做人为/服务侧的权限校验、风控、审计
- 即使 LLM 构造了“危险调用”,也能在阶段2 拦截
- 推荐模式(你项目也容易集成):
实战作业(建议)
-
作业 1:为你业务里一个功能写函数 Schema 草稿
- 例如「查询某项目的质量日报」:
- 参数:
{ projectId: string, date: string(YYYY-MM-DD) } - 要求:description 写清楚
projectId对应什么、date 是否必填/默认今天
- 参数:
- 例如「查询某项目的质量日报」:
-
作业 2:设计一个两阶段调用流程时序图
- 包含:用户 → LLM → function_call → 后端工具执行 → LLM 解释 → 前端展示
- 标清楚:在哪一步做权限校验,在哪一步记录日志
-
作业 3:列出 3 条“绝不做成工具”的操作
- 如:
- 直接删除真实数据
- 直接发钉钉/邮件给大量用户
- 改权限/角色配置
- 这些操作要么只做人肉确认,要么加双重确认/审批流
- 如:
思考 / 笔记要点
- 盘点你当前项目里 已经有的 API/服务,哪些可以“包装成工具”给 LLM 调用,哪些需要人为兜一层
- 思考:如果以后要做 AI Agent 自动跑质量巡检/报表生成,工具层应该长什么样,哪些操作必须有“安全挡板”
- 可以写一篇:《在业务系统里给 LLM 设计工具调用,我总结的 5 条经验》,把 Schema 设计 + 安全控制一起写进去

浙公网安备 33010602011771号