8.Reranking results
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org
==================================================
我们构建的混合检索方法效果不错,但仍存在一些薄弱环节。当搜索"工程团队对 INC-2023-Q4-011 做了什么?"时,我们可能期望软件工程部分排名更高,因为它明确提到了工程团队和该事件。然而,当前系统仍然首先返回网络安全部分。
这就是重新排序发挥作用的地方——这是一种添加额外后处理步骤来提高检索准确性的技术。
重新排序的工作原理
重新排序在概念上很简单。在运行向量索引和 BM25 索引并合并结果后,你需要添加一个步骤:使用 Claude 智能地重新排列搜索结果的重新排序器。

该过程的工作流程如下:
- 获取混合搜索的合并结果
- 将结果连同用户的原始问题一起发送给 Claude
- 要求 Claude 按相关性递减的顺序返回最相关的文档
- 使用 Claude 重新排序的列表作为最终结果
重新排序提示词
提示结构很简单直接。你向Claude提供用户的问题和所有看起来相关的文档,然后要求执行一个简单的任务:
你的任务是找到与用户问题最相关的文档。
<user_question>
INC-2023-Q4-011发生了什么?
</user_question>
以下是可能相关的文档:
<documents>
<document>第10节...</document>
<document>第2节...</document>
<document>第7节...</document>
<document>Section 6...</document>
</documents>
返回3个最相关的文档,按相关性递减的顺序排列。
效率考虑
在实现重新排序时有一个重要的效率考虑。如果你要求Claude返回每个相关块的完整文本,实际上就是要求它将大量文本复制回给你。这既浪费又缓慢。
更好的方法是提前为每个文本块分配一个唯一ID,然后要求Claude只返回按正确顺序排列的这些ID:
<documents>
<document>
<id>ab84</id>
<content>Section 10...</content>
</document>
<document>
<id>51n3</id>
<content>第8节...</content>
</document>
</documents>
然后Claude可以返回一个简单的列表,如["1p5g", "51n3", "ab83"],而不是复制整个文本块。
Implementation
重排序函数会在初始混合搜索完成后由您的检索器自动调用。基本结构如下:
def reranker_fn(docs, query_text, k):
# 使用ID格式化文档
joined_docs = "\n".join([
f"""
<document>
<document_id>{doc["id"]}</document_id>
<document_content>{doc["content"]}</document_content>
</document>
"""
for doc in docs
])
# 创建提示并获取Claude的响应
prompt = f"""..."""
messages = []
add_user_message(messages, prompt)
add_assistant_message(messages, """```json""")
result = chat(messages, stop_sequences=["""```"""])
return json.loads(result["text"])["document_ids"]
Results
在使用"工程团队对 INC-2023-Q4-011 做了什么?"这个查询测试重新排序方法时,软件工程部分现在出现在结果的首位。Claude 成功识别出用户的查询特别关注工程团队以及他们与该事件的关系。
Trade-offs
重新排序带来了明显的权衡:
- 延迟增加:现在需要等待对 Claude 的额外 API 调用
- 准确性提升:Claude 能够以纯向量相似性无法做到的方式理解上下文和相关性
对于大多数应用来说,准确性的提升值得付出延迟的代价,特别是在处理复杂查询时,语义理解比纯粹的关键词匹配更为重要。
==================================================
此文档由 学习AI的1000天 翻译制作(抖音,B站,YouTube)
邮箱: szqshan@gmail.com | 微信: szqshan
网址: www.xueai.org