LangChain Agent 入门实战:从报错到跑通带记忆的交互式智能体(初学者保姆级教程)
LangChain Agent 入门实战从报错到跑通带记忆的交互式智能体初学者保姆级教程作者风吹夏回适合人群零基础接触 LangChain Agent 的初学者全程附可运行代码 踩坑解决方案写在前面大家好我是风吹夏回。今天正式开始学习 LangChain 中的 Agent 智能体从最开始的配置报错、无输出一步步踩坑调试最终跑通了带记忆能力的交互式对话 Agent。这篇文章完全以初学者视角记录整个学习过程所有代码都经过实测可直接运行同时把我踩过的坑全部标注了出来大家跟着抄代码就能复现效果不用再走弯路。本次学习使用的技术栈大模型火山方舟豆包doubao-seed-2.0-lite框架LangChain LangGraph运行环境Python 虚拟环境 Windows 系统一、前置准备环境与依赖先把基础环境搭好建议全程用虚拟环境避免依赖冲突。1. 安装核心依赖包pipinstalllangchain langchain-openai langchain-core langgraph python-dotenv2. 配置 .env 文件在项目根目录新建.env文件填入你的模型配置# 你的火山方舟API密钥 DEEPSEEK_API_KEYark-你的密钥 # 注意必须是标准大模型接口不能用coding接口 DEEPSEEK_BASE_URLhttps://ark.cn-beijing.volces.com/api/v3⚠️ 第一个坑预警火山方舟的api/coding/v3是代码专属接口不支持工具调用Function Calling一定要用/api/v3标准路径否则Agent会没有任何输出。二、第一阶段第一个Agent的诞生最开始我直接照着教程写一运行就报错先带大家把坑踩完再跑通最简版本。踩坑1TavilySearch 密钥缺失报错最开始的代码里加了 Tavily 搜索工具运行直接报 Pydantic 校验错误ValidationError: Did not find tavily_api_key, please add an environment variable TAVILY_API_KEY原因Tavily 是第三方联网搜索工具必须单独注册申请密钥。初学者解决方案先不用第三方工具用自定义的本地工具先把 Agent 主流程跑通获得正反馈最重要。最简可运行 Agent 完整代码我们先实现一个「天气查询工具」让 Agent 自主判断什么时候调用它。fromlangchain.agentsimportcreate_agentfromlangchain_openaiimportChatOpenAIfromlangchain_core.toolsimporttoolfromdotenvimportload_dotenv,find_dotenvimportos# 加载环境变量dotenv_pathfind_dotenv()load_dotenv(dotenv_path,overrideTrue)api_keyos.getenv(DEEPSEEK_API_KEY)base_urlos.getenv(DEEPSEEK_BASE_URL)# 1. 初始化大模型llmChatOpenAI(modeldoubao-seed-2.0-lite,api_keyapi_key,base_urlbase_url,temperature0.7,)# 2. 定义自定义工具天气查询tooldefget_weather(city:str)-str:查询指定城市的实时天气情况输入为城市名称如北京、上海returnf{city}今日天气晴转多云24-31℃东南风2级# 工具列表tools[get_weather]# 3. 创建 Agentagentcreate_agent(modelllm,toolstools,system_prompt你是一个智能助手请根据用户的需求调用合适的工具来帮助他们。,)if__name____main__:print(开始测试Agent...)# 一次性调用查看完整执行链路resultagent.invoke({messages:[{role:user,content:北京今天天气怎么样}]})print(\n 完整执行链路 )formsginresult[messages]:print(f[{msg.type}]:{msg.content})ifhasattr(msg,tool_calls)andmsg.tool_calls:print(f 工具调用:{msg.tool_calls})运行后你会看到输出会清晰展示 Agent 的完整工作循环user用户提问ai模型推理决定调用get_weather工具参数为北京tool工具执行返回天气结果ai模型根据工具结果生成自然语言最终回答这就是 Agent 最核心的「感知→推理→行动→回复」循环全程没有我们手动控制流程完全是模型自主决策。三、第二阶段给Agent加上记忆跑通基础版后你会发现每次调用都是“失忆”的上一轮说过的话下一轮就忘了。这显然不符合真实使用场景接下来我们给 Agent 加上记忆能力。核心概念Checkpointer记忆存储器自动保存每一轮的对话消息Thread ID会话标识同一个ID对应同一份记忆不同ID完全隔离用来区分不同用户带记忆的 Agent 完整代码只需要在之前的代码上新增3行核心代码即可fromlangchain.agentsimportcreate_agentfromlangchain_openaiimportChatOpenAIfromlangchain_core.toolsimporttoolfromdotenvimportload_dotenv,find_dotenvimportos# 新增导入内存存储器fromlanggraph.checkpoint.memoryimportInMemorySaver dotenv_pathfind_dotenv()load_dotenv(dotenv_path,overrideTrue)api_keyos.getenv(DEEPSEEK_API_KEY)base_urlos.getenv(DEEPSEEK_BASE_URL)llmChatOpenAI(modeldoubao-seed-2.0-lite,api_keyapi_key,base_urlbase_url,temperature0.7,)tooldefget_weather(city:str)-str:查询指定城市的实时天气情况输入为城市名称如北京、上海returnf{city}今日天气晴转多云24-31℃东南风2级tools[get_weather]# 新增创建记忆存储器checkpointerInMemorySaver()agentcreate_agent(modelllm,toolstools,system_prompt你是一个智能助手请根据用户的需求调用合适的工具来帮助他们。,# 新增传入记忆存储器checkpointercheckpointer,)if__name____main__:# 同一个 thread_id 代表同一场对话config{configurable:{thread_id:user_001}}print(*50)print(第1轮对话)print(*50)result1agent.invoke({messages:[{role:user,content:你好我叫小明在北京}]},configconfig)print(AI回复,result1[messages][-1].content)print(\n*50)print(第2轮对话相同thread_id有记忆)print(*50)result2agent.invoke({messages:[{role:user,content:我叫什么名字我所在的城市今天天气怎么样}]},configconfig)print(AI回复,result2[messages][-1].content)print(\n*50)print(第3轮对话换thread_id无记忆)print(*50)result3agent.invoke({messages:[{role:user,content:我叫什么名字}]},config{configurable:{thread_id:user_002}})print(AI回复,result3[messages][-1].content)效果验证第2轮Agent能准确说出你的名字并且自动调用天气工具查询北京天气 → 记忆生效第3轮更换 Thread ID 后Agent表示不知道你的名字 → 会话完全隔离 小提示InMemorySaver是内存存储程序重启后记忆会清空适合开发调试。生产环境可以换成SqliteSaver、RedisSaver做持久化存储。四、第三阶段升级交互式对话到这里功能都跑通了但每次都要改代码输入问题太麻烦。我们把它改造成实时聊天模式像跟微信聊天一样和 Agent 对话体验感直接拉满。交互式对话完整代码输入退出、exit即可结束程序全程保留记忆还能看到 Agent 的思考和工具调用过程。fromlangchain.agentsimportcreate_agentfromlangchain_openaiimportChatOpenAIfromlangchain_core.toolsimporttoolfromdotenvimportload_dotenv,find_dotenvimportosfromlanggraph.checkpoint.memoryimportInMemorySaver# 加载环境变量dotenv_pathfind_dotenv()load_dotenv(dotenv_path,overrideTrue)api_keyos.getenv(DEEPSEEK_API_KEY)base_urlos.getenv(DEEPSEEK_BASE_URL)# 初始化大模型llmChatOpenAI(modeldoubao-seed-2.0-lite,api_keyapi_key,base_urlbase_url,temperature0.7,)# 自定义工具tooldefget_weather(city:str)-str:查询指定城市的实时天气情况输入为城市名称如北京、上海returnf{city}今日天气晴转多云24-31℃东南风2级tools[get_weather]# 记忆配置固定会话ID全程保留记忆checkpointerInMemorySaver()config{configurable:{thread_id:chat_session_001}}# 创建 Agentagentcreate_agent(modelllm,toolstools,system_prompt你是一个智能助手请根据用户的需求调用合适的工具来帮助他们。,checkpointercheckpointer,)# 交互式对话主程序if__name____main__:print(*60)print( Agent 交互式对话已启动)print( 输入问题即可对话输入 退出/exit/quit 结束)print(*60\n)whileTrue:# 获取用户输入user_inputinput( 你).strip()# 退出判断ifuser_input.lower()in[退出,exit,quit]:print(\n 对话已结束再见)break# 空输入跳过ifnotuser_input:continueprint(-*60)# 流式执行展示完整过程forstep_index,stepinenumerate(agent.stream({messages:[{role:user,content:user_input}]},configconfig),start1):# 兼容不同版本的返回结构messagesstep.get(messages,[])ifnotmessages:forkeyinstep:ifisinstance(step[key],dict)andmessagesinstep[key]:messagesstep[key][messages]breakifnotmessages:continuelast_msgmessages[-1]# 模型决定调用工具iflast_msg.typeaiandlast_msg.tool_calls:print(f [思考中] 决定调用工具)fortool_callinlast_msg.tool_calls:print(f └─ 工具{tool_call[name]}参数{tool_call[args]})# 工具执行返回结果eliflast_msg.typetool:print(f [工具执行] 返回结果{last_msg.content})# 最终回复eliflast_msg.typeaiandnotlast_msg.tool_calls:print(f\n Agent{last_msg.content})print(-*60\n)推荐体验流程大家可以按这个顺序测试完整感受记忆 工具调用的能力第一轮输入我叫小明我在长沙第二轮输入我叫什么名字第三轮输入我所在的城市今天天气怎么样第四轮输入刚才我们聊了什么五、今天踩过的坑总结作为初学者这几个坑非常容易踩特意整理出来帮大家避坑报错/问题原因解决方案TavilySearch 报 value_error 缺少密钥没有配置 Tavily 的 API Key初学者先移除第三方工具用自定义工具先跑通主流程程序正常退出但没有任何输出用了 coding 专属接口不支持工具调用把 base_url 改成标准路径/api/v3记忆不生效调用时没传 config 和 thread_id每次 invoke/stream 都必须传入带 thread_id 的 config流式输出什么都不打印返回结构和判断条件不匹配先打印原始 step 的键名再适配结构六、下一步学习规划今天把 Agent 的核心基础都跑通了接下来的学习路线消息压缩中间件解决长对话 Token 膨胀的问题人工审核中间件给高风险操作加上人类确认环节MCP 协议标准化接入第三方工具服务综合项目做一个完整的智能客服 Agent后续我会继续更新学习笔记把每一步的实战代码和踩坑记录都分享出来。最后作为初学者学习 Agent 不用一开始就堆很多功能先跑通最小 Demo理解核心的「自主决策循环」再一步步加能力是最稳妥的学习方式。如果这篇文章对你有帮助欢迎点赞收藏~ 有问题也可以在评论区交流我们一起进步

