RAG作为AI工程师的入手项目,很多人觉得做个企业知识问答系统应该不难, 实际上手才发现,网上的教程和生产环境的需求差距太大。从文档切块到向量检索,从模型幻觉到成本控制,每个环节都有坑。

这篇文章记录了我们从零开始搭建RAG系统遇到的主要问题和解决方案。如果你也在做类似的项目,希望这些经验能帮你少走弯路。

RAG系统架构演进

基础RAG架构

传统RAG系统包含三个核心阶段:

  • 索引阶段:文档分块、向量化、存储
  • 检索阶段:查询向量化、相似度搜索
  • 生成阶段:上下文注入、答案生成

然而,这种基础架构在实际应用中面临诸多挑战:

  • 语义鸿沟导致的检索不准确
  • 上下文窗口限制
  • 幻觉问题持续存在
  • 多模态数据处理困难

进阶RAG架构

2024年的RAG系统已经从简单的"检索-生成"演变为包含多种优化技术的复杂系统:

查询优化层

  • 查询分类与路由
  • 查询重写与扩展
  • 假设文档生成(HyDE)

多路检索策略

  • 混合搜索结合了向量搜索和关键词搜索,提高召回率
  • 分层检索(粗检索→精检索)
  • 多索引并行检索

重排序与过滤

  • Cross-encoder重排序
  • MMR(最大边际相关性)去重
  • 相关性阈值过滤

分块策略优化

分块大小的权衡

分块大小直接影响检索精度、速度和生成质量。实践中需要考虑:

小块(128-256 tokens)

  • 优势:精确匹配,低延迟
  • 劣势:上下文缺失,碎片化

中等块(256-512 tokens)

  • 优势:平衡精度与上下文
  • 劣势:需要仔细调优

大块(512-1024 tokens)

  • 优势:完整上下文,语义连贯
  • 劣势:检索精度下降,成本增加

高级分块技术

引入上下文信息是提升分块质量的关键,可以通过添加文档标题、章节标题等上下文头部信息来增强语义:

语义分块

# 基于语义相似度的动态分块def semantic_chunking(text, model, threshold=0.8):    sentences = split_into_sentences(text)    embeddings = model.encode(sentences)        chunks = []    current_chunk = [sentences[0]]        for i in range(1, len(sentences)):        similarity = cosine_similarity(            embeddings[i-1], embeddings[i]        )        if similarity < threshold:            chunks.append(' '.join(current_chunk))            current_chunk = [sentences[i]]        else:            current_chunk.append(sentences[i])        return chunks

结构化分块

  • 基于文档结构(标题、段落、列表)
  • 保留格式信息(表格、代码块)
  • 多模态元素处理(图表描述)

上下文增强

使用LLM为每个分块生成上下文摘要,这种方法被证明能有效提升召回率:

def enhance_chunk_with_context(chunk, document, llm):    prompt = f"""    Document: {document}    Chunk: {chunk}        Generate a brief context that explains how this chunk     relates to the overall document.    """    context = llm.generate(prompt)    return f"Context: {context}\n\nContent: {chunk}"

检索优化策略

混合检索架构

混合检索结合词法和向量检索,显著提升了检索质量:

class HybridRetriever:    def __init__(self, vector_store, bm25_index):        self.vector_store = vector_store        self.bm25_index = bm25_index            def retrieve(self, query, k=10, alpha=0.5):        # 向量检索        vector_results = self.vector_store.similarity_search(            query, k=k*2        )                # BM25检索        bm25_results = self.bm25_index.search(            query, k=k*2        )                # 融合得分        combined = self.reciprocal_rank_fusion(            vector_results, bm25_results, alpha        )                return combined[:k]

重排序机制

重排序器通过更复杂的匹配方法,显著提升了搜索结果质量,有效缓解幻觉问题:

from sentence_transformers import CrossEncoderclass Reranker:    def __init__(self, model_name='cross-encoder/ms-marco-MiniLM-L-6-v2'):        self.model = CrossEncoder(model_name)        def rerank(self, query, documents, top_k=5):        pairs = [[query, doc.content] for doc in documents]        scores = self.model.predict(pairs)                # 按分数排序        ranked_docs = sorted(            zip(documents, scores),             key=lambda x: x[1],             reverse=True        )                return [doc for doc, _ in ranked_docs[:top_k]]

查询优化技术

查询扩展

def expand_query(query, llm):    prompt = f"""    Original query: {query}        Generate 3 alternative phrasings that capture     the same intent but use different keywords:    """    alternatives = llm.generate(prompt)    return [query] + alternatives

HyDE(假设文档嵌入)

def hyde_search(query, llm, retriever):    # 生成假设答案    hypothetical_answer = llm.generate(        f"Answer this question: {query}"    )        # 使用假设答案检索    return retriever.search(hypothetical_answer)

生产环境部署实践

数据管道建设

生产就绪的RAG系统需要自动化的数据刷新管道,而不是一次性设置:

增量更新机制

