VoyageAI 重新排序
Voyage AI 提供尖端的嵌入/向量化模型。
本笔记展示了如何在检索器中使用 Voyage AI 的重新排序端点。这是在 ContextualCompressionRetriever 的思想基础上构建的。
%pip install --upgrade --quiet voyageai
%pip install --upgrade --quiet langchain-voyageai
%pip install --upgrade --quiet faiss
# 或者(取决于 Python 版本)
%pip install --upgrade --quiet faiss-cpu
# 要获取您的密钥,请在 https://www.voyageai.com 上创建一个帐户
import getpass
import os
os.environ["VOYAGE_API_KEY"] = getpass.getpass("Voyage AI API Key:")
# 用于打印文档的辅助函数
def pretty_print_docs(docs):
print(
f"\n{'-' * 100}\n".join(
[f"Document {i+1}:\n\n" + d.page_content for i, d in enumerate(docs)]
)
)
设置基本向量存储检索器
让我们从初始化一个简单的向量存储检索器开始,并存储 2023 年的国情咨文演讲(以块形式)。我们可以设置检索器以检索高数量(20)的文档。您可以使用以下任何一个嵌入模型:(来源)
voyage-large-2
(默认)voyage-code-2
voyage-2
voyage-law-2
voyage-lite-02-instruct
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_voyageai import VoyageAIEmbeddings
documents = TextLoader("../../how_to/state_of_the_union.txt").load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
texts = text_splitter.split_documents(documents)
retriever = FAISS.from_documents(
texts, VoyageAIEmbeddings(model="voyage-law-2")
).as_retriever(search_kwargs={"k": 20})
query = "总统在关于 Ketanji Brown Jackson 的讲话中说了什么"
docs = retriever.invoke(query)
pretty_print_docs(docs)
文档 1:
总统的最严肃的宪法责任之一是提名某人担任美国最高法院的法官。
4 天前,我提名了联邦上诉法院法官 Ketanji Brown Jackson。她是我们国家顶尖的法律智慧之一,将延续布雷尔大法官的卓越传统。
----------------------------------------------------------------------------------------------------
文档 2:
正如我去年所说,特别是对我们年轻的跨性别美国人,作为总统,我将永远支持你们,这样你们就可以做自己,并发挥上帝赋予你们的潜力。
尽管我们似乎从不达成一致,但事实并非如此。去年,我签署了 80 项两党议案。从防止政府关门到保护亚裔免受仍然普遍存在的仇恨犯罪,再到改革军事司法。
----------------------------------------------------------------------------------------------------
文档 3:
我们不能让这种情况发生。
今晚。我呼吁参议院:通过《自由选举法》。通过《约翰·刘易斯选举权法》。而且,趁机通过《披露法》,这样美国人就能知道谁在资助我们的选举。
今晚,我想向一个一直致力于为这个国家服务的人致敬:司法部长史蒂芬·布雷尔——一位陆军退伍军人、宪法学者,也是美国最高法院即将退休的大法官。史蒂芬·布雷尔大法官,感谢您的服务。
----------------------------------------------------------------------------------------------------
文档 4:
他永远不会扑灭他们对自由的热爱。他永远不会削弱自由世界的决心。
我们今晚聚集在一个经历了这个国家有史以来最艰难两年的美国。
这场大流行病是惩罚性的。
因此,许多家庭每月都在挣扎,努力跟上食品、汽油、住房等成本的上涨。
我理解。
----------------------------------------------------------------------------------------------------
文档 5:
正如我告诉习近平的那样,押注美国人民从来都不是一个明智的选择。
我们将为数百万美国人创造良好的工作机会,现代化美国各地的道路、机场、港口和水路。
而我们将做到这一切,以承受气候危机的毁灭性影响,并促进环境正义。
----------------------------------------------------------------------------------------------------
文档 6:
我理解。
我记得我父亲不得不离开我们在宾夕法尼亚州斯克兰顿的家去找工作。我在一个家庭长大,如果食品价格上涨,你会感受到。
这就是为什么我担任总统后做的第一件事之一就是努力通过《美国复苏计划》。因为人们受到了伤害。我们需要采取行动,我们也做到了。在我们历史上的关键时刻,几乎没有哪项立法比这更多地帮助我们摆脱危机。
----------------------------------------------------------------------------------------------------
文档 7:
我与他们的家人交谈,并告诉他们,我们永远对他们的牺牲感激不尽,并将继续履行他们恢复每个社区应得的信任和安全的使命。
我长期致力于这些问题。
我知道什么是有效的:投资于犯罪预防和社区警察,他们将巡逻,了解社区,并能恢复信任和安全。
因此,让我们不要放弃我们的街道。也不要在安全和平等司法之间做出选择。
----------------------------------------------------------------------------------------------------
文档 8:
我的政府正在提供就业培训和住房援助,现在还帮助低收入退伍军人免费获得退伍军人事务部的医疗服务。
我们在伊拉克和阿富汗的部队面临许多危险。
其中一种危险是驻扎在基地并吸入“焚烧坑”散发的有毒烟雾,这些坑焚烧了战争的废物——医疗和危险物质、喷气燃料等。
当他们回家时,许多世界上最健壮和训练有素的战士再也不是原来的样子。
头痛。麻木。头晕。
----------------------------------------------------------------------------------------------------
文档 9:
今晚,我宣布,司法部将指定一名大流行欺诈的首席检察官。
到今年年底,赤字将减少到我上任前的不到一半。
我是有史以来唯一一位在一年内削减赤字超过一万亿美元的总统。
降低您的成本还意味着要求更多的竞争。
我是资本家,但没有竞争的资本主义不是资本主义。
这是剥削,它会推高价格。
----------------------------------------------------------------------------------------------------
文档 10:
头痛。麻木。头晕。
一种癌症会让他们躺在裹着国旗的棺材里。
我知道。
其中一名士兵是我的儿子博伊·拜登少校。
我们不确定是不是焚烧坑导致了他的脑癌,或者导致我们的许多部队患上疾病。
但我承诺要尽一切努力。
致力于像俄亥俄州的丹尼尔·罗宾逊那样的军事家庭。
他是希斯·罗宾逊一等军士的遗孀。
----------------------------------------------------------------------------------------------------
文档 11:
我最近在纽约市警察局的警察葬礼后几天访问了那里。
他们在响应 911 电话时,一个男子用一把偷来的枪射杀了他们。
莫拉警官 27 岁。
里韦拉警官 22 岁。
两位多米尼加裔美国人,他们在后来选择担任警察的街道上长大。
----------------------------------------------------------------------------------------------------
文档 12:
这是一项两党合作,我要感谢两党成员为此付出的努力。
我们不再谈论基础设施几周的问题。
我们将迎来一个基础设施的十年。
它将改变美国,使我们走上与世界其他地方——特别是与中国——在 21 世纪经济竞争中取得胜利的道路。
正如我告诉习近平的那样,押注美国人民从来都不是一个明智的选择。
----------------------------------------------------------------------------------------------------
文档 13:
因此,让我们不要放弃我们的街道。也不要在安全和平等司法之间做出选择。
让我们团结起来保护我们的社区,恢复信任,并追究执法人员的责任。
这就是为什么司法部要求其官员佩戴身体摄像头,禁止使用致命脖颈夹持,并限制其官员使用无敲门令。
----------------------------------------------------------------------------------------------------
文档 14:
让我们通过通过《工资公平法》和带薪休假。
将最低工资提高到每小时 15 美元,并延长儿童税收抵免,这样没有人需要在贫困中抚养家庭。
让我们增加佩尔助学金,并增加我们对历史悠久的黑人大学和各种职业学院的支持,以及投资于吉尔——我们的第一夫人,她全职教书——所称之为美国最佳保密的秘密:社区学院。
让我们在大多数工人想要组建工会时通过《PRO法案》时,不要阻止他们。
----------------------------------------------------------------------------------------------------
文档 15:
他见过乌克兰人民。
从泽连斯基总统到每一个乌克兰人,他们的无畏、勇气和决心激励着世界。
一群公民用自己的身体挡住了坦克。从学生到退休教师,他们变成了保卫自己家园的士兵。
正如泽连斯基总统在他向欧洲议会的讲话中所说的那样:“光明将战胜黑暗。”乌克兰驻美国大使今晚在这里。
----------------------------------------------------------------------------------------------------
文档 16:
对所有美国人,我会像我一直承诺的那样,对您诚实。一个俄罗斯独裁者入侵外国国家,这对世界造成了影响。
我正在采取有力行动,以确保我们的制裁对俄罗斯经济产生影响。我将利用我们掌握的一切工具来保护美国企业和消费者。
今晚,我可以宣布,美国已与其他 30 个国家合作,从世界各地的储备中释放了 6 千万桶石油。
----------------------------------------------------------------------------------------------------
文档 17:
一位前私人执业的高级诉讼律师。一位前联邦公共辩护人。来自一家公立学校教育工作者和警察的家庭。一位共识建设者。自提名以来,她得到了广泛的支持——从警察兄弟会到由民主党和共和党任命的前法官。
如果我们要推进自由和正义,我们需要保护边境并修复移民制度。
----------------------------------------------------------------------------------------------------
文档 18:
但这种滴灌理论导致了经济增长的减弱、工资的下降、赤字的增加,以及近一个世纪以来最广泛的贫富差距。
哈里斯副总统和我以美国的新经济愿景竞选。
投资于美国。教育美国人。增加劳动力。从底层和中间层建设经济,而不是从顶层向下。
----------------------------------------------------------------------------------------------------
文档 19:
每届政府都说他们会这样做,但我们实际上正在这样做。
我们将购买美国货,以确保从航空母舰的甲板到公路护栏上的钢材都是美国制造的。
但为了争取未来最好的工作,我们还需要与中国和其他竞争对手平等竞争。
----------------------------------------------------------------------------------------------------
文档 20:
唯一一个可以用一个词来定义的国家:可能性。
在我们作为一个国家的第 245 年的这个夜晚,我来报告国情。
我的报告是:国情强劲——因为您,美国人民,强大。
我们今天比一年前更强大。
一年后的今天,我们将比今天更强大。
现在是我们克服时代挑战的时刻。
我们将作为一个民族。
一个美国。
使用 VoyageAIRerank 进行重新排序
现在让我们用 ContextualCompressionRetriever
包装我们的基础检索器。我们将使用 Voyage AI 重新排序器来重新排序返回的结果。
from langchain.retrievers import ContextualCompressionRetriever
from langchain_openai import OpenAI
from langchain_voyageai import VoyageAIRerank
llm = OpenAI(temperature=0)
compressor = VoyageAIRerank(
model="rerank-lite-1", voyageai_api_key=os.environ["VOYAGE_API_KEY"], top_k=3
)
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor, base_retriever=retriever
)
compressed_docs = compression_retriever.invoke(
"What did the president say about Ketanji Jackson Brown"
)
pretty_print_docs(compressed_docs)
输出结果:
文档 1:
作为总统,最重要的宪法责任之一就是提名人选担任美国最高法院的职位。
4 天前,我提名了巡回上诉法院法官 Ketanji Brown Jackson。她是我们国家最顶尖的法律专家之一,将继续延续布雷耶法官的卓越传统。
----------------------------------------------------------------------------------------------------
文档 2:
因此,让我们不要放弃我们的街道。也不要在安全和平等正义之间做出选择。
让我们团结起来,保护我们的社区,恢复信任,并追究执法人员的责任。
这就是为什么司法部要求执法人员佩戴身体摄像头,禁止使用锁喉技术,并限制无敲门搜查令。
----------------------------------------------------------------------------------------------------
文档 3:
我与他们的家人交谈,并告诉他们,我们永远感激他们的牺牲,我们将继续履行他们恢复每个社区应得的信任和安全的使命。
我长期以来一直在从事这些问题的工作。
我知道什么是有效的:投资于犯罪预防和社区警务人员,他们会巡逻街头,了解社区,恢复信任和安全。
因此,让我们不要放弃我们的街道。也不要在安全和平等正义之间做出选择。
当然,你可以在问答流程中使用这个检索器。
from langchain.chains import RetrievalQA
chain = RetrievalQA.from_chain_type(
llm=OpenAI(temperature=0), retriever=compression_retriever
)
chain({"query": query})
输出结果:
{
'query': 'What did the president say about Ketanji Brown Jackson',
'result': '总统提名了 Ketanji Brown Jackson 担任美国最高法院的职位。'
}