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-openai2. 一个极简应用示例
下面是一个使用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应用的“开发框架”和“组件库”。它的学习路径非常清晰:从理解核心组件开始,通过组合它们来搭建应用原型,再逐步集成更高级的功能(如检索、代理)并最终部署。