使用 Jev 和 Milvus 进行搜索
向量检索用于查找与查询相关的信息。构建实用的搜索应用还需要做出一系列判断:哪些文本段真正回答了问题、是否可以复用先前的答案,以及 AI Agent 是否已有足够的证据停止搜索。
Milvus 和 Jev 分别负责这一工作流中的不同环节。Milvus 存储 Embedding 并检索候选记录,同时通过元数据 Filter 施加产品版本或知识库范围等约束。Jev 根据指令评估检索文本的含义。你的应用可以利用其判断来选择证据或控制下一步搜索。
Jev 有什么作用?
Jev 请求包含上下文以及一个或多个判断问题。其 类型化输出 包括从固定选项中选择结果、有序评分以及是/否概率。应用代码可以根据这些输出直接作出决策,无需解析自由形式的解释。需要时,生成模型仍可生成答案或后续检索查询。
例如,用户询问如何安装 Atlas v2。Milvus 可以将检索范围限定为 v2 文档,并返回与安装、升级和故障排查相关的相似段落。随后,Jev 会评估哪些段落说明了初始设置流程。应用再将选中的依据传递给答案生成模型。
各组件的职责很明确:
- 使用 Milvus 检索: 在所需的元数据约束范围内查找候选结果。
- 使用 Jev 判断: 根据问题和特定于任务的标准评估这些候选结果。
- 在应用代码中执行操作: 对结果重新排序、筛选上下文、复用答案或继续检索。
有些决策会在检索前作出。Jev 可以选择检索范围,也可以在传入文档进入 Collection 前对其进行评估。访问控制和精确 Filter 仍由应用负责。
探索检索场景
Search with Jev 示例 Collection 包含九个可运行的教程。每个教程都使用小型合成数据集,并展示检索到的记录、判断结果以及最终执行的操作。
选择更优证据
- 对搜索结果进行 Rerank:重新排序文档和编码 Agent 的记忆。有关笔记本电脑端口错误的记忆可能与容器连接问题相似,但记录容器与主机连接问题实际修复方案的记忆更有帮助。
- 筛选检索到的上下文:Milvus 应用版本 Filter 后,区分初次安装说明与升级和故障排查相关段落。
- 对图关系进行 Rerank:回答有关某本书作者出生地的问题时,同时选中从书籍到作者的桥接关系以及从作者到出生地的关系,并在获取来源段落时保留该排序。
控制检索与答案复用
- 决定何时停止检索:生成模型根据累积的证据提出检索请求,由 Jev 判断原始问题是否可以回答。示例涵盖可直接回答的问题、需要两跳推理的问题,以及达到检索次数上限后仍无法回答的问题。
- 路由检索查询:在文档、账单或记忆检索之间进行选择,然后应用对应的 Milvus Filter。超出范围的查询将进入单独的处理路径。
- 验证语义缓存复用:检索相似的缓存请求,然后检查其答案是否同样满足新请求在任务、语言和上下文方面的要求。
改进并检查知识 Pipeline
- 在建立索引前筛选文档:区分实质性的操作指导与宣传性或不完整的材料,并分别执行建立索引、审核和排除操作。
- 筛查检索到的段落:识别试图诱导 AI Assistant 转移方向的文本,同时保留常规的安全建议。这是一项额外的筛查步骤,并不能提供安全保证。
- 评估检索证据:判断段落的相关性、证据是否充分,以及回答中是否包含缺乏依据的主张。示例会特意移除证据或添加缺乏依据的陈述,以清晰展示其中的区别。
A ready-made reranking interface
Milvus Model 提供应用端 JevRerankFunction:传入查询文本和候选文档文本,即可获得带有原始索引并按相关性排序的评分结果。使用这些索引对 Milvus 返回的记录重新排序。
Jev 集成 已合并。有关当前 API,请参阅 实现和构造函数选项。该接口接受 TYPESAFE_API_KEY,默认使用 jev-latest。请使用已包含此集成的软件包版本。
当前封装使用基于声明与证据判断相关性的提示词。请确认这一判断标准适合你的任务。对于记忆兼容性、停止或路由等自定义判断,请按照所链接教程直接使用 TypeSafe API。教程演示了如何从 Python 应用程序代码直接调用 API。
在 Milvus 中试用
打开 Colab 中的 重排教程,从候选结果召回和排序开始实践。如需了解本地环境设置和完整教程列表,请参阅该 教程 Collection 的 README。
这些示例使用 Gemini API key 生成 Embedding,并使用 TypeSafe API key 调用 Jev。Agentic Search 教程还使用 Gemini 生成查询和答案。示例文本会发送给这些 API 提供商,调用可能会消耗额度。
教程默认使用 Milvus Lite 运行,同时也提供连接 Milvus server 或 Zilliz Cloud 的选项。不同部署方式采用相同的职责划分:Milvus 负责召回候选结果,应用则将相关文本发送给 Jev 进行判断。
请将这些示例作为制定自有判断标准和阈值的起点。相关性分数并不能保证答案正确,这些用于教学的小型数据集也不足以证明生产环境中的准确性或速度。
Explore implementations and evaluation results
以下开源项目将这些思路应用于更大规模的检索工作流。链接中的报告说明了各项实验使用的数据集、对比方法和局限性。
| 项目 | 检索用例 | Jev 相关工作 |
|---|---|---|
| MemSearch | 面向 coding agent 的持久化 Markdown 记忆 | Jev 实现 · 评估 |
| Vector Graph RAG | 面向多跳问题的向量与图检索 | Jev 实现 · 评估 |
| DeepSearcher | 针对私有知识的迭代式检索 | 实验运行程序 · 搜索停止评估 (独立实验) |
| GPTCache | 为兼容的请求复用答案 | Jev 实现 · 评估 |
DeepSearcher 的相关工作是一项独立的搜索停止实验。其他实现链接展示了 Jev 针对特定任务的集成方式。解读这些项目的结果时,应结合各自的评估背景,而不应将其视为共用的基准测试。