跳到主要内容
Open on GitHub

Vectara

Vectara 提供了一个可信的生成式 AI 平台,允许组织快速创建类似 ChatGPT 的体验(一个 AI 助手),该助手基于他们拥有的数据、文档和知识(技术上,它是一种检索增强生成即服务)。

Vectara 概述: Vectara 是值得信赖的 AI 助手和 Agent 平台,专注于任务关键型应用程序的企业就绪性。Vectara 无服务器 RAG 即服务提供易于使用的 API 背后的所有 RAG 组件,包括

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

更多信息

安装和设置

要将 Vectara 与 LangChain 一起使用,无需特殊的安装步骤。要开始使用,注册 免费的 Vectara 试用版,并按照 快速入门 指南创建语料库和 API 密钥。获得这些后,您可以将它们作为参数提供给 Vectara vectorstore,或者您可以将它们设置为环境变量。

  • export VECTARA_CUSTOMER_ID="您的客户 ID"
  • export VECTARA_CORPUS_ID="您的语料库 ID"
  • export VECTARA_API_KEY="您的 Vectara API 密钥"

Vectara 作为向量存储

Vectara 平台周围存在一个包装器,允许您在 LangChain 中将其用作 vectorstore

导入此向量存储

from langchain_community.vectorstores import Vectara
API 参考:Vectara

创建 Vectara 向量存储的实例

vectara = Vectara(
vectara_customer_id=customer_id,
vectara_corpus_id=corpus_id,
vectara_api_key=api_key
)

customer_idcorpus_idapi_key 是可选的,如果未提供,则将分别从环境变量 VECTARA_CUSTOMER_IDVECTARA_CORPUS_IDVECTARA_API_KEY 中读取。

添加文本或文件

拥有向量存储后,您可以按照标准 VectorStore 接口 add_textsadd_documents,例如

vectara.add_texts(["to be or not to be", "that is the question"])

由于 Vectara 平台支持文件上传,我们还添加了直接上传文件(PDF、TXT、HTML、PPT、DOC 等)的功能。使用此方法时,每个文件都直接上传到 Vectara 后端,在那里进行最佳处理和分块,因此您无需使用 LangChain 文档加载器或分块机制。

例如

vectara.add_files(["path/to/file1.pdf", "path/to/file2.pdf",...])

当然,您不必添加任何数据,而只需连接到可能已索引数据的现有 Vectara 语料库。

查询向量存储

要查询 Vectara 向量存储,您可以使用 similarity_search 方法(或 similarity_search_with_score),该方法接受查询字符串并返回结果列表

results = vectara.similarity_search_with_score("what is LangChain?")

结果作为相关文档列表返回,以及每个文档的相关性得分。

在本例中,我们使用了默认的检索参数,但您也可以在 similarity_searchsimilarity_search_with_score 中指定以下附加参数

  • k:要返回的结果数(默认为 5)
  • lambda_val:用于混合搜索的 词汇匹配 因子(默认为 0.025)
  • filter:应用于结果的 过滤器(默认为 None)
  • n_sentence_context:返回结果时,在实际匹配段之前/之后包含的句子数。默认为 2。
  • rerank_config:可用于指定结果的重新排序器
    • reranker:mmr、rerank_multilingual_v1 或 none。请注意,“rerank_multilingual_v1”仅是 Scale 功能
    • rerank_k:用于重新排序的结果数
    • mmr_diversity_bias:0 = 无多样性,1 = 完全多样性。这是 MMR 公式中的 lambda 参数,范围为 0...1

要获得不带相关性得分的结果,您可以简单地使用 'similarity_search' 方法

results = vectara.similarity_search("what is LangChain?")

Vectara 用于检索增强生成 (RAG)

