LangChain框架详解:构建大语言模型应用的终极指南!
LangChain是基于大语言模型的应用开发框架,提供工具和接口构建复杂任务。其核心组件包括模型、提示模板、数据检索、记忆、链和代理,支持多模型集成和任务串联。框架通过模块化设计封装模型I/O、数据检索等功能,简化LLM应用从开发到部署的全生命周期,使开发者能快速构建大语言模型应用。
简介
LangChain是基于大语言模型的应用开发框架,提供工具和接口构建复杂任务。其核心组件包括模型、提示模板、数据检索、记忆、链和代理,支持多模型集成和任务串联。框架通过模块化设计封装模型I/O、数据检索等功能,简化LLM应用从开发到部署的全生命周期,使开发者能快速构建大语言模型应用。
什么是LangChain?

🍋
LangChain是一个基于大语言模型用于构建端到端语言模型应用的框架,它提供了一系列工具、套件和接口,让开发者使用语言模型来实现各种复杂的任务,如文本到图像的生成、文档问答、聊天机器人等。
类似于Java中的Spring,Python中的Django
官网地址:https://python.langchain.com/docs/introduction/
中文地址:https://www.langchain.com.cn/docs/introduction/
GitHub源码地址:https://github.com/langchain-ai/langchain
为什么需要大模型框架
场景一:串联多个步骤(多轮思考、逻辑判断)
你想让 LLM:先调用知识库;再判断答案是否不完整;如果不完整,再调用另一个模型补足。 你怎么办?原始代码写死逻辑就麻烦了。框架可以让你用链(Chain)或Agent来封装这类流程,非常容易扩展。
API代码
response = openai.ChatCompletion.create( model="gpt-4", messages=[{"role": "user", "content": "请推荐三本书"}])
场景二:多模型、多任务集成
你希望系统: 用户提问 → Claude 回答; 遇到结构草图 → 用 GPT-4; 编程代码 → 用kimi k2; 语义分析 → 用本地模型; 你要怎么切换?怎么统一接口?怎么路由调用逻辑?
框架可以一键适配 OpenAI、Anthropic、本地模型、HuggingFace 等,统一抽象出 Model 类调用接口。 而且还能一点点扩展,而且避免你代码中充满:
if model == 'gpt-3.5': passelif model == 'claude-3': pass
LangChain介绍
🎉
LangChain is a framework for developing applications powered by large language models (LLMs).
LangChain simplifies every stage of the LLM application lifecycle:
- Development: Build your applications using LangChain’s open-source building blocks, components, and third-party integrations. Use LangGraph to build stateful agents with first-class streaming and human-in-the-loop support.
- Productionization: Use LangSmith to inspect, monitor and evaluate your chains, so that you can continuously optimize and deploy with confidence.
- Deployment: Turn your LangGraph applications into production-ready APIs and Assistants with LangGraph Cloud.
LangChain简化了LLM应用程序生命周期的各个阶段:
开发阶段:使用LangChain的开源构建块和组件构建应用程序,利用第三方集成和模板快速启动。
生产化阶段:使用LangSmith检查、监控和评估您的链,从而可以自信地持续优化和部署。
部署阶段:使用LangServe将任务链转化为API。
这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
Langchain的核心组件

🐸
- 模型(Models):包含各大语言模型的LangChain接口和调用细节,以及输出解析机制。
- 提示模板(Prompts):使提示工程流线化,进一步激发大语言模型的潜力。
- 数据检索(Indexes):构建并操作文档的方法,接受用户的查询并返回最相关的文档,轻松搭建本地知识库。
- 记忆(Memory):通过短时记忆和长时记忆,在对话过程中存储和检索数据,让ChatBot记住你。
- 链(Chains):LangChain中的核心机制,以特定方式封装各种功能,并通过一系列的组合,自动而灵活地完成任务。
- 代理(Agents):另一个LangChain中的核心机制,通过“代理”让大模型自主调用外部工具和内部工具,使智能Agent成为可能。

