LangChain 基础知识

0 阅读4分钟

1. Runnable 与调用方式

LangChain 中很多组件都遵循统一的 Runnable 接口,例如 Prompt、Model、Retriever 等。

常见调用方式:

# 单次调用
chain.invoke(input)

# 批量调用
chain.batch(inputs)

# 流式调用
chain.stream(input)

其中 invoke() 最常用,而 stream() 常用于实现类似 ChatGPT 的逐步输出效果。


2. RunnablePassthrough

RunnablePassthrough 可以将输入数据直接传递到 Chain 的下一环节。

例如 RAG 中经常需要同时传递:

用户问题
    ├──→ Retriever → context
    │
    └──→ question

最终组合成:

context + question
        ↓
      Prompt
        ↓
       LLM

它在构建 LCEL 流程时非常常见。


3. Chat History

普通模型调用默认不会自动记住之前的聊天内容。

例如:

用户:设备 A001 出现了故障

AI:请问具体是什么故障?

用户:温度过高

如果需要模型理解第二次提问和第一次提问之间的关系,就需要保存聊天历史。

基本流程:

用户消息
   ↓
Chat History
   ↓
Prompt
   ↓
LLM
   ↓
AI 回复
   ↓
保存到 Chat History

这也是实现多轮 AI 对话的重要基础。


4. Streaming 流式输出

普通调用:

用户提问
   ↓
等待模型生成完成
   ↓
一次性显示答案

流式调用:

用户提问
   ↓
模型生成
   ↓
生成一点 → 返回一点 → 页面显示一点

例如:

for chunk in chain.stream({
    "question": "什么是 RAG?"
}):
    print(chunk.content, end="")

实际 Web 项目中的 AI 聊天界面通常会使用流式输出改善用户体验。


5. Metadata 元数据

知识库中的 Document 除了正文,还可以保存 Metadata。

例如:

{
    "page_content": "变压器发生过热时需要检查冷却系统",
    "metadata": {
        "source": "设备运维手册.pdf",
        "page": 15,
        "device_type": "变压器"
    }
}

Metadata 可以记录:

  • 文件名称
  • 页码
  • 文档类型
  • 设备类型
  • 创建时间
  • 知识分类

在 RAG 中可以利用 Metadata 进行过滤,也可以在回答中展示知识来源。


6. 相似度搜索

向量数据库并不是简单进行关键词匹配,而是根据向量之间的相似程度进行搜索。

例如用户搜索:

变压器温度太高怎么办?

知识库中可能没有完全相同的文字,但存在:

变压器过热故障的检查与处理方法

通过 Embedding 和向量相似度计算,仍然可以找到这段内容。

基本流程:

用户问题
   ↓
Embedding
   ↓
问题向量
   ↓
相似度计算
   ↓
Vector Store
   ↓
返回最相关 Chunk

这也是 RAG 能够实现语义检索的重要原因。


7. RAG 中的 Prompt

RAG 并不是把检索结果直接返回给用户。

一般会把检索到的内容放入 Prompt:

你是一名专业的设备运维助手。

请严格根据以下资料回答用户问题。

参考资料:
{context}

用户问题:
{question}

如果资料中不存在答案,请明确说明无法从知识库中找到相关信息。

然后:

Retriever
    ↓
context
    ↓
Prompt
    ↓
LLM
    ↓
最终答案

因此,一个 RAG 系统的回答质量不仅取决于模型,还受到 文档质量、文本切分、Embedding、检索策略和 Prompt 等多个环节影响。


8. Tool Calling

Tool 可以让大模型调用外部功能。

例如给模型提供:

get_device_status
get_weather
search_database
query_alarm
search_knowledge

当用户询问:

帮我查询 A001 设备现在是否正常。

模型可以判断:

需要实时设备数据
      ↓
调用 get_device_status
      ↓
获得设备状态
      ↓
LLM 分析
      ↓
返回用户

这样,大模型就不再只是“聊天”,而是可以和真实业务系统进行交互。


9. Agent 的基本工作方式

Agent 可以理解为让 LLM 根据当前任务决定下一步应该执行什么。

例如:

用户提出任务
     ↓
Agent 分析
     ↓
选择 Tool
     ↓
执行 Tool
     ↓
获取结果
     ↓
继续分析
     ↓
是否还需要调用 Tool?
   ↙              ↘
需要              不需要
 ↓                  ↓
继续执行           最终回答

相比固定 Chain,Agent 更适合步骤无法提前完全确定的复杂任务。


10. LangChain 与 LangGraph

LangChain 主要提供:

Model
Prompt
Retriever
Vector Store
Tool
RAG

而复杂 Agent 应用还会涉及:

状态管理
条件判断
循环执行
多个 Agent 协作
人工审核
复杂工作流

这类需求可以进一步使用 LangGraph。

可以简单理解为:

LangChain
    ↓
提供 AI 应用基础组件

LangGraph
    ↓
组织复杂 Agent 工作流

对于初学者,推荐学习顺序:

LangChain 基础
      ↓
LCEL
      ↓
RAG
      ↓
Tool Calling
      ↓
Agent
      ↓
LangGraph

掌握这些内容后,就具备了进一步开发企业知识库、智能客服、设备运维助手和 AI Agent 等项目的基础。