概要

RAG(Retrieval-Augmented Generation,检索增强生成)技术通过引入存储在外部数据库中的知识以增强大模型的问答能力。大模型在回答问题前,首先在外部数据库中进行检索,将相似度高的内容返回给大模型再进一步整理生成,从而提高输出的准确性和相关性,避免大模型产生"幻觉"生成事实不正确的内容。

然而通用预训练大模型的训练数据主要来源于公开渠道,缺乏企业专业和私有知识,直接使用将难以支撑企业内部的专业知识问答。通过重新训练或微调可以实现知识扩充,但存在数据量要求大、训练代价高、知识更新不及时、无法有效删除旧知识等问题。RAG 技术能在一定程度上解决这些问题。

本文将记录基于 GPT-5.5 与 RAG 技术搭建企业级知识库问答系统的完整过程,涵盖数据处理、向量索引构建、混合检索优化、评估体系建设四个核心环节。

KULAAI(c.877ai.cn)作为 AI 模型聚合平台,支持国内直连、统一接口调用 GPT-5.5、Gemini 3.1 Pro、Claude、DeepSeek 等多个主流大模型,项目的模型对比选型和多模型路由均通过该平台完成。


整体架构流程

企业级 RAG 知识库系统采用模块化设计,核心组件包括文档处理、向量存储、会话管理和向量化模型:

python

python
class QAAssistant:  def __init__(self, api_key: str = None):  self.doc_processor = DocumentProcessor() # 文档处理  self.vector_store = VectorStore() # 向量存储  self.session_manager = SessionManager() # 会话管理  self.embedding_model = SentenceTransformer() # 向量化模型 

完整数据流如下:

text

text
文档输入 → 文档处理 → 文本分块 → 向量化 → 向量存储  ↓ 用户问题 → 问题向量化 → 相似度检索 → 上下文组装 → 提示词构建 → LLM 生成 → 答案输出 

系统采用开放式五层架构:

text

text
┌─────────────────────────────────────┐ │ 应用层(问答界面 / API) │ ├─────────────────────────────────────┤ │ 处理层(意图识别 / 路由 / RAG) │ │ ┌───────────┬───────────┐ │ │ │ 关键词检索 │ 向量检索 │ │ │ │ (BM25) │ (Dense) │ │ │ └─────┬─────┴─────┬─────┘ │ │ └─────┬─────┘ │ │ 混合检索重排 │ ├─────────────────────────────────────┤ │ 存储层(向量库 / 文档库) │ ├─────────────────────────────────────┤ │ 采集层(文档解析 / 切片) │ ├─────────────────────────────────────┤ │ 数据源层(企业文档 / FAQ) │ └─────────────────────────────────────┘ 

技术名词解释

RAG(Retrieval-Augmented Generation,检索增强生成) 结合信息检索与生成技术的方法。传统生成模型在特定领域缺乏精准知识,RAG 通过在生成之前先检索相关知识内容,将检索到的信息作为上下文提供给生成模型,提高生成结果的准确性和相关性。

Embedding(向量嵌入) 将文本转化为数值向量的过程。常用的嵌入模型包括 Word2Vec、BERT、Sentence-BERT 等。对于企业级知识库,推荐使用 Sentence-BERT,因为它能生成高质量的句子级别向量。

Chunk(文档切片) 将大型文档分割成"块"进行存储,一方面有助于提高检索效率,另一方面通过基于特定"块"的上下文检索方法能在一定程度上弥补检索精度的不足。

Hybrid Search(混合检索) 结合多种搜索技术的高级检索方法,通常包括向量相似度搜索和传统搜索技术(如全文搜索、BM25 算法等),以提供更精确和灵活的检索结果。

Model Ranker(模型排名器) 引入高级语言模型的语义理解能力重构搜索逻辑,不依赖向量相似度作为唯一排序依据,而是深度解析查询和文档的语义关系,过滤"关键词堆砌但无实质内容"的文档。

RAGAS 用于评估 RAG 系统的框架,涵盖检索指标(上下文精确率、上下文召回率、上下文相关性)和生成指标(答案相关性、忠实度、答案正确性)。

ColBERT 一种检索模型,为解决传统双塔模型大 chunk 导致的信息丢失问题而提出基于 token 向量的迟交互模式。

Function Calling(函数调用) 开发者可以将函数描述给 GPT 模型,让模型智能地输出一个包含调用函数所需参数的 JSON 对象,将 GPT 的能力更可靠地连接到外部工具和 API。


技术细节

一、数据收集与预处理

企业已有知识管理系统可直接对接进行后续处理;对于没有知识管理系统的企业,首先需要收集企业内部的各种知识数据,包括各种格式的文档数据,以及表格、图片等多模态数据。

数据清洗与预处理对后续模型性能起到关键作用。以文本类数据为例,一般包括去噪声、去除特殊格式和特殊字符、停用词过滤、词干化或分词等操作。

文档格式支持配置如下:

python

python
supported_formats = {  'pdf': process_pdf,  'txt': process_txt,  'docx': process_docx,  'md': process_markdown } 

特殊处理包括:表格结构保持、图片说明提取、页眉页脚过滤、特殊字符处理。

二、文本分块策略

分块的结果将直接影响最终的应用效果,因此选择合适的分块方法至关重要。常用方法包括:

  • 按字符数分割:根据设定分块的字符长度进行分割,最简单但对语义理解不足
  • 按段落分割:结合文档层次分级结构进行分割,效果优于按字符数切割
  • 按语义分割:结合模型能力按语义进行分割和拼接,效果好但技术难度大