class IncrementalIndexer:    def __init__(self, vector_store, doc_store):        self.vector_store = vector_store        self.doc_store = doc_store        self.checksums = {}        def update(self, documents):        for doc in documents:            checksum = hashlib.md5(doc.content).hexdigest()                        if doc.id notin self.checksums or \               self.checksums[doc.id] != checksum:                # 文档已更改,需要更新                self.reindex_document(doc)                self.checksums[doc.id] = checksum

向量数据库选型

根据2024-2025年的实践经验,主流向量数据库对比:

数据库 特点 适用场景
Pinecone 托管服务,自动扩展 快速原型,中小规模
Weaviate 混合搜索,模块化 复杂查询,企业级
Qdrant 高性能,过滤能力强 大规模,复杂过滤
Milvus 开源,可扩展 自托管,大规模
Chroma 轻量级,易集成 开发测试,小规模

监控与评估

持续评估是优化RAG系统的关键,需要分别评估检索和生成组件:

检索指标

  • Precision@K:前K个结果的准确率
  • Recall@K:召回率
  • MRR(平均倒数排名)

生成指标

  • Faithfulness:答案与上下文的一致性
  • Answer Relevancy:答案与问题的相关性
  • Context Relevancy:检索内容的相关性

幻觉问题缓解策略

根因分析

RAG系统中的幻觉问题主要源于:检索错误、模型过度自信、领域数据漂移。

多层防护机制

检索阶段过滤

def filter_low_confidence_chunks(chunks, threshold=0.7):    return [        chunk for chunk in chunks         if chunk.similarity_score > threshold    ]

生成阶段约束

GROUNDED_PROMPT = """You must answer ONLY based on the provided context.If the context doesn't contain enough information, say "I don't have enough information to answer."Context: {context}Question: {question}Answer:"""

后处理验证

class FactChecker:    def __init__(self, source_documents):        self.sources = source_documents            def verify_claim(self, claim):        # 检查声明是否有文档支持        supporting_docs = self.find_supporting_evidence(claim)        confidence = len(supporting_docs) / len(self.sources)                return {            'claim': claim,            'supported': confidence > 0.5,            'confidence': confidence,            'evidence': supporting_docs        }

Agent化RAG系统

RAG系统正在向更智能的Agent方向演进:

class RAGAgent:    def __init__(self, tools, memory, planner):        self.tools = tools  # 包括检索、计算、API调用等        self.memory = memory  # 对话历史和用户偏好        self.planner = planner  # 任务规划器            asyncdef process_query(self, query):        # 任务分解        subtasks = self.planner.decompose(query)                results = []        for task in subtasks:            # 工具选择            tool = self.select_tool(task)            # 执行任务            result = await tool.execute(task)            # 更新记忆            self.memory.update(task, result)            results.append(result)                    # 综合答案        return self.synthesize_answer(results)

一些经验

1. 别过度优化

我花了两周时间把检索准确率从85%优化到87%。代价是什么?代码复杂度翻倍,新同事看不懂,bug一堆。

其实85%用户已经很满意了,那2%的提升用户根本感觉不出来。

2. 监控比优化重要

我们有个文档突然搜不出来了,一个星期后才发现。为啥?因为没监控。

现在我会监控:

  • 每个文档的被搜索次数
  • 搜索无结果的比例
  • 用户的负反馈
  • P95延迟

发现问题比解决问题重要。

3. 让用户参与

最开始我们自己评测,觉得效果很好。上线后用户骂声一片。

后来每周找5个用户,让他们真实使用,收集反馈。很多我们没想到的问题都被发现了:

  • “能不能记住我上次问的?”
  • “搜索结果能不能显示原文位置?”

4. 不要追新

GraphRAG出来的时候,我特兴奋,觉得这就是未来!花了一个月搞知识图谱。

结果呢?构建图谱比想象中难10倍,效果提升却很有限。而且维护成本巨高,每次文档更新都要重新抽取实体关系。

新技术可以试,但别all in。

总结

如果你也要搞RAG,我的建议是:

  1. 从简单开始:先跑通最基础的流程,再慢慢优化
  2. 重视数据质量:垃圾进垃圾出,数据不好啥技术都没用
  3. 快速迭代:别憋大招,每周上线一个小改进
  4. 听用户的:你觉得好没用,用户说好才是真的好

最后的最后,如果老板问你"RAG多久能搞定?" 千万别说一个月,相信我,说三个月都是保守的。

普通人如何抓住AI大模型的风口?

领取方式在文末

为什么要学习大模型?

目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过 30%。
在这里插入图片描述

随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:
在这里插入图片描述

人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!

最后

只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!

在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

大模型全套学习资料展示

自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。

图片

希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!

01 教学内容

图片

  • 从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!

  • 大量真实项目案例: 带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

02适学人群

应届毕业生‌: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

image.png

vx扫描下方二维码即可
在这里插入图片描述

本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!

03 入门到进阶学习路线图

大模型学习路线图,整体分为5个大的阶段:
图片

04 视频和书籍PDF合集

图片

从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)

图片

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)
图片

05 行业报告+白皮书合集

收集70+报告与白皮书,了解行业最新动态!
图片

06 90+份面试题/经验

AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)图片
在这里插入图片描述

07 deepseek部署包+技巧大全

在这里插入图片描述

由于篇幅有限

只展示部分资料

并且还在持续更新中…

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

Logo

更多推荐