LangChain 的核心模块(Models, Prompts, Chains, Memory, Agents)
以下内容为AI对话生成
核心模块概览
可以把这五大模块想象成一个智能机器人的不同部分:
- Models(模型):机器人的“大脑”,负责真正的思考和生成。
- Prompts(提示):你给机器人的“指令”和“问题背景”,引导它如何思考。
- Chains(链):机器人的“工作流程”,把简单任务组合成复杂任务。
- Memory(记忆):机器人的“短期记忆”,让它能记住对话历史。
- Agents(代理):机器人的“决策中心”,它决定调用什么工具来完成任务。
下面我们逐一深入讲解。
1. Models(模型)
这个模块是所有功能的基石,它提供了与各种大语言模型(LLMs)和聊天模型(ChatModels)交互的统一接口。
- 功能:抽象了不同模型提供商(如 OpenAI, Anthropic, Hugging Face 等)的 API 差异,让你用一套统一的代码调用不同的模型。
- 核心类:
LLM:用于纯文本补全模型(如早期的text-davinci-003)。输入一段文本,输出一段补全的文本。ChatModel:用于对话模型(如gpt-4,gpt-3.5-turbo,claude-2)。输入是一个消息列表(SystemMessage,HumanMessage,AIMessage),输出是一个AIMessage。这是目前最主流的模式。
- 重要概念 - Embeddings:虽然不属于 LLM/ChatModel,但也常被归在 Models 模块下。它负责将文本转换为高维向量,用于检索、比较和聚类(是 RAG 的基石)。
- 示例:
from langchain_openai import ChatOpenAI from langchain.schema import HumanMessage # 初始化模型 chat = ChatOpenAI(model_name="gpt-3.5-turbo") # 调用模型 messages = [HumanMessage(content="你好!请介绍一下你自己。")] response = chat.invoke(messages) print(response.content)
2. Prompts(提示)
Prompt 是指导和约束模型输出的关键。这个模块提供了用于高效构建、管理和优化提示词的模板工具。
- 功能:将用户输入、指令示例、上下文等信息动态地组合成模型最终看到的提示词,避免手动拼接字符串的混乱。
- 核心类:
PromptTemplate:最重要的工具。允许你创建一个带有变量的模板,然后在运行时传入变量值来生成具体的提示。FewShotPromptTemplate:用于创建少样本(Few-Shot)学习的提示,即在指令中包含一些输入输出的示例,让模型更好地理解任务。ChatPromptTemplate:专门用于构建聊天模型所需的消息列表模板。
- 示例:
from langchain.prompts import PromptTemplate # 创建一个带变量的模板 template = """ 你是一个专业的翻译官。请将以下 {source_language} 文本翻译成 {target_language}: 文本:{text} 翻译: """ prompt_template = PromptTemplate.from_template(template) # 使用变量生成最终提示 final_prompt = prompt_template.format( source_language="英语", target_language="中文", text="Hello, world! LangChain is amazing." ) print(final_prompt) # 然后将 final_prompt 传给 LLM
3. Chains(链)
Chain 是 LangChain 的核心价值所在。单个模型调用能力有限,Chain 允许你将多个模型调用、其他工具或逻辑步骤链接起来,形成一个序列化的、复杂的工作流。
- 功能:实现多步骤任务,其中一个步骤的输出可以作为下一个步骤的输入。
- 核心类:
LLMChain:最基础、最常用的链,它组合了一个PromptTemplate和一个LLM/ChatModel。SequentialChain:允许多个链按顺序执行。RouterChain:根据输入内容智能地选择执行不同的子链。
- 示例:实现“翻译+总结”链
from langchain.chains import LLMChain, SimpleSequentialChain from langchain.prompts import PromptTemplate # 第一步的链:翻译 translation_template = "将以下英文文本翻译成中文:{text}" translation_prompt = PromptTemplate.from_template(translation_template) translation_chain = LLMChain(llm=chat, prompt=translation_prompt) # 第二步的链:总结 summary_template = "对以下中文文本做一个简要总结:{text}" summary_prompt = PromptTemplate.from_template(summary_template) summary_chain = LLMChain(llm=chat, prompt=summary_prompt) # 将两个链组合成顺序链 overall_chain = SimpleSequentialChain( chains=[translation_chain, summary_chain], verbose=True # 打开详细日志,方便查看执行过程 ) # 运行这个工作流 english_text = "LangChain is a framework for developing applications powered by language models..." result = overall_chain.run(english_text) print(result)
4. Memory(记忆)
由于 LLM 本身是无状态的,Memory 模块为应用提供了“记忆”能力,使其能够记住跨多次调用的信息,这对于聊天机器人等应用至关重要。
- 功能:在链或代理的多次调用之间持久化状态(对话历史)。
- 核心类:
ConversationBufferMemory:最简单的一种,直接保存所有过去的对话消息。ConversationSummaryMemory:更高级,会调用 LLM 将时间久远的对话总结成一个简短的摘要,从而节省 Token 并抓住长期重点。ConversationBufferWindowMemory:只保留最近 K 轮对话,像一个滑动窗口,防止记忆无限增长。
- 示例:
from langchain.memory import ConversationBufferMemory from langchain.chains import ConversationChain # 初始化记忆体 memory = ConversationBufferMemory() # 创建一个带记忆的对话链 conversation = ConversationChain( llm=chat, memory=memory, verbose=True ) print(conversation.run("你好,我叫小明。")) print(conversation.run("我最喜欢的产品是iPhone。")) print(conversation.run("你还记得我的名字和我喜欢什么吗?")) # AI会记得之前的对话
5. Agents(代理)
这是最强大、最令人兴奋的模块。代理将一个 LLM 作为“大脑”或“决策者”,它可以根据用户输入自主地决定需要执行哪些动作(调用哪些工具),并最终整合所有结果来给出答案。
- 功能:扩展模型能力,使其可以调用外部工具(如搜索引擎、计算器、数据库、API等)。
- 核心概念:
- Agent:代理本身,包含决策逻辑。
- Tool:代理可以调用的函数。比如:Google 搜索、Python REPL、数据库查询等。你可以轻松创建自定义工具。
- AgentExecutor:负责运行代理,管理其与工具的交互循环(思考 -> 执行工具 -> 观察结果 -> 再思考...直到得出最终答案)。
- 示例:
from langchain.agents import load_tools, initialize_agent, AgentType from langchain.agents import Tool # 假设我们有一个自定义工具:计算字符串长度的函数 def calculate_length(text: str) -> str: return f"The length is {len(text)} characters." # 将函数包装成Tool tools = [ Tool( name="String Length Calculator", func=calculate_length, description="Useful for when you need to calculate the length of a string." ) ] # 初始化一个代理 agent = initialize_agent( tools, chat, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, # 一种通用的代理类型 verbose=True ) # 运行代理!它会自动判断是否需要使用工具。 result = agent.run("What is the length of the word 'LangChain'?") print(result) # 输出: The length is 9 characters. # 过程中你会看到代理决定调用计算器工具的日志。
总结
这五大模块由低到高,层层递进:
- Models 和 Prompts 是原材料(砖块和水泥)。
- Chains 是用原材料砌成的一面墙(完成一个复杂但固定的任务)。
- Memory 是给这面墙刷上好看的油漆,让它更实用(上下文)。
- Agents 是用这些墙、油漆,再加上各种工具(家具、电器),最终搭建出的一个能自主行动的智能机器人。

浙公网安备 33010602011771号