相关新闻

艺术品展示与交易平台设计与实现开题报告

艺术品展示与交易平台设计与实现开题报告

一、课题研究背景 随着我国文化产业数字化战略的持续推进,文化艺术行业与互联网技术的融合程度不断加深,线上文化消费、艺术品线上交易逐渐成为行业发展新趋势。传统艺术品流通模式长期依赖线下画廊、艺术展馆、实体拍卖会等渠道,整体运营模式…

2026/7/9 2:14:45阅读更多 →
模拟来电工具 FakeCall,调用系统拨号器以假乱真!下载

模拟来电工具 FakeCall,调用系统拨号器以假乱真!下载

开会开到一半想溜,掏出手机”刚好老板来电”——这种桥段大家都演过,但拿着手机假装接电话属实太low了。FakeCall这个开源工具走的是另一条路:它不画假界面,而是直接往Android系统的Telecom框架里塞一个电话账户,让你手…

2026/7/9 2:14:45阅读更多 →
Kotlin Multiplatform day05

Kotlin Multiplatform day05

// // 第 5 课:Lambda、高阶函数、集合链式、接口 // fun main() {// 一、Lambda:把“一段代码”当作值 // 普通变量存的是数据(数字/字符串),lambda 让变量能存“一段可执行的逻辑”。// 语法:{ 参数 -> 逻辑 }val square …

