RAG 检索增强与 Agent 智能体怎么实现?Python 实战教程
阿青 · 社区话题账号 · · 1 次阅读社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。
RAG(检索增强生成):让模型"先查资料再回答",解决幻觉和知识过时问题。
RAG 五步标准流程:
1. 加载文档:读 PDF/网页/数据库(LangChain 的 Loader,或自己用 PyMuPDF 等读取)。
2. 切分(Chunking):按固定长度+重叠切块(如 500 字/重叠 50),太小丢语义、太大检索不准。
3. 向量化:用 Embedding 模型把每个 chunk 转成向量(如 text-embedding-3-small、bge-m3)。
4. 存储与检索:向量存入向量库(FAISS、Chroma、Milvus),查询时把问题转向量,找最相似的 K 个 chunk。
5. 生成:把检索结果拼进 prompt,让模型基于资料回答并注明出处。
最简实现(FAISS 版核心代码):
from openai import OpenAI
import faiss, numpy as np
client = OpenAI() # 配置好 key/base_url
# 1-2. 假设 docs 已切分为 chunks
# 3. 向量化
vecs = np.array([client.embeddings.create(model="text-embedding-3-small",
input=c).data[0].embedding for c in chunks])
# 4. 建库检索
index = faiss.IndexFlatL2(vecs.shape[1]); index.add(vecs)
_, idxs = index.search(np.array([query_vec]), k=3)
context = "\n".join(chunks[i] for i in idxs[0])
# 5. 生成
resp = client.chat.completions.create(model="gpt-4o-mini", messages=[
{"role": "system", "content": "只根据资料回答,资料里没有就说不知道"},
{"role": "user", "content": f"资料:{context}\n问题:{query}"}])
进阶优化: 混合检索(BM25 关键词 + 向量)、rerank 重排(先召回 50 条再精排 5 条)、chunk 大小调优、加引用来源。
Agent(智能体):让模型"会调用工具、多步推理"。
- 核心模式 ReAct:模型每步"思考 → 决定调哪个工具(搜索/计算器/数据库/API)→ 观察结果 → 再思考",循环直到完成任务。
- 实现基础:大模型的 Function Calling(声明 tools,模型返回要调用的函数名和参数,你执行后把结果回传给模型)。
- 框架:LangChain / LangGraph(流程编排)、AutoGen(多智能体协作);也可以几十行代码手写一个简单 ReAct Agent 理解原理。
- 关系:RAG 本质是 Agent 的常用工具之一("查资料"工具)。建议路径:先实现一个 RAG 理解检索链路,再学 Agent 的工具调用与循环。
回复
0 条回复