Vectara 提供完整的 RAG 管道,包括生成式摘要。要将其用作完整的 RAG 解决方案,您可以使用 as_rag 方法。可以在 VectaraQueryConfig 对象中指定一些其他参数来控制检索和摘要

  • k:要返回的结果数
  • lambda_val:用于混合搜索的词汇匹配因子
  • summary_config(可选):可用于在 RAG 中请求 LLM 摘要
    • is_enabled:True 或 False
    • max_results:用于摘要生成的结果数
    • response_lang:响应摘要的语言,采用 ISO 639-2 格式(例如 'en'、'fr'、'de' 等)
  • rerank_config(可选):可用于指定结果的 Vectara 重新排序器
    • reranker:mmr、rerank_multilingual_v1 或 none
    • rerank_k:用于重新排序的结果数
    • mmr_diversity_bias:0 = 无多样性,1 = 完全多样性。这是 MMR 公式中的 lambda 参数,范围为 0...1

例如

summary_config = SummaryConfig(is_enabled=True, max_results=7, response_lang='eng')
rerank_config = RerankConfig(reranker="mmr", rerank_k=50, mmr_diversity_bias=0.2)
config = VectaraQueryConfig(k=10, lambda_val=0.005, rerank_config=rerank_config, summary_config=summary_config)

然后,您可以使用 as_rag 方法创建 RAG 管道

query_str = "what did Biden say?"

rag = vectara.as_rag(config)
rag.invoke(query_str)['answer']

as_rag 方法返回一个 VectaraRAG 对象,其行为与任何 LangChain Runnable 一样,包括 invokestream 方法。

Vectara Chat

RAG 功能可用于创建聊天机器人。例如,您可以创建一个简单的聊天机器人来响应用户输入

summary_config = SummaryConfig(is_enabled=True, max_results=7, response_lang='eng')
rerank_config = RerankConfig(reranker="mmr", rerank_k=50, mmr_diversity_bias=0.2)
config = VectaraQueryConfig(k=10, lambda_val=0.005, rerank_config=rerank_config, summary_config=summary_config)

query_str = "what did Biden say?"
bot = vectara.as_chat(config)
bot.invoke(query_str)['answer']

主要区别如下:使用 as_chat,Vectara 在内部跟踪聊天历史记录,并根据完整的聊天历史记录调节每个响应。无需在本地将该历史记录保留在 LangChain 中,因为 Vectara 将在内部管理它。

Vectara 仅作为 LangChain 检索器

如果您只想将 Vectara 用作检索器,则可以使用 as_retriever 方法,该方法返回一个 VectaraRetriever 对象。

retriever = vectara.as_retriever(config=config)
retriever.invoke(query_str)

与 as_rag 类似,您提供一个 VectaraQueryConfig 对象来控制检索参数。在大多数情况下,您不会启用 summary_config,但为了向后兼容,它被保留为一个选项。如果未请求摘要,则响应将是相关文档的列表,每个文档都有一个相关性得分。如果请求摘要,则响应将是与之前相同的相关文档列表,外加一个包含生成式摘要的附加文档。

幻觉检测得分

Vectara 创建了 HHEM - 一个开源模型,可用于评估 RAG 响应的事实一致性。作为 Vectara RAG 的一部分,“事实一致性得分”(或 FCS),它是开源 HHEM 的改进版本,通过 API 提供。这会自动包含在 RAG 管道的输出中

summary_config = SummaryConfig(is_enabled=True, max_results=7, response_lang='eng')
rerank_config = RerankConfig(reranker="mmr", rerank_k=50, mmr_diversity_bias=0.2)
config = VectaraQueryConfig(k=10, lambda_val=0.005, rerank_config=rerank_config, summary_config=summary_config)

rag = vectara.as_rag(config)
resp = rag.invoke(query_str)
print(resp['answer'])
print(f"Vectara FCS = {resp['fcs']}")

示例 Notebooks

要查看有关将 Vectara 与 LangChain 结合使用的更详细示例,请参阅以下示例 notebook

  • 此 notebook 展示了如何使用 Vectara:使用完整的 RAG 或仅作为检索器。
  • 此 notebook 展示了 Vectara 的自查询功能。
  • 此 notebook 展示了如何使用 Langchain 和 Vectara 构建聊天机器人

此页面对您有帮助吗?