利用LangChain构建智能多工具Agent:从基础到进阶

引言

在大数据和人工智能的时代,我们不再满足于简单的问答系统。借助像LangChain这样的工具,我们可以打造智能的、可交互的Agent,这些Agent不仅可以回答问题,还能自主决定使用何种工具或资源来获取信息。在本文中,我们将探讨如何使用LangChain的AgentExecutor(传统模型)构建一个可与本地数据库和搜索引擎交互的Agent,从而实现更复杂的对话和信息检索。

主要内容

使用语言模型

语言模型本身只能生成文本输出,但通过结合LangChain的功能,我们可以让它们调用工具。我们将使用LLM作为推理引擎,指导其进行动作决策。

创建信息检索器

我们将创建一个Retriever,通过本地索引暴露特定信息给我们的Agent。这一步包含下载网页数据,拆分文档,并将其嵌入向量空间。

使用搜索工具

通过Tavily搜索引擎,我们可以让Agent在线搜索信息。需要注意的是,由于API调用的限制,您可能需要使用API代理服务来保证访问的稳定性。

添加聊天历史

为了提高交互的连续性和智能性,我们将在系统中集成聊天历史记录模块,使Agent能"记住"过去的对话。

调试和追踪

借助LangSmith,我们可以对应用程序进行调试和追踪,观察Agent在运行过程中的决策和调用。

代码示例

以下是一个完整的示例代码,展示了如何定义和运行一个LangChain Agent:

# 安装所需库
!pip install langchain langchain-openai langchain_community

import os
from langchain_openai import ChatOpenAI
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain.tools.retriever import create_retriever_tool
from langchain.agents import create_tool_calling_agent, AgentExecutor

# 配置环境变量
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "<你的API密钥>"

# 定义工具
search = TavilySearchResults(max_results=2)
loader = WebBaseLoader("https://docs.smith.langchain.com/overview")
docs = loader.load()
documents = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200).split_documents(docs)
vector = FAISS.from_documents(documents, OpenAIEmbeddings())
retriever = vector.as_retriever()
retriever_tool = create_retriever_tool(retriever, "langsmith_search", "Search for information about LangSmith.")

# 使用语言模型
model = ChatOpenAI(model="gpt-4")

# 绑定工具
tools = [search, retriever_tool]
model_with_tools = model.bind_tools(tools)

# 创建Agent和Executor
prompt = "You are a helpful assistant"
agent = create_tool_calling_agent(model, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)

# 运行Agent
response = agent_executor.invoke({"input": "What's the weather in SF?"})
print(response['output'])

常见问题和解决方案

  1. API访问问题:若遇到API访问不稳定,可以考虑使用API代理服务。
  2. 工具调用失败:确保提供了正确的API密钥,并检查工具配置是否正确。
  3. 模型响应不符合预期:可以调整Agent的Prompt或切换不同的LLM以优化结果。

总结与进一步学习资源

本文介绍了如何使用LangChain构建一个基础的Agent。对于需要更高自由度和控制的应用场景,我们建议查看LangGraph以及相关的扩展指南:

参考资料

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

—END—

