“想让ChatGPT参考公司手册回答问题”“想检索并总结新论文”——这些任务可能需要模型已学知识之外的资料。可以在回答时把相关材料提供给模型。

其中一种方法是RAG (Retrieval-Augmented Generation/检索增强生成)。它从外部资料中检索相关信息,加入模型回答时使用的上下文。现成的AI功能也能参考文档,但上传文件并不意味着所有功能都使用相同的检索流程。

本文将用3个步骤图解RAG的工作原理,从向量数据库、LangChain实现到与微调的区别,面向初学者讲清楚,但同时保持技术层面的准确性。

RAG(Retrieval-Augmented Generation)

检索增强生成——为LLM提供外部知识的机制

用户
输入问题
Question
向量数据库
Retrieval(检索)
Pinecone / Qdrant
Chroma / pgvector
LLM
Generation(生成)
GPT / Claude
Gemini / Llama
回答
附带依据回答
Answer
外部知识
公司文档 / PDF
手册 / FAQ
论文 / 新闻
Augmented Prompt
检索结果 + 问题
↓ 传递给LLM
3步运转的RAG
① Retrieval(检索) → ② Augmented(增强) → ③ Generation(生成)
用资料补充已学知识,仍需检查检索、回答和权限

1. RAG是什么——Retrieval-Augmented Generation

RAG(Retrieval-Augmented Generation) 直译就是“用检索(Retrieval)增强(Augmented)的生成(Generation)”。中文里通常译为“检索增强生成”。

一句话概括,RAG是让LLM (大语言模型)在生成回答时参考从外部检索到的相关信息的机制。本文图示介绍先检索、再回答的基本形式。检索来源也可以是现有数据库或关键词搜索,并非必须使用独立的向量数据库。

用做菜来类比

单独的LLM就像是“靠记忆做饭的厨师”。手艺虽好,但不知道的菜谱做不出来,也不清楚冰箱里有什么。

RAG则相当于“给厨师一本菜谱,再告诉他冰箱里有什么食材,然后让他做菜”。厨师可以一边翻菜谱,一边用现有食材做出最合适的菜。

“Retrieval”、“Augmented”、“Generation”各自的角色

单词含义在RAG中的角色
Retrieval检索 · 取回从数据库中取出与问题相关的文档
Augmented增强 · 扩展把取回的信息加进提示词,再交给LLM
Generation生成LLM参考检索结果生成最终回答

关键不是重新训练LLM,而是每次提问时从外部提供所需的信息。这与下文的微调不同。

LangChain的检索指南介绍了这一基本形式,以及如何使用现有SQL数据库或文档系统作为检索来源。

2. 为什么需要RAG——LLM自身的3个局限

仅靠ChatGPT、Claude这样的LLM,有3个问题难以解决。

局限1:知识截止(信息时效性)

仅靠模型已学到的知识,无法核实训练后发生变化的信息。知识截止日期因模型而异,之后的事件需要通过资料或检索结果核实。

  • “讲讲昨天发布的新产品” → 核实发布资料
  • “上周更新的使用条款有哪些变化” → 核实新条款
  • “今天的汇率是多少” → 核实带时间标记的数据

RAG可以使用从新闻、数据库或API获取的信息,但旧资料仍可能导致旧答案。需要更新资料并检查检索结果。

局限2:幻觉(看似合理的胡编)

LLM被问到不知道的事情时,常常会编出看起来很可信的答案。这就是所谓的幻觉(hallucination)。

例如,未提供公司私有规则时询问休假天数,模型可能编造一个看似合理的数字。这只是说明机制的例子,并非本文实际运行或观察到的回答。

RAG检索实际资料,帮助回答建立在依据之上。保留来源元数据后,可以显示文档名或页码。但显示引用不代表答案正确,仍可能漏检资料或误读内容。

局限3:无法访问公司内部数据与私有数据

不能假定公开模型知道公司的私有手册或合同。提供资料之前,也要核实使用权限和数据发送对象。

RAG用于选择相关资料交给模型,它本身不保证机密保护。即使数据库在公司内部,外部嵌入API或LLM API仍会接收资料、问题或检索片段。请核实检索阶段的用户权限、发送对象、保存与日志条件,具体区别见常见问题。

