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 等项目的基础。