Prompt 组件
是什么:构建发给 LLM 的提示词模板
有什么用:动态填充变量,管理对话结构
必须掌握:
ChatPromptTemplate→ 对话场景PromptTemplate→ 纯文本场景MessagesPlaceholder→ 插入历史消息的占位符partial()→ 预填充部分参数
Model 组件
是什么:封装 LLM 的调用接口
有什么用:统一调用各种模型
必须掌握:
invoke()→ 单次调用batch()→ 批量并行调用stream()→ 流式输出,边生成边返回.content→ 取返回结果
OutputParser
是什么:解析 LLM 输出的组件
有什么用:把 LLM 的原始输出转成你想要的格式
必须掌握:
StrOutputParser→ 输出纯字符串JsonOutputParser+BaseModel→ 输出结构化对象get_format_instructions()→ 告诉 LLM 按什么格式输出
LCEL 表达式
是什么:LangChain 的链式调用语法
有什么用:用 | 把组件串联成流水线
必须掌握:
Prompt | LLM | Parser是核心写法- 本质是上一步输出 → 下一步输入
- 所有组件都是 Runnable,都能用
|连接
RunnableParallel / RunnablePassthrough
是什么:控制数据流向的工具组件
有什么用:并行执行多条链,或在链中追加字段
必须掌握:
RunnableParallel→ 同时跑多条链,结果合并成字典RunnablePassthrough.assign(context=...)→ RAG 注入 context 的标准写法- 字典
{}在链里就是 RunnableParallel 的简写
Callback 回调
是什么:监听链执行过程的机制
有什么用:调试、性能监控、日志记录
必须掌握:
- 继承
BaseCallbackHandler,重写事件方法 - 通过
config={"callbacks": [...]}传入 - 常用事件:
on_chat_model_start/on_llm_end
记忆(Memory)
是什么:管理对话历史的机制
有什么用:让 AI 记住上下文,实现多轮对话
必须掌握:
| 存什么 | 存哪里 | 怎么接入链 |
|---|---|---|
| Buffer 全存 | InMemory 临时 | RunnableWithMessageHistory |
| Window 限 token | File 持久化 | + session_id 隔离用户 |
| SummaryBuffer 压缩旧的 | Redis/DB 生产环境 |
Embedding
是什么:把文本转成向量的技术
有什么用:语义越相近的文本,向量距离越近,是 RAG 的基础
必须掌握:
embed_query()→ 查询时用embed_documents()→ 建索引时用- 余弦相似度值越接近 1 = 越相似
- 中文场景用千帆或 bge 模型
向量数据库
是什么:存储和检索向量的数据库
有什么用:RAG 的核心存储层,根据语义找相关文档
必须掌握:
- FAISS → 本地开发
- Pinecone → 生产环境
as_retriever()→ 接入 RAG 的关键方法score_threshold→ 过滤低相关结果mmr→ 结果多样化
文档加载器
是什么:把各种格式文件加载成 Document 对象的组件
有什么用:RAG 流水线的第一步
必须掌握:
Document=page_content+metadata- txt →
TextLoader - 网页 →
WebBaseLoader - 不确定类型 →
UnstructuredFileLoader
文本分割器
是什么:把长文档切成小块的组件
有什么用:RAG 流水线的第二步,切块质量直接影响检索效果
必须掌握:
RecursiveCharacterTextSplitter→ 首选,几乎所有场景chunk_size→ 每块多大(推荐 500-1000)chunk_overlap→ 块间重叠(推荐 chunk_size 的 10-20%)- 中文场景加自定义分隔符
"。|!|?" - 代码文件用
from_language(Language.PYTHON)
文档转换器
是什么:对文档内容进行增强的组件(不切块)
有什么用:提升 RAG 召回率
必须掌握:
- 问答对提取 → 把文档变成 Q&A,用户提问更容易匹配
- 翻译 → 多语言知识库
RAG 高级检索策略
是什么:提升 RAG 检索质量的各种技术
有什么用:解决召回率差、结果不准的问题
必须掌握:
| 问题 | 解决方案 | 思想 |
|---|---|---|
| 查询角度单一 | Multi-Query | LLM 生成多角度查询 |
| 多查询结果排序差 | RAG Fusion | RRF 算法融合排名 |
| 问题太复杂 | 问题分解 | 拆成子问题逐个击破 |
| 问题太具体 | Step-Back | 回退到更宽泛的问题 |
| 问题和文档语义差距大 | HyDE | 先生成假设答案再检索 |
| 有元数据过滤需求 | SelfQueryRetriever | 自然语言自动拆过滤条件 |
| 关键词和语义都要 | EnsembleRetriever | BM25 + 向量混合 |
| 结果排序不够精准 | ReRank | 粗排 + 精排两步走 |
| 文档质量不稳定 | CRAG | 评估相关性,差就网搜 |
| 长文档宏观+细节 | ParentDocument / RAPTOR | 多层次检索 |
Tools 工具
是什么:LLM 可以调用的外部能力
有什么用:让 AI 能做查天气、搜索、计算等真实操作
必须掌握:
@tool装饰器 → 最常用的创建方式description写清楚 → LLM 靠这个决定要不要调用name/args/return_direct→ 工具四要素
Function Calling
是什么:LLM 调用工具的底层机制
有什么用:让 LLM 从"只会说"变成"能做事"
必须掌握:
bind_tools()→ 告诉 LLM 有哪些工具response.tool_calls→ LLM 返回的调用指令ToolMessage→ 把工具结果反馈给 LLM- LLM 只返回指令,不执行工具,执行是你的代码
Agent
是什么:能自主决定调用哪些工具、调几次的智能体
有什么用:处理需要多步推理的复杂任务
必须掌握:
create_tool_calling_agent→ 首选(模型原生支持)create_react_agent→ 兼容性好(所有模型)AgentExecutor→ 执行 Agent,设max_iterations防死循环- Agent vs Chain → Chain 流程固定,Agent 自主决策
LangGraph
是什么:构建有状态、可循环、可分支流程的图框架
有什么用:解决普通 Chain/Agent 无法处理的复杂流程
必须掌握:
| 概念 | 是什么 |
|---|---|
| State | 节点间传递的数据,TypedDict 定义 |
| Node | 执行操作的函数,接收 state 返回更新字段 |
| Edge | 固定连接,add_edge |
| 条件 Edge | 动态路由,add_conditional_edges + 路由函数 |
add_messages | 消息字段必须加这个注解,追加而不是覆盖 |
| MemorySaver | 状态持久化,配合 thread_id 隔离会话 |
| interrupt | 人在环路,执行前/后暂停等待人工确认 |
何时用 LangGraph:
需要循环 → LangGraph
需要条件分支 → LangGraph
需要人工介入 → LangGraph
多 Agent 协作 → LangGraph
其他情况 → 普通 Chain 或 AgentExecutor 够用
一句话总结整个体系
Prompt | LLM | Parser → 基础链
+ Memory → 有记忆的对话
+ Retriever → RAG 问答
+ Tools + Agent → 自主完成任务
+ LangGraph → 复杂流程控制