3. 工作原理——3步运转的RAG

RAG的运行可以分为“预处理(建索引)”和“运行时(问答)”两个阶段。

RAG流水线全景图

从提问到答案的完整流程

▶ 运行时阶段:回答用户提问
① 提问
“年假几天?”
User Query
② Embed
嵌入模型
[0.12, -0.45, ...]
③ 向量检索
最近邻 Top-K
Cosine Similarity
④ 取出片段
相关文档3-5条
第15条 年假...
↓
⑤ LLM + Context(Augmented Prompt)
“请参考以下内容回答:[chunk] 问题:[用户提问]”
GPT / Claude / Gemini 基于依据生成回答
↓
⑥ 回答(附引用来源)
“入职6个月起10天(参见员工手册第15条)”
▶ 预处理阶段:将文档向量化
文档
PDF / Word
分块切分
500-1000字
Embedding
向量化
向量数据库
存储与索引
* 文档新增或更新时执行

预处理阶段——把文档向量化并保存

  1. 收集文档:PDF、Word、HTML、Markdown等,把要用到的文档收集起来
  2. 分块切分:把文档切成合适的长度(如500~1000字)
  3. 嵌入(Embedding):用嵌入模型(如OpenAI text-embedding-3-small)把每个分块转成1536维等的向量(数值数组)
  4. 存入向量数据库:把分块和对应的向量存进专用的向量库(Pinecone、Qdrant等)

这一步在文档新增或更新时执行。

运行时阶段——回答问题的3个步骤

用户提问到来时,处理流程如下。

  1. Step 1: Retrieval(检索)
    • 用同一个嵌入模型把问题文本向量化
    • 在向量数据库中获取与问题相关的Top-K个分块 (本例为3个)
    • 相似度计算常用cosine similarity(余弦相似度)
  2. Step 2: Augmented(增强)
    • 把取出的分块作为“参考信息”嵌入提示词
    • 形如:“请基于以下信息回答问题:[检索结果] 问题:[用户提问]”
  3. Step 3: Generation(生成)
    • 由LLM(GPT、Claude、Gemini等)基于参考信息生成回答
    • 必要时附带“参考了哪份文档”的引用

具体例子:在ChatGPT里查询公司员工手册

以下天数、工龄和条文编号属于用于解释机制的虚构公司规则,并不表示实际的休假制度。

“年假有几天?”的处理流程:

  1. 问题被嵌入模型转成向量 → [0.12, -0.45, 0.78, ...]
  2. 从向量库中取出与“假期”、“年假”相关的3个分块
  3. 取出的分块如:“第15条 年休假:入职满6个月的员工享有10天...”、“根据工龄最多20天...”等
  4. 组装提示词:“参考信息:第15条... 问题:年假有几天?”
  5. LLM回答:“入职6个月起10天,根据工龄最多20天(参见员工手册第15条)”

4. RAG的核心组件

下面看构成RAG的5大组件。

① 嵌入模型(Embedding Model)

把文本转换成数值向量的AI模型。训练目标是让语义相近的文本在向量空间中靠近;实际检索效果仍需评估。

模型提供方特点
text-embedding-3-smallOpenAI默认1536维,可通过dimensions参数缩短
text-embedding-3-largeOpenAI默认3072维,可通过dimensions参数缩短
voyage-4Voyage AIAnthropic 的文档中有介绍,另有轻量版和开放权重版
Cohere EmbedCohere多语言资料检索的候选模型
multilingual-e5-largeMicrosoft (公开模型)可考虑本地运行,需确认使用条件和计算资源
BGE-M3BAAI (OSS)多语言模型,可考虑本地运行

OpenAI模型的默认维度和缩短方式见官方嵌入指南。比较候选模型时,应评估自有资料的检索结果,而非只看维度。

② 向量数据库

用于保存向量并检索相似向量的数据库或扩展,下一节详细介绍。

③ 检索引擎(Retriever)

除了向量检索,常常还会结合关键词检索(如BM25)或混合检索一起使用。

④ LLM(生成端)

负责生成最终回答的大语言模型。GPT、Claude、Gemini、Llama等。商用API或开源本地模型都能跑。这些系列的版本都在不断更替,当前具体的模型名请查看主要AI模型一览。