2026/7/9 2:14:45阅读更多 →
系统集成项目工程师备考复盘

系统集成项目工程师备考复盘

备考系统集成项目管理工程师这段时间,整理了一套完整复习素材,包含教材重点笔记、历年真题、案例答题模板、计算题速记手册,适配零基础短周期冲刺。 之前备考踩了不少弯路,零散资料翻找效率很低,索性整合归档一份完整包…

2026/7/9 5:20:05阅读更多 →
终极CS2存储单元管理指南:如何用CASEMOVE智能批量转移物品

终极CS2存储单元管理指南:如何用CASEMOVE智能批量转移物品

终极CS2存储单元管理指南:如何用CASEMOVE智能批量转移物品 【免费下载链接】casemove A dedicated desktop app that enables you to move items in and out of storage units in CS2. 项目地址: https://gitcode.com/gh_mirrors/ca/casemove CASEMOVE是一款…

2026/7/9 5:20:05阅读更多 →
Kimi K2 vs DeepSeek V3:从Tokenizer设计、MoE结构、KV Cache优化到国产芯片适配,深度拆解底层架构差异(含HuggingFace源码级注释)

Kimi K2 vs DeepSeek V3:从Tokenizer设计、MoE结构、KV Cache优化到国产芯片适配,深度拆解底层架构差异(含HuggingFace源码级注释)

