30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度如果你在关注AI Agent开发但还停留在“听说过、没写过”的阶段这篇文章就是为你准备的。LangChain作为当前最主流的AI Agent开发框架其1.0版本标志着AI应用开发从“对话”走向“行动”的范式切换。很多人觉得Agent概念很酷但一动手就卡在“裸调大模型”的思维里不知道如何构建一个能自主决策、调用工具、完成复杂任务的智能体。这篇文章不讲空泛的概念直接带你从零构建一个能自己上网搜索、整理信息并给出答案的“智能研究助手”。我们会拆解LangChain的核心工作机制重点是ReAct循环、工具调用和状态管理这些工程实现并给出可运行的代码和部署验证步骤。无论你是想快速验证一个Agent想法还是计划将Agent集成到生产流程中这里都有你需要的关键信息。1. 核心能力速览在深入代码之前我们先快速了解LangChain作为AI Agent框架的核心能力边界这决定了它适合做什么、不适合做什么。能力项说明项目类型AI Agent应用开发框架核心功能构建具备自主推理Reasoning与行动Acting能力的智能体支持工具调用、状态管理、多轮对话。核心机制ReAct循环模型推理Thought→ 决定行动Action→ 执行工具 → 观察结果Observation→ 继续推理循环直至任务完成。硬件门槛无特定要求。LangChain是框架计算资源消耗取决于底层连接的LLM如OpenAI API、本地部署的Ollama/Qwen等。本地部署大模型才需关注GPU/显存。启动/部署方式通过Python包pip install langchain集成到你的应用中或作为服务的一部分运行。它本身不是一个需要“启动”的独立服务而是你代码库的一部分。接口能力提供高级API如create_agent快速构建Agent也提供底层组件LLM、Tools、Memory供深度定制。可与FastAPI等Web框架轻松集成对外提供HTTP API。批量任务支持支持。可以通过脚本、队列如Celery或异步编程模式并发或串行处理多个Agent任务。生产级特性通过LangGraph支持复杂工作流编排、持久化状态管理通过LangSmith提供可观测性Trace追踪、监控、调试。适合场景1. 快速原型验证研究助手、客服机器人、自动化流程。2. 生产级复杂、长时程Long-Horizon任务自动化。3. 需要集成多种工具搜索、数据库、API的AI应用。不适合场景1. 仅需单轮问答的简单聊天场景直接调用大模型API更简单。2. 对延迟和成本极度敏感的超轻量级任务。简单来说LangChain解决的核心问题是当任务无法通过一次LLM调用完成需要模型自己决定“下一步做什么”并调用外部工具时提供一个标准化、可观测、易维护的工程框架。2. 适用场景与使用边界理解了LangChain能做什么更要清楚它应该在什么边界内使用。适用场景信息检索与整合如本文将要构建的“智能研究助手”自动搜索、阅读、总结多个信息来源。自动化工作流自动处理邮件、生成报告、数据录入、跨系统审批等重复性流程。智能客服与导购不仅能回答问题还能执行查订单、退换货、推荐商品等操作。代码生成与运维理解需求后自动编写代码片段、执行SQL查询、检查日志、重启服务。个性化内容创作根据用户偏好自动搜集素材、撰写文章、生成图片或视频脚本。使用边界与合规提醒工具授权与安全Agent调用的工具如数据库、内部API、第三方服务必须具备合法的访问权限。务必做好权限隔离与审计防止Agent越权操作。数据隐私与合规如果Agent处理用户数据、公司敏感信息必须确保整个流程符合数据安全法规如个人信息保护法。避免让Agent访问未脱敏的隐私数据。内容安全与审核Agent生成的内容文本、代码等需引入人工审核或自动化内容安全过滤机制防止产生有害、偏见或不实信息。成本与资源控制Agent的循环调用可能产生大量LLM API费用和计算资源消耗。必须设置预算限制、调用次数上限max_iterations和超时机制。确定性风险Agent行为具有非确定性同一问题在不同时间可能产生不同执行路径。关键业务流程中如需完全确定性应谨慎引入Agent或将其决策范围限制在非核心环节。核心原则Agent是强大的“数字员工”但你需要为它划定清晰的“工作职责”和“操作手册”并全程监督其工作轨迹。3. 环境准备与前置条件开始动手前确保你的开发环境就绪。LangChain对环境的硬性要求很低重点在于Python环境和网络访问。基础环境清单操作系统Windows 10/11, macOS, Linux (Ubuntu 20.04 推荐)。LangChain是跨平台的。Python版本 3.8 或更高。推荐使用 3.10 或 3.11 以获得最佳兼容性。包管理工具pip(Python自带) 或conda(如果你使用Anaconda)。网络连接需要能访问Python包索引PyPI以下载LangChain。如果你计划使用在线大模型API如OpenAI, Anthropic则需要能访问相应的API服务。代码编辑器VS Code, PyCharm, Jupyter Notebook 等任选。可选但重要的准备大模型访问权限云端API准备一个可用的API Key。例如我们将使用OpenAI GPT-4你需要一个有效的OpenAI账户和API Key。本地模型如果你打算使用本地部署的模型如通过Ollama运行的Qwen、Llama等则需要确保本地模型服务已启动并可访问。外部工具凭证本文示例将使用Tavily搜索引擎API你需要去 Tavily官网 注册并获取一个免费的API Key。虚拟环境强烈推荐为项目创建独立的Python虚拟环境避免包冲突。# 使用 venv (Python 3.3) python -m venv langchain-env # 激活环境 # Windows: .\langchain-env\Scripts\activate # macOS/Linux: source langchain-env/bin/activate4. 安装部署与启动方式LangChain的“启动”就是安装依赖和导入包。我们以构建“智能研究助手”为目标完成环境搭建。第一步安装核心包打开终端确保已在虚拟环境中执行以下命令# 安装LangChain核心库及OpenAI集成 pip install langchain langchain-openai # 安装Tavily Python客户端用于提供搜索工具 pip install tavily-python # 可选安装LangSmith用于可观测性后续高级篇会用到 # pip install langsmith安装过程通常很快取决于网络速度。第二步验证安装创建一个简单的Python脚本test_import.py来验证import langchain import langchain_openai import tavily print(fLangChain version: {langchain.__version__}) print(fLangChain OpenAI version: {langchain_openai.__version__}) print(fTavily version: {tavily.__version__})运行python test_import.py如果没有报错并输出版本号说明安装成功。关于“启动”的说明 与需要docker-compose up或python app.py启动的Web服务不同LangChain Agent是你代码中实例化的一个对象。它的“启动”意味着你成功创建了一个AgentExecutor或调用了create_agent并可以调用其invoke方法。我们将在下一节完成这个“启动”过程。5. 功能测试与效果验证构建你的第一个Agent现在我们进入实战环节用不到50行代码构建一个能自动上网搜索并回答问题的智能研究助手。5.1 项目初始化与密钥配置创建一个新的Python文件例如research_assistant.py。首先配置必要的API密钥。切勿将密钥硬编码在代码中提交到版本控制系统。推荐使用环境变量。# research_assistant.py import os from langchain.agents import create_agent from langchain.tools import tool from langchain_openai import ChatOpenAI from tavily import TavilyClient # 从环境变量读取API密钥 openai_api_key os.getenv(OPENAI_API_KEY) tavily_api_key os.getenv(TAVILY_API_KEY) if not openai_api_key or not tavily_api_key: raise ValueError(请设置 OPENAI_API_KEY 和 TAVILY_API_KEY 环境变量。) # 初始化LLM和Tavily客户端 llm ChatOpenAI(modelgpt-4, api_keyopenai_api_key, temperature0) # temperature0 使输出更确定 tavily_client TavilyClient(api_keytavily_api_key)5.2 定义工具Tool工具是Agent的“手”和“脚”。这里我们定义一个网络搜索工具。# research_assistant.py (续) tool def web_search(query: str) - str: 使用Tavily搜索引擎在互联网上搜索信息。 输入搜索查询词字符串。 输出搜索结果的摘要文本。 try: # 调用Tavily API进行搜索限制返回3条结果 search_result tavily_client.search(queryquery, max_results3, search_depthbasic) # 从结果中提取内容并拼接 contents [result[content] for result in search_result.get(results, [])] return \n\n.join(contents) if contents else 未找到相关信息。 except Exception as e: # 工具调用失败时返回错误信息Agent会将其作为Observation处理 return f搜索工具调用失败{str(e)}tool装饰器是LangChain的关键它将一个普通Python函数注册为Agent可识别和调用的工具。函数的文档字符串非常重要LLM会阅读它来理解工具的功能。5.3 创建并运行Agent使用LangChain 1.0提供的简洁APIcreate_agent来组装智能体。# research_assistant.py (续) # 创建Agent agent create_agent( modelllm, tools[web_search], # 将工具列表传给Agent system_prompt你是一个专业的研究助手。当用户提出问题时你应该优先考虑使用搜索工具获取最新、最准确的信息然后基于这些信息给出清晰、有条理的回答。如果搜索不到相关信息请如实告知。, max_iterations5, # 防止无限循环最多执行5轮思考-行动 verboseTrue, # 设置为True可以在控制台看到详细的ReAct循环过程便于调试 ) # 运行Agent question LangChain 1.0 版本相比之前有哪些主要新特性和改进 print(f用户提问: {question}\n) try: response agent.invoke({ messages: [{role: user, content: question}] }) # 从响应中提取最终的答案 final_answer response[messages][-1].content print(*50) print(Agent最终答案:\n) print(final_answer) print(*50) except Exception as e: print(fAgent运行出错: {e})5.4 执行与效果验证设置环境变量在终端中# Windows (PowerShell) $env:OPENAI_API_KEY你的-openai-api-key $env:TAVILY_API_KEY你的-tavily-api-key # macOS/Linux export OPENAI_API_KEY你的-openai-api-key export TAVILY_API_KEY你的-tavily-api-key运行脚本python research_assistant.py观察输出由于设置了verboseTrue你会在控制台看到类似以下的ReAct循环日志这是理解Agent工作的关键 Entering new AgentExecutor chain... 思考用户想了解LangChain 1.0的新特性。这是一个具体的技术问题我需要最新的信息。我应该使用搜索工具。 行动web_search 行动输入LangChain 1.0 new features improvements 观察[Tavily返回的搜索结果摘要内容关于1.0版本发布、LangGraph集成、新API等] 思考我获得了关于LangChain 1.0新特性的信息。现在可以组织答案了。 最终答案LangChain 1.0 的主要新特性包括1. 与LangGraph深度集成提供更强大的工作流编排... 2. 新的、更简洁的API如create_agent... 3. 增强了对Long-Horizon Agents的支持... 4. 改进的可观测性工具链... Finished chain.最后你会看到整理好的最终答案。成功标准判断功能成功Agent正确识别问题需要搜索调用了web_search工具并基于搜索结果生成了连贯的回答。流程成功你看到了完整的“Thought - Action - Observation - Final Answer”的ReAct循环日志。效果验证答案内容应包含从网络搜索到的关于LangChain 1.0的真实信息而不是模型凭空编造的。如果运行失败请跳转到第8节“常见问题与排查方法”。6. 接口API与批量任务将Agent封装成API服务或处理批量任务是走向实际应用的关键一步。6.1 使用FastAPI构建Agent API服务我们可以用FastAPI快速创建一个HTTP接口接收问题返回Agent的答案。安装FastAPI和Uvicornpip install fastapi uvicorn创建API服务文件agent_api.pyfrom fastapi import FastAPI, HTTPException from pydantic import BaseModel import os from langchain.agents import create_agent from langchain.tools import tool from langchain_openai import ChatOpenAI from tavily import TavilyClient import asyncio app FastAPI(title智能研究助手API) # 定义请求/响应模型 class QuestionRequest(BaseModel): question: str max_iterations: int 5 class AnswerResponse(BaseModel): answer: str status: str # 初始化全局Agent简单示例生产环境需考虑并发和资源 # 注意在生产中你可能需要为每个请求创建独立的Agent实例或使用连接池。 llm ChatOpenAI(modelgpt-4, api_keyos.getenv(OPENAI_API_KEY), temperature0) tavily_client TavilyClient(api_keyos.getenv(TAVILY_API_KEY)) tool def web_search(query: str) - str: 搜索网络信息。 try: result tavily_client.search(queryquery, max_results3) contents [r[content] for r in result.get(results, [])] return \n\n.join(contents) if contents else 未找到相关信息。 except Exception as e: return f搜索失败: {e} # 创建Agent但不立即指定max_iterations在请求中动态设置 _base_agent create_agent( modelllm, tools[web_search], system_prompt你是一个研究助手。, verboseFalse # API服务通常关闭详细日志 ) app.post(/ask, response_modelAnswerResponse) async def ask_question(request: QuestionRequest): 向智能研究助手提问 try: # 为本次请求配置Agent例如设置不同的max_iterations # 注意create_agent返回的agent是可调用对象但配置是创建时固定的。 # 更动态的方案是每次请求都创建一个新的agent但开销较大。 # 这里简化处理使用全局agent。 response await asyncio.to_thread(_base_agent.invoke, { messages: [{role: user, content: request.question}] }) answer response[messages][-1].content return AnswerResponse(answeranswer, statussuccess) except Exception as e: raise HTTPException(status_code500, detailfAgent处理失败: {str(e)}) if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)启动API服务# 确保环境变量已设置 uvicorn agent_api:app --reload --host 0.0.0.0 --port 8000访问http://127.0.0.1:8000/docs可以看到自动生成的API文档并直接测试/ask接口。使用curl测试APIcurl -X POST http://127.0.0.1:8000/ask \ -H Content-Type: application/json \ -d {question: 什么是LangGraph它和LangChain有什么区别}6.2 批量任务处理处理一批问题例如从一个文件读取问题列表让Agent依次回答。创建问题列表文件questions.txtLangChain的主要用途是什么 ReAct模式具体指什么 如何给LangChain Agent添加一个新的自定义工具创建批量处理脚本batch_process.pyimport asyncio import aiohttp import json from typing import List # 假设我们使用上面启动的本地API服务 API_URL http://127.0.0.1:8000/ask async def ask_agent(session: aiohttp.ClientSession, question: str) - str: 异步调用单个问题 payload {question: question, max_iterations: 5} try: async with session.post(API_URL, jsonpayload, timeout60) as response: if response.status 200: data await response.json() return data.get(answer, No answer) else: return fAPI Error: {response.status} except Exception as e: return fRequest Failed: {str(e)} async def process_questions(questions: List[str]): 并发处理多个问题 async with aiohttp.ClientSession() as session: tasks [ask_agent(session, q) for q in questions] answers await asyncio.gather(*tasks, return_exceptionsTrue) for q, a in zip(questions, answers): print(fQ: {q}) print(fA: {a}\n{-*40}) if __name__ __main__: # 从文件读取问题 with open(questions.txt, r, encodingutf-8) as f: questions [line.strip() for line in f if line.strip()] asyncio.run(process_questions(questions))运行批量脚本python batch_process.py这个脚本会并发地向API发送请求高效处理批量任务。注意并发数过高可能导致API过载或触发速率限制生产环境需要加入队列如Redis Celery和速率控制。7. 资源占用与性能观察LangChain框架本身是轻量级的资源消耗的瓶颈在于大模型调用和工具执行。LLM API调用成本与延迟成本Agent的每次“思考”LLM调用和最终答案生成都会消耗Token。ReAct循环意味着一次用户查询可能触发多次LLM调用成本是单次问答的数倍。使用verboseTrue观察循环次数估算成本。延迟总耗时 ∑(每次LLM调用延迟 每次工具执行延迟)。网络搜索、数据库查询等I/O密集型工具会显著增加延迟。本地模型部署的资源占用如果你使用Ollama等工具本地运行模型如Qwen、Llama则需要关注GPU显存由加载的模型大小决定。例如7B参数的模型量化后可能需要4-8GB显存。内存模型加载和推理会占用大量RAM。CPU如果使用CPU推理负载会很高。观察命令Linux/macOS: 使用nvidia-smi(GPU) 或htop(CPU/内存)。Windows: 使用任务管理器性能选项卡。优化性能的实用技巧设置max_iterations这是防止成本失控和长时间挂起的最重要参数。根据任务复杂度合理设置如3-10次。优化工具性能让工具函数尽可能高效。例如对数据库查询做索引优化对网络请求设置超时和重试。使用更快的模型在原型阶段可以使用速度更快、成本更低的模型如gpt-3.5-turbo上线前再换用更强大的模型。异步调用如果工具支持异步如aiohttp使用异步Agentcreate_react_agent的异步版本可以大幅提升吞吐量。缓存对重复的、结果不变的查询如“今天的天气”在短时间内可以在工具层或LLM调用层引入缓存。核心观察点监控Agent的平均循环次数和工具调用成功率。这两个指标直接决定用户体验和运行成本。8. 常见问题与排查方法在开发和运行LangChain Agent时你可能会遇到以下典型问题。问题现象可能原因排查方式解决方案ModuleNotFoundError: No module named langchainLangChain未安装或不在当前Python环境。在终端执行 pip listgrep langchain。AuthenticationError或Invalid API KeyOpenAI或Tavily的API密钥未设置或错误。1. 检查代码中密钥读取逻辑。2. 在终端执行echo $OPENAI_API_KEY(Linux/macOS) 或echo %OPENAI_API_KEY%(Windows) 验证环境变量。1. 重新申请并设置正确的API密钥。2. 确保运行脚本的环境中有这些环境变量。Agent陷入无限循环不输出最终答案1.max_iterations设置过大或未设置。2. LLM无法从工具返回的结果中推断出任务已完成。3. 系统提示词system_prompt未明确指示何时结束。查看verboseTrue的日志观察Thought过程是否在重复。1. 设置合理的max_iterations(如5)。2. 优化系统提示词明确告诉Agent“在获得足够信息后给出最终答案”。3. 在工具描述中说明返回信息的格式便于LLM理解。工具调用失败Agent卡住1. 工具函数本身抛出异常。2. 网络超时或第三方服务不可用。3. 工具返回的内容格式让LLM无法解析。1. 在工具函数内部添加try...except并打印日志。2. 检查verbose日志中的Observation是否为错误信息。1. 在工具函数中做好异常处理返回清晰的错误描述字符串。2. 为网络请求添加超时和重试机制。3. 确保工具返回的是纯文本字符串避免复杂对象。RateLimitError(API调用频率超限)短时间内向OpenAI等API发送了过多请求。查看API返回的错误信息。1. 在批量任务中增加延迟 (asyncio.sleep)。2. 使用指数退避策略进行重试。3. 考虑升级API套餐或使用多个API Key轮询。Agent答案质量差、胡言乱语1. LLM温度 (temperature) 参数过高。2. 系统提示词不够清晰。3. 工具返回的信息噪声太大。1. 检查temperature设置建议原型期设为0。2. 审查verbose日志看Agent是否误解了工具结果。1. 将temperature设为0或较低值如0.1。2. 精心设计系统提示词明确角色、职责和输出格式。3. 在工具层对返回信息进行清洗和摘要再交给Agent。如何添加新的自定义工具不熟悉tool装饰器的使用。参考LangChain官方文档关于Tools的部分。1. 使用tool装饰器装饰一个函数。2. 函数必须有清晰的文档字符串docstringLLM靠它理解工具功能。3. 将新工具添加到create_agent的tools列表中。想使用本地模型如Ollama不知道如何配置本地LLM。查看langchain-community中对应模型的集成文档。1. 安装langchain-community。2. 使用ChatOllama或OllamaLLM类。3. 确保Ollama服务在本地运行通常http://localhost:11434。pythonbr from langchain_community.llms import Ollamabr llm Ollama(modelqwen2.5:7b)br9. 最佳实践与使用建议基于上述实战和问题排查总结出以下让Agent更稳定、更可靠的最佳实践。从简单开始逐步复杂化第一步用一个工具如计算器、简单搜索验证Agent基础循环能跑通。第二步增加工具数量和复杂度。第三步引入记忆Memory实现多轮对话。第四步使用LangGraph编排复杂、有状态的工作流。提示词工程是核心系统提示词System Prompt明确Agent的角色、目标、可用工具、输出格式和终止条件。这是Agent行为的“宪法”。工具描述Tool Description函数的文档字符串要精确、简洁说明输入、输出和用途。这是Agent的“工具说明书”。必须设置安全阀max_iterations永远要设置防止无限循环消耗资源。超时控制对Agent整体执行和每个工具调用设置超时。预算限制在调用付费API时监控Token消耗和费用。可观测性不是可选项开发阶段务必开启verboseTrue这是你理解Agent“思考过程”的唯一窗口。对于生产系统集成LangSmith。它能记录每一次LLM调用、工具调用和中间状态是调试、优化和监控的基石。工具设计要健壮工具函数内部要有完善的错误处理try...except返回对LLM友好的错误信息。工具应尽可能保持幂等性多次调用结果相同和无副作用谨慎执行删除、写入等操作。考虑为工具添加输入验证和输出格式化。区分LangChain和LangGraph的使用场景LangChain (create_agent)适合快速构建标准ReAct Agent开箱即用逻辑相对线性。LangGraph当你的工作流需要循环、分支、并行、持久化状态比如一个跨多天的任务时使用。它提供了更底层的图Graph编排能力。版本与依赖管理LangChain生态迭代很快使用requirements.txt或pyproject.toml精确锁定版本避免依赖冲突。定期关注官方更新新版可能带来性能提升和重要修复。10. 总结与下一步通过这篇文章你已经从“知道AI Agent”走到了“亲手造出一个AI Agent”。我们以构建“智能研究助手”为主线拆解了LangChain的核心工作机制——ReAct循环并完成了从环境搭建、代码编写、功能测试到API封装和批量处理的完整流程。这个Agent虽然简单但已经具备了自主感知理解问题、决策决定搜索、行动调用搜索工具、再决策总结答案的完整智能体特征。你最大的收获不应该是那几十行代码而是理解了“框架如何将不确定的LLM与确定性的工具组合成可完成任务的系统”。接下来你可以做什么丰富工具库给你的Agent加上更多“技能”。比如文件操作工具读取本地文档.txt,.pdf,.docx。数据查询工具连接数据库SQLite, MySQL或API天气、股票。代码执行工具安全地执行Python代码片段进行数据分析或计算。其他AI服务工具调用文生图、语音合成等模型。引入记忆Memory让Agent记住对话历史实现真正的多轮对话。LangChain提供了ConversationBufferMemory、ConversationSummaryMemory等多种记忆组件。尝试LangGraph当你需要处理更复杂的流程比如“先搜索再根据结果写摘要最后发邮件”这种多步骤、有条件分支的工作流时LangGraph是你的下一个台阶。集成到真实应用将你的Agent作为后端服务为你的网站、聊天机器人或内部系统提供智能能力。深入探索可观测性注册LangSmith将你的Agent trace可视化你会发现调试和优化效率有质的提升。AI Agent的开发是一个“设计系统”而非“编写算法”的过程。你的角色从“告诉计算机每一步怎么做”的指挥官变成了“为数字员工定义目标、提供工具并设定规则”的架构师。现在基于你手头的第一个能跑起来的Agent去尝试解决一个你实际工作中的小问题这才是学习的真正开始。 30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度