Skip to main content
Open In ColabOpen on GitHub

Vectara

Vectara 是值得信赖的 AI 助手和代理平台,专注于为企业关键任务应用程序提供支持。 Vectara 无服务器 RAG 即服务通过一个易于使用的 API 提供了 RAG 的所有组件,包括:

  1. 一种从文件(PDF、PPT、DOCX 等)中提取文本的方法
  2. 基于机器学习的分块技术,提供最先进的性能。
  3. 回旋镖 嵌入模型。
  4. 它自己的内部向量数据库,用于存储文本块和嵌入向量。
  5. 一种查询服务,可自动将查询编码为嵌入,并检索最相关的文本片段,支持混合搜索以及多种重排序选项,例如多语言相关性重排序器MMRUDF重排序器
  6. 一个用于创建生成式摘要的大型语言模型,基于检索到的文档(上下文),包含引用。

更多信息:

本笔记本展示了如何使用基本的检索功能,当仅将Vectara用作向量存储(不带摘要功能)时,包括:similarity_searchsimilarity_search_with_score 以及使用LangChain的 as_retriever 功能。

设置

要使用 VectaraVectorStore,首先需要安装配套包。

!uv pip install -U pip && uv pip install -qU langchain-vectara

入门指南

开始使用以下步骤:

  1. 如果您还没有账号,注册免费的Vectara试用。
  2. 在您的账户中,您可以创建一个或多个语料库。每个语料库代表一个存储从输入文档中提取的文本数据的区域。要创建语料库,请使用“创建语料库”按钮。然后,您需要为语料库提供名称和描述。您还可以选择定义过滤属性并应用一些高级选项。如果单击您创建的语料库,您可以在顶部直接看到其名称和语料库ID。
  3. 接下来,您需要创建API密钥以访问语料库。在语料库视图中点击“访问控制”选项卡,然后点击“创建API密钥”按钮。为您的密钥命名,并选择您希望密钥是仅用于查询还是查询+索引。点击“创建”,您现在已拥有一个有效的API密钥。请妥善保密此密钥。

要将LangChain与Vectara一起使用,您需要具备以下两个值:corpus_keyapi_key。 您可以通过两种方式向LangChain提供VECTARA_API_KEY

  1. 在您的环境中包含这两个变量: VECTARA_API_KEY

    例如,您可以使用 os.environ 和 getpass 设置这些变量,如下所示:

import os
import getpass

os.environ["VECTARA_API_KEY"] = getpass.getpass("Vectara API Key:")
  1. 将它们添加到 Vectara 向量存储构造函数中:
vectara = Vectara(
vectara_api_key=vectara_api_key
)

在本笔记本中,我们假设它们是在环境中提供的。

import os

os.environ["VECTARA_API_KEY"] = "<VECTARA_API_KEY>"
os.environ["VECTARA_CORPUS_KEY"] = "VECTARA_CORPUS_KEY"

from langchain_vectara import Vectara
from langchain_vectara.vectorstores import (
ChainReranker,
CorpusConfig,
CustomerSpecificReranker,
File,
GenerationConfig,
MmrReranker,
SearchConfig,
VectaraQueryConfig,
)

vectara = Vectara(vectara_api_key=os.getenv("VECTARA_API_KEY"))

首先,我们将联盟文本加载到Vectara中。

请注意,我们使用的是 add_files 接口,该接口不需要任何本地处理或分块操作——Vectara 会接收文件内容,并执行所有必要的预处理、分块以及将文件嵌入到其知识库中。

在这种情况下,它使用了一个 .txt 文件,但同样适用于许多其他文件类型

corpus_key = os.getenv("VECTARA_CORPUS_KEY")
file_obj = File(
file_path="../document_loaders/example_data/state_of_the_union.txt",
metadata={"source": "text_file"},
)
vectara.add_files([file_obj], corpus_key)
['state_of_the_union.txt']

Vectara RAG(检索增强生成)

我们现在创建一个 VectaraQueryConfig 对象来控制检索和汇总选项:

  • 我们启用了总结功能,指定希望LLM选择最匹配的7个片段并用英语回答。

