趋近智
弥合人类语言的流动性、常有歧义的特点与API精确、结构化要求之间的差异,是为LLM代理构建工具时面临的常见难题。代理可能理解用户的请求,例如“伦敦明天天气如何?”,但天气API需要一个像GET /api/weather?city=London&date=2024-07-15这样的调用。这里有几种执行这种转换的方法,使LLM代理能够有效地调用外部API。
最直接的方法是运用LLM固有的语言理解能力。通过向LLM提供API工具的详细描述,包括其目的、参数、类型和必填字段(如第1章“理解工具规范和描述”中所讨论),您可以指示LLM直接生成结构化的API调用。
许多现代LLM支持“函数调用”或“工具使用”模式,它们可以输出一个结构化的JSON对象,表示要调用的函数(您的API工具)以及要使用的参数。
示例:
假设有一个get_weather API的工具描述,它接收location(字符串)、date(字符串,YYYY-MM-DD)和units(枚举:celsius、fahrenheit)作为参数,以及一个用户查询:“下周五奥斯陆会冷吗?请给我摄氏温度。”
LLM在工具描述的指导下,会尝试生成如下输出:
{
"tool_name": "get_weather",
"parameters": {
"location": "Oslo",
"date": "2024-07-19", // Assuming 'next Friday' is resolved
"units": "celsius"
}
}
您的代理框架随后会获取此JSON并执行实际的API调用。
优点:
注意事项:
一种更全面的方法,特别是对于复杂API或当您需要更精细的控制时,涉及一个两步过程:
示例: 用户查询:“我需要找一个从波士顿到圣地亚哥的航班,下周某个时间出发,两周后返回。”
LLM可能会提取:
{
"intent": "find_flight",
"origin": "Boston",
"destination": "San Diego",
"departure_period": "next week",
"return_time_relative": "two weeks after departure"
}
您的Python代码随后会:
2024-07-22到2024-07-28)。origin映射到API的departureAirportCode参数(可能涉及从城市名称到机场代码的查找)。destination映射到arrivalAirportCode。GET /flights/search的API调用,并使用正确格式化的参数。优点:
注意事项:
当代理能够调用大量API工具,或者单个API具有众多复杂且重叠的参数时,LLM可能难以选择正确的API端点或最适合的参数集。在这种情况下,语义搜索可以作为初步步骤。
这种方法对于在复杂的API环境中的发现和消歧特别有用。例如,如果用户说“更新客户记录”,而您有update_customer_address、update_customer_contact_info和update_customer_preferences等API,语义搜索可以根据查询和API描述中更细致的细节,帮助识别其中哪些(或全部)与查询最相关。
优点:
注意事项:
LLM是优秀的模式识别器。您可以通过在提示中直接提供几个自然语言查询及其相应的期望API调用结构的示例(样本),来指导LLM的映射行为。这是一种上下文学习的形式。
提示示例片段:
Here are some examples of how to map user requests to the 'create_calendar_event' API tool:
User request: "Schedule a meeting with John for tomorrow at 3 PM about the project update."
API call: { "tool_name": "create_calendar_event", "parameters": { "title": "Meeting with John: project update", "attendees": ["[email protected]"], "start_time": "YYYY-MM-DDTH15:00:00", "duration_minutes": 60 } }
User request: "Block out my calendar for a focus session next Monday morning from 9 to 11."
API call: { "tool_name": "create_calendar_event", "parameters": { "title": "Focus Session", "start_time": "YYYY-MM-DDT09:00:00", "end_time": "YYYY-MM-DDT11:00:00" } }
User request: {{user_actual_query}}
API call:
LLM随后会尝试遵循示例中显示的模式来处理{{user_actual_query}}。
优点:
注意事项:
以下图表阐明了将自然语言查询转换为结构化API调用的一般过程。
该图表显示了一个自然语言查询由映射引擎处理,该引擎可以采用一个或多个所描述的方法,以生成一个准备执行的结构化API调用。
无论您选择何种方法,有几个因素对于成功的自然语言到API调用映射都很重要:
YYYY-MM-DD)、是否必需或可选,以及每个参数代表什么的清晰描述。对于enum类型,列出所有可能的值。这是LLM构建其理解的依据。最终,将自然语言转换为API调用需要找到恰当的平衡点。您希望发挥LLM的灵活性和理解能力,同时保持可靠API交互所需的精确性和控制。方法的选择将取决于您API的复杂性、期望的可靠性水平以及可用的开发资源。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造