LangChain: 从 LLM 调用到 Agent 架构
一、为什么要用 LangChain自从 OpenAI 推出 ChatGPT 之后大模型能力迅速普及。越来越多的开发者开始将 LLM 接入业务系统但很快会遇到三个现实问题1、模型接口不统一 —— 今天用 OpenAI明天换国内模型代码要大改2、Prompt 难管理 —— 提示词到处拼字符串无法版本控制3、业务流程复杂 —— RAG、Agent、多工具调用全是胶水代码这时候LangChain 就登场了。LangChain 本质是一套 “面向大模型应用开发的工程化框架”它把模型调用、Prompt 管理、知识检索、流程编排、Agent 调度全部抽象成可组合模块让你像搭积木一样构建 AI 应用。二、LangChain 架构全景LangChain 可以理解为五大核心能力层记住一句话LangChain LLM 调用标准化 RAG 工程化 Agent 自动化三、模型封装统一不同大模型接口LangChain 最大的优势之一是统一模型接口。你可以在不修改业务逻辑的前提下在不同模型之间切换1、OpenAI GPT 系列2、Anthropic Claude3、国内文心一言4、本地模型Ollama / Llama你只需要更换模型初始化方式其余调用方式一致。这在企业级项目里极其重要 —— 模型可替换性 风险可控性。四、Prompt 工程把提示词变成函数很多开发者刚开始接触 LLM 时喜欢直接写f给我讲一个关于{topic}的笑话问题是Prompt 无法版本管理逻辑和提示词耦合难以团队协作优化LangChain 提供 PromptTemplate 和 ChatPromptTemplate支持变量占位支持多角色system / user / assistant支持文件加载支持 Few-shot 示例最佳实践是Prompt 与代码彻底解耦单独维护。在中大型 AI 项目中Prompt 甚至应该像 SQL 一样被当作核心资产管理。五、RAG给大模型注入私有知识很多人说“模型不准”其实问题不在模型而在没有给模型知识。RAGRetrieval Augmented Generation就是解决方案。LangChain 的 RAG 流程通常包括1、文档加载PDF / Word / 网页 / 数据库2、文本切分3、向量化4、存入向量数据库如 FAISS5、检索 生成回答在这里LangChain 和 LlamaIndex 经常被拿来对比。简单总结LangChain 强在流程编排 AgentLlamaIndex 强在数据索引能力很多项目会用 LlamaIndex 做数据层用 LangChain 做应用层六、LCELLangChain 的灵魂如果说 LangChain 是一套大模型应用框架那么 LCELLangChain Expression Language 就是它的核心编排能力。很多人学 LangChain 只关注模型调用和 RAG但真正决定工程质量的是 LCEL。6.1 为什么需要 LCEL假设我们要做一个最简单的流程1、接收用户输入2、构造 Prompt3、调用 LLM4、解析输出传统写法是“按步骤调用函数”。而 LCEL 的思路是用“管道”把各个组件连接起来描述数据如何流动。6.2 LCEL 的核心写法在 LCEL 里Prompt 是一个可运行组件LLM 是一个可运行组件Parser 也是一个可运行组件它们都实现了统一接口所以可以用 | 连接chainprompt|llm|StrOutputParser()调用时chain.invoke({topic:程序员})这行代码的含义非常清晰输入 → Prompt → LLM → 解析输出比传统“手动 format invoke parse”逻辑更直观、结构更干净。6.3 LCEL 的优势在哪里1.自动支持流式输出同一条链可以直接流式执行forchunkinchain.stream(input): print(chunk)无需改内部逻辑。2.自动支持异步同步调用chain.invoke()异步调用await chain.ainvoke()流程不需要重写。3.自动并行执行在 RAG 场景中如果有多个 Retriever{context1:retriever1,context2:retriever2,question:RunnablePassthrough()}|prompt|llmretriever1 和 retriever2 会自动并行执行。不需要写 asyncio也不需要手动调度。6.4 一句话理解 LCEL普通写法是按顺序写函数调用LCEL 写法是声明一条数据流管道它把“步骤式代码”升级为“数据流架构”。这也是为什么说LCEL 是 LangChain 的灵魂。小结1、如果你只是调用模型你只是“在用 API”。2、如果你掌握 LCEL你是在“设计 AI 工作流”。3、建议所有做 RAG 或 Agent 的开发者都优先用 LCEL 组织流程。4、它会让你的代码更清晰、更可维护也更适合生产环境。七、对话历史管理控制 Token 成本真实业务中多轮对话会带来一个问题上下文越来越长 → Token 成本暴涨LangChain 提供历史裁剪保留最近消息类型过滤只保留 human持久化存储SQL / Redis在企业场景里这一点非常关键控制成本避免超过模型上下文长度保证系统稳定性八、Agent让模型自己思考与行动如果说 RAG 是“查资料回答问题”那么 Agent 是给一个目标让模型自己规划步骤。最经典的是 ReAct 模式思考 → 行动 → 观察 → 再思考 → 输出结果举个例子问2024年某明星演唱会是星期几模型会1、搜索日期2、解析日期3、调用“星期计算工具”4、输出答案整个过程自动完成。这就是 Agent 的价值 —— 让模型具备“任务执行能力”。九、LangServe快速部署 API当你构建好一个 LCEL 流程后LangChain 提供 LangServe可以一行代码生成 REST API。你不需要写路由、序列化、异常处理逻辑。直接部署成可调用服务。在微服务架构下这非常适合快速构建 AI 中台。十、文档功能模块https://python.langchain.com/docs/get_started/introductionAPI 文档https://api.python.langchain.com/en/latest/langchain_api_reference.html三方组件集成https://python.langchain.com/docs/integrations/platforms/官方应用案例https://python.langchain.com/docs/use_cases调试部署等指导https://python.langchain.com/docs/guides/debugging十一、LangChain 适合什么场景企业知识库问答系统AI 客服系统智能文档助手代码生成平台多工具自动执行系统内部数据分析 Agent不适合只做简单聊天直接调用 API 更轻量极端高性能推理系统需自定义架构十二、企业级最佳实践结合实际项目经验总结几点1.Prompt 必须独立管理不要写死在代码里。2.RAG 参数要反复调优chunk_size、overlap 直接影响效果。3.尽量使用 LCEL不要回到命令式“胶水代码”。4.严格做日志追踪生产环境一定接入 LangSmith。5.版本锁定LangChain 更新快升级前一定看 breaking change。十三、总结LangChain 并不是“又一个 AI 库”。它是一次面向大模型时代的软件工程抽象升级。它告诉我们三件事1、把 Prompt 当函数2、把流程当管道3、把模型当可调度执行器理解这三点比会写 API 更重要。如果你准备入门 AI 工程化开发建议路线1、先做一个 RAG 问答系统2、加入对话历史管理3、用 LCEL 重构流程4、最后引入 Agent 能力当你走完这条路径你对大模型应用开发的理解会完全不同。LangChain RAG 示例LangChain RAG 示例源码fromdotenvimportload_dotenvimportosimportrequests# Load environment variables from .env fileload_dotenv()fromqdrant_clientimportQdrantClientfromqdrant_client.modelsimportVectorParams,Distancefromlangchain_community.document_loadersimportPyMuPDFLoaderfromlangchain_text_splittersimportRecursiveCharacterTextSplitterfromlangchain_huggingfaceimportHuggingFaceEmbeddingsfromlangchain_qdrantimportQdrantVectorStorefromlangchain_core.documentsimportDocument EMBEDDING_DIM384# all-MiniLM-L6-v2 模型的维度COLLECTION_NAMElangchain_demoPATH./qdrant_db_langchain# 设置 Tarvos API key 和 URL从环境变量读取TARVOS_API_KEYos.getenv(TARVOS_API_KEY)TARVOS_API_URLos.getenv(TARVOS_API_URL)TARVOS_MODELos.getenv(TARVOS_MODEL,meta-llama/Llama-3.3-70B-Instruct)# 1. 加载本地 embedding 模型print(正在加载本地 embedding 模型...)embeddingsHuggingFaceEmbeddings(model_namesentence-transformers/all-MiniLM-L6-v2)# 2. 加载 ./data 目录下所有 PDF 文档print(正在加载文档...)importglob pdf_filesglob.glob(./data/*.pdf)ifnotpdf_files:raiseValueError(./data 目录下没有找到 PDF 文件请先添加 PDF 文件)all_documents[]forpdf_pathinpdf_files:loaderPyMuPDFLoader(pdf_path)docsloader.load()all_documents.extend(docs)print(f共加载{len(all_documents)}页文档)# 3. 文档切片chunk_size300, chunk_overlap100与 llamaIndex.py 一致print(正在切片文档...)text_splitterRecursiveCharacterTextSplitter(chunk_size300,chunk_overlap100)chunkstext_splitter.split_documents(all_documents)print(f共切分为{len(chunks)}个块)# 4. 创建 Qdrant Collectionprint(正在创建向量数据库...)qdrant_clientQdrantClient(pathPATH)ifqdrant_client.collection_exists(collection_nameCOLLECTION_NAME):qdrant_client.delete_collection(collection_nameCOLLECTION_NAME)qdrant_client.create_collection(collection_nameCOLLECTION_NAME,vectors_configVectorParams(sizeEMBEDDING_DIM,distanceDistance.COSINE))# 5. 将文档向量存入 Qdrantprint(正在创建索引...)vector_storeQdrantVectorStore(clientqdrant_client,collection_nameCOLLECTION_NAME,embeddingembeddings)vector_store.add_documents(chunks)# 6. 创建检索器retrievervector_store.as_retriever(search_kwargs{k:3})# 7. Tarvos API 问答函数与 llamaIndex.py 完全一致defask_tarvos(question,context):headers{Content-Type:application/json,Authorization:TARVOS_API_KEY,}body{model:TARVOS_MODEL,messages:[{role:system,content:你是一个专业的AI助手请根据提供的检索内容回答用户问题。如果检索内容与问题无关请说明无法回答。},{role:user,content:f参考内容\n{context}\n\n问题{question}}]}try:resprequests.post(TARVOS_API_URL,jsonbody,headersheaders,timeout60)returnresp.json()[choices][0][message][content]exceptExceptionase:returnf调用 Tarvos API 失败:{str(e)}# 8. 主对话循环print(\n✅ 系统就绪开始对话输入空行退出\n)whileTrue:questioninput(User: )ifquestion.strip():break# 检索 top-k 文档docsretriever.invoke(question)context\n\n.join([doc.page_contentfordocindocs])# 调用 Tarvos API 生成答案answerask_tarvos(question,context)print(fAI:{answer}\n)

