微信扫码
添加专属顾问
我要投稿
探索LangChain智能体如何实现自定义工具集成与应用。 核心内容: 1. LangChain安装与环境配置指南 2. 从Python函数创建自定义工具的步骤 3. 工具链(Chains)的构建与应用实例
在这篇文章中,我们将基于 LangChain 官方文档,详细介绍如何使用 LangChain 创建自定义工具,并在链(Chains)和智能体(Agents)中使用。
首先,通过以下命令安装 LangChain:
pip install --upgrade --quiet langchain
注释:此命令会升级或安装 LangChain 包,--quiet 参数用于抑制不必要的输出。
如果你希望追踪运行过程,可以设置环境变量开启 LangSmith:
import getpassimport osos.environ["LANGCHAIN_TRACING_V2"] = "true"os.environ["LANGCHAIN_API_KEY"] = getpass.getpass("Enter your API key: ")
注释:这里我们使用了 getpass 库来安全地获取 API 密钥,确保不会在命令行中泄露。
LangChain 允许你从 Python 函数创建自定义工具。以下是一个简单的乘法工具示例:
from langchain_core.tools import tooldef multiply(first: int, second: int) -> int:"将两个整数相乘。"return first * second# 打印工具的名称、描述和参数print("Tool Name:", multiply.name)print("Tool Description:", multiply.description)print("Tool Arguments:", multiply.args)
注释:我们定义了一个 multiply 函数,并使用 @tool 装饰器将其转换为 LangChain 工具。然后,我们打印出工具的相关信息,以便用户了解其用法。
Tool Name: multiplyTool Description: multiply(first: int, second: int) -> int - Multiply two integers together.Tool Arguments: {'first': {'title': 'First', 'type': 'integer'}, 'second': {'title': 'Second', 'type': 'integer'}}链允许你预定义一系列工具的使用顺序。
下面是一个简单的示例,展示如何创建一个支持乘法计算的链:
使用 LLM 与工具结合的一种方法是通过工具调用 API。这需要模型支持工具调用,具体支持情况可以查看 官方文档。
首先,我们需要定义模型和工具:
import getpassimport osfrom langchain_openai import ChatOpenAIos.environ["OPENAI_API_KEY"] = getpass.getpass("Enter your OpenAI API key: ")llm = ChatOpenAI(model="gpt-3.5-turbo")
注释:我们设置了 OpenAI API 密钥,并初始化了一个 ChatOpenAI 对象。
我们使用 bind_tools 方法将工具的定义作为模型调用的一部分传递:
llm_with_tools = llm.bind_tools([multiply])
注释:这样,模型就可以在适当的时候调用 multiply 工具了。
当模型调用工具时,相关信息会显示在输出的 AIMessage.tool_calls 属性中:
msg = llm_with_tools.invoke("3 乘以 5 等于多少?")print("Tool Call:", msg)注释:这里我们调用了模型,并打印出了工具调用的详细信息。
Tool Call: content='' additional_kwargs={'tool_calls': [{'id': 'call_i48IbegPCTX8s2F7dD2G5llX', 'function': {'arguments': '{"first": 3, "second": 5}', 'name': 'multiply'}, 'type': 'function'}, {'id': 'call_qCws40dvjcEXpdcJLq3yZtIX', 'function': {'arguments': '{"first": 5, "second": 3}', 'name': 'multiply'}, 'type': 'function'}]} response_metadata={'token_usage': {'completion_tokens': 49, 'prompt_tokens': 72, 'total_tokens': 121}, 'model_name': 'gpt-3.5-turbo', 'system_fingerprint': 'fp_c2295e73ad', 'finish_reason': 'tool_calls', 'logprobs': None} id='run-3ee6b1df-60c5-4c80-8851-621b324937da-0' tool_calls=[{'name': 'multiply', 'args': {'first': 3, 'second': 5}, 'id': 'call_i48IbegPCTX8s2F7dD2G5llX'}, {'name': 'multiply', 'args': {'first': 5, 'second': 3}, 'id': 'call_qCws40dvjcEXpdcJLq3yZtIX'}]为了实际调用工具,我们需要将生成的工具参数传递给工具。以下是一个提取和使用工具参数的示例:
from operator import itemgetterchain = llm_with_tools | (lambda x: x.tool_calls[0]["args"]) | multiplyresult = chain.invoke("6 乘以 8 等于多少?")print("Result:", result)
注释:我们创建了一个简单的管道,首先提取工具调用的参数,然后将其传递给 multiply 工具,并打印出最终结果。
Result: 48
智能体允许模型自己决定使用工具的次数和顺序。LangChain 提供了多种内置智能体,适用于不同的用例。
为了测试智能体对多个工具的调用,我们另外创建了两个工具:加法和指数运算。
def add(first_int: int, second_int: int) -> int:"将两个整数相加。"return first_int + second_intdef exponentiate(base: int, exponent: int) -> int:"求底数的幂次方。"return base**exponenttools = [multiply, add, exponentiate]
以下是一个使用智能体调用工具的示例:
from langchain import hubfrom langchain.agents import AgentExecutor, create_openai_tools_agent# 获取并打印智能体提示prompt = hub.pull("hwchase17/openai-tools-agent")prompt.pretty_print()# 构建工具调用智能体agent = create_openai_tools_agent(llm, tools, prompt)# 创建智能体执行器agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)# 使用智能体执行复杂计算output = agent_executor.invoke({"input": "3 的五次方乘以 12 加 3 的和,然后对整个结果求平方"})print("Agent Output:", output)
注释:我们首先获取了一个智能体提示:
================================ System Message ================================You are a helpful assistant============================= Messages Placeholder ============================={chat_history}================================ Human Message ================================={input}============================= Messages Placeholder ============================={agent_scratchpad}
然后,我们创建了一个智能体和智能体执行器,并使用它来执行一个复杂的数学计算。最后,我们打印出了智能体的执行过程和最后的输出结果。
> Entering new AgentExecutor chain...Invoking: `multiply` with `{'first': 3, 'second': 3}`9Invoking: `add` with `{'first_int': 9, 'second_int': 12}`21Invoking: `exponentiate` with `{'base': 21, 'exponent': 2}`441最终结果是 441。> Finished chain.Agent Output: {'input': '3 的五次方乘以 12 加 3 的和,然后对整个结果求平方', 'output': '最终结果是 441。'}
在使用 LangChain 时,可能会遇到一些错误。以下是一些常见的错误处理和调试建议:
检查 API 密钥:确保你的 API 密钥是有效的,并且没有过期。
网络问题:如果你的请求失败,检查你的网络连接是否正常。
参数匹配:确保传递给工具的参数与其定义相匹配。
查看日志:LangChain 的日志可以提供有关错误的详细信息,有助于调试。
查看跟踪信息:如果你启用了 LangSmith,可以查看跟踪信息来了解模型的执行过程。
import dotenvfrom langchain import hubfrom langchain.agents import AgentExecutor, create_openai_tools_agentfrom langchain_core.tools import toolfrom langchain_openai import ChatOpenAIdotenv.load_dotenv()def multiply(first: int, second: int) -> int:"将两个整数相乘。"return first * seconddef add(first_int: int, second_int: int) -> int:"将两个整数相加。"return first_int + second_intdef exponentiate(base: int, exponent: int) -> int:"求底数的幂次方。"return base**exponenttools = [multiply, add, exponentiate]llm = ChatOpenAI(model="gpt-3.5-turbo")llm_with_tools = llm.bind_tools(tools)# 1,使用 chain 调用工具chain = llm_with_tools | (lambda x: x.tool_calls[0]["args"]) | multiplyresult = chain.invoke("6 乘以 8 等于多少?")print("Result:", result)# 2,使用智能体调用工具# 获取并打印智能体提示prompt = hub.pull("hwchase17/openai-tools-agent")print("Agent Prompt:", prompt)# 构建工具调用智能体agent = create_openai_tools_agent(llm, tools, prompt)# 创建智能体执行器agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)# 使用智能体执行复杂计算output = agent_executor.invoke({"input": "3 的五次方乘以 12 加 3 的和,然后对整个结果求平方"})print("Agent Output:", output)
希望本文能帮助你更好地理解和使用 LangChain 中的工具。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-10-23
LangChain V1.0 深度解析:手把手带你跑通全新智能体架构
2025-10-23
LangChain 与 LangGraph 双双发布 1.0:AI 智能体框架迎来里程碑时刻!
2025-10-19
AI 不再“乱跑”:LangChain × LangGraph 打造可控多阶段智能流程
2025-10-15
LangChain对话Manus创始人:顶级AI智能体上下文工程的“满分作业”首次公开
2025-10-09
Langchain回应OpenAI:为什么我们不做拖拉拽工作流
2025-09-21
告别无效检索:我用LangExtract + Milvus升级 RAG 管道的实战复盘
2025-09-19
AI Agent 软件工程关键技术综述
2025-09-13
我为啥现在如此热衷于LangGraph智能体开发
2025-09-13
2025-09-21
2025-10-19
2025-08-19
2025-08-17
2025-07-30
2025-09-19
2025-09-12
2025-08-03
2025-09-06
2025-07-14
2025-07-13
2025-07-05
2025-06-26
2025-06-13
2025-05-21
2025-05-19
2025-05-08