<think>首先,用户的问题是关于LangChain Agent的使用示例或教程。用户引用了几个来源,但系统提示说这些引用仅供参考,我需要参考用户上一次的问题和我的回答。用户上一次的问题没有被提供,所以我只能基于当前的问题和引用来回答。 系统指令要求: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题,保证真实可靠。 - 用户意图是寻找LangChain Agent的使用示例或教程。 用户的问题:"请问Langchain agent 使用示例 教程",意思是询问LangChain Agent的使用示例或教程。 从引用中: - 引用[1]:提到LangChain Agents概念及执行逻辑,并给出演示用例。 - 引用[2]:讨论代理类型和何时使用代理。 - 引用[3]:提供代码示例,使用LangChain Agents执行搜索。 - 引用[4]:关于LangChain Agent的教程学习。 我需要构建一个清晰的回答结构: 1. **介绍LangChain Agent**:简要解释什么是LangChain Agent。 2. **核心概念**:基于引用,解释Agent的执行逻辑和类型。 3. **使用示例**:提供一个代码示例,展示如何使用LangChain Agent。 4. **教程资源**:建议一些学习资源。 5. **生成相关问题**:在末尾添加相关问题。 确保使用中文回答。 步骤: - **引入**:以用户的问题开头,确认意图。 - **解释**:逐步解释LangChain Agent。 - **示例**:提供一个代码块,类似于引用[3]中的示例。 - **引用**:在解释中自然地添加引用标识。 - **相关问题**:在末尾添加相关问题。 代码示例:从引用[3]中,有一个代码示例: ```python from dotenv import load_dotenv from langchain import hub from langchain.agents import AgentExecutor, create_openai_functions_agent, load_tools from langchain.tools.tavily_search import TavilySearchResults from langchain.utilities.tavily_search import TavilySearchAPIWrapper from langchain_openai import ChatOpenAI load_dotenv() def get_function_tools(): search = TavilySearchAPIWrapper() tavily_tool = TavilySearchResults(api_wrapper=search) tools = [tavily_tool] tools.extend(load_tools(['wikipedia'])) return tools def init_action(): llm = ChatOpenAI(model="gpt-4", temperature=0.1) prompt = hub.pull("hwchase17/openai-functions-agent") tools = get_function_tools() agent = create_openai_functions_agent(llm, tools, prompt) agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) agent_executor.invoke({"input": "Who is the owner of Tesla company? Let me know details about owner."}) init_action() ``` 我将基于这个示例,提供一个简化的版本或解释它。 回答结构: 1. **什么是LangChain Agent?** 解释基本概念。 2. **如何使用LangChain Agent?** 描述步骤。 3. **代码示例**:提供一个简单的示例。 4. **教程资源**:推荐一些资源。 5. **相关问题**:生成相关问题。 在末尾添加相关问题。 确保引用标识:在解释时,如果基于引用,添加[^数字]。 例如: - 根据引用[1],LangChain Agent通过智能体执行任务... - 引用[3]中的代码展示了如何初始化Agent... 最终,生成相关问题: - §§相关问题§§ 1. ... 2. ... 3. ...</think>### LangChain Agent 使用示例与教程 LangChain Agent 是一个强大的框架,用于构建基于大语言模型(LLM)的智能代理系统。它允许代理使用外部工具(如搜索引擎、API、数据库)来解决复杂问题。以下是基于您提供的引用和LangChain官方文档的逐步教程与示例,帮助您快速入门。所有内容均使用中文,并确保真实可靠。 --- #### 1. **LangChain Agent 核心概念** LangChain Agent 的核心是**代理执行器(AgentExecutor)**,它通过以下流程工作: - **输入解析**:将用户查询分解为可执行的任务。 - **工具调用**:代理选择合适的工具(如搜索、计算、API调用)处理子任务。 - **结果整合**:将工具输出整合为最终响应[^1]。 代理适用于需要动态决策的场景,例如多源信息检索或复杂推理。引用[2]指出,代理的成本不可预测,但能处理链式工具调用,而简单任务可能更适合直接使用链(Chains)。 --- #### 2. **LangChain Agent 使用示例 以下是一个完整的Python代码示例,基于引用[3]简化而来。它使用**OpenAI函数代理**执行搜索任务,查询特斯拉公司所有者的详细信息。 ```python # 导入必要库(需安装langchain, langchain-openai, python-dotenv) from dotenv import load_dotenv from langchain import hub from langchain.agents import AgentExecutor, create_openai_functions_agent from langchain.tools import Tool from langchain_community.tools.tavily_search import TavilySearchResults from langchain_openai import ChatOpenAI # 加载环境变量(包含OpenAI API密钥) load_dotenv() # 初始化工具:Tavily搜索 + Wikipedia def get_tools(): tavily_tool = TavilySearchResults() # Tavily搜索引擎工具 wikipedia_tool = Tool( name="Wikipedia", func=lambda query: "Wikipedia数据加载中...", # 实际应用中替换为Wikipedia API调用 description="用于查询百科知识" ) return [tavily_tool, wikipedia_tool] # 主函数:执行代理 def run_agent(): llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.1) # 使用GPT-3.5,低成本 prompt = hub.pull("hwchase17/openai-functions-agent") # 预定义提示模板 tools = get_tools() # 创建代理 agent = create_openai_functions_agent(llm, tools, prompt) agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) # 执行查询 result = agent_executor.invoke({"input": "特斯拉公司的所有者是谁?请提供详细信息。"}) print(result["output"]) run_agent() ``` ##### 代码说明: - **工具定义**:`TavilySearchResults` 用于实时网络搜索,`Wikipedia` 工具查询百科知识(示例中简化,实际需集成API)。 - **代理初始化**:`create_openai_functions_agent` 创建基于OpenAI函数的代理,支持动态工具选择。 - **执行流程**:代理解析输入 → 调用工具 → 整合结果 → 输出响应。 - **运行结果**:例如,输入查询后,代理可能输出:*“特斯拉公司的所有者是埃隆·马斯克(Elon Musk),他是CEO和联合创始人...”*[^3]。 --- #### 3. **LangChain Agent 学习教程推荐 - **官方教程**:LangChain文档的[Agents部分](https://python.langchain.com/docs/modules/agents/)提供基础到高级示例。 - **实战课程**:引用[4]提到的教程涵盖RAG(检索增强生成)、向量数据库和代理开发,适合构建对话机器人[^4]。 - **关键学习点**: - **代理类型**:如`Zero-shot ReAct`(单次推理)或`Conversational`(对话式),引用[2]建议根据任务复杂度选择[^2]。 - **优化技巧**:使用`temperature=0.1`减少随机性,添加`verbose=True`调试工具调用过程。 - **成本控制**:简单任务优先使用链(Chains),复杂多工具任务用代理[^2]。 --- #### 4. **常见问题与解决方案** - **问题:代理响应慢?** 解决方案:限制工具数量或使用轻量模型(如`gpt-3.5-turbo`)。 - **问题:工具调用失败?** 解决方案:检查API密钥(通过`.env`文件管理),并确保工具描述清晰(如`description`参数)。 - **进阶应用**:结合Gradio构建交互界面,引用[1]演示了如何用代理集成Gradio Tools[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值