Skip to content

Commit 25baf14

Browse files
authored
update rag-benchmark.md (#607)
2 parents 34934a0 + 95fed0a commit 25baf14

File tree

1 file changed

+153
-0
lines changed

1 file changed

+153
-0
lines changed

docs/docs/game/rag-benchmark.md

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
---
2+
title: 2025 初赛 RAG Benchmark 题目
3+
---
4+
5+
# RAG Benchmark
6+
7+
## 题目背景
8+
9+
### RAG 是什么
10+
11+
RAG(检索增强生成)是一种结合了 信息检索 和 生成式 AI 的混合技术。它通过从外部数据源(如数据库或文档)检索相关内容,将其输入到大型语言模型(LLM)中,使得生成的结果更加准确、有针对性和上下文相关。传统生成式 AI(如纯 LLM)可能会产生"幻觉"(hallucination),即输出并不准确或无根据的回答。RAG 技术利用检索的真实数据来提供事实依据,从而减少错误。
12+
13+
### RAG 实现原理
14+
15+
RAG 的实现通常包含以下几个关键步骤:
16+
17+
#### 文档拆分 (Chunk)
18+
19+
文档拆分是一种将大规模文档拆分为语义连贯、结构清晰的独立单元(即分段,Chunk)的技术。在 RAG(检索增强生成)系统中,分段通过平衡上下文保留与检索效率,优化大模型对海量知识库的语义理解与信息召回能力。
20+
21+
- 提升检索效率: 通过将长文本切分为适配嵌入模型输入长度的分段(如 256-512 个 Token),减少向量化与相似度计算的开销,使语义检索速度提升 3-5 倍
22+
- 优化语义完整性: 采用递归分块、语义分块等策略,依据自然段落或主题边界切分文档,避免关键信息截断。例如,在技术文档中按章节划分,可保持“函数定义 → 参数说明 → 示例代码”的完整逻辑链
23+
- 适配多模态输入限制: 大模型对输入长度有严格限制,分段技术可将超长文档压缩为符合上下文窗口的语义单元,确保生成内容的连贯性与准确性
24+
- 降低计算成本: 细粒度分段减少冗余数据处理,在实时场景中,能有效降低检索延迟,同时减少 GPU 内存占用。
25+
26+
#### 向量化嵌入(Embedding)
27+
28+
Embedding(嵌入向量) 是通过深度学习神经网络提取内容和语义,并生成的高维稠密向量。在 RAG 应用中,它是将非结构化数据(如文本、图片等)转换为机器可处理的数值形式的关键技术。
29+
30+
- 数学意义: 一个稠密浮点数组,每个元素表示数据的某个维度。
31+
- 降维和语义化: 可以从稀疏的原始数据(如文本词频矩阵)映射到稠密的低维空间,同时保留语义信息。
32+
- 作用: 将文档、问题等转化为向量,便于向量检索功能处理。相似内容的向量距离更近。
33+
34+
#### 向量检索
35+
36+
向量检索 是一种通过数学距离来查找和匹配高维向量的技术,常用于语义相似性和推荐系统。
37+
38+
- 语义理解: 不仅支持传统关键字搜索,更擅长语义相似性匹配(例如寻找含义类似的两个问题)。
39+
- 高性能: 向量数据库提供了向量检索能力,即使是大规模向量数据也能快速查找。
40+
- 应用场景: 帮助实现聊天机器人、推荐系统、智能搜索。
41+
- 开发者可以将文档内容生成的向量(Embedding)存储在向量数据库中,后续通过向量检索 API 查找和匹配最相关的内容。更多内容参见向量检索。
42+
43+
### Langflow 介绍
44+
45+
Langflow 是一个开源的、可视化的 LangChain 工作流构建平台。它提供了一个直观的图形界面,让用户可以通过拖拽组件的方式来构建复杂的 AI 应用流程,而无需编写复杂的代码。
46+
47+
在本次比赛中,Langflow 作为工作流编排平台,帮助选手快速构建 RAG 系统,专注于核心的数据库检索逻辑实现。
48+
49+
## 题目介绍
50+
51+
我们设计了以 miniob 为向量数据库,langflow 为工作流的 RAG 流程。选手需要完善自己的工作流,在工作流中调用选手自己的 miniob 数据库来完成此题目。
52+
53+
### 测评流程
54+
55+
- 上传代码: 选手需要将自己的工作流导出为 json 格式,放在个人 miniob 仓库下,位置为项目根目录下的 `./rag/model.json` (注意文件名必须为 `model.json`)
56+
- 模型导入: 将选手的 model.json 上传到测评的 langflow 平台
57+
- 启动 miniob: 启动选手的 miniob 数据库
58+
- 测评: 通过 HTTP API,运行选手的工作流并获得测评结果
59+
- 评分: 通过测评结果计算召回率
60+
61+
### 数据集
62+
63+
测评的知识库来源于 [OceanBase 官方文档](https://github.com/oceanbase/oceanbase-doc),部分的测评数据如下:
64+
65+
```json
66+
[
67+
{
68+
"question": "在MySQL模式和Oracle模式下,集群名、租户名和用户名的最大长度分别是多少?",
69+
"support_facts": ["标识符长度限制"]
70+
},
71+
{
72+
"question": "ODP连接数据库时有哪些限制?",
73+
"support_facts": ["ODP(OceanBase Database Proxy) 连接限制"]
74+
},
75+
{
76+
"question": "单个表的行长度、列数、索引个数的最大限制是多少?",
77+
"support_facts": ["单个表的限制"]
78+
},
79+
{
80+
"question": "在MySQL模式和Oracle模式下,`VARCHAR`类型的最大长度分别是多少?",
81+
"support_facts": ["字符串类型限制"]
82+
},
83+
{
84+
"question": "物理备库的使用有哪些具体限制?",
85+
"support_facts": ["功能使用限制"]
86+
}
87+
]
88+
```
89+
90+
### 评分规则
91+
92+
#### 召回率计算
93+
94+
通过问题,答案,以及数据集的 `support_facts` 获得召回率,计算公式:
95+
96+
```python
97+
score = sum(1 for support_fact in support_facts if support_fact in answer) / len(support_facts)
98+
```
99+
100+
#### 通过条件
101+
102+
我们会从数据集中选取 30 个问题,并计算平均召回率 (平均召回率 = 所有题目的召回率总和 / 题目数量),若平均召回率高于 70%,则通过此题目
103+
104+
### 测评环境变量介绍
105+
106+
- `OB_DOC_PATH`: OceanBase 官方文档目录地址,测评使用的是 https://github.com/oceanbase/oceanbase-doc/tree/V4.3.5/zh-CN 下的文档
107+
- `EMBEDDING_NAME`: 词嵌入模型名,测评使用的模型是 bge-m3
108+
- `EMBEDDING_BASE_URL`: 词嵌入模型地址
109+
- `LLM_NAME`: 大语言模型名,
110+
- `LLM_API_KEY`: 大语言模型 Api Key
111+
- `LLM_BASE_URL`: 大语言模型地址
112+
- `QA_SERVER_GET_QUESTION_URL`: 测评机生成问题地址
113+
- `QA_SERVER_POST_ANSWER_URL`: 测评机发送答案地址
114+
- `MINIOB_SERVER_SOCKET`: miniob socket 文件地址
115+
116+
### 初始工作流
117+
118+
为了方便大家更快上手,我们提供了一个初始的 langflow 工作流 json 文件,包含了与测评机器做答案交互,调用大模型等繁琐 IO 操作。同时也提供了一些必要的组件,内容如下 (从左到右,从上到下一次介绍):
119+
120+
- `Directory`: 负责知识库的导入,通过测评环境变量 `OB_DOC_PATH` 获得 OceanBase 官方文档目录地址,来加载 OceanBase 介绍文档
121+
- `Split Text`: 文档的分块,通过制定字符/规则划分文档
122+
- `Ollama Embeddings`: 词嵌入模型
123+
- `Chat Input`: 调用 `QA_SERVER_GET_QUESTION_URL` 向测评机获取问题
124+
- `MiniOB`: MiniOB 数据库交互
125+
- `Parser`: 解析 MiniOB 的检索结果
126+
- `Prompt`: 通过检索结果生成提示词
127+
- `Qwen`: 通义千问模型
128+
- `Chat Output`: 输出大模型结果
129+
- `Test Output`: 投送测评结果到测评机
130+
131+
### 测评提示
132+
133+
- 初始工作流的组件默认未连接,请先完成连线后再运行
134+
- 在 MiniOB 组件代码中标注有 TODO,请完成 TODO 并正确连接以通过此题
135+
- 请勿修改如环境变量名等配置项名称以保证测评顺利进行
136+
137+
## 参考资料
138+
139+
### RAG 技术
140+
141+
- [RAG: Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks](https://arxiv.org/abs/2005.11401)
142+
- [RAG 概述](https://www.oceanbase.com/docs/common-oceanbase-cloud-1000000002951473#0-title-%E6%A6%82%E5%BF%B5%E4%BB%8B%E7%BB%8D)
143+
144+
### Langflow 工作流
145+
146+
- [LangChain 官方文档](https://python.langchain.com/)
147+
- [Langflow 官方文档](https://docs.langflow.org/)
148+
- [Langflow 代码仓库](https://github.com/langflow-ai/langflow)
149+
150+
### 自测模型参考
151+
152+
- [阿里云百炼平台](https://bailian.console.aliyun.com/?tab=model#/model-market)
153+
- [Ollama](https://ollama.com/)

0 commit comments

Comments
 (0)