所属主题

文章大纲

1.2 LangChain架构设计


1.2 LangChain架构设计

模块化组件解析

LangChain 的核心架构采用模块化设计,将复杂的大语言模型(LLM)应用拆解为可独立管理、灵活组合的功能单元。以下是关键组件的功能解析:


1. Models(模型层)
  • 功能:对接各类大语言模型,统一调用接口。
  • 子模块
    • LLMs:处理基础文本生成(如GPT-3.5、Llama 2)。
    • ChatModels:面向对话场景的模型(如GPT-4、Claude),支持消息格式(System/User/Assistant)。
    • Embeddings:生成文本向量(如OpenAI的text-embedding-3-small),用于检索相似内容。
  • 示例
    from langchain_openai import ChatOpenAI
    llm = ChatOpenAI(model="gpt-4-turbo")  # 无缝切换不同模型
    
2. Prompts(提示模板)
  • 功能:动态生成模型输入,控制LLM的输出结构。
  • 核心机制
    • 模板变量:通过{variable}动态插入上下文(如用户问题、检索结果)。
    • Few-shot示例:在提示中嵌入示例,引导模型遵循特定格式。
  • 高级应用
    • 使用LangChain Hub共享和复用预训练模板(如“客服话术优化模板”)。
    from langchain_core.prompts import ChatPromptTemplate
    prompt = ChatPromptTemplate.from_template("用一句话解释{concept}:")
    
3. Chains(链式处理)
  • 功能:将多个组件(模型、工具、逻辑)串联为自动化流程。
  • 类型
    • 简单链(Simple Chain):单次模型调用,如问答链。
    • 转换链(Transform Chain):数据预处理(如文本清洗→向量化→检索)。
    • 路由链(Router Chain):根据输入内容动态选择执行分支。
  • 代码示例
    from langchain.chains import LLMChain
    chain = LLMChain(llm=llm, prompt=prompt)
    result = chain.invoke({"concept": "量子计算"})  # 输出:"量子计算是利用量子比特..."
    
4. Agents(智能体)
  • 功能:赋予LLM自主决策能力,通过工具(Tools)执行外部操作。
  • 工作流程
    1. 接收用户输入 → 2. LLM生成决策(思考下一步动作) → 3. 调用工具(如搜索、计算) → 4. 整合结果并循环直至任务完成。
  • 工具类型
    • 预置工具:搜索引擎(SerpAPI)、Python解释器(PythonREPL)、文件读写。
    • 自定义工具:通过装饰器@tool将任意函数转化为工具。
    from langchain.agents import tool
    @tool
    def get_weather(city: str) -> str:
        """查询指定城市的实时天气"""
        return f"{city}:25℃, 晴"
    
5. Memory(记忆管理)
  • 功能:持久化存储对话历史或关键信息,支持多轮交互。
  • 实现方式
    • 会话缓存(ConversationBufferMemory):存储原始对话记录。
    • 实体记忆(EntityMemory):提取并跟踪关键实体(如用户偏好、订单号)。
    • 向量存储记忆:将历史对话编码为向量,实现语义检索。
    from langchain.memory import ConversationBufferWindowMemory
    memory = ConversationBufferWindowMemory(k=3)  # 仅保留最近3轮对话
    
6. Retrieval(检索增强)
  • 功能:从外部数据源(文档、数据库)获取实时信息,注入到LLM上下文。
  • 典型流程
    1. 文档加载(PDF/网页) → 2. 文本分块 → 3. 向量化存储 → 4. 相似性检索 → 5. 结果合并生成回答。
  • 集成数据库:Chroma、FAISS、Pinecone、Elasticsearch。

与LLM的协作机制

LangChain 并非替代LLM,而是通过编排机制扩展其能力边界,协作过程分为三层:


1. 输入增强层
  • 动态上下文注入
    • 通过Prompts将外部数据(检索结果、用户历史)嵌入提示词。
    • 示例:在客服场景中,自动插入用户订单信息到问题前缀。
  • 结构化约束
    • 使用Output Parsers强制LLM输出JSON或特定格式,便于后续处理。
2. 过程控制层
  • 链式编排
    • 将多个LLM调用串联,例如:
      用户提问 → LLM生成关键词 → 检索数据库 → LLM综合结果生成回答。
  • 智能体决策
    • LLM作为“大脑”,根据当前状态选择工具(如先搜索再计算),形成Plan → Act → Observe循环。
3. 输出扩展层
  • 工具执行
    • 将LLM的文本指令转化为实际动作(如“发送邮件” → 调用SMTP API)。
  • 记忆持久化
    • 自动保存本轮对话的关键信息到Memory,供后续交互使用。

架构示意图

用户输入  
[Prompts] → 动态生成提示词(注入记忆/检索结果)  
[Models] → 调用LLM生成初步响应  
[Agents] → 判断是否需要工具调用?  
   ├─ 是 → 执行工具 → 结果返回至提示词 → 重新生成  
   └─ 否 → 进入Chains处理(如格式化输出)  
[Memory] → 更新对话历史/实体状态  
最终输出  

设计优势与典型用例

  • 优势
    • 解耦性:各组件独立开发测试(如更换模型无需修改链逻辑)。
    • 可解释性:通过LangSmith跟踪每个步骤的输入输出。
  • 用例
    • 智能客服检索(知识库)→ 生成回答 → 调用工单系统(工具)→ 记录对话(Memory)
    • 数据分析流水线用户提问 → 生成SQL → 执行查询 → 可视化(工具)→ 生成报告

如需深入某个组件(如Agents的ReAct算法实现)或协作模式(异步并发调用),可继续展开讨论!