跳到主要內容
Open on GitHub

Vectara

Vectara 提供可信任的生成式 AI 平台,讓組織能夠快速創建類似 ChatGPT 的體驗(AI 助理),這建立在他們擁有的數據、文檔和知識之上(技術上來說,它是檢索增強生成即服務)。

Vectara 概述: Vectara 是可信任的 AI 助理和 Agent 平台,專注於關鍵任務應用程式的企業就緒性。Vectara 無伺服器 RAG 即服務提供易於使用的 API 背後的所有 RAG 組件,包括

  1. 一種從檔案(PDF、PPT、DOCX 等)中提取文本的方法
  2. 基於 ML 的分塊,可提供最先進的性能。
  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-key"

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 聊天

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 或僅作為檢索器。
  • 此筆記本展示了 Vectara 的自我查詢功能。
  • 此筆記本展示了如何使用 Langchain 和 Vectara 構建聊天機器人

此頁面是否對您有幫助?