LangChain 提供了多种文本分割工具:

  • RecursiveCharacterTextSplitter():按字符串分割,递归地尝试不同分隔符
  • CharacterTextSplitter():按字符分割
  • MarkdownHeaderTextSplitter():基于标题分割 Markdown 文件
  • TokenTextSplitter():按 token 分割

分块参数优化建议:

python

python
RAG_CONFIG = {  'max_docs_per_query': 5, # 每次查询返回文档数  'min_similarity_score': 0.7, # 最小相似度阈值  'context_window': 2, # 上下文窗口大小  'max_context_length': 2000 # 最大上下文长度 } 

切片时需要扩展上下文窗口以保留关联信息:

python

python
def _get_extended_context(self, similar_docs):  extended_indices = set()  for idx in relevant_indices:  start = max(0, idx - RAG_CONFIG['context_window'])  end = min(len(page_segments), idx + RAG_CONFIG['context_window'] + 1)  extended_indices.update(range(start, end)) 

三、向量索引构建

将文档分块后,需对每个分块建立索引用于后续检索。常见索引方式包括:

  • 链式索引:通过链表结构对文本块进行顺序索引
  • 树索引:将文本块构建成层级树状结构
  • 关键词表索引:提取关键词构建多对多映射
  • 向量索引:将文本块映射成向量后通过相似度计算查询

向量索引是当下最为流行的方法。通过 embedding 模型将高维度数据映射到低维空间生成向量表示,再对这些向量进行索引和搜索。

向量化过程实现:

python

python
def process_documents(self, dir_path: str = "docs"):  documents = self.doc_processor.process_directory(dir_path)  texts = [doc['text'] for doc in documents]  embeddings = self.embedding_model.encode(texts, show_progress_bar=True)  self.vector_store.add_documents(documents, embeddings) 

实际应用中需要考虑向量化后的数据膨胀问题和大规模向量相似性检索的效率问题。余弦距离是最常用的相似度计算方法。

四、混合检索优化

单一的向量检索在企业级场景下不够用。混合检索技术将向量检索和关键词检索结合使用,提升检索的精准度和相关性。

在 LangChain 中实现混合检索,首先需选择支持混合搜索的向量存储,包括 Astra DB、ElasticSearch、Neo4J、AzureSearch、Qdrant 等。

通过可配置的检索器实现混合搜索:

python

python
configurable_retriever = retriever.configurable_fields(  search_kwargs=ConfigurableField(  id="search_kwargs",  name="Search Kwargs",  description="The search kwargs to use",  ) )  result = chain.invoke(  "What city did I visit last?",  config={"configurable": {"search_kwargs": {"body_search": "new"}}}, ) 

此外,模型排名器能进一步提升检索质量。它通过六个步骤工作:初始查询 → 向量搜索 → 候选检索 → 模型评估 → 智能重排 → 增强结果。模型排名器支持 vLLM、TEI、Cohere、Voyage AI、SiliconFlow 等多种提供商。

BGE 的 M3-Embedding 模型能同时输出 Sparse、Dense 和 ColBERT 三种向量,使用它们做 hybrid search 能显著提升搜索质量。

五、RAG 系统评估

RAG 系统需要专门的评估指标,同时衡量检索质量和生成准确性。RAGAS 框架提供了完整的评估体系:

检索指标:

  • 上下文精确率(Context Precision):检索到的文本块的相关性
  • 上下文召回率(Context Recall):覆盖相关资讯的完整性
  • 上下文相关性(Context Relevancy):信噪比

生成指标:

  • 答案相关性(Answer Relevancy):回答是否切题
  • 忠实度(Faithfulness):答案是否基于所提供的上下文
  • 答案正确性(Answer Correctness):事实准确性

使用 RAGAS 进行评估的实现:

python

python
from ragas import evaluate from ragas.metrics import (  context_precision, context_recall, context_relevancy,  answer_relevancy, faithfulness, answer_correctness, )  class RAGEvaluator:  def __init__(self, metrics=None):  self.metrics = metrics or [  context_precision, context_recall, context_relevancy,  answer_relevancy, faithfulness, answer_correctness  ]   def evaluate_rag_system(self, test_cases):  dataset = self.prepare_evaluation_dataset(test_cases)  results = evaluate(dataset=dataset, metrics=self.metrics)  return results 

识别薄弱环节的阈值建议设为 0.7——低于此分数的指标需要重点优化。

六、企业知识库安全设计

企业级知识库需要严格的权限管理。文档级安全包括知识密级控制,只能搜索有权查看的内容。文档创建后需进行权限设计,包括阅读、修改、删除的权限。

私密知识支持水印标识——用户打开知识内容页面后系统基于用户 ID 自动生成水印覆盖在页面上,使通过拍照、截图等操作带来的知识泄密变得有据可查。文件服务器存储全部加密。


小结

基于 GPT-5.5 与 RAG 技术搭建企业知识库的核心是四个环节的协同:数据处理决定知识质量的上限,分块策略决定检索精度的上限,混合检索决定召回率的上限,评估体系决定优化方向的准确性。

RAG 技术通过引入外部知识库有效弥补了大模型在企业专业知识上的不足,避免了重新训练或微调带来的高成本和长周期问题。混合检索结合模型排名器的方案能显著提升检索质量,RAGAS 框架提供了系统化的评估和优化路径。

建议先在聚合平台上验证核心对话流程和成本模型,用真实的企业文档做测试集,对比不同检索策略和模型组合下的回答质量。数据说话比任何方案设计都靠谱。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