趋近智
当LLM代理需要执行超出其文本生成能力范围的操作时,它会求助于工具。LLM的意图与工具执行之间的桥梁是工具接口。将此接口看作一份契约:它规定了LLM如何向工具请求服务以及可以获得什么回报。设计良好的接口对于代理的可靠和有效行为是根本的。如果LLM不明白如何使用工具,或者误解了其功能,整个系统就可能出问题。
本节侧重于专门为LLM交互设计这些接口的原则与实践。我们不只是在讨论代码中的函数签名;我们是在考虑LLM如何感知和理解工具的入口点。
核心来说,呈现给LLM的工具接口包含几个主要组成部分:
get_current_weather,send_email)。这通常是LLM选择工具时使用的第一条信息。location 而不是 arg1)。以下图表说明了工具接口在LLM代理与底层工具逻辑之间进行交互调解的作用。
工具接口充当一份明确定义的契约,指导LLM代理如何请求操作以及从工具的底层功能接收结果。
有效设计这些组成部分可确保LLM能够准确选择、调用和理解您的工具返回的结果。
为LLM设计接口与为人类开发者设计传统API所需的心态略有不同。LLM会“读取”您的接口定义来理解功能。
search_knowledge_base 比 kb_lookup 更具表达力。recipient_email 和 message_body 优于 to_addr 和 payload。LLM在强类型和明确期望下工作效果最佳。
string、integer、boolean、array[string]、object)。这通常通过像JSON Schema这样的模式定义完成,我们将在“工具输入和输出模式的最佳实践”中提及。
{"name": "user_id", "type": "integer", "description": "用户的唯一标识符。"}required 或 optional。这可以防止LLM遗漏必要信息时出现错误。提示: 设计参数时,考虑LLM会自然地从用户请求中提取哪些信息。如果用户说“伦敦明天天气如何?”,那么参数
city(字符串,必需)和date(字符串,可选,默认为今天)将很好地对应。
manage_user_profile 且处理获取、更新和删除配置文件的工具,其效果不如 get_user_profile、update_user_profile 和 delete_user_profile 等独立工具。避免创建试图通过复杂参数处理过多不同操作的“万能工具”。虽然从代码角度看这可能显得高效,但这通常会使LLM难以理解接口。
您的工具集中的一致性有助于LLM学习如何与其交互。
snake_case 或 camelCase)。item_id: string)。这也许是首要原则。总是问自己:“LLM会如何理解这个?”
target_date,请确保其描述明确了格式期望(例如,“YYYY-MM-DD”),如果LLM需要生成它的话。query 这样的参数名称可能有多种含义,请使其描述非常具体(例如,“用于在公司公开文档中查找文章的搜索词。”)。LLM不会直接读取您的Python函数签名或API代码。它依赖于该接口的表示,通常以结构化格式与自然语言描述一同提供。
city 参数的简单JSON Schema:
{
"name": "location",
"description": "城市和州,例如:旧金山,加利福尼亚州",
"type": "string",
"required": true
}
(我们将在“工具输入和输出模式的最佳实践”一节中更详细地阐述JSON Schema。)这些结构化定义的清晰度和准确性具有决定性作用。提供给LLM的定义与工具实际行为之间的任何不匹配都将导致错误和不可靠的代理表现。
意识到常见的失误可以帮助您避免它们:
process_data 或 run_script 对LLM来说信息量很少。parameter_b 仅在 parameter_a 具有特定值时才有意义,这种条件逻辑必须在描述中极其清晰,或者理想情况下,如果LLM框架支持,由独立的工具或不同的操作模式来处理。duration,它是秒、分钟还是小时?如果是 date,预期是什么格式?在参数描述中明确说明这些。让我们为一个可以执行加法、减法、乘法和除法的基础计算器工具设计一个接口。
尝试1(不太理想):单个 calculate 工具
calculateoperand1:数字,“第一个数字”operand2:数字,“第二个数字”operation:字符串,“要执行的操作:'add'(加)、'subtract'(减)、'multiply'(乘)、'divide'(除)”虽然这可行,但 operation 参数会使LLM的工作略微困难;它必须正确选择字符串。
尝试2(更原子化,通常更适合LLM):独立工具
add_numbers
num1:数字,num2:数字subtract_numbers
num1:数字,num2:数字multiply_numbers 和 divide_numbers 也类似)这种原子化方法通常更容易让LLM准确选择。如果LLM判断需要“加法”,它会直接选择 add_numbers。这与原子性设计原则非常吻合。选择取决于LLM的能力以及代理框架如何处理工具选择,但从原子工具开始是一个良好的实践。
设计有效的工具接口是一个迭代的过程。您可能会随着观察LLM代理如何与它们交互而改进您的接口。目标是让LLM尽可能容易地理解您的工具做什么、何时使用它以及如何提供必要的信息。这种细致的设计是构建可靠和有能力的LLM代理的根本。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造