RAG项目全链路实践指南:从部署到问题排查
这次我们来看一个名为“RAG残破街区大翻盘”的项目。从标题来看,这很可能是一个基于检索增强生成(RAG)技术,针对特定领域(如“残破街区”可能指代游戏、模拟或特定数据集场景)进行优化或创新的技术方案。虽然项目描述中带有“可惜没有能拿下这场比赛的最终胜利”这样的遗憾性表述,但这恰恰反映了技术探索的真实过程——并非所有尝试都能立即成功,但过程中的技术选型、架构设计和问题排查极具参考价值。
对于关注RAG、大模型应用、本地知识库构建和垂直领域优化的开发者而言,这个项目提供了一个绝佳的分析样本。我们将重点拆解:一个RAG项目可能包含哪些核心模块?在面临“未能最终胜利”的挑战时,常见的瓶颈在哪里?如何从环境部署、数据处理、检索策略、生成优化到效果评估进行全链路实践与问题定位。本文不会虚构不存在的成功案例,而是基于通用的RAG技术栈,为你构建一套可复现的测试、验证与排查方法论,让你在评估或自建类似项目时,能快速抓住重点,避开深坑。
1. 核心能力速览
虽然输入材料有限,但我们可以基于“RAG”和“残破街区”这一场景,推断该项目可能涉及的核心技术栈与能力边界。下表结合通用RAG实践与特定场景需求进行了梳理:
| 能力项 | 说明与推断 |
|---|---|
| 项目类型 | 检索增强生成(RAG)系统,可能专注于游戏攻略、场景描述、剧情生成或特定领域QA。 |
| 核心功能 | 1.文档处理:对“残破街区”相关文本、代码或数据进行切片、向量化。 2.向量检索:根据用户问题,从知识库中快速检索最相关的上下文片段。 3.增强生成:结合检索到的上下文,指导大模型生成更准确、专业的回答或内容。 4.可能扩展:支持多轮对话、历史记忆、混合检索(关键词+向量)。 |
| 技术栈推测 | •嵌入模型:如text2vec,BGE,OpenAI Embeddings(需API)。•向量数据库:如 Chroma,Milvus,FAISS,Qdrant。•大语言模型:如 ChatGLM,Qwen,Llama系列或GPT(API)。•应用框架:可能基于 LangChain,LlamaIndex,FastAPI或自建Pipeline。 |
| 硬件门槛 | CPU/内存:文档处理与轻量检索可在CPU进行,建议16GB+ RAM。 GPU(可选):如需本地运行大模型(7B以上)进行生成,需要至少8GB显存。若仅使用嵌入模型,部分轻量模型可在CPU运行或使用低显存GPU。 |
| 启动方式 | 取决于具体实现,常见有: •命令行启动:通过Python脚本启动服务。 •WebUI启动:提供Gradio或Streamlit交互界面。 •API服务启动:通过FastAPI等提供标准化接口。 |
| 是否支持API | 是。成熟的RAG系统通常会暴露查询接口,供其他应用调用。 |
| 是否支持批量任务 | 是。通常支持批量文档入库(向量化)和批量查询。 |
| 适合场景 | • 构建垂直领域知识问答系统(如游戏、法律、医疗)。 • 为创作提供背景资料辅助(如小说场景、角色设定)。 • 企业内部知识库检索与摘要生成。 • 学术研究:测试不同检索策略与生成模型的效果。 |
2. 适用场景与使用边界
一个名为“RAG残破街区”的项目,其适用场景可能非常聚焦。
它适合谁?
- 垂直领域开发者:希望为特定游戏、世界观或设定构建智能问答或内容生成辅助工具。
- RAG技术学习者:想通过一个具体(哪怕是未完全成功的)案例,理解从数据准备到服务上线的全流程。
- 内容创作者:需要根据大量背景设定资料,快速生成符合设定的剧情片段、角色对话或场景描述。
它能解决什么问题?
- 知识查找效率低:从海量的游戏设定文档、剧情文本中手动查找信息费时费力。RAG可以秒级返回相关段落。
- 生成内容脱离设定:直接让大模型生成内容容易“胡编乱造”。RAG通过提供精准上下文,将生成内容约束在既定事实范围内。
- 构建专属知识库:将私有、非公开的资料转化为可查询、可推理的数字资产。
它不适合什么场景?
- 需要100%确定性答案的场景:RAG基于概率生成,即使有上下文,也可能产生细微偏差或整合错误。不适合法律条文、财务数据等要求绝对精确的领域。
- 实时性要求极高的场景:从检索到生成需要一定时间(几百毫秒到数秒),不适合高频交易、实时控制系统。
- 知识库极度稀疏或质量很差的场景:“垃圾进,垃圾出”。如果“残破街区”的原始资料本身矛盾、残缺或噪声很大,系统效果会大打折扣。
版权与合规边界
- 数据来源:必须确保用于构建向量知识库的文本、图像、音频等素材拥有合法授权或属于开源许可范围。使用未经授权的游戏剧本、小说原文等存在侵权风险。
- 生成内容:系统生成的内容不得用于恶意用途,如生成虚假信息、进行人身攻击或制造社会恐慌。开发者有责任设置内容过滤机制。
- 隐私保护:如果知识库包含个人隐私信息,必须进行严格的脱敏处理,并确保API接口有访问控制,防止数据泄露。
3. 环境准备与前置条件
在部署或测试一个RAG项目前,需要搭建一个标准化的Python环境。以下是一个通用性极强的准备清单,你可以根据实际项目代码进行调整。
操作系统
- 推荐:Linux (Ubuntu 20.04/22.04 LTS) 或 Windows 10/11 (WSL2环境下)。
- macOS:同样支持,但ARM架构芯片(M系列)需注意某些依赖的兼容性。
Python环境
- 版本:Python 3.8 - 3.11。建议使用
conda或venv创建独立的虚拟环境。 - 包管理工具:
pip版本需更新至最新。
关键依赖
- 深度学习框架:
PyTorch或TensorFlow。版本需与CUDA(如果使用GPU)匹配。可通过官方命令安装。 - 向量数据库客户端:如
chromadb,pymilvus,faiss-cpu/faiss-gpu。 - 大模型与嵌入模型库:如
transformers,sentence-transformers,openai(如需调用API)。 - 应用框架:如
langchain,llama-index,fastapi,gradio。 - 工具库:
numpy,pandas(数据处理),requests(HTTP调用)。
硬件检查
- CPU与内存:建议4核以上CPU,16GB以上内存。文档分词和向量化比较吃内存。
- GPU(可选但推荐):
- 嵌入模型推理:即使使用GPU,显存占用通常不高(1-4GB),但能显著加速批量向量化。
- 大模型本地推理:如果项目包含本地LLM,显存需求取决于模型大小(例如,7B模型INT4量化可能需要6-8GB显存)。
- 驱动:确保已安装正确版本的NVIDIA驱动和CUDA Toolkit(如CUDA 11.8或12.1)。
磁盘空间
- 预留至少10-20GB空间,用于存放原始文档、向量数据库文件、模型缓存(如果从Hugging Face下载)和日志。
网络与端口
- 确保能从GitHub、Hugging Face等平台拉取代码和模型(必要时需要配置网络环境)。
- 如果项目以Web服务启动,检查默认端口(如7860、8000)是否被占用。
4. 安装部署与启动方式
由于没有具体的项目代码,这里提供三种最常见的RAG项目启动模式的操作范式。你可以根据项目仓库的README文件,对号入座。
4.1 模式一:基于LangChain/ LlamaIndex的脚本启动
这类项目通常提供一个主脚本,集成好了流水线。
# 1. 克隆项目(假设项目在GitHub上) git clone <项目仓库URL> cd rag-derelict-district # 2. 创建并激活虚拟环境 conda create -n rag_env python=3.10 conda activate rag_env # 3. 安装依赖 pip install -r requirements.txt # 如果项目没有requirements.txt,可能需要手动安装核心包 # pip install langchain chromadb sentence-transformers fastapi uvicorn # 4. 准备知识库文档 # 将你的“残破街区”相关文本文件(如.txt, .md, .pdf)放入 ./data 目录 # 5. 运行知识库构建脚本(通常名为 build_index.py, ingest.py 等) python scripts/ingest.py --data_dir ./data --vector_store chroma --persist_dir ./chroma_db # 6. 启动查询服务(可能是WebUI或API) # 启动WebUI python app_web.py # 或启动API服务 uvicorn app_api:app --host 0.0.0.0 --port 8000 --reload4.2 模式二:Docker Compose一键启动
更工程化的项目会提供Docker配置。
# docker-compose.yml 示例(具体内容需参照项目) version: '3.8' services: vector-db: image: milvusdb/milvus:latest ports: - "19530:19530" rag-api: build: . depends_on: - vector-db environment: - MILVUS_HOST=vector-db ports: - "8000:8000" volumes: - ./data:/app/data - ./models:/app/models启动命令:
# 在项目根目录下 docker-compose up -d4.3 模式三:配置文件驱动的服务
项目可能通过一个中心化的配置文件(如config.yaml)管理所有参数。
# config.yaml 示例 embedding: model_name: BAAI/bge-small-zh-v1.5 device: cpu # 或 cuda:0 vector_store: type: chroma persist_path: ./vector_db llm: type: openai # 或 local model_name: gpt-3.5-turbo api_key: ${OPENAI_API_KEY} # 从环境变量读取 # 若为本地模型 # type: transformers # model_path: ./models/Qwen-7B-Chat-Int4 server: host: 0.0.0.0 port: 7860启动时指定配置文件:
python main.py --config config.yaml核心操作:无论哪种模式,部署后第一件事是构建向量知识库。确保你的原始文档已就位,并成功运行了数据导入脚本,看到向量数据库文件生成。
5. 功能测试与效果验证
部署成功后,需要系统性地验证RAG系统的各个环节是否工作正常。我们设计一个从易到难的测试流程。
5.1 测试1:服务健康检查
目的:确认API或Web服务已正常启动。操作:
- WebUI:浏览器访问
http://localhost:7860(或你配置的端口),看界面是否能加载。 - API:使用
curl或Postman调用健康检查端点(如果有,如/health),或简单查询。
curl -X GET "http://localhost:8000/health" # 期望返回:{"status": "ok"}5.2 测试2:基础检索功能测试
目的:验证向量数据库是否构建成功,能否根据问题返回相关文档片段。操作:通过接口提交一个简单查询。
curl -X POST "http://localhost:8000/retrieve" \ -H "Content-Type: application/json" \ -d '{ "query": "残破街区的主要势力有哪些?", "top_k": 3 }'预期结果:返回一个JSON,包含2-3个最相关的文本片段(context)及其相关性分数(score)。成功标准:返回的片段确实来自你导入的知识库,且内容与问题有一定相关性。分数通常越高越好。
5.3 测试3:端到端问答测试
目的:测试完整的“检索+生成”流水线。操作:向问答接口提问。
curl -X POST "http://localhost:8000/chat" \ -H "Content-Type: application/json" \ -d '{ "question": "我如何在残破街区中找到‘老烟枪’?", "history": [] }'预期结果:返回一个结合了检索上下文的、连贯的答案。成功标准:
- 答案不是大模型的“凭空想象”,应包含知识库中的具体地点、人物或物品名称。
- 答案通顺,直接回答了问题。
- (可选)响应中可包含引用的来源片段ID。
5.4 测试4:多轮对话测试
目的:验证系统是否能维护对话历史,进行指代消解。操作:模拟连续提问。
- 第一问:“‘锈蚀帮’的老大是谁?”
- 第二问:“他通常在哪里活动?”(这里的“他”应指代上一问的老大)
预期结果:第二问的答案应基于第一问的实体(锈蚀帮老大)进行检索和生成。成功标准:系统能正确理解上下文中的指代关系,答案保持一致。
5.5 测试5:边界与压力测试
目的:发现系统的弱点。
- 模糊查询:提问“这里有什么?”。系统应能拒绝或返回一些概括性内容,而不是胡编。
- 知识库外问题:提问“如何做红烧肉?”。系统应回答“我不知道”或引导回主题领域,而不是强行利用不相关片段生成误导性答案。
- 长文本生成:请求“写一段关于残破街区夜晚的描写”。测试生成模型的长文本能力和是否遵循检索到的风格设定。
5.6 效果评估要点
在验证过程中,重点关注:
- 检索相关性:返回的文档片段是否切题?这是RAG的基石。
- 生成忠实度:答案是否严格基于提供的上下文?有没有添加未提及的“私货”?
- 答案有用性:答案是否真正解决了问题?还是含糊其辞?
- 延迟:从提问到收到回答,时间是否可接受?(通常1-5秒内)
“残破街区大翻盘可惜没有能拿下这场比赛的最终胜利”这个描述,可能暗示项目在最终效果评估(如准确率、F1值)上未达到预期。在你自己测试时,可以设计一个包含20-30个核心问题的测试集,人工评估答案质量,量化成功率。
6. 接口API与批量任务
一个成熟的RAG系统必须提供稳定的API和批量处理能力。以下是通用设计。
6.1 核心API接口示例
一个典型的RAG服务可能提供以下端点:
# 假设使用FastAPI框架 from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import List, Optional app = FastAPI(title="RAG残破街区服务") class QueryRequest(BaseModel): query: str top_k: int = 3 history: Optional[List[dict]] = None class ChatRequest(BaseModel): question: str history: Optional[List[dict]] = None @app.post("/retrieve") async def retrieve_documents(request: QueryRequest): """ 纯检索接口:返回相关文档片段,不生成答案。 """ # 调用检索模块 results = retriever.search(request.query, k=request.top_k) return {"query": request.query, "results": results} @app.post("/chat") async def chat_with_rag(request: ChatRequest): """ 端到端问答接口:检索+生成。 """ # 1. 检索 contexts = retriever.search(request.question, k=3) # 2. 构建增强提示 augmented_prompt = build_augmented_prompt(request.question, contexts, request.history) # 3. 调用LLM生成 answer = llm.generate(augmented_prompt) # 4. 返回 return {"question": request.question, "answer": answer, "contexts": contexts} @app.post("/ingest") async def ingest_documents(files: List[UploadFile]): """ 批量文档入库接口。 """ for file in files: # 解析文件内容 content = await file.read() # 文本分割 chunks = split_text(content) # 向量化并存入数据库 vector_store.add_documents(chunks) return {"message": f"成功处理 {len(files)} 个文件"}6.2 批量任务处理
对于需要处理大量查询或文档的场景:
批量问答:
import pandas as pd import requests import json df = pd.read_csv("questions.csv") # 包含‘question’列 answers = [] api_url = "http://localhost:8000/chat" for idx, row in df.iterrows(): try: resp = requests.post(api_url, json={"question": row['question']}, timeout=30) if resp.status_code == 200: answers.append(resp.json()['answer']) else: answers.append(f"Error: {resp.status_code}") except Exception as e: answers.append(f"Request failed: {e}") # 避免请求过快 time.sleep(0.5) df['answer'] = answers df.to_csv("questions_with_answers.csv", index=False)批量文档入库:
- 编写脚本遍历指定目录下的所有
.txt,.md,.pdf文件。 - 调用本地函数或
/ingestAPI 接口进行批处理。 - 关键点:加入错误重试机制和日志记录,防止部分文件失败导致整个任务中断。
7. 资源占用与性能观察
RAG系统的性能瓶颈通常出现在检索和生成两个环节。学会观察资源占用是优化的第一步。
如何观察?
- Linux/macOS:使用
htop,nvidia-smi(GPU),ps aux。 - Windows:使用任务管理器,或
nvidia-smi命令(需安装CUDA工具包)。
关键指标与优化方向:
向量检索阶段
- CPU/内存:检索本身计算量不大,但加载大型向量索引到内存可能消耗数GB内存。使用
FAISS的IndexIVFPQ等量化索引可以大幅减少内存占用。 - 延迟:首次查询可能较慢(需加载索引),后续查询应很快(毫秒级)。如果慢,检查向量数据库配置和索引类型。
- CPU/内存:检索本身计算量不大,但加载大型向量索引到内存可能消耗数GB内存。使用
文本嵌入阶段(文档入库时)
- GPU显存:运行嵌入模型(如
BGE)时,显存占用通常在1-4GB,取决于模型大小和批量大小(batch_size)。在CPU上运行会慢很多,但可以避免显存问题。 - 优化:调整
batch_size。太大可能爆显存,太小则速度慢。找到平衡点。
- GPU显存:运行嵌入模型(如
大语言模型生成阶段
- GPU显存(最大瓶颈):这是最吃资源的环节。一个7B参数的模型,即使经过4-bit量化,推理时也可能需要6-8GB显存。13B模型需要更多。
- 观察命令:
watch -n 1 nvidia-smi # Linux,每秒刷新 - 优化策略:
- 模型量化:使用GPTQ, AWQ, GGUF等量化技术,将模型精度从FP16降到INT8/INT4,显著减少显存。
- 使用API:如果本地资源不足,可以考虑调用云端大模型API(如OpenAI, DeepSeek),将计算压力转移,但需考虑网络延迟和成本。
- 调整生成参数:减少
max_new_tokens(生成的最大长度),可以缩短单次推理时间。
综合服务
- 端口与连接数:如果作为Web服务,使用
netstat -tulpn | grep :8000查看端口占用和连接状态。高并发下可能需要部署多个实例加负载均衡。 - 日志监控:在服务日志中记录每个请求的检索时间、生成时间和总耗时,便于定位性能瓶颈。
- 端口与连接数:如果作为Web服务,使用
“残破街区”项目可能的性能陷阱:如果项目试图在本地运行一个未量化的超大模型(如13B以上),同时处理复杂的检索逻辑,那么“未能拿下胜利”很可能是因为在普通消费级显卡上遭遇了显存不足(OOM)或速度过慢的问题。
8. 常见问题与排查方法
以下是搭建和运行RAG系统时,你几乎一定会遇到的问题及解决思路。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 启动服务失败,提示依赖错误 | 1. Python版本不匹配。 2. requirements.txt中包版本冲突。3. 系统缺少底层库(如CUDA)。 | 1.python --version检查版本。2. 查看错误堆栈信息,定位具体包。 3. 运行 pip check查看冲突。 | 1. 使用虚拟环境隔离。 2. 尝试逐个安装核心包,或使用 pip install -r requirements.txt --no-deps后再手动补依赖。3. 根据PyTorch官网指令安装对应CUDA版本的PyTorch。 |
| 构建向量库时内存/显存溢出 | 1. 一次性处理的文档太大或太多。 2. 嵌入模型 batch_size设置过大。3. 向量索引未使用量化,占用内存过大。 | 1. 监控任务管理器/nvidia-smi。2. 查看代码中数据加载和批处理逻辑。 | 1. 分批次处理文档,处理一批,保存一批。 2. 减小 batch_size(如从32减到8)。3. 使用 FAISS的量化索引,或换用Chroma的persist模式及时落盘。 |
| 检索结果完全不相关 | 1. 嵌入模型与领域不匹配(如用英文模型处理中文)。 2. 文本分割(chunk)策略不合理,破坏了语义。 3. 向量数据库索引未正确构建或保存。 | 1. 检查嵌入模型名称。 2. 打印出分割后的文本块,看是否完整。 3. 尝试一个简单查询,并打印出检索到的原始文本。 | 1. 更换为适合领域和语言的嵌入模型(如BAAI/bge-zh系列)。2. 调整 chunk_size和chunk_overlap,尝试按句子、段落或特定分隔符分割。3. 重新构建索引,并确认持久化路径正确。 |
| 生成答案胡编乱造,不依据上下文 | 1. 检索到的上下文质量差,本身不相关。 2. 提示词(Prompt)设计不佳,未强制模型基于上下文回答。 3. 模型能力不足或未遵循指令。 | 1. 先检查检索结果(见上一条)。 2. 查看发送给LLM的完整提示词模板。 3. 用相同的上下文,手动构造一个优质Prompt测试。 | 1. 优化检索环节。 2. 改进Prompt模板,使用强指令,如“请严格根据以下信息回答,如果信息不足,就说不知道:{context}。问题:{question}”。 3. 考虑更换或微调生成模型。 |
| API服务响应慢或超时 | 1. 检索或生成单个环节慢。 2. 网络问题或服务阻塞。 3. 未设置超时或超时时间太短。 | 1. 分别测试/retrieve和 直接调用LLM的耗时。2. 查看服务日志,是否有错误堆栈。 3. 使用 time命令或代码记录各阶段耗时。 | 1. 优化索引和模型(见第7节)。 2. 对于慢操作,在客户端和服务端设置合理的超时(如 timeout=120)。3. 考虑引入缓存,对相同查询缓存结果。 |
| 多轮对话中上下文丢失 | 1. 服务端未正确维护对话历史。 2. 历史记录过长,被截断。 3. 指代消解逻辑未实现。 | 1. 检查请求/响应中是否包含history字段。2. 查看代码中处理历史上下文的逻辑。 | 1. 确保服务端将上一轮的问答追加到历史并传入下一轮。 2. 对长历史进行摘要或选择性记忆。 3. 在Prompt中明确指示模型关注对话历史。 |
9. 最佳实践与使用建议
为了让你的RAG项目更稳健、更可用,遵循以下实践建议:
从小规模开始,迭代验证
- 不要一开始就导入所有文档。先用10-20个核心文档构建一个最小可行知识库。
- 设计一个包含各种问题类型(事实型、推理型、概括型)的测试集,人工评估效果。
- 效果达标后,再逐步扩大文档范围。
数据预处理是重中之重
- 清洗:去除无关字符、乱码、页眉页脚。
- 分割:选择合适的分割器。对于中文,按句号分割可能比固定长度更好。保留一定的重叠(
overlap)以避免割裂关键信息。 - 增强:可以为关键段落添加摘要或关键词作为元数据,辅助检索。
选择合适的嵌入模型
- 中文场景优先选择在中文语料上训练过的模型,如
BAAI/bge系列、text2vec系列。 - 在你的领域数据上做一个简单的相似度匹配测试,选择表现最好的模型。
- 中文场景优先选择在中文语料上训练过的模型,如
提示词工程化
- 将Prompt模板化、参数化,不要硬编码在代码里。
- 针对不同类型的任务(摘要、问答、创作)设计不同的Prompt模板。
- 在Prompt中明确指令和格式要求,例如要求模型以“根据资料,...”开头,或在答案后列出引用来源。
建立监控与评估体系
- 记录每一次问答的请求、响应、检索到的上下文、耗时和用户反馈(如果有)。
- 定期用测试集跑一遍,监控关键指标(检索命中率、答案准确率)的变化。
- 日志是排查问题最宝贵的资料。
安全与合规前置
- 输入过滤:对用户输入进行敏感词过滤和恶意提示词检测。
- 输出审核:对于生成内容,特别是可能对外发布的内容,建立审核机制,或使用内容安全API进行过滤。
- 访问控制:如果服务部署在内网或对公网开放,务必设置API密钥认证或IP白名单。
工程化部署
- 使用Docker容器化,保证环境一致性。
- 使用
Gunicorn(配合Uvicorn) 或Nginx部署Web服务,提高并发能力。 - 对于核心服务,考虑将向量数据库、Redis缓存、API服务拆分为独立容器,便于管理和扩展。
10. 总结与下一步
分析“RAG残破街区大翻盘”这样一个项目,其核心价值不在于它是否赢得了某场“比赛”,而在于它提供了一个完整的技术实现框架和问题暴露场景。通过本文的拆解,你应该已经掌握了对一个RAG项目进行技术评估和实操部署的完整路径。
最值得尝试的点:
- 全链路打通:亲自走一遍从原始文本到智能问答的完整流程,理解每个环节的输入输出。
- 瓶颈定位:体验检索质量、生成效果和性能开销之间的权衡,亲身感受为何有些项目会“功败垂成”。
- 模块化替换:RAG的各个组件(嵌入模型、向量库、LLM)都是可插拔的。你可以轻松替换其中一个,观察效果变化,这是最好的学习方式。
最先应该验证的功能:
- 检索相关性:这是生命线。用几个关键问题测试,看返回的片段是否“答非所问”。
- 服务可用性:能否稳定启动,接口能否正常调用。
- 资源消耗:在你的机器上,处理典型请求时,显存和内存占用是否在可接受范围。
最容易踩的坑:
- 环境配置:Python包版本冲突、CUDA版本不匹配是老生常谈但必遇的问题。务必使用虚拟环境。
- 数据质量:盲目导入未经清洗的脏数据,是效果差的头号原因。
- Prompt设计:认为把上下文扔给模型就行,忽略了指令设计,导致生成答案天马行空。
后续扩展方向:
- 混合检索:结合传统的BM25关键词检索和向量检索,取长补短。
- 重排序:在向量检索返回大量结果后,使用一个更精细的模型对结果进行重排序,提升Top1的准确率。
- 查询改写:对用户原始查询进行改写或扩展,使其更易于检索。
- Agent化:让RAG系统不仅能回答问题,还能根据问题调用工具(如计算器、搜索API)来执行复杂任务。
技术项目的“比赛”永无止境。真正的胜利,在于通过一次次迭代,让系统更可靠、更智能、更能解决实际问题。希望这份指南能帮助你,在你自己“残破街区”或任何其他领域的RAG项目中,打下坚实的基础,避开前人走过的弯路。