相关新闻

Java毕设项目推荐-基于python+深度学习的家庭用电量预测模型研究【附源码+文档,调试定制服务】

Java毕设项目推荐-基于python+深度学习的家庭用电量预测模型研究【附源码+文档,调试定制服务】

java毕业设计-基于springboot的(源码LW部署文档全bao远程调试代码讲解等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、…

2026/7/3 12:39:30 阅读更多 →
Spring 全家桶设计模式终极总结

Spring 全家桶设计模式终极总结

总结一个完整的 Spring 生态系统设计模式表格: 🎯 Spring 全家桶设计模式终极总结设计模式一句话核心最佳使用场景Spring/Spring Boot/Spring Cloud 应用企业级最佳组合单例模式一个类只有一个实例,全局唯一访问点1. 配置管理器2. 连接池3. 日…

2026/5/17 7:54:46 阅读更多 →
【2025最新】基于SpringBoot+Vue的Web电子产品销售系统管理系统源码+MyBatis+MySQL

【2025最新】基于SpringBoot+Vue的Web电子产品销售系统管理系统源码+MyBatis+MySQL

摘要 随着互联网技术的快速发展和电子商务的普及,线上电子产品销售已成为现代消费的重要方式。传统的线下销售模式受限于时间和空间,难以满足消费者多样化的需求,而基于Web的销售系统能够提供更便捷的购物体验和高效的管理功能。电子产品市场…

2026/5/17 7:54:46 阅读更多 →

最新新闻

YOLO11视频目标检测实战:从环境配置到高级应用

YOLO11视频目标检测实战:从环境配置到高级应用

1. 项目概述 视频目标检测是计算机视觉领域的重要应用场景,而YOLO系列模型因其出色的实时性能成为该任务的首选方案。本文将基于YOLO11模型,详细讲解如何实现视频文件的逐帧检测,并输出带有检测框的可视化视频。 提示:YOLO11是YO…

2026/7/5 2:16:34 阅读更多 →
程序员就业:2026 年还能靠什么拿到,把工具链跑成稳定流程

程序员就业:2026 年还能靠什么拿到,把工具链跑成稳定流程

聊《程序员就业:2026 年还能靠什么拿到,把工具链跑成稳定流程》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要这篇面向准备找工作、跳槽或转型的程序员,但不会把“程序员就业…

2026/7/5 2:16:34 阅读更多 →
NSK滚珠丝杠W3205SS技术解析

NSK滚珠丝杠W3205SS技术解析

为您详细整理 W3205SS-1Z-C5Z10 滚珠丝杠的参数规格、技术特点及产品应用。 (温馨提示:您查询的型号命名规则属于 NSK(日本精工) 的标准产品,而非 NTN。以下内容基于 NSK 精机综合样本为您详细解读。) 该型号属于 NSK 的 SS 系列&…

2026/7/5 2:14:33 阅读更多 →
自定义布局控件

自定义布局控件

讲到自定义布局控件,我们必须得先谈一下在WPF中自定义控件,在WPF自定义控件你可以选择下图的一些基类作为继承对象,你也可以继承自已有的一些控件,这个就看你的需要了。其实开发WPF自定义控件和开发WinForm、ASP.NET自定义控件基本…

2026/7/5 2:12:33 阅读更多 →
Border

Border

Border 是一个装饰的控件,此控件绘制边框及背景,在 Border 中只能有一个子控件(这个子控件又可以包含多个子控件)。Border 的几个重要属性:Background:用用一个 Brush 对象来绘制背景 ;BorderBrush:用一个B…

2026/7/5 2:12:33 阅读更多 →
SRWE窗口分辨率编辑器:终极游戏截图与多屏适配解决方案

SRWE窗口分辨率编辑器:终极游戏截图与多屏适配解决方案

SRWE窗口分辨率编辑器:终极游戏截图与多屏适配解决方案 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE SRWE(Simple Runtime Window Editor)是一款功能强大的开源窗口分辨率自…

2026/7/5 2:10:33 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