提示词、工具调用与工作流
工具调用(Tool Calling)基础与函数接口设计
学习目标
- 理解工具调用在人工智能应用中的作用。
- 能设计一个边界清晰的函数接口。
- 知道模型参数必须经过程序校验。
核心概念
工具调用(Tool Calling)让模型不只生成文本,还能选择调用程序提供的工具。模型负责理解用户意图并生成工具名和参数,程序负责校验、执行、记录和返回结果。
工具接口应该窄而明确。每个工具最好对应一个清晰动作,例如查询课程、创建工单、获取订单状态。不要设计一个 do_everything 工具,让模型传入自由文本决定执行什么。
工具返回也要结构化。模型拿到工具结果后,才能继续生成面向用户的解释或下一步建议。
示例与拆解
课程助手需要查询章节信息,可以提供工具:
1type GetChapterInput = { 2 slug: string; 3}; 4 5type GetChapterResult = { 6 title: string; 7 roadmap_slug: string; 8 summary: string; 9 next_chapter_slug: string | null; 10};
用户问:
学完 prompt-basics 后下一章是什么?
模型可以产生工具调用:
1{ 2 "tool_name": "get_chapter", 3 "arguments": { 4 "slug": "prompt-basics" 5 } 6}
程序校验 slug 合法后执行查询,再把结果交回模型生成回答。真实数据库查询、权限判断和错误处理都不应该由模型直接完成。
常见误区
- 误区一:把工具说明写得很宽泛。宽泛工具会降低可控性。
- 误区二:认为模型生成的参数一定正确。参数可能缺失、类型错误或越权。
- 误区三:工具返回自然语言即可。结构化返回更利于后续推理和界面展示。
小练习
为“查询用户学习进度”设计一个工具接口,写出输入字段、输出字段和至少 2 条执行前校验规则。
实操检查点
把工具接口写成类型定义,并补一条拒绝调用的例子。工具设计必须能说明“什么时候不执行”,否则模型很容易把错误参数传给真实系统。
1type GetLearningProgressInput = { 2 user_id: string; 3 roadmap_slug?: string; 4}; 5 6type GetLearningProgressResult = { 7 completed_chapters: string[]; 8 current_chapter_slug: string | null; 9 completion_percent: number; 10};
拒绝示例:当前登录用户不是 user_id 对应用户,程序返回权限错误,不把进度数据交给模型。
随堂测验
完成本章测验,重点检查你能否正确理解模型和程序在工具调用中的分工。
本章总结
工具调用把模型连接到真实系统。关键是工具边界清楚、参数可校验、执行受程序控制。
下一步学习指引
下一章学习工作流编排,把多个工具和模型步骤组织成可控任务流。