Cohere 是一家加拿大初创公司,提供自然语言处理模型,帮助企业改善人机交互。本笔记本展示了如何在检索器中使用 Cohere 的重排序端点。
pip install -qU cohere
pip install -qU faiss
# 或者(取决于 Python 版本)
pip install -qU faiss-cpu
# 获取新令牌:https://dashboard.cohere.ai/
import getpass
import os
if "COHERE_API_KEY" not in os.environ:
os.environ["COHERE_API_KEY"] = getpass.getpass("Cohere API 密钥:")
if "LANGSMITH_API_KEY" not in os.environ:
os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Langsmith API 密钥:")
# 用于打印文档的辅助函数
def pretty_print_docs(docs):
print(
f"\n{'-' * 100}\n".join(
[f"文档 {i + 1}:\n\n" + d.page_content for i, d in enumerate(docs)]
)
)
设置基础向量存储检索器
让我们从初始化一个简单的向量存储检索器开始,并存储 2023 年国情咨文演讲(分块存储)。我们可以设置检索器以检索大量(20 个)文档。from langchain_community.document_loaders import TextLoader
from langchain_cohere import CohereEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter
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, CohereEmbeddings(model="embed-english-v3.0")
).as_retriever(search_kwargs={"k": 20})
query = "总统对凯坦吉·布朗·杰克逊说了什么"
docs = retriever.invoke(query)
pretty_print_docs(docs)
文档 1:
总统最严肃的宪法职责之一是提名某人在美国最高法院任职。
我四天前就这样做了,我提名了巡回上诉法院法官凯坦吉·布朗·杰克逊。她是我国顶尖的法律人才之一,将继续布雷耶大法官卓越的遗产。
----------------------------------------------------------------------------------------------------
文档 2:
我们不能让这种情况发生。
今晚。我呼吁参议院:通过《自由投票法案》。通过《约翰·刘易斯投票权法案》。同时,通过《披露法案》,以便美国人知道谁在资助我们的选举。
今晚,我想向一位毕生致力于服务这个国家的人致敬:斯蒂芬·布雷耶大法官——一位陆军退伍军人、宪法学者,以及即将退休的美国最高法院大法官。布雷耶大法官,感谢您的服务。
----------------------------------------------------------------------------------------------------
文档 3:
正如我去年所说,特别是对我们年轻的跨性别美国人,作为你们的总统,我将永远支持你们,这样你们就可以做自己,并发挥上帝赋予的潜力。
虽然我们似乎从未达成一致,但事实并非如此。去年我签署了 80 项两党法案成为法律。从防止政府关门到保护亚裔美国人免受仍然过于常见的仇恨犯罪,再到改革军事司法。
----------------------------------------------------------------------------------------------------
文档 4:
我与他们的家人交谈,并告诉他们,我们永远感激他们的牺牲,我们将继续他们的使命,恢复每个社区应有的信任和安全。
我长期致力于这些问题。
我知道什么有效:投资于犯罪预防和社区警察,他们将巡逻街道,了解社区,并能恢复信任和安全。
所以,让我们不要放弃我们的街道。或者在安全和平等正义之间做出选择。
----------------------------------------------------------------------------------------------------
文档 5:
他遇到了乌克兰人民。
从泽连斯基总统到每一个乌克兰人,他们的无畏、他们的勇气、他们的决心,激励着世界。
一群群公民用身体阻挡坦克。从学生到退休人员,从教师到士兵,每个人都保卫着自己的家园。
在这场斗争中,正如泽连斯基总统在对欧洲议会的演讲中所说:“光明将战胜黑暗。”乌克兰驻美国大使今晚也在这里。
----------------------------------------------------------------------------------------------------
文档 6:
所以,让我们不要放弃我们的街道。或者在安全和平等正义之间做出选择。
让我们团结起来保护我们的社区,恢复信任,并让执法部门承担责任。
这就是为什么司法部要求佩戴执法记录仪,禁止锁喉,并限制其警官使用无敲门搜查令。
----------------------------------------------------------------------------------------------------
文档 7:
但那种涓滴理论导致了更弱的经济增长、更低的工资、更大的赤字,以及近一个世纪以来顶层人士与其他所有人之间最大的差距。
哈里斯副总统和我竞选时提出了美国的新经济愿景。
投资美国。教育美国人。壮大劳动力。从底层和中层向上建设经济,而不是从上往下。
----------------------------------------------------------------------------------------------------
文档 8:
一位前私人执业顶级诉讼律师。一位前联邦公设辩护人。并且来自一个公立学校教育工作者和警察的家庭。一位共识建立者。自从她被提名以来,她获得了广泛的支持——从警察兄弟会到民主党和共和党任命的前法官。
如果我们想要推进自由和正义,我们需要确保边境安全并修复移民体系。
----------------------------------------------------------------------------------------------------
文档 9:
希斯·罗宾逊中士的遗孀。
他生来就是一名士兵。陆军国民警卫队。在科索沃和伊拉克担任战地医疗兵。
驻扎在巴格达附近,距离足球场大小的焚烧坑仅几码远。
希斯的遗孀丹妮尔今晚和我们在一起。他们喜欢去俄亥俄州立大学看橄榄球比赛。他喜欢和女儿一起搭乐高。
但长期暴露于焚烧坑导致的癌症摧毁了希斯的肺部和身体。
丹妮尔说希斯一直战斗到最后一刻。
----------------------------------------------------------------------------------------------------
文档 10:
正如我告诉习近平的那样,押注反对美国人民从来都不是一个好赌注。
我们将为数百万美国人创造好工作,现代化全美各地的道路、机场、港口和水道。
我们将这样做,以抵御气候危机的毁灭性影响并促进环境正义。
----------------------------------------------------------------------------------------------------
文档 11:
正如俄亥俄州参议员谢罗德·布朗所说,“是时候埋葬‘锈带’这个标签了。”
是时候了。
但是,尽管我们的经济中有许多亮点,创纪录的就业增长和更高的工资,太多家庭仍在努力跟上账单。
通货膨胀正在剥夺他们可能原本会感受到的收益。
我理解。这就是为什么我的首要任务是控制价格。
----------------------------------------------------------------------------------------------------
文档 12:
这是一项两党共同努力,我要感谢两党为实现这一目标而努力的成员。
我们不再谈论基础设施周。
我们将迎来一个基础设施十年。
它将改变美国,并使我们走上赢得与世界其他国家——特别是与中国——的 21 世纪经济竞争的道路。
正如我告诉习近平的那样,押注反对美国人民从来都不是一个好赌注。
----------------------------------------------------------------------------------------------------
文档 13:
他永远不会熄灭他们对自由的热爱。他永远不会削弱自由世界的决心。
今晚我们相聚在一个经历了这个国家有史以来最艰难的两年的美国。
疫情一直在肆虐。
太多家庭靠薪水度日,挣扎着应对食品、汽油、住房等不断上涨的成本。
我理解。
----------------------------------------------------------------------------------------------------
文档 14:
我理解。
我记得我父亲不得不离开我们在宾夕法尼亚州斯克兰顿的家去找工作。我在一个家庭中长大,如果食品价格上涨,你就能感受到。
这就是为什么我作为总统做的第一件事就是努力通过《美国救援计划》。
因为人们很痛苦。我们需要采取行动,我们做到了。
在我们历史上的关键时刻,很少有立法能像这样帮助我们走出危机。
----------------------------------------------------------------------------------------------------
文档 15:
我的政府正在提供就业培训和住房援助,现在正在帮助低收入退伍军人获得免费的退伍军人事务部护理。
我们在伊拉克和阿富汗的军队面临许多危险。
其中一个是驻扎在基地,吸入来自“焚烧坑”的有毒烟雾,这些焚烧坑焚烧战争废物——医疗和危险材料、航空燃料等。
当他们回家时,世界上许多最健康、训练最精良的战士再也没有恢复原状。
头痛。麻木。头晕。
----------------------------------------------------------------------------------------------------
文档 16:
丹妮尔说希斯一直战斗到最后一刻。
他不知道如何停止战斗,她也不知道。
通过她的痛苦,她找到了目标,要求我们做得更好。
今晚,丹妮尔——我们正在这样做。
退伍军人事务部正在开创将有毒暴露与疾病联系起来的新方法,已经帮助更多退伍军人获得福利。
今晚,我宣布我们将扩大资格,覆盖患有九种呼吸系统癌症的退伍军人。
----------------------------------------------------------------------------------------------------
文档 17:
癌症是美国第二大死因——仅次于心脏病。
上个月,我宣布了我们的计划,以大力推进六年前奥巴马总统要求我领导的“癌症登月计划”。
我们的目标是在未来 25 年内将癌症死亡率至少降低 50%,将更多癌症从死亡判决转变为可治疗的疾病。
为患者和家庭提供更多支持。
为此,我呼吁国会资助 ARPA-H,即高级健康研究计划局。
----------------------------------------------------------------------------------------------------
文档 18:
我对抗通胀的计划将降低您的成本并减少赤字。
17 位诺贝尔经济学奖得主表示,我的计划将缓解长期通胀压力。顶级商业领袖和大多数美国人支持我的计划。计划如下:
首先——降低处方药成本。看看胰岛素。每十个美国人中就有一个患有糖尿病。在弗吉尼亚州,我遇到了一个名叫约书亚·戴维斯的 13 岁男孩。
----------------------------------------------------------------------------------------------------
文档 19:
让我们通过《薪酬公平法案》和带薪休假。
将最低工资提高到每小时 15 美元,并延长儿童税收抵免,这样就没有人必须在贫困中抚养家庭。
让我们增加佩尔助学金,增加我们对历史性支持的 HBCUs(传统黑人大学)的支持,并投资于吉尔——我们的第一夫人,她全职教学——所说的美国最保守的秘密:社区大学。
当大多数工人想要组建工会时,让我们通过《PRO 法案》——他们不应该被阻止。
----------------------------------------------------------------------------------------------------
文档 20:
议长女士,副总统女士,我们的第一夫人和第二先生。国会议员和内阁成员。最高法院大法官们。我的美国同胞们。
去年 COVID-19 让我们分离。今年我们终于再次相聚。
今晚,我们作为民主党人、共和党人和独立人士相聚。但最重要的是作为美国人。
彼此之间、对美国人民、对宪法负有责任。
并且有着坚定不移的决心,自由将永远战胜暴政。
使用 CohereRerank 进行重排序
现在让我们用ContextualCompressionRetriever 包装我们的基础检索器。我们将添加一个 CohereRerank,它使用 Cohere 重排序端点对返回的结果进行重排序。
请注意,在 CohereRerank 中指定模型名称是强制性的!
from langsmith import Client
from langchain_classic.retrievers.contextual_compression import (
ContextualCompressionRetriever,
)
from langchain_cohere import ChatCohere, CohereRerank
llm = ChatCohere(temperature=0)
compressor = CohereRerank(model="rerank-english-v3.0")
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor, base_retriever=retriever
)
compressed_docs = compression_retriever.invoke(
"总统对凯坦吉·杰克逊·布朗说了什么"
)
pretty_print_docs(compressed_docs)
client = Client()
prompt = client.pull_prompt("rlm/rag-prompt", include_model=True)
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
qa_chain = (
{
"context": compression_retriever | format_docs,
"question": RunnablePassthrough(),
}
| prompt
| llm
| StrOutputParser()
)
qa_chain.invoke("总统对凯坦吉·杰克逊·布朗说了什么?")
" 总统高度评价凯坦吉·布朗·杰克逊,称她是国家顶尖的法律人才之一,并将继续布雷耶大法官卓越的遗产。总统还提到他与她的家人合作过,她来自一个公立学校教育工作者和警察的家庭。自从她被提名以来,她获得了包括警察兄弟会和来自两大主要政党的法官在内的各种团体的支持。 \n\n您想让我从提供的文本中提取另一句话吗? "
将这些文档连接到 Claude、VSCode 等,通过 MCP 获取实时答案。