⑤ 提示词模板

把检索结果和用户提问拼起来交给LLM的模板。它对RAG的精度有举足轻重的影响。

你是一名熟悉公司规章的助手。
请仅根据以下参考信息回答问题。
若参考信息中没有答案,请回答"暂无相关信息"。

【参考信息】
{retrieved_chunks}

【问题】
{user_question}

【回答】

5. 什么是向量数据库

向量数据库提供存储高维向量和检索相似向量的索引与功能。可以使用专门服务,也可以通过pgvector等扩展现有PostgreSQL。速度和精度取决于索引、数据量和设置。

主流向量数据库对比

数据库类型特点价格
Pinecone托管SaaS由服务方管理基础设施Starter免费,Builder每月$20固定费用;Standard每月最低使用费$50,超出部分按量收费 (官方价格)
WeaviateOSS + 云GraphQL API,混合检索OSS免费;Cloud提供Free,Flex每月$45起 (官方价格)
QdrantOSS + 云向量检索与元数据过滤自托管或Cloud,计算资源与云费用另计
ChromaOSS可从Python使用自托管的计算资源和运维费用另计
pgvectorPostgreSQL扩展可用于现有PostgreSQL核实扩展使用条件和数据库运维费用
MilvusOSS + 云构建向量检索系统自托管或Zilliz Cloud,费用条件不同
Elasticsearch搜索引擎向量检索与关键词搜索取决于发行版本、功能和合同,也有托管服务
Vertex AI Vector SearchGoogle Cloud与GCP生态深度整合按量计费

该选哪个

Pinecone和Weaviate价格于2026年10月9日依据官方价目表核实。免费软件仍需服务器和维护资源;云端总价会因容量、查询量、额外AI功能和备份等变化。

  • 用Python试验检索: Chroma等,需准备包和模型
  • 已有PostgreSQL: pgvector可统一数据库管理
  • 让服务方管理基础设施: Pinecone等托管服务,仍需配置索引、容量与权限
  • 自行托管: Qdrant、Weaviate等,自行管理运维与权限
  • 资料量较大: 把Milvus等列为候选,用实际数据评估索引、容量和检索性能

顺便一提,如果你在为部署位置犯愁,可以参考 PaaS(Vercel等)与共享主机、VPS、云的对比。

6. 主要用途——RAG用在哪里

RAG可以用于参考公司文档、商品信息等资料作答的系统。以下介绍可能的用途。

用途1:公司内部文档QA(知识库)

检索员工手册、业务手册、技术规格、会议纪要和销售资料,作为回答员工问题的参考。需要按用户区分可访问的资料,并把文档变化反映到索引中。

用途2:客服自动化

把FAQ与历史工单做成RAG,由聊天机器人完成一线响应。人工客服可以集中处理复杂问题。

用途3:法律、医疗等专业问答

检索判例、医学论文和指南,整理供专业人员核实的参考信息。需要显示来源,并由人核实资料的适用条件和回答内容。有引用不代表判断正确或安全。

用途4:研究论文检索与摘要

检索获准使用的论文或摘要,为研究趋势或相关方法的问题提供参考。应标明取得资料的范围与发布日期,并到原文核实结果和研究条件。

用途5:电商网站的商品检索与FAQ

把商品手册、评论、退换政策等整合成RAG。“这款吸尘器对宠物毛发友好吗?”这样的自然语言检索就能跑通。

用途6:面向开发者的文档对话

检索软件库的官方文档,回答“这项操作有示例代码吗”等问题。把目标版本加入检索条件,避免混用不兼容的文档。

用途7:公司代码库的检索与解释

检索代码和设计资料,辅助回答函数用法或类似逻辑所在文件的问题。GitHub Copilot Chat与Cursor、Claude Code等开发AI也能受益于代码参考,但各产品内部处理不一定与本文图示相同。

用途8: llms.txt等资料导航

llms.txt是用文本提供网站资料导航的提案。它可为搜索和资料收集提供线索,但不保证AI会读取或正确引用。

7. RAG vs 微调——该如何选择

“让LLM拥有专属知识”的方法中,与RAG并列被反复讨论的是 微调(Fine-tuning)。两者的思路从根本上就不同。

