Skip to main content
Open In ColabOpen on GitHub

Vectara Chat

Vectara 是值得信赖的AI助手和代理平台,专注于企业关键任务应用的准备。

Vectara 无服务器 RAG 即服务提供了一个易于使用的 API,包含了 RAG 的所有组件,包括:

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

查看Vectara API文档以获取有关如何使用API的更多信息。

本笔记本展示了如何使用Vectara的Chat功能,该功能提供了对话历史的自动存储,并确保后续问题考虑该历史。

入门指南

要开始使用,请按照以下步骤操作:

  1. 如果您还没有账户,请注册免费试用Vectara。完成注册后,您将获得一个Vectara客户ID。您可以通过点击Vectara控制台窗口右上角的您的名字来找到您的客户ID。
  2. 在您的账户中,您可以创建一个或多个语料库。每个语料库代表一个区域,用于存储从输入文档中提取的文本数据。要创建语料库,请使用"创建语料库"按钮。然后,您需要为您的语料库提供一个名称和描述。您还可以选择定义过滤属性并应用一些高级选项。如果您点击您创建的语料库,您可以在顶部看到它的名称和语料库ID。
  3. 接下来,您需要创建API密钥以访问语料库。在语料库视图中点击"访问控制"标签,然后点击"创建API密钥"按钮。为您的密钥命名,并选择您希望密钥是仅查询还是查询+索引。点击“创建”,您现在就有了一个有效的API密钥。请保密此密钥。

要使用LangChain与Vectara,你需要具备以下三个值:customer IDcorpus IDapi_key。 你可以通过两种方式将这些值提供给LangChain:

  1. 在你的环境中包含这三个变量:VECTARA_CUSTOMER_ID, VECTARA_CORPUS_IDVECTARA_API_KEY

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

import os
import getpass

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

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

import os

os.environ["VECTARA_API_KEY"] = "<YOUR_VECTARA_API_KEY>"
os.environ["VECTARA_CORPUS_ID"] = "<YOUR_VECTARA_CORPUS_ID>"
os.environ["VECTARA_CUSTOMER_ID"] = "<YOUR_VECTARA_CUSTOMER_ID>"

from langchain_community.vectorstores import Vectara
from langchain_community.vectorstores.vectara import (
RerankConfig,
SummaryConfig,
VectaraQueryConfig,
)

Vectara 聊天解释

在大多数使用LangChain创建聊天机器人的情况下,必须集成一个特殊的memory组件,该组件维护聊天会话的历史记录,然后使用该历史记录来确保聊天机器人了解对话历史。

使用Vectara Chat - 所有这些都在后端由Vectara自动完成。您可以查看Chat文档以了解详细信息,了解更多关于如何实现这一点的内部机制,但在LangChain中,您只需在Vectara向量存储中启用该功能即可。

让我们看一个例子。首先我们加载SOTU文档(记住,文本提取和分块都在Vectara平台上自动进行):

from langchain_community.document_loaders import TextLoader

loader = TextLoader("state_of_the_union.txt")
documents = loader.load()

vectara = Vectara.from_documents(documents, embedding=None)
API Reference:TextLoader

现在我们使用as_chat方法创建一个Chat Runnable:

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
)

bot = vectara.as_chat(config)

这是一个没有聊天历史记录时提问的示例

bot.invoke("What did the president say about Ketanji Brown Jackson?")["answer"]
'The President expressed gratitude to Justice Breyer and highlighted the significance of nominating Ketanji Brown Jackson to the Supreme Court, praising her legal expertise and commitment to upholding excellence [1]. The President also reassured the public about the situation with gas prices and the conflict in Ukraine, emphasizing unity with allies and the belief that the world will emerge stronger from these challenges [2][4]. Additionally, the President shared personal experiences related to economic struggles and the importance of passing the American Rescue Plan to support those in need [3]. The focus was also on job creation and economic growth, acknowledging the impact of inflation on families [5]. While addressing cancer as a significant issue, the President discussed plans to enhance cancer research and support for patients and families [7].'

这里有一个带有一些聊天历史记录提问的例子

bot.invoke("Did he mention who she suceeded?")["answer"]
"In his remarks, the President specified that Ketanji Brown Jackson is succeeding Justice Breyer on the United States Supreme Court[1]. The President praised Jackson as a top legal mind who will continue Justice Breyer's legacy of excellence. The nomination of Jackson was highlighted as a significant constitutional responsibility of the President[1]. The President emphasized the importance of this nomination and the qualities that Jackson brings to the role. The focus was on the transition from Justice Breyer to Judge Ketanji Brown Jackson on the Supreme Court[1]."

流式聊天

当然,聊天机器人界面也支持流式传输。 你可以简单地使用stream方法,而不是invoke方法:

output = {}
curr_key = None
for chunk in bot.stream("what about her accopmlishments?"):
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
Judge Ketanji Brown Jackson is a nominee for the United States Supreme Court, known for her legal expertise and experience as a former litigator. She is praised for her potential to continue the legacy of excellence on the Court[1]. While the search results provide information on various topics like innovation, economic growth, and healthcare initiatives, they do not directly address Judge Ketanji Brown Jackson's specific accomplishments. Therefore, I do not have enough information to answer this question.

这个页面有帮助吗?