Vectara
Vectara 提供可信任的生成式 AI 平台,讓組織能夠快速創建類似 ChatGPT 的體驗(AI 助理),這建立在他們擁有的數據、文檔和知識之上(技術上來說,它是檢索增強生成即服務)。
Vectara 概述: Vectara 是可信任的 AI 助理和 Agent 平台,專注於關鍵任務應用程式的企業就緒性。Vectara 無伺服器 RAG 即服務提供易於使用的 API 背後的所有 RAG 組件,包括
- 一種從檔案(PDF、PPT、DOCX 等)中提取文本的方法
- 基於 ML 的分塊,可提供最先進的性能。
- 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-key"
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 聊天
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 一起使用的更詳細範例,請參閱以下範例筆記本