RAG vs 微调(Fine-tuning)

如何让LLM掌握知识?——两种根本不同的方法

RAG
运行时从外部库检索信息
方法
每次提问时都从外部数据库检索相关信息添加到提示词中再交给LLM处理
优点
○ 无需再训练模型即可更新资料和索引
○ 可标注引用来源(依据可见)
○ 可尝试基于参考资料回答
○ 无需训练任务就能试验参考资料
○ 可应对动态数据与最新信息
缺点
× RAG本身不更新模型权重
× 答案质量取决于检索精度
× 提示词变长,推理成本上升
适合场景
公司QA / FAQ / 法律 / 医疗 / 新闻检索
Fine-tuning
通过训练示例调整回答倾向
方法
准备期望输入输出的示例,通过追加训练调整模型权重
优点
○ 可学习特定文体、口吻、人设
○ 有时可以缩短所需提示词
○ 掌握专业领域的语言风格
○ 可针对特定任务调整回答
○ 按模型与方法选择运行方式
缺点
× 需要准备训练示例、追加训练和评估
× 改变已学知识需要再次训练
× 仅靠训练无法搜索和核实当前来源
适合场景
特定文体生成 / 专业领域措辞 / 推理优化

参考资料与调整回答倾向是不同目标,必要时组合使用并评估

根本差异

维度RAG微调
方法运行时从外部加载信息事先重新训练模型本身
知识更新更新资料和索引,需要处理变更改变已学知识需要追加训练
部署工作资料整理、索引、检索、权限、评估准备训练示例、追加训练、评估
运维成本检索、保存、生成、更新、评估生成、再训练、保存、评估,取决于提供方式
错误回答仍可能漏检或误读资料追加训练也不能消除错误
引用来源可显示取得的来源,仍需核实正确性仅靠训练不保证取得和核实来源
文体与语气可提供指令和示例,但不改变权重通过训练示例调整回答倾向
变化的信息需要能获取更新资料的设计不结合检索等机制就无法核实训练后的变化
机密数据处理核实检索、嵌入、生成、日志的各条路径核实训练、生成、保存、日志的各条路径

RAG适合的场景

  • 知识更新频繁(新闻、内部文档、商品信息)
  • 必须标注回答依据(法律、医疗、金融)
  • 不同问题需要不同资料,想评估检索相关片段,而非每次传入全文
  • 希望无需再训练模型,就试作参考资料回答的系统

微调适合的场景

  • 想让回答带特定文体或语气(企业品牌、人设)
  • 想让模型掌握专业领域的语言风格(医学、法律措辞)
  • 想评估缩短提示词或换用较小模型的节省,同时计入训练费用
  • 能够准备期望回答的训练示例和独立评估数据

微调的提供条件因服务而异。2026年10月9日核实的OpenAI官方资料说明,微调不向新用户提供。请先核实支持的模型和合同条件。

必要时组合使用并评估

RAG可以与微调组合,例如用追加训练调整回答格式,用检索提供更新资料。但组合不保证质量一定提高。

先确定期望回答与评估方法,再试验改善指令或添加资料是否足够。需要参考资料时考虑RAG,需要调整输出倾向时考虑微调。用实际输入比较费用、速度与质量。OpenAI的优化指南也从评估和改善指令开始,再针对合适用途考虑微调。微调后的模型能否本地运行,取决于权重发布、许可证和运行环境。

8. 自己搭建之前——先用手头的资料试一试

在自己搭建 RAG 之前,先用手头的资料确认“先检索再回答”这种形式到底有没有用,可以少走弯路。多数情况下,第一步的确认不用写代码就能完成。

步骤1: 估算能否传入全部资料

资料整体能放入所用模型的上下文时,也可以不检索而直接传入。Anthropic在2024年的Contextual Retrieval说明中,介绍了将少于20万token (约500页)的资料整体加入提示词,并使用提示词缓存的做法 (官方说明)。20万token不是所有模型共用的门槛,应按当前输入上限、资料长度、回答质量与费用判断。

步骤2:把资料放进现成的“项目”功能里提问

