# 基于企业自有文档的 AI（RAG），也支持匈牙利语

位于匈牙利布达佩斯的软件开发公司 Mesterséges Intelligencia Központ Kft. 认为，RAG 能依据企业的文档给出可核查的回答：系统先找到相关段落，模型再据此作答并注明出处，也支持匈牙利语。

> **要点：**无需用自己的数据训练模型：RAG 在提问的那一刻把相关段落交给模型，回答则会注明出处。质量取决于文档的整理程度、检索的准确性和持续的度量；它也适用于匈牙利语，但必须用企业自己的匈牙利语问题进行度量。

## 什么是 RAG，这个术语从何而来？

RAG 是 retrieval-augmented generation 的缩写，中文大致可译为“检索增强生成”。这一术语源自 Patrick Lewis 及其合著者[于 2020 年发表的论文](https://arxiv.org/abs/2005.11401)，论文题为“Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks”。作者把预训练语言模型所谓的参数化记忆与非参数化记忆结合了起来：后者是维基百科的稠密向量索引，通过神经检索器进行访问。

如今，这个术语更宽泛地指这样一种方案：系统针对问题先在文档集合中找到所需的文本段落，再由语言模型据此组织回答。在此过程中，模型自身的知识不会改变：它在提问的那一刻才获得企业的资料。由此带来 RAG 的三个实际优势：知识可以立即更新，回答可以注明出处，检索时还可以只保留提问者有权查看的内容。

## 它是如何工作的？六个步骤

1. **收集：**把文档库、Wiki、工单系统、邮箱中选定的部分等各种来源汇集到一处。
2. **切分：**把长文档拆分成较小的、只有几个段落长的部分（chunk，文本块）。例如，OpenAI 的[检索服务](https://developers.openai.com/api/docs/guides/retrieval)默认生成最多 800 个 token 的文本块，相互重叠 400 个 token。
3. **嵌入（embedding）：**嵌入模型把每个文本块转换成一串数字，即向量。根据 OpenAI 的[说明](https://developers.openai.com/api/docs/guides/embeddings)，向量之间的距离小表示内容相关性高，距离大表示相关性低。
4. **检索：**同一个模型把问题也转换成向量，系统再找出与之最接近的文本块。Anthropic 在关于 [Contextual Retrieval](https://www.anthropic.com/engineering/contextual-retrieval) 的说明中，用逐字匹配的 BM25 关键词检索来补充语义检索，因为前者能更好地找到精确的表述，例如标识符；随后再由一个重排序（reranker）步骤，只把最相关的文本块交给模型。
5. **过滤与组装：**在找到的文本块中，只保留提问者也有权查看的那些，并把它们连同问题一起交给模型。
6. **注明出处的回答：**模型依据收到的段落作答，并指明每项陈述的来源。Anthropic 的 [citations 功能](https://platform.claude.com/docs/en/build-with-claude/citations)对 PDF 指向页码，对纯文本指向字符位置；OpenAI 的[文件检索](https://developers.openai.com/api/docs/guides/tools-file-search)会在回答中加入指向源文件的标注。

切分时常见的问题是文本块失去了上下文，Anthropic 在同一篇说明中也对此提出了警告。“期限自收到之日起计算”这样一句话，单独来看并不能说明指的是哪份合同、哪个期限。因此，值得为每个文本块加上文档标题、章节标题和日期，让检索和模型都能看到它的上下文。

## RAG 还是微调？

微调（fine-tuning）是指用特定任务的数据对模型进行进一步训练。根据 OpenAI [关于准确性的指南](https://developers.openai.com/api/docs/guides/optimizing-llm-accuracy)，RAG 提供任务所需的领域上下文，适用于模型的知识已经过时，或任务需要企业自有信息的情况；而当模型的输出不一致，或者格式、语气不对时，微调会有所帮助。按照该指南的说法，这两种方法相辅相成，也可以结合使用。

| 要素 | RAG | 微调 |
|---|---|---|
| 用途 | 在提问的那一刻把企业的知识交给模型 | 统一模型的行为、格式和语气 |
| 知识的时效 | 文档更新后，只要更新索引即可生效 | 需要重新训练 |
| 注明出处 | 回答可以指向找到的段落 | 写入模型权重的知识没有出处标注 |
| 权限 | 可以按文档过滤 | 训练进去的知识对每个用户都一样 |
| 撤回文档 | 文档从索引中移除 | 只有重新训练才能消除其影响 |
| 何时值得采用 | 对于企业文档，几乎总是以它为起点 | 当问题在于格式或语气的一致性时，与 RAG 配合使用 |

因此，对于企业文档，RAG 是自然的起点。“是否需要训练模型”这个问题，大多数时候实际上是在问：模型如何获得企业的知识？答案就是 RAG。

## 也支持匈牙利语吗？语言支持与混合语言资料

### 作答模型

各大服务商的模型都能很好地理解和书写匈牙利语，但它们公布的语言能力测评并不总是涵盖匈牙利语。Anthropic 的[多语言支持页面](https://platform.claude.com/docs/en/build-with-claude/multilingual-support)公布了 14 种非英语语言的测评结果，其中没有匈牙利语（2026 年 10 月 17 日核实）；不过，该页面同时强调，Claude 在表中所列语言之外也能胜任许多语言，建议用对应用而言重要的语言进行测试，并在系统提示词中明确规定回答所用的语言。我们自己的经验也是如此：我们首页上基于 Claude 的 AI 助手用匈牙利语和另外 13 种语言交谈，但每一种新用途我们都会用匈牙利语问题进行度量。

### 嵌入模型

检索质量对嵌入模型的依赖，至少不亚于对作答模型的依赖。各大服务商的情况如下（2026 年 10 月 17 日核实）：

- 根据文档，Google 的 [Gemini Embedding 2 模型](https://ai.google.dev/gemini-api/docs/embeddings)支持 100 多种语言；
- Anthropic [不提供自己的嵌入模型](https://platform.claude.com/docs/en/build-with-claude/embeddings)，而是提到了 Voyage AI 的模型，其中 voyage-4 针对通用检索和多语言检索进行了优化；
- OpenAI 的嵌入指南介绍了 text-embedding-3 系列模型，但没有列出所支持的语言。

因此，我们依据企业自己的匈牙利语“问题与文档”配对来选择嵌入模型，而不是依据服务商的通用测评。

### 匈牙利语的特有情况

- **词形变化：**“szerződés”“szerződésben”和“szerződéseinkről”（合同、在合同中、关于我们的合同）说的是同一件事，但如果不做词干提取，逐字匹配的关键词检索不会把它们视为匹配。语义检索在这方面有帮助，而混合检索则把两者结合起来。
- **专业术语和内部名称：**企业的缩写、产品代码和内部名称并不在模型的通用知识之中；一份简短的术语表能大大改善检索效果。
- **混合语言资料：**如果问题是匈牙利语，而手册是英语，就需要多语言嵌入模型，并且必须固定回答所用的语言；引用的出处保留原文语言。
- **日常说法：**错别字、不带重音符号输入的问题以及口语化表达，也都必须纳入测试问题之中。

## 它可以依据哪些文档工作？

| 来源 | 需要注意什么 |
|---|---|
| 文本型 PDF | 处理效果好；出处标注还可以指向页码 |
| 扫描版 PDF | 需要先进行文字识别（OCR）：根据 Anthropic 的文档，没有可提取文本的扫描版 PDF 无法提供引用 |
| Word 和 Excel | Anthropic 建议把 DOCX 和 XLSX 文件转换为文本，OpenAI 的文件检索也可以直接接收 DOCX；必须保留表格的结构 |
| Wiki 和内网 | 应以现行版本为准，旧页面应归档 |
| 工单、服务台 | 其中包含大量个人数据和过时的解决方案，因此必须进行过滤 |
| 电子邮件 | 只使用经过挑选和整理的部分；就个人数据和权限而言，是最敏感的来源 |

## 按文档设置权限

RAG 最敏感的一点是：系统不得泄露提问者在源系统中也无权打开的段落。我们不把这件事交给模型，而是把它内置到检索之中：

- 每个文本块都以元数据的形式携带其源文档的权限信息；
- 过滤在检索之前或检索过程中进行（例如，OpenAI 的检索服务支持在语义检索之前按文件属性进行过滤），因此，提问者无权查看的内容根本不会到达模型；
- 权限的变化从源系统同步，而不是手工维护；
- 我们记录谁问了什么，以及从哪些文档得到了回答。

## 保持索引最新

RAG 的好坏取决于其索引的新鲜程度。我们关注以下几点：

- **变更监测：**系统自动处理新增和修改的文档。
- **删除：**在来源处删除的文档也会从索引中移除；根据 OpenAI 的文档，移除是逐步生效的，因此已删除的文件可能仍会在短时间内出现在检索结果中。
- **版本：**区分现行版本和已撤回的版本，并在元数据中注明日期。
- **来源负责人：**每个来源都有一位负责人，在内容过时时及时提出。
- **过期：**为临时资料设置过期规则；例如，可以为 OpenAI 的向量存储设置过期时间。

## 减少错误回答：出处、“我不知道”、度量

即使提供了资料，语言模型也可能出错。Anthropic 的[关于减少错误回答的指南](https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/reduce-hallucinations)建议：明确允许模型回答“我不知道”，让它以逐字引文为依据，为每项陈述找到支持性的引文（如果找不到，就撤回该陈述），并且只依据所提供的文档工作。该指南还补充说：这些方法能减少错误回答，但不能完全消除，因此重要信息必须加以核实。我们以这些方法为基础：

- **注明出处：**每个回答旁边都会显示它来自哪份文档的哪一部分。
- **“我不知道”与转交：**如果资料中没有答案，系统会如实说明，并把问题转交给工作人员。
- **只依据所提供的资料：**关于公司的情况，模型不使用其通用知识。
- **评估集：**真实的问题，附上预期答案和正确出处。我们分别度量检索是否找到了正确的段落，以及回答是否忠实于该段落；根据 [OpenAI 的评估指南](https://developers.openai.com/api/docs/guides/evaluation-best-practices)，测试数据中还应包括典型案例、极端案例和故意误导的案例，而且每次修改后都应重新运行评估。
- **反馈：**用户可以标记不好的回答，日志中的内容会转化为新的测试用例。

## 数据保护：文档存储在哪里？

在 RAG 系统中，企业的资料会经过三个地方：

- **源系统：**文档仍然保存在原来的地方，即文档库、Wiki、邮箱中。
- **索引：**文本块和向量保存在检索数据库中。它可以运行在企业自己的环境中，也可以运行在服务商那里；例如，根据 OpenAI 的[数据管控文档](https://developers.openai.com/api/docs/guides/your-data)和检索指南，在其文件检索中，上传的文件会一直保存，直到被删除或向量存储过期为止。
- **模型调用：**只有为该问题挑选出的文本块才会到达模型。此时适用服务商的数据处理条款。这些条款对训练、保存期限和处理地点有何规定，在关于[用人工智能连接企业系统](https://www.mestersegesintelligenciakozpont.hu/zh/knowledge-base/connecting-business-systems-with-ai)的文章中有概述。

如果文档中含有个人数据，其处理就受 GDPR 约束，并且需要依据[《通用数据保护条例》](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32016R0679)第 28 条与作为数据处理者的服务商签订合同。透明度、数据传输、影响评估等法律问题，我们在[AI Act 与 GDPR：企业聊天机器人需要注意什么？](https://www.mestersegesintelligenciakozpont.hu/zh/knowledge-base/ai-act-and-gdpr-for-business-chatbots)一文中有介绍。以上内容仅供参考，不构成法律意见。

## RAG 项目的步骤

1. **目标与问题范围：**谁来提问，问什么，什么样的回答算好回答。
2. **盘点并整理来源：**筛除重复项，以及相互矛盾和过时的版本。
3. **权限模型：**谁可以从哪份文档获得回答。
4. **评估集：**真实的匈牙利语问题，附上预期答案和出处。
5. **原型：**根据度量结果调整切分方式、嵌入模型和检索。
6. **接入：**界面、出处标注、转交给工作人员以及日志记录。
7. **试运行：**在小范围的用户中进行，并收集反馈。
8. **运行：**更新索引、持续度量，并对模型更换进行测评。

## 典型错误

- **文档库“原样照搬”：**如果同一份规章制度有三个版本并存，系统可能引用其中任何一个。
- **事后才考虑权限：**第一次演示时一切都可见，正式运行时这可能构成个人数据泄露事件。
- **回答不注明出处：**用户无法核查，也不会信任它。
- **用编造的问题测试：**演示用的问题效果很好，真实的、带错别字的匈牙利语问题却不行。
- **一次性导入：**如果不更新，知识库很快就会过时。
- **未经文字识别的扫描版 PDF：**系统根本看不到其中的内容。

## 常见问题

### 什么是 RAG？

RAG（retrieval-augmented generation，检索增强生成）是这样一种方案：系统针对问题先在企业的文档中找到相关段落，语言模型再据此作答，并注明出处。这一术语源自 2020 年发表的一篇研究论文。

### 它能依据我们自己的文档用匈牙利语作答吗？

能。如今的大语言模型能很好地理解和书写匈牙利语，也能依据匈牙利语文档工作；我们首页上的 AI 助手也用匈牙利语交谈。由于服务商公布的测评并不总是涵盖匈牙利语，我们会在正式上线前，用企业自己的匈牙利语问题对作答模型和嵌入模型进行度量。

### 需要用我们自己的数据训练模型吗？

通常不需要。RAG 在提问的那一刻把所需的段落交给模型，因此知识可以更新，出处可以注明，权限可以按文档过滤。如果回答的格式或语气不够一致，可以考虑微调；即便如此，也是与 RAG 配合使用，而不是取而代之。

### 如果它不知道答案，会怎样？

我们会把它构建成能如实说明这一点，并把问题转交给工作人员，而不是凭空编造。模型被明确允许回答“我不知道”，只能依据所提供的资料工作，未能回答的问题会从日志中反馈回来，用于扩充知识库。

### 我们的文档存储在哪里？

存储在源系统中，和原来一样；此外还存储在检索索引中，索引可以运行在企业自己的环境中，也可以运行在服务商那里；每次提问时，只有挑选出的段落才会按照服务商的数据处理条款到达模型。哪种方案适合一家企业，取决于文档的敏感程度和数据保护方面的要求。

## 我们如何提供帮助？

Mesterséges Intelligencia Központ Kft. 开发依据企业自有文档作答（也支持匈牙利语）的 AI 聊天机器人，采用 RAG 方法并注明出处，基于 OpenAI（ChatGPT）、Anthropic（Claude）和 Google（Gemini）的语言模型构建。首次咨询免费；我们以 COSMIC 功能点度量开发工作的规模，并据此编制报价和进度安排。可应要求签署保密协议（NDA），交付后我们还负责更新知识库并监测系统的运行情况。源代码和使用权由合同约定。

详情请见 [AI 聊天机器人与 AI 智能体](https://www.mestersegesintelligenciakozpont.hu/zh/services/ai-chatbots-and-agents)和 [AI 集成](https://www.mestersegesintelligenciakozpont.hu/zh/services/ai-integration)页面；需要的是聊天机器人还是智能体，[聊天机器人还是 AI 智能体？](https://www.mestersegesintelligenciakozpont.hu/zh/knowledge-base/chatbot-vs-ai-agent)一文可以帮助您做出判断。如果您正在规划依据企业文档作答的系统，请通过[联系我们](https://www.mestersegesintelligenciakozpont.hu/zh/contact)页面上的联系方式给我们写信。

## 参考来源

- [arXiv：Lewis 等人，Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks](https://arxiv.org/abs/2005.11401)
- [OpenAI: Vector embeddings](https://developers.openai.com/api/docs/guides/embeddings)
- [OpenAI: Retrieval](https://developers.openai.com/api/docs/guides/retrieval)
- [OpenAI: File search](https://developers.openai.com/api/docs/guides/tools-file-search)
- [OpenAI: Data controls in the OpenAI platform](https://developers.openai.com/api/docs/guides/your-data)
- [OpenAI: Optimizing LLM Accuracy](https://developers.openai.com/api/docs/guides/optimizing-llm-accuracy)
- [OpenAI: Evaluation best practices](https://developers.openai.com/api/docs/guides/evaluation-best-practices)
- [Anthropic: Embeddings](https://platform.claude.com/docs/en/build-with-claude/embeddings)
- [Anthropic: Multilingual support](https://platform.claude.com/docs/en/build-with-claude/multilingual-support)
- [Anthropic: Citations](https://platform.claude.com/docs/en/build-with-claude/citations)
- [Anthropic: Reduce hallucinations](https://platform.claude.com/docs/en/test-and-evaluate/strengthen-guardrails/reduce-hallucinations)
- [Anthropic: Contextual Retrieval](https://www.anthropic.com/engineering/contextual-retrieval)
- [Google Gemini API: Embeddings](https://ai.google.dev/gemini-api/docs/embeddings)
- [EUR-Lex：条例 (EU) 2016/679（《通用数据保护条例》，GDPR）](https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX:32016R0679)
