Skip to main content
Vectara 是面向关键任务应用的可信 AI 助手和 Agent 平台,专注于企业级就绪性。Vectara 无服务器 RAG 即服务通过易用的 API 提供所有 RAG 组件,包括:
  1. 从文件中提取文本的方法(PDF、PPT、DOCX 等)
  2. 提供最优性能的基于 ML 的分块。
  3. Boomerang 嵌入模型。
  4. 存储文本块和嵌入向量的内部向量数据库。
  5. 一个查询服务,自动将查询编码为嵌入向量,并检索最相关的文本段落,支持混合搜索以及多种重排序选项,如多语言相关性重排序器MMRUDF 重排序器
  6. 一个 LLM,用于根据检索到的文档(上下文)创建生成式摘要,包括引用。
更多信息: 本笔记本展示了在仅将 Vectara 用作向量存储(不含摘要)时的基本检索功能,包括:similarity_searchsimilarity_search_with_score 以及 LangChain 的 as_retriever 功能。

设置

要使用 VectaraVectorStore,首先需要安装合作伙伴包。
!uv pip install -U pip && uv pip install -qU langchain-vectara

入门指南

要开始使用,请按照以下步骤操作:
  1. 如果还没有账号,请注册免费 Vectara 试用版。
  2. 在你的账户中,可以创建一个或多个语料库。每个语料库代表一个存储区域,用于存储从输入文档中提取的文本数据。要创建语料库,使用 “Create Corpus” 按钮,然后为语料库提供名称和描述。可选地,你可以定义过滤属性并应用一些高级选项。点击已创建的语料库,可以在顶部看到其名称和语料库 ID。
  3. 接下来,你需要创建 API 密钥来访问语料库。在语料库视图中点击 “Access Control” 选项卡,然后点击 “Create API Key” 按钮。为你的密钥命名,并选择仅查询还是查询+索引权限。点击”Create”,现在你有了一个活跃的 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"))
首先,我们将 state-of-the-union 文本加载到 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 个块并用英语响应
使用此配置,让我们通过 as_rag 方法创建一个封装完整 Vectara RAG 流水线的 LangChain Runnable 对象:
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 提供智能查询重写选项,通过从自然语言查询自动生成元数据过滤表达式来增强搜索精度。该功能分析用户查询,提取相关元数据过滤器,并重新表述查询以聚焦于核心信息需求。