Skip to main content
Open on GitHub

Vectara

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

Vectara 概述: Vectara 是一个值得信赖的人工智能助手和代理平台,专注于企业关键任务应用的准备。 Vectara 的无服务器 RAG 即服务提供了一个易于使用的 API 背后的所有 RAG 组件,包括:

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

更多信息:

安装与设置

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

  • 导出 VECTARA_CUSTOMER_ID="your_customer_id"
  • 导出 VECTARA_CORPUS_ID="your_corpus_id"
  • 导出 VECTARA_API_KEY="your-vectara-api-key"

Vectara 作为向量存储

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

要导入这个向量存储:

from langchain_community.vectorstores import Vectara
API Reference: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语料库,其中可能已经索引了数据。

查询 VectorStore

要查询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: 真或假
    • 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 聊天

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']}")

示例笔记本

有关使用Vectara与LangChain的更详细示例,请参阅以下示例笔记本:

  • 这个笔记本展示了如何使用Vectara:既可以作为完整的RAG,也可以仅作为检索器。
  • this notebook 展示了Vectara的自查询功能。
  • 这个笔记本展示了如何使用Langchain和Vectara构建一个聊天机器人

这个页面有帮助吗?