封装了一系列模块
模型 I/O 封装,包括:
🐸
- LLMs:大语言模型
- ChatModels:一般基于 LLMs,但按对话结构重新封装
- Prompt:提示词模板
- OutputParser:解析输出
Retrieval 数据连接与向量检索封装,包括:
- Retriever: 向量的检索
- Document Loader:各种格式文件的加载器
- Embedding Model:文本向量化表示,用于检索等操作
- Verctor Store: 向量的存储
- Text Splitting:对文档的常用操作
Agents 根据用户输入,自动规划执行步骤,自动选择每步需要的工具,最终完成用户指定的功能,包括:
🐰
- Tools:调用外部功能的函数,例如:调 google 搜索、文件 I/O、Linux Shell 等等
- Toolkits:操作某软件的一组工具集,例如:操作 DB、操作 Gmail 等等
开源库组成
- langchain-core :基础抽象和LangChain表达式语言
- langchain-community :第三方集成。合作伙伴包(如langchain-openai、langchain-anthropic等),一些集成已经进一步拆分为自己的轻量级包,只依赖于langchain-core
- langchain :构成应用程序认知架构的链、代理和检索策略
- langgraph:通过将步骤建模为图中的边和节点,使用 LLMs 构建健壮且有状态的多参与者应用程序
- langserve:将 LangChain 链部署为 REST API
- LangSmith:一个开发者平台,可让您调试、测试、评估和监控LLM应用程序,并与LangChain无缝集成
LangChain的基本使用
安装指定版本的LangChain
pip install langchain==0.3.7 -i https://pypi.tuna.tsinghua.edu.cn/simplepip install langchain-openai==0.2.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
通过LangChain的接口来调用OpenAI对话
from dotenv import load_dotenvload_dotenv()import osfrom langchain_openai import ChatOpenAI# llm = ChatOpenAI()qwllm = ChatOpenAI(api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen-plus") dpllm = ChatOpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com", model="deepseek-chat")# 直接提供问题,并调用llmresponse = qwllm .invoke("什么是大模型?")print(response)print("="*50)print(response.content)
多轮对话的封装
from langchain_openai import ChatOpenAI# 默认是gpt-3.5-turbo# llm = ChatOpenAI() llm = ChatOpenAI(api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", model="qwen-plus")from langchain.schema import ( AIMessage, #等价于OpenAI接口中的assistant role HumanMessage, #等价于OpenAI接口中的user role SystemMessage #等价于OpenAI接口中的system role)messages = [ SystemMessage(content="你是于老师的个人助理。你叫小沐"), HumanMessage(content="我叫同学小张"), HumanMessage(content="你是谁?") ]response = llm.invoke(messages)print(response.content)
使用提示模板
# 我们也可以创建prompt template, 并引入一些变量到prompt template中,这样在应用的时候更加灵活from langchain_core.prompts import ChatPromptTemplate# 需要注意的一点是,这里需要指明具体的role,在这里是system和用户prompt = ChatPromptTemplate.from_messages([ ("system", "您是世界级的技术文档编写者"), ("user", "{input}") # {input}为变量])print(prompt)result = llm.invoke(prompt.format(input="大模型中的LangChain是什么"))print(result)# 我们可以把prompt和具体llm的调用和在一起(通过chain,chain可以理解为sequence of calls to take) Linux ps aux | grep redis# chain = prompt | llm# chain.invoke({"input": "大模型中的LangChain是什么?"})
使用输出解析器
from langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParser, JsonOutputParser# 初始化模型llm = ChatOpenAI()# 创建提示模板prompt = ChatPromptTemplate.from_messages([ ("system", "您是世界级的技术文档编写者。"), ("user", "{input}")])# 使用输出解析器output_parser = StrOutputParser()# output_parser = JsonOutputParser()# 将其添加到上一个链中chain = prompt | llm | output_parser # chain = prompt | llm # 调用它并提出同样的问题。答案是一个字符串,而不是ChatMessagechain.invoke({"input": "LangChain是什么?"})# chain.invoke({"input": "LangChain是什么? 问题用question 回答用answer 用JSON格式回复"})
向量存储
使用一个简单的本地向量存储 FAISS,首先需要安装它
pip install faiss-cpupip install langchain_community==0.3.7
# 导入和使用 WebBaseLoaderfrom langchain_community.document_loaders import WebBaseLoaderfrom dotenv import load_dotenvload_dotenv()import bs4import osos.environ["http_proxy"] = "http://127.0.0.1:7897"os.environ["https_proxy"] = "http://127.0.0.1:7897"loader = WebBaseLoader( web_path="https://www.gov.cn/xinwen/2020-06/01/content_5516649.htm", bs_kwargs=dict(parse_only=bs4.SoupStrainer(id="UCAP-CONTENT")))docs = loader.load()# print(docs)# 对于嵌入模型,这里通过 API调用from langchain_openai import OpenAIEmbeddingsembeddings = OpenAIEmbeddings()# qwen的embding模型from langchain_community.embeddings.dashscope import DashScopeEmbeddingsembeddings = DashScopeEmbeddings( model="text-embedding-v3", dashscope_api_key=os.getenv("DASHSCOPE_API_KEY"))#使用此嵌入模型将文档摄取到矢量存储中from langchain_community.vectorstores import FAISSfrom langchain_text_splitters import RecursiveCharacterTextSplitter# 使用分割器分割文档text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)documents = text_splitter.split_documents(docs)print(len(documents))# 向量存储 embeddings 会将 documents 中的每个文本片段转换为向量,并将这些向量存储在 FAISS 向量数据库中vector = FAISS.from_documents(documents, embeddings)
RAG+Langchain,基于外部知识,增强大模型回复
from langchain.chains.combine_documents import create_stuff_documents_chainfrom langchain_core.prompts import ChatPromptTemplateprompt = ChatPromptTemplate.from_template("""仅根据提供的上下文回答以下问题:<context>{context}</context>问题: {input}""")from langchain_openai import ChatOpenAIllm = ChatOpenAI()# 创建文档组合链 将文档内容和用户问题组合成一个完整的提示,然后传递给语言模型生成回答document_chain = create_stuff_documents_chain(llm, prompt)from langchain.chains import create_retrieval_chainretriever = vector.as_retriever()retriever.search_kwargs = {"k": 3} # 限制为最多检索3个文档# 创建检索链 该链结合了检索器和文档组合链,实现了从向量数据库中检索相关文档,并将这些文档与用户问题组合成提示retrieval_chain = create_retrieval_chain(retriever, document_chain)# 调用检索链并获取回答response = retrieval_chain.invoke({"input": "建设用地使用权是什么?"})print(response["answer"])
代理的使用
在LangChain框架中,Agents是一种利用大型语言模型(Large Language Models,简称LLMs)来执行任务和做出决策的系统
在 LangChain 的世界里,Agent 是一个智能代理,它的任务是听取你的需求(用户输入)和分析当前的情境(应用场景),然后从它的工具箱(一系列可用工具)中选择最合适的工具来执行操作
- 使用工具(Tool):LangChain中的Agents可以使用一系列的工具(Tools)实现,这些工具可以是API调用、数据库查询、文件处理等,Agents通过这些工具来执行特定的功能。
- 推理引擎(Reasoning Engine):Agents使用语言模型作为推理引擎,以确定在给定情境下应该采取哪些行动,以及这些行动的执行顺序。
- 可追溯性(Traceability):LangChain的Agents操作是可追溯的,这意味着可以记录和审查Agents执行的所有步骤,这对于调试和理解代理的行为非常有用。
- 自定义(Customizability):开发者可以根据需要自定义Agents的行为,包括创建新的工具、定义新的Agents类型或修改现有的Agents。
- 交互式(Interactivity):Agents可以与用户进行交互,响应用户的查询,并根据用户的输入采取行动。
- 记忆能力(Memory):LangChain的Agents可以被赋予记忆能力,这意味着它们可以记住先前的交互和状态,从而在后续的决策中使用这些信息。
- 执行器(Agent Executor):LangChain提供了Agent Executor,这是一个用来运行代理并执行其决策的工具,负责协调代理的决策和实际的工具执行。
from langchain.tools.retriever import create_retriever_tool# 检索器工具retriever_tool = create_retriever_tool( retriever, "CivilCodeRetriever", "搜索有关中华人民共和国民法典的信息。关于中华人民共和国民法典的任何问题,您必须使用此工具!",)tools = [retriever_tool]from langchain_openai import ChatOpenAIfrom langchain import hubfrom langchain.agents import create_openai_functions_agentfrom langchain.agents import AgentExecutor# https://smith.langchain.com/hubprompt = hub.pull("hwchase17/openai-functions-agent")llm = ChatOpenAI(model="gpt-4", temperature=0)agent = create_openai_functions_agent(llm, tools, prompt)agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)# 运行代理agent_executor.invoke({"input": "建设用地使用权是什么"})
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

更多推荐



所有评论(0)