Claude 的 Projects 在资料接近上下文上限时,会自动切换为 RAG,最多可容纳 10 倍的内容。这是付费方案的功能,切换后界面上会有提示,回答时会使用“project knowledge search”工具(Claude 帮助中心)。ChatGPT 的 Projects 同样可以放入文件并提问,文件数量等上限按方案而定。

步骤3:用 10 个已知答案的问题来检验

准备 10 个你知道答案在资料哪里的问题,记录以下 3 点。

  1. 答案是否正确
  2. 作为依据给出的出处是否对得上
  3. 问资料里没有的内容时,是否会回答“资料中没有”

第3项出现编造时,重新指示“资料里没有就说没有”后再测。10个问题只是初次试验,即使多数正确也不证明生产适用性或安全性。应增加重要问题、相似资料、矛盾和访问权限等测试条件。

步骤4: 需要更多控制时,比较自建与托管方案

信号比较方案时要核实的项目
资料较多或每日更新容量、自动导入和索引更新
不同用户可看的资料不同检索阶段能否按用户权限限制结果 (见常见问题中的安全说明)
希望在内部系统或应用中调用回答API、集成方式、认证与价格
检索经常遗漏所需内容能否调整检索、重排序和评估

作为检索改善的例子,Anthropic报告称,Contextual Embeddings与Contextual BM25组合使前20个分块的检索失败率降低49%,结合重排序后降低67% (该公司的实验条件和结果)。这是在厂商评估数据上进行的检索测量,不保证自有系统的回答错误会按同样比例减少。

最小自建示例见下一节;混合检索和重排序等生产改进见RAG与向量数据库实现指南。

9. 实现方法——用LangChain搭建RAG

先介绍主流的RAG实现框架,再给出Python的最小示例代码。

主流框架

框架语言特点
LangChainPython / JS集成检索、模型和数据来源
LlamaIndexPython专精数据接入与索引
HaystackPython面向企业,控制粒度细
Semantic KernelC# / PythonMicrosoft开发,支持.NET集成
DSPyPython提示词自动优化
自行实现任意按需求组合检索与生成

用LangChain写一个最小的RAG

这是检索PDF相关片段并交给模型回答的学习示例。LangChain 1.x需要Python 3.10或以上。把API密钥设置在环境变量OPENAI_API_KEY中,并准备能访问所用OpenAI API模型的环境。不要把密钥写进代码或公开仓库。

本例把PDF文本和问题发送到嵌入API,把检索结果和问题发送到LLM API。即使Chroma在本地运行,也不代表全程本地处理。API的收费与条件需与ChatGPT订阅分别核实,请使用获准发送的非机密资料。此代码为未验证运行的学习用示例。动手运行前,请对照所用库版本的官方写法进行核对。

# pip install -U langchain-openai langchain-chroma langchain-text-splitters langchain-community pypdf
from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_chroma import Chroma

# 1. 加载文档
loader = PyPDFLoader("handbook.pdf")
docs = loader.load()

# 2. 分块切分
splitter = RecursiveCharacterTextSplitter(
    chunk_size=500, chunk_overlap=50
)
chunks = splitter.split_documents(docs)

