使用Cohere Rerank优化LlamaIndex查询
欢迎来到这篇技术博客!今天我们将探讨如何使用Cohere Rerank优化LlamaIndex的查询结果。如果你在Colab上打开这个Notebook,你可能需要安装LlamaIndex。
%pip install llama-index > /dev/null
%pip install llama-index-postprocessor-cohere-rerank > /dev/null
下载数据
首先,我们需要下载一些示例数据。这里我们使用Paul Graham的散文作为示例。
!mkdir -p 'data/paul_graham/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'
加载文档并构建索引
接下来,我们加载文档并构建向量索引。
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
# 加载文档
documents = SimpleDirectoryReader("./data/paul_graham/").load_data()
# 构建索引
index = VectorStoreIndex.from_documents(documents=documents)
使用Cohere Rerank优化查询结果
我们将使用Cohere Rerank来优化查询结果。首先,我们需要设置Cohere API密钥。
import os
from llama_index.postprocessor.cohere_rerank import CohereRerank
api_key = os.environ["COHERE_API_KEY"]
cohere_rerank = CohereRerank(api_key=api_key, top_n=2)
然后,我们创建一个查询引擎,并使用Cohere Rerank作为节点后处理器。
query_engine = index.as_query_engine(
similarity_top_k=10,
node_postprocessors=[cohere_rerank],
)
response = query_engine.query(
"What did Sam Altman do in this essay?",
)
from llama_index.core.response.pprint_utils import pprint_response
pprint_response(response, show_source=True)
直接检索最相似的节点
作为对比,我们也可以直接检索最相似的节点,而不使用Cohere Rerank。
query_engine = index.as_query_engine(
similarity_top_k=2,
)
response = query_engine.query(
"What did Sam Altman do in this essay?",
)
pprint_response(response, show_source=True)
结果对比
使用Cohere Rerank优化后的查询结果更加相关和准确。以下是优化后的查询结果:
Final Response: Sam Altman was asked if he wanted to be the president
of Y Combinator. Initially, he declined as he wanted to start a
startup focused on making nuclear reactors. However, after persistent
persuasion, he eventually agreed to become the president of Y
Combinator starting with the winter 2014 batch.
______________________________________________________________________
Source Node 1/2
Node ID: 7ecf4eb2-215d-45e4-ba08-44d9219c7fa6
Similarity: 0.93033177
Text: When I was dealing with some urgent problem during YC, there was
about a 60% chance it had to do with HN, and a 40% chance it had do
with everything else combined. [17] As well as HN, I wrote all of
YC's internal software in Arc. But while I continued to work a good
deal in Arc, I gradually stopped working on Arc, partly because I
didn't have t...
______________________________________________________________________
Source Node 2/2
Node ID: 88be17e9-e0a0-49e1-9ff8-f2b7aa7493ed
Similarity: 0.86269903
Text: Up till that point YC had been controlled by the original LLC we
four had started. But we wanted YC to last for a long time, and to do
that it couldn't be controlled by the founders. So if Sam said yes,
we'd let him reorganize YC. Robert and I would retire, and Jessica and
Trevor would become ordinary partners. When we asked Sam if he wanted
to...
而直接检索最相似节点的结果可能不太相关,甚至可能出现幻觉(hallucination)。
总结
通过使用Cohere Rerank,我们可以在查询时进一步优化结果的相关性和准确性。这种方法特别适用于需要高精度查询结果的场景。希望这篇博客能帮助你更好地理解和应用Cohere Rerank。
如果你有任何问题或需要进一步的帮助,请随时在评论区留言。感谢阅读!