RAG
向量数据库
RAG使用向量数据库(Vector Database),不存储关键词,它存储的是向量数据。因此,当用户需要搜索向量的时候,需要把问题也先转换成一个向量,此时就需要用一个嵌入模型(Embedding Model)来完成。
举例来说,当一个用户想在向量数据库中搜索“我是一个新手,这个月收入1000,应该怎么记录会计账目”时,整个过程的流程如下:
| 步骤 | 操作者 | 行为 |
|---|---|---|
| (可选)查询分析 | LLM | LLM把问题整理为关键词和过滤条件,比如: {"query": "记录会计账目 收入1000元", "filter": "新手"} |
| Embedding | Embedding Model (嵌入模型) |
例如用OpenAIEmbeddings,它会把上一步的 查询文本转换为一个查询坐标(向量),比如 [0.8, 0.2, 0.9, ...] |
| 查询 | 向量数据库 | 在数据库中找到和查询向量最接近的向量, 找到的该向量是一个地址,也就是一个key, 然后其对应着原始文本value |
| prompt拼接 | agent | 将查询到的相关原始文本和原本提问拼接 |
| LLM回复 | LLM | LLM生成最终答案并返回 |
。、