news 2026/4/15 12:46:54

开发大语言模型程序的开源框架LangChain

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
开发大语言模型程序的开源框架LangChain

LangChain是一个用于开发大语言模型(LLM)应用程序的开源框架。与之前介绍的Xinference这类专门的模型推理工具不同,LangChain的核心价值在于连接和编排——它像“乐高积木”一样,将LLM、外部数据、计算工具等组件高效地组装起来,帮助你构建功能复杂的应用。

🧩 核心组件与概念

理解LangChain,需要先了解它为了“连接”和“编排”而设计的几个核心组件,它们共同构成了智能应用的“大脑”和“身体”:

组件核心作用类比与说明
模型 (Models)应用的核心“大脑”支持OpenAI、Anthropic等各类LLM,是生成能力的来源。
提示 (Prompts)指导“大脑”思考的指令将用户输入和指令封装成模板,更高效地与模型交互。
链 (Chains)执行复杂任务的“流水线”将多个步骤(如调用模型、处理输出)按顺序组合,是LangChain名称的由来。
记忆 (Memory)应用的“短期记忆”让应用能记住对话历史,实现连贯的多轮对话。
检索 (Retrieval)应用的“长期记忆”或“资料库”从外部文档、数据库中查找并注入相关信息,是构建知识问答系统的核心。
代理 (Agents)能使用“工具”的“智能体”让模型根据你的问题,自动决定是否及如何使用计算器、搜索API等外部工具来完成任务。

🚀 从安装到“Hello World”

LangChain部署简单,你只需要在自己的开发环境中安装它,然后一步步组合组件。

1. 环境安装
首先,通过pip安装核心包。根据你的需要,可能还需安装特定的模型接口包(如openai)或其他工具包。

pipinstalllangchain langchain-openai

2. 一个极简应用示例
下面是一个使用OpenAI模型进行简单问答的代码片段,它展示了模型提示模板的基础组合:

fromlangchain_openaiimportChatOpenAIfromlangchain.promptsimportChatPromptTemplatefromlangchain.chainsimportLLMChain# 1. 初始化模型,需要设置你的OPENAI_API_KEY环境变量llm=ChatOpenAI(model="gpt-3.5-turbo")# 2. 创建提示模板prompt=ChatPromptTemplate.from_messages([("system","你是一个乐于助人的助手。"),("user","{query}")])# 3. 将模型和提示组合成一个链chain=LLMChain(llm=llm,prompt=prompt)# 4. 运行链response=chain.invoke({"query":"请用一句话解释什么是人工智能。"})print(response["text"])

3. 接入阿里百炼模型示例
使用兼容模式初始化百炼模型(以通义千问 qwen-plus 为例):

importosfromlangchain_openaiimportChatOpenAI# 从环境变量读取配置(示例)api_key=os.getenv("DASHSCOPE_API_KEY")base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"# 百炼的兼容端点# 初始化模型llm=ChatOpenAI(model="qwen-plus",# 指定模型,可从百炼模型广场查看[citation:3]openai_api_key=api_key,openai_api_base=base_url,temperature=0.1,# 控制生成随机性)# 测试调用response=llm.invoke("你好")print(response.content)

4. 接入本地文档进行知识库问答
首先需要将本地文档处理成可以被检索的知识:

importosfromlangchain.document_loadersimportPyPDFLoader# 以PDF为例fromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain.embeddingsimportDashScopeEmbeddings# 百炼的嵌入模型fromlangchain.vectorstoresimportFAISS# 向量数据库# 1. 加载文档(以单PDF为例)# 可以替换为 DirectoryLoader 来批量加载[citation:2]loader=PyPDFLoader("path/to/your/document.pdf")documents=loader.load()# 2. 分割文本# 这是关键步骤,直接影响检索质量[citation:2]text_splitter=RecursiveCharacterTextSplitter(chunk_size=500,# 每个文本块大小chunk_overlap=50# 块之间的重叠,避免信息被切断)splits=text_splitter.split_documents(documents)# 3. 生成向量并存储# 使用百炼的嵌入模型将文本转化为向量embeddings=DashScopeEmbeddings(model="text-embedding-v1",# 百炼的文本向量模型api_key=os.getenv("DASHSCOPE_API_KEY")# 你的API Key)# 将向量存入FAISS(轻量、适合本地部署[citation:2])vectorstore=FAISS.from_documents(splits,embeddings)# 将向量库保存到本地,以后可以直接加载,无需重复处理文档vectorstore.save_local("my_local_faiss_index")print("知识库构建完成并已保存。")

然后结合百炼的大模型进行问答:

fromlangchain.chainsimportRetrievalQA# 导入你之前配置好的、兼容OpenAI接口的百炼模型# 假设你的模型初始化代码在一个叫 `qianfan_llm.py` 的文件里fromqianfan_llmimportllm# 这是你之前配置好的ChatOpenAI实例# 1. 加载之前保存的向量库embeddings=DashScopeEmbeddings(model="text-embedding-v1",api_key=os.getenv("DASHSCOPE_API_KEY"))loaded_vectorstore=FAISS.load_local("my_local_faiss_index",embeddings,allow_dangerous_deserialization=True)# 2. 创建检索器retriever=loaded_vectorstore.as_retriever(search_kwargs={"k":3})# 返回最相关的3个文本块[citation:2]# 3. 创建“检索-问答”链qa_chain=RetrievalQA.from_chain_type(llm=llm,# 使用你的百炼大模型chain_type="stuff",# 最常用的链类型,将检索到的文本“塞”给模型[citation:1][citation:4]retriever=retriever,return_source_documents=True# 返回参考来源,方便追溯[citation:2])# 4. 开始提问query="你的问题是什么?"result=qa_chain.invoke({"query":query})print("答案:",result["result"])print("\n参考来源:")fordocinresult["source_documents"]:print(f"-{doc.page_content[:200]}...")# 打印来源文本的前200字符

💡 典型应用场景与构建思路

掌握了基础组件,就可以构建更强大的应用。下表展示了两个经典场景的构建路径:

应用场景核心需求LangChain构建思路与关键组件
智能文档问答让LLM基于自有文档(如PDF、内部知识库)回答问题。1. 知识入库:用文档加载器读取文件,用文本分割器切块,用嵌入模型向量化后存入向量数据库(如FAISS)。
2. 问答流程:用户提问 →检索器从向量库找相关片段 →提示模板将片段和问题组合 →LLM生成答案。
上下文感知对话机器人实现能记住之前聊天内容、连续对话的聊天机器人。1. 添加记忆:在链中加入ConversationBufferMemory等记忆组件。
2. 管理会话:通过ChatMessageHistory等管理不同用户的对话历史。
3. 组合运行:将记忆、提示、模型组装成链,每次调用自动带入历史。

⚙️ 进阶与生产部署

当应用开发完成后,你可以:

  • 调试与优化:使用LangSmith平台(LangChain官方产品)来可视化追踪链的每一步执行,调试提示词和性能。
  • 部署为服务:使用FastAPI、Gradio等Web框架将你的LangChain应用包装成API或网页界面,方便他人使用。

总而言之,LangChain不是一个需要独立部署的“服务”,而是一个用于在你的项目中快速构建AI应用的“开发框架”和“组件库”。它的学习路径非常清晰:从理解核心组件开始,通过组合它们来搭建应用原型,再逐步集成更高级的功能(如检索、代理)并最终部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!