当我查询使用LlaMA索引创建的简单矢量索引时,它返回一个JSON对象,其中包含查询的响应和用于生成答案的源节点(带有分数)。它如何计算使用哪些节点?(我猜是语义搜索?)
是否有一种方法可以返回节点,使其不使用OpenAI的API(因为这需要花钱)。我使用gpt-3.5 turbo来获取查询的答案。
我试着搜索LlaMA索引文档,但是我找不到任何东西。
通过查询和源嵌入之间的相似性搜索找到节点。
简单地说,源中的句子被转换为向量嵌入(一个大的1D数字数组)。然后将查询也转换为其嵌入。为了检查源向量是否与查询向量相似,只需进行点积就可以很好地估计它们的相似程度。因此,在所有源嵌入中,返回最高的点积(top_k设置返回的数量,因此top_k=5返回top 5)。
回到你问题的羊驼指数部分。您可以使用索引as_retriver。它只返回来自源的句子(也包括点积分数,即相似性分数和您添加的任何元数据)。
retriver = index.as_retriver()
nodes = retriver.retrive(query)
您可以使索引充当检索器,然后您可以使用response_mode = 'no_text'
查询它,如本教程中所述,通过llama_index: https://github.com/jerryjliu/llama_index/blob/3c338ea59be0bc9b4b98bce3fdc6be895409852a/docs/core_modules/query_modules/response_synthesizers/usage_pattern.md#configuring-the-response-mode
from llama_index.response_synthesizers import get_response_synthesizer
response_synthesizer = get_response_synthesizer(response_mode='no_text')
query_engine = index.as_query_engine(response_synthesizer=response_synthesizer)
response = query_engine.query("query_text")