LangChain 基础知识

1. Runnable 与调用方式

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

常见调用方式:

python 复制代码
# 单次调用
chain.invoke(input)

# 批量调用
chain.batch(inputs)

# 流式调用
chain.stream(input)

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


2. RunnablePassthrough

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

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

text 复制代码
用户问题
    ├──→ Retriever → context
    │
    └──→ question

最终组合成:

text 复制代码
context + question
        ↓
      Prompt
        ↓
       LLM

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


3. Chat History

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

例如:

text 复制代码
用户:设备 A001 出现了故障

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

用户:温度过高

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

基本流程:

text 复制代码
用户消息
   ↓
Chat History
   ↓
Prompt
   ↓
LLM
   ↓
AI 回复
   ↓
保存到 Chat History

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


4. Streaming 流式输出

普通调用:

text 复制代码
用户提问
   ↓
等待模型生成完成
   ↓
一次性显示答案

流式调用:

text 复制代码
用户提问
   ↓
模型生成
   ↓
生成一点 → 返回一点 → 页面显示一点

例如:

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

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


5. Metadata 元数据

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

例如:

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

Metadata 可以记录:

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

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


6. 相似度搜索

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

例如用户搜索:

text 复制代码
变压器温度太高怎么办?

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

text 复制代码
变压器过热故障的检查与处理方法

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

基本流程:

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

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


7. RAG 中的 Prompt

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

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

text 复制代码
你是一名专业的设备运维助手。

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

参考资料:
{context}

用户问题:
{question}

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

然后:

text 复制代码
Retriever
    ↓
context
    ↓
Prompt
    ↓
LLM
    ↓
最终答案

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


8. Tool Calling

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

例如给模型提供:

text 复制代码
get_device_status
get_weather
search_database
query_alarm
search_knowledge

当用户询问:

text 复制代码
帮我查询 A001 设备现在是否正常。

模型可以判断:

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

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


9. Agent 的基本工作方式

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

例如:

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

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


10. LangChain 与 LangGraph

LangChain 主要提供:

text 复制代码
Model
Prompt
Retriever
Vector Store
Tool
RAG

而复杂 Agent 应用还会涉及:

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

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

可以简单理解为:

text 复制代码
LangChain
    ↓
提供 AI 应用基础组件

LangGraph
    ↓
组织复杂 Agent 工作流

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

text 复制代码
LangChain 基础
      ↓
LCEL
      ↓
RAG
      ↓
Tool Calling
      ↓
Agent
      ↓
LangGraph

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

相关推荐
努力的小郑7 小时前
数据查到了,回答去哪儿了?一次百炼 + LangChain 排查实录
后端·langchain·agent
承渊政道1 天前
LangChainAI应用开发框架【LangChain与LangGraph介绍】
langchain·大模型·langgraph·ai应用开发
Flynn Liang1 天前
AiServices 源码级拆解:一个接口如何变成 RAG Agent
java·langchain·源码分析·rag·langchain4j·aiservices
Flynn Liang1 天前
LangChain4j 1.23 架构全景:Java 大模型应用的 6 层抽象
java·langchain·大模型·rag·ai agent·langchain4j
GISer_Jing1 天前
Agent相关岗位时收集的各类技术面试题
后端·ai·langchain
Flynn Liang1 天前
LangChain4j 生产级工程骨架:12 个模块 + Docker 一键启动
java·spring boot·langchain·rag·langchain4j
叼烟扛炮1 天前
[LangChain] 学习笔记(08):工具调用底层闭环与第三方搜索(Tavily)实战
人工智能·笔记·学习·langchain
GISer_Jing2 天前
AI Agent秋招面试万字通关指南|架构、ReAct、上下文工程、RAG、评测、生产运维全解
后端·ai·langchain
西安小哥2 天前
大厂把大模型做为一层“网关”,比换个框架更值得琢磨
架构·langchain
叼烟扛炮2 天前
[LangChain] 学习笔记(07):大模型长出手脚——工具(Tools)定义与调用闭环
笔记·学习·langchain