使用此配置,让我们创建一个 LangChain Runnable 对象,该对象通过 as_rag 方法封装了完整的 Vectara RAG 管道:

generation_config = GenerationConfig(
max_used_search_results=7,
response_language="eng",
generation_preset_name="vectara-summary-ext-24-05-med-omni",
enable_factual_consistency_score=True,
)
search_config = SearchConfig(
corpora=[CorpusConfig(corpus_key=corpus_key)],
limit=25,
reranker=ChainReranker(
rerankers=[
CustomerSpecificReranker(reranker_id="rnk_272725719", limit=100),
MmrReranker(diversity_bias=0.2, limit=100),
]
),
)

config = VectaraQueryConfig(
search=search_config,
generation=generation_config,
)

query_str = "what did Biden say?"

rag = vectara.as_rag(config)
rag.invoke(query_str)["answer"]
"President Biden discussed several key issues in his recent statements. He emphasized the importance of keeping schools open and noted that with a high vaccination rate and reduced hospitalizations, most Americans can safely return to normal activities without masks [1]. He addressed the need to hold social media platforms accountable for their impact on children and called for stronger privacy protections and mental health services [2]. Biden also announced measures against Russia, including preventing its central bank from defending the Ruble and targeting Russian oligarchs' assets, as part of efforts to weaken Russia's economy and military [3]. Additionally, he highlighted the importance of protecting women's rights, specifically the right to choose as affirmed in Roe v. Wade [5]. Lastly, he advocated for funding the police with necessary resources and training to ensure community safety [6]."

我们也可以像这样使用流式接口:

output = {}
curr_key = None
for chunk in rag.stream(query_str):
for key in chunk:
if key not in output:
output[key] = chunk[key]
else:
output[key] += chunk[key]
if key == "answer":
print(chunk[key], end="", flush=True)
curr_key = key
President Biden emphasized several key points in his statements. He highlighted the importance of keeping schools open and noted that with a high vaccination rate and reduced hospitalizations, most Americans can safely return to normal activities without masks [1]. He addressed the need to hold social media platforms accountable for their impact on children and called for stronger privacy protections and mental health services [2]. Biden also discussed measures against Russia, including preventing their central bank from defending the Ruble and targeting Russian oligarchs' assets [3]. Additionally, he reaffirmed the commitment to protect women's rights, particularly the right to choose as affirmed in Roe v. Wade [5]. Lastly, he advocated for funding the police to ensure community safety [6].

有关Vectara作为VectorStore的更多详细信息,请访问此笔记本

Vectara 聊天

在大多数使用LangChain创建聊天机器人的场景中,必须集成一个特殊的memory组件,该组件维护聊天会话的历史记录,然后利用该历史记录确保聊天机器人能够感知对话历史。

通过 Vectara Chat,所有这些操作都会由 Vectara 在后端自动完成。

generation_config = GenerationConfig(
max_used_search_results=7,
response_language="eng",
generation_preset_name="vectara-summary-ext-24-05-med-omni",
enable_factual_consistency_score=True,
)
search_config = SearchConfig(
corpora=[CorpusConfig(corpus_key=corpus_key, limit=25)],
reranker=MmrReranker(diversity_bias=0.2),
)

config = VectaraQueryConfig(
search=search_config,
generation=generation_config,
)


bot = vectara.as_chat(config)

bot.invoke("What did the president say about Ketanji Brown Jackson?")["answer"]
'The president stated that nominating someone to serve on the United States Supreme Court is one of the most serious constitutional responsibilities he has. He nominated Circuit Court of Appeals Judge Ketanji Brown Jackson, describing her as one of the nation’s top legal minds who will continue Justice Breyer’s legacy of excellence [1].'

有关Vectara聊天的更多详细信息,请访问此笔记本

Vectara 作为自查询检索器

Vectara 提供智能查询重写选项,该功能通过从自然语言查询中自动生成元数据过滤表达式来提高搜索精度。此功能分析用户查询,提取相关的元数据过滤器,并重新表述查询以专注于核心信息需求。欲了解更多信息,请访问此笔记本

Vectara 工具

Vectara 提供了几个可与 Langchain 一起使用的工具。更多详情请访问此笔记本