Vectara
Vectara 提供了一个可信的生成式 AI 平台,允许组织快速创建类似 ChatGPT 的体验(一个 AI 助手),该助手基于他们拥有的数据、文档和知识(技术上,它是一种检索增强生成即服务)。
Vectara 概述: Vectara 是值得信赖的 AI 助手和 Agent 平台,专注于任务关键型应用程序的企业就绪性。Vectara 无服务器 RAG 即服务提供易于使用的 API 背后的所有 RAG 组件,包括
- 一种从文件(PDF、PPT、DOCX 等)中提取文本的方法
- 提供最先进性能的基于机器学习的分块。
- Boomerang 嵌入模型。
- 其自身的内部向量数据库,用于存储文本块和嵌入向量。
- 一种查询服务,可自动将查询编码为嵌入,并检索最相关的文本段,包括对 混合搜索 以及多种重新排序选项的支持,例如 多语言相关性重新排序器、MMR、UDF 重新排序器。
- 一个 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
创建 Vectara 向量存储的实例
vectara = Vectara(
vectara_customer_id=customer_id,
vectara_corpus_id=corpus_id,
vectara_api_key=api_key
)
customer_id
、corpus_id
和 api_key
是可选的,如果未提供,则将分别从环境变量 VECTARA_CUSTOMER_ID
、VECTARA_CORPUS_ID
和 VECTARA_API_KEY
中读取。
添加文本或文件
拥有向量存储后,您可以按照标准 VectorStore
接口 add_texts
或 add_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_search
或 similarity_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 一样,包括 invoke
或 stream
方法。
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 构建聊天机器人