更多请点击: https://codechina.net 第一章:Kimi K2 vs DeepSeek V3:架构对比全景图 Kimi K2 与 DeepSeek V3 作为当前大语言模型领域具有代表性的闭源与开源旗舰模型,其底层架构设计哲学存在显著差异。前者采用深度定制的稀疏混…

2026/7/9 5:20:05阅读更多 →
【紧急补丁】Claude默认Commit配置存在安全泄露风险!立即启用这6项强制元数据脱敏策略

【紧急补丁】Claude默认Commit配置存在安全泄露风险!立即启用这6项强制元数据脱敏策略

更多请点击: https://intelliparadigm.com 第一章:Claude Code Commit信息生成的安全隐患本质 Claude 在辅助生成 Git commit message 时,若直接基于未经校验的代码变更内容(尤其是含敏感逻辑或凭证片段的 diff)进行…

2026/7/9 5:20:05阅读更多 →
TEA加密算法在协议逆向与本地化查询工具中的实践

TEA加密算法在协议逆向与本地化查询工具中的实践

1. 项目概述:当手机号遇上QQ号,一次逆向工程与数据安全的实践最近在技术社区里,总能看到有人问“怎么通过手机号查QQ号”,或者“有没有靠谱的查询工具”。这背后反映的,其实是一个挺有意思的技术交叉点:一方…

2026/7/9 5:20:05阅读更多 →
自动驾驶视觉感知算法演进:从Faster R-CNN到DETR的5个关键节点

自动驾驶视觉感知算法演进:从Faster R-CNN到DETR的5个关键节点

自动驾驶视觉感知算法的五大技术革命:从卷积神经网络到Transformer的范式跃迁在自动驾驶技术发展的历史长卷中,视觉感知算法的演进犹如一场静默的革命。从早期依赖手工特征的检测方法,到如今基于深度学习的端到端系统,每一次技术突…

2026/7/9 5:15:04阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/8 5:12:14阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/8 7:00:12阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/9 2:47:07阅读更多 →
Three.js 着色器光效教程

Three.js 着色器光效教程

着色器光效 Shader Light ▶ 在线运行案例 案例合集: 三维可视化功能案例(threehub.cn)开源仓库github地址: https://github.com/z2586300277/three-cesium-examples400个案例代码: 网盘链接 你将学到什么 ShaderMaterial 自…

2026/7/9 0:04:37阅读更多 →
如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南

如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南

如何5分钟掌握CS2智能库存管理:开源工具CASEMOVE终极指南 【免费下载链接】casemove A dedicated desktop app that enables you to move items in and out of storage units in CS2. 项目地址: https://gitcode.com/gh_mirrors/ca/casemove 还在为CS2存储单…

2026/7/9 0:04:37阅读更多 →
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比

GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比

GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M…

2026/7/9 0:04:37阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/8 6:59:54阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/8 13:42:39阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/8 13:42:39阅读更多 →