# 3. 嵌入 + 构建向量库
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(chunks, embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

# 4. 检索(取与问题最接近的3个分块)
question = "年假有几天?"
found = retriever.invoke(question)
context = "\n\n".join(d.page_content for d in found)

# 5. 传入依据并生成回答
llm = ChatOpenAI(model="gpt-6-luna")
answer = llm.invoke([
    {"role": "system", "content": "只根据下面的资料回答。资料里没有的,就回答“资料中没有”。\n\n" + context},
    {"role": "user", "content": question},
])
print(answer.content)
print("引用源:", [d.metadata for d in found])

本例的设计是检索PDF相关片段,再把参考信息交给GPT-6 Luna回答,最后输出取得文档的元数据。页码等信息取决于原资料与加载器,回答中的引用是否正确仍需单独核实。

gpt-6-luna是2026年10月9日在官方模型页面核实的ID。使用前请在官方模型列表核实支持的API、使用条件和价格。用相同资料和问题比较依据理解、回答质量、速度与费用。

代码采用LangChain 1.x的包结构。LangChain 1.0把旧示例中的langchain.chains (包括RetrievalQA)移入独立的langchain-classic包。本例从langchain_text_splitters导入切分功能,把官方的“2-Step RAG”写成先检索、再传入依据生成回答的两步。导入路径和Python要求见官方迁移指南。实现时应记录包版本,并在可复现环境中验证。

面向生产环境的扩展

  • 分块切分的优化(语义切分、层级切分等)
  • 混合检索(向量 + 关键词BM25组合)
  • 重排(rerank)(用Cohere Rerank、voyage-rerank等对检索结果重新排序)
  • 查询改写(HyDE、Multi-Query等提升检索精度)
  • 评估管线(用RAGAS做自动评估)

10. RAG的挑战与对策

实际运行RAG时,应检查以下方面。

挑战1:分块切分的难题

如何切分文档,会显著影响检索精度。切得太短上下文会丢,切得太长检索精度又会下降。

对策:

  • 语义切分(按意义单元切)
  • 设置重叠(让相邻分块部分重合)
  • 层级切分(父子结构存储,检索用子,引用用父)

挑战2:Retrieval(检索)精度

会取到看似相关其实不同的分块、漏掉重要信息等。

对策:

  • 混合检索(向量 + BM25关键词)
  • 用重排模型在检索后重新排序
  • 多查询生成(用不同表述对同一问题检索)

挑战3:上下文长度限制

能传给LLM的token数有上限,无法塞入大量分块。

对策:

  • 限制K值(取Top 3~5)
  • 先做摘要再传入
  • 使用长上下文LLM(上限因模型而异,如今已有百万token级的模型;所用模型的上限请以官方文档为准)

挑战4:评估困难

RAG回答的质量很难客观度量,标注数据怎么做也是难题。

对策:

  • 使用 RAGAS(专门做RAG评估的开源框架)
  • 自动计算回答正确性、回答相关性、检索忠实度等指标
  • LLM-as-a-Judge(用另一个LLM打分)

挑战5:多语言与多模态

中英文混排的文档、含图PDF、表格图表等都不好处理。

对策:

  • 多语言嵌入模型(BGE-M3、Cohere Multilingual)
  • 把图像与表格预先用LLM转成文本(OCR + VLM)
  • 多模态嵌入(CLIP、Nomic等)

11. 主要工具与服务一览

下面把构建RAG常用的工具按类别汇总。

框架与库

  • LangChain ——集成检索、模型与数据来源
  • LlamaIndex——专注数据接入
  • Haystack——面向企业
  • DSPy——提示词自动优化

向量数据库(托管)

  • Pinecone ——托管的向量检索服务
  • Weaviate Cloud——支持GraphQL
  • Qdrant Cloud ——Qdrant的托管服务
  • Zilliz Cloud——Milvus的托管版

向量数据库(开源 · 自托管)

  • Chroma ——可从Python使用的向量检索
  • Qdrant ——向量检索与过滤
  • Weaviate——开源版
  • Milvus ——向量数据库
  • pgvector——PostgreSQL扩展

嵌入模型

  • OpenAI text-embedding-3 ——通过API生成嵌入
  • Voyage AI——Anthropic 文档中有介绍
  • Cohere Embed——多语言
  • BGE-M3 ——支持多语言的本地运行候选

无代码 / 托管RAG服务

  • ChatGPT Projects / 既有Custom GPTs ——参考资料的现成功能,需分别核实处理方式与条件
  • Claude Projects——Anthropic的RAG功能
  • Notion AI——Notion内文档检索
  • Microsoft Copilot (Microsoft 365) ——参考内部资料的候选,需核实合同、连接和权限
  • Dify——开源的无代码AI构建平台
  • Vertex AI Agent Builder——Google Cloud的RAG构建服务
  • Amazon Bedrock Knowledge Bases——AWS的托管RAG

评估工具

  • RAGAS——开源RAG评估框架
  • TruLens——综合评估LLM应用
  • LangSmith——LangChain官方的追踪与评估工具

想深入了解微调,可一并阅读什么是微调:它面向初学者讲解微调与 RAG 的取舍以及 LoRA/QLoRA 等方法。

常见问题

Q. ChatGPT能用RAG吗?

ChatGPT的Projects等功能可参考添加的资料,但不同文件并非一定采用相同处理。Enterprise官方说明区分文本直接加入上下文与搜索、表格的Python处理和图像解读。这是Enterprise的说明,不保证所有方案的内部实现。

面向开发者,OpenAI Responses API中的File Search工具提供已上传资料的语义搜索和关键词搜索。它与ChatGPT现成功能属于不同的API服务,也可以自行使用LangChain搭建。Claude Projects的RAG切换条件见第8节。

按当前官方说明,个人Free、Go、Plus和Pro账户不能新建或发布GPT。既有GPT的使用、编辑及组织账户的创建另有条件。

Q. RAG的运维成本大概多少?

仅凭文档数和问题数无法确定月费。费用取决于资料长度、更新量、检索上下文、回答长度、模型和数据库条件。主要项目是资料与问题的嵌入、数据库存储与检索、LLM输入输出和索引更新,还需另计服务器、评估、监控和维护。

先用非机密资料记录每次问题的输入输出token数和检索用量,再换算为预期次数,加入数据库最低费和更新成本,并参考API官方价格与数据库价目表。

Q. RAG和往ChatGPT里上传文件有什么区别?

ChatGPT上传是参考资料的现成功能,根据文件类型和功能使用检索、直接读取或代码处理。自建RAG可以设计检索、索引更新、用户权限、评估和发送对象,但也需要开发与运维。还可选择托管RAG。

按文件容量、更新频率、权限、API集成等条件判断。自建可以设计大量资料或本地部署,但容量与安全并不会自动得到保证。

Q. 用RAG就能彻底消除幻觉吗?

不能完全消除。即使用RAG,也会因为(1) 没检索到相关文档;(2) 有检索结果但LLM理解错误;(3) 检索结果之间互相矛盾——而出错。对策包括加上“参考信息中没有就回答没有”的提示词约束、明示引用源、用RAGAS等做持续评估。即使采取这些措施,也不能保证每个问题都得到正确答案,医疗、法律等关键场景必须保留人工复核。

Q. 如何处理中文文档?

可把OpenAI text-embedding-3、Cohere Embed、BGE-M3等多语言嵌入模型列为候选,分块时考虑中文标点与词语边界。回答模型也应使用目标资料和问题评估。

支持中文不代表精度排名已确定。用相同资料和问题比较漏检、依据一致性、回答正确性与费用,版本或设置变化后重新评估。

Q. RAG和Agent(智能体)的区别是什么?

RAG把检索资料提供给回答生成。本文基本例是先检索再生成的2-step RAG,但RAG不只限于固定流程。Agentic RAG由代理判断是否检索及使用什么工具,Hybrid RAG可加入结果验证和再次检索。

代理可根据目标选择检索、计算等工具,也可以把RAG作为组件,但并非所有代理都使用RAG。LangChain检索指南区分了这些架构。

Q. 安全性怎么办?不想把机密信息给AI看到

“用了RAG”或“数据库在本地”不代表资料安全。需要在文档读取、嵌入、检索、生成、日志与评估的各阶段核实信息发送到哪里。避免外部发送时,不仅数据库,嵌入模型和回答模型也要本地运行,并管理日志和评估路径。

OpenAI API默认不把输入输出用于模型训练,明确选择分享数据的opt-in除外。但不用于训练与不保存是两回事。请到官方数据管理资料核实滥用监控日志、文件与向量存储等应用状态、删除条件和可用的保留控制。Azure也分别说明训练、存储与监控条件。

应在资料进入检索结果之前检查用户权限,检索到机密资料后仅指示“不要透露”并不足够。这是设计检查点,并非本文验证了某环境的机密保护。

Q. 搭建RAG需要多长时间和什么技能?

学习原型需要Python基础、API密钥与收费知识、资料读取和检索结果检查。代码短不代表生产准备也能很快完成。

生产还需要资料整理与更新、认证和检索权限、评估数据、监控、故障应对、日志与费用管理。周期取决于资料与需求,先试验小范围,再估算剩余工程与负责人。结合微调时,也要检查第7节的提供条件。

2026年10月9日已依据官方资料复核价格、产品提供条件和API数据处理的说明。本文未验证代码和API执行、实际收费或真实环境的机密保护。实现前请核实各服务的最新条件。