AnythingLLM官方文件
Table of contents
背景
什麼是 AnythingLLM?
- AnythingLLM 是最易於使用的一體式 AI 應用程序,可執行 RAG、AI 代理等操作,且無需任何代碼或基礎設施難題。
- AnythingLLM 由 Mintplex Labs, Inc. 構建
- 由 Timothy Carambat 創立,並參加了 2022 年 YCombinator 夏季賽。
AnythingLLM 不是一個人的專案。 Mintplex 實驗室團隊還包括:
肖恩·哈特菲爾德(工程師) 唐蒂芙 (設計師) 我們的志工貢獻者社區 你?
為什麼要使用 AnythingLLM?
- 您希望在一個地方為本地 LLM、RAG 和 AI 代理提供零設定、私有且一體化的 AI 應用程序,而無需開發人員進行痛苦的設定。
AnythingLLM 桌面
- 了解更多關於 AnythingLLM 桌面的資訊
或者
AnythingLLM企業或組織
- 您需要為您的企業或組織提供一款完全可自訂、私有且一體化的 AI 應用程序,該應用程式基本上是一個具有許可的完整 ChatGPT,但具有任何 LLM、嵌入模型或向量資料庫。
- 了解有關 Docker 的 AnythingLLM 的更多資訊 →
- 介紹影片
FAQ
為什麼LLM沒有使用我給的文件?
提示:此頁面深入探討了LLM在您提問時如何、或為何不使用您提供的文件。
幸運的是,實際上解決起來很簡單! 這些想法不僅限於 AnythingLLM。
我們每週都會多次收到這個問題,有人感到困惑,甚至感到不安,LLM似乎並沒有「只知道關於嵌入到工作空間中的文檔的一切」。
因此,要理解為什麼會發生這種情況,我們首先需要澄清有關 RAG(檢索增強生成)如何在 AnythingLLM 內部工作的一些困惑。
這不會涉及很深的技術,但是一旦您閱讀了本文,您將成為傳統 RAG 工作原理的專家。
LLM並不是萬能的
不幸的是,LLM還沒有感知能力,因此即使是最強大的模型,您所使用的模型也只是“知道您的意思”,這是非常不現實的。
話雖這麼說,有大量的因素和移動部件可能會影響LLM的輸出和顯著性,甚至使事情更加複雜,每個因素都會影響您的輸出,具體取決於您的具體用例!
LLM不會內省
在 AnythingLLM 中,我們不會讀取您的整個檔案系統,然後將其報告給 LLM,因為 99% 的情況下這會浪費令牌。
相反,您的查詢會根據文件文字的向量資料庫進行處理,並且我們會從被視為與您的提示「相關」的文件中返回 4-6 個文字區塊。
例如,假設您有一個包含數百個食譜的工作區,請不要問「給我 3 種高熱量飲食的標題」。 這個LLM會斷然拒絕! 但為什麼?
當您將 RAG 用於文件聊天機器人時,您的整個文件文字不可能適合大多數 LLM 上下文視窗。 將文件拆分為文字區塊,然後將這些區塊保存在向量資料庫中,可以更輕鬆地根據您的查詢使用相關資訊片段「增強」LLM的基礎知識。
您的整個文件集並未「嵌入」到模型中。 它不知道每個文檔中的內容,也不知道這些文檔的位置。
如果這就是您想要的,那麼您正在考慮代理,他們很快就會加入 AnythingLLM。那麼
AnythingLLM 是如何運作的呢?
讓我們將 AnythingLLM 視為一個框架或管道。
1. **建立工作區**。 LLM只能「檢視」嵌入此工作區的文件。 如果文件未嵌入,LLM就無法檢視或存取該文件的內容。
2. 您**上傳文檔**,這使得「移入工作區」或「嵌入」文檔成為可能。 上傳會將您的文件轉換為文字 - 就只是這樣。
3. 您「將文件**移至工作區**」。 這會將步驟 2 中的文字分成更容易理解的部分。 然後這些區塊被發送到您的嵌入器模型並轉換為數字列表,稱為向量。
4. 這串數字將保存到您的向量資料庫中,這就是 [RAG](#rag) 的工作原理。 無法保證相關文字在此步驟中保持在一起! 這是一個活躍的研究領域。
5. 您在聊天框中輸入問題並按發送。
6. 然後您的問題就會像您的文件文字一樣被嵌入。
7. 然後向量資料庫計算“最近的”區塊向量。 AnythingLLM 會過濾任何「低分」文字區塊(您可以修改它)。 每個向量都附有其據以衍生的原始文字。
重要! 這不是一個純粹的語義過程,因此向量資料庫不會「知道你的意思」。 這是使用“餘弦距離”公式的數學過程。
然而,這裡使用的嵌入器模型和其他 AnythingLLM 設定可以產生最大的差異。 請閱讀下一節以了解更多內容。
8. 任何被認為有效的區塊都會作為原始文本**傳遞給LLM**。 然後,這些文字將作為其「系統訊息」附加到 LLM。 此上下文插入到該工作區的系統提示下方。
9. LLM 使用**系統提示**+上下文、您的查詢和歷史記錄來盡可能最好地回答問題。完畢。那麼
如何才能更好地檢索呢?
AnythingLLM 提供了許多選項來調整您的工作空間,以更好地適應您選擇的 LLM、嵌入器和向量資料庫。
工作區選項是最容易搞亂的,您應該先從那裡開始。 AnythingLLM 在每個工作區中做出一些預設假設。 這些適用於某些狀況、但肯定不是所有的實例。
您可以透過將滑鼠懸停在工作區上並點擊「齒輪」圖示來找到這些設定。
- 聊天設定 > 提示
這是您工作區的系統提示。 這是您的工作區將遵循的“規則集”以及它將如何最終回應查詢。 在這裡,您可以將其定義為以某種程式語言(可能是特定語言或其他任何語言)進行回應。 就在這裡定義一下吧。
- 聊天設定 > LLM 溫度
這決定了LLM的回答有多麼「有創意」。 這因型號而異。 要知道數字越高,反應就越「隨機」。 低的溫度則會有更短、更簡潔、更「事實」的回答。
- 向量資料庫設定 > 最大上下文片段
這是RAG「檢索」部分非常關鍵的一項。 這決定了「我想發送多少相關的文字片段給LLM」。 直覺上你可能會想“好吧,我想要所有這些”,但這是不可能的,因為每個模型可以處理的令牌數量都有上限。 此窗口稱為上下文窗口,與系統提示、上下文、查詢和歷史記錄共用。
如果您要讓模型溢出,AnythingLLM 將從上下文中修剪資料 - 這將使模型崩潰。 因此,對於大多數模型來說,最好將此值保持在 4-6 之間。 如果使用像 Claude-3 這樣的大上下文模型,您可以走得更高,但要注意上下文中太多的「噪音」可能會在回應生成中誤導LLM。
- 向量資料庫設定 > 文件相似度閾值
此設定可能是導致您遇到問題的原因! 此屬性將過濾掉可能與您的查詢無關的低分向量區塊。 由於這是基於數學值而不是基於真正的語義相似性,因此包含您答案的文字區塊可能會被過濾掉。
如果您出現幻覺或 LLM 反應不佳,您應該將其設為「無限制」。 預設情況下,最低分數為 20%,對某些人有效,但計算值取決於幾個因素:
- 使用的嵌入模型(尺寸和向量化特定文字的能力)
範例:用於向量化英語文字的嵌入器可能無法很好地處理普通話文字。
預設嵌入器是 https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2
- 特定工作空間中向量的密度。
- 更多向量=更多可能的噪音,以及實際上不相關的匹配。
- 您的查詢:這就是匹配向量的基礎。 模糊的查詢得到模糊的結果。
固定文件
作為最後的手段,如果上述設定似乎沒有為您帶來任何改變 - 那麼固定文件可能是一個很好的解決方案。
固定文檔這個動作,是將文檔全文插入到上下文視窗中的地方。 如果上下文視窗允許如此多的文本,您將獲得全文理解和更好的答案,但代價是速度和成本。
固定文件應保留用於完全適合上下文視窗或對該工作區的用例極為關鍵的文件。
您只能固定已嵌入的文件。 點擊圖釘圖示將切換文件的此一設定。
名詞解釋
RAG
- retrieval augmented generation by AWS
什麼是檢索增強生成?
- 擷取增強生成 (RAG) 是對大型語言模型輸出最佳化的過程,因此在產生回應之前,它會參考其訓練資料來源以外的權威知識庫。
- 大型語言模型 (LLM) 在大量資料上訓練,並使用數十億個參數來生成原始輸出,用於回答問題、翻譯語言和完成句子等任務。
- RAG 將原本就很強大的 LLM 功能擴展到特定領域或組織的內部知識庫,而無需重新訓練模型。
- 這是改善 LLM 輸出具成本效益的方法,可讓 LLM 在各種情況下仍然相關、準確且有用。
擷取增強生成為何重要?
LLM 是一種關鍵人工智慧 (AI) 技術,為智慧聊天機器人和其他自然語言處理 (NLP) 應用程式提供支援。目標是建立可以透過交互參考權威知識來源來回答使用者各種內容問題的機器人。不幸的是,LLM 技術的性質導致 LLM 回應中引入不可預測性。此外,LLM 訓練資料是靜態的,並為其所擁有的知識引入了截止日期。
- LLM 的已知挑戰包括:
- 當沒有答案時顯示虛假資訊。
- 當使用者期待特定的最新回應時,顯示過期或一般資訊。
- 從非授權來源建立回應。
- 由於術語混亂而建立不正確的回應,其中不同的訓練來源使用相同的術語來談論不同的事情。
- 您可以將大型語言模型視為一名過度熱情的新員工,拒絕了解時事,卻始終以絕對的信心回答每個問題。不幸的是,這種態度可能會對使用者的信任產生負面影響,並不是您希望聊天機器人模擬的內容!
- RAG 是解決這些挑戰的其中一種方法。它重新導向 LLM,從權威、預先確定的知識來源中擷取相關資訊。組織對產生的文字輸出有更大的控制權,並且使用者深入了解 LLM 如何產生回應。
擷取增強生成有哪些優點?
RAG 技術為組織的生成式 AI 工作帶來了多種優點。
- 經濟實惠的實作
- 聊天機器人開發通常是從使用基礎模型(FM)開始的。
- 基礎模型 (FM) 是在廣泛的廣義和未標記資料上訓練的 API 可存取 LLM。
- 為組織或領域特定資訊重新訓練 FM 的運算和財務成本很高。
- RAG 是一種更加經濟實惠的方法,將新資料引入 LLM。它使生成式人工智慧 (生成式 AI) 技術更廣泛可存取和可用。
- 目前資訊
- 即使 LLM 的原始訓練資料來源適合您的需求,維護相關性仍是一項挑戰。
- RAG 可讓開發人員為生成式模型提供最新的研究、統計資料或新聞。他們可以使用 RAG 將 LLM 直接連線到即時社交媒體摘要、新聞網站或其他經常更新的資訊來源。
- LLM 接著可以向使用者提供最新資訊。
- 增強使用者信任:
- RAG 可讓 LLM 以來源屬性呈現準確的資訊。輸出可以包括來源的引用或參考。
- 如果使用者需要進一步釐清或詳細資訊,也可以自行查詢來源文件。這可以增加對生成式 AI 解決方案的信任和信心。
- 更多開發人員控制
- 有了 RAG,開發人員可以更有效率地測試和改善他們的聊天應用程式。他們可以控制和變更 LLM 的資訊來源,以適應不斷變化的要求或跨功能使用。
- 開發人員也可以將敏感資訊擷取限制為不同的授權層級,並確保 LLM 產生適當的回應。
- 此外,如果 LLM 針對特定問題參考了不正確的資訊來源,它們也可以進行疑難排解和修正。組織可以更有自信地為更廣泛的應用程式實作生成式 AI 技術。
擷取增強生成的運作方式?
- 如果沒有 RAG,LLM 會接受使用者輸入,並根據它接受過訓練的資訊或已經知道的資訊建立回應。
- 使用 RAG,引入了一個資訊擷取元件,該元件利用使用者輸入首先從新資料來源提取資訊。使用者查詢和相關資訊都會提供給 LLM。
- LLM 使用新的知識及其訓練資料來建立更好的回應。下列各節提供程序的概觀。
- 建立外部資料
- LLM 原始訓練資料集之外的新資料稱為外部資料。
- 它可以來自多個資料來源,例如 API、資料庫或文件儲存庫。
- 資料可能有各種格式,例如檔案、資料庫記錄或長格式文字。
- 另一種 AI 技術稱為內嵌語言模型,將資料轉換為數值表示並將其儲存在向量資料庫中。此程序建立一個生成式 AI 模型可以理解的知識庫。
- 擷取相關資訊
- 下一步是執行相關性搜索。使用者查詢會轉換為向量表示,並與向量資料庫比對。
- 例如,考慮一個可以為組織回答人力資源問題的智慧聊天機器人。
- 如果員工搜尋 “How much annual leave do I have?” (我有多少年假?),系統會擷取年假政策文件以及個別員工過往的休假記錄。
- 系統會傳回這些特定文件,因為它們與員工輸入的內容高度相關。
- 使用數學向量計算和表示來計算及確立相關性。
- 增強 LLM 提示
- 接下來,RAG 模型透過在內容中新增相關擷取的資料來增強使用者輸入 (或提示)。
- 此步驟使用提示詞工程技術與 LLM 有效溝通。增強提示可讓大型語言模型為使用者查詢產生準確的答案。
- 更新外部資料
- 下一個問題可能是:如果外部資料過時該怎麼辦?
- 若要維護目前的資訊以供擷取,請以非同步方式更新文件並更新文件的內嵌表示。
- 您可以透過自動化即時程序或定期批次處理來完成此操作。
- 這是資料分析中常見的挑戰:可以使用會變更管理的不同資料科學方法。
下圖顯示使用 RAG 與 LLM 的概念流程。
擷取增強生成和語義搜索之間有什麼區別?
- 語義搜尋可為想要將大量外部知識來源新增至其 LLM 應用程式的組織提升 RAG 結果。
- 現代企業可在各種系統上存放大量資訊,例如手冊、常見問答集、研究報告、客戶服務指南和人力資源文件儲存庫等。
- 大規模內容擷取具有挑戰性,同時也會降低生成式輸出品質。
- 語義搜索技術可以掃描不同資訊的大型資料庫,並更準確地擷取資料。
- 例如,它們可以透過將問題映射到相關文件並且傳回特定文字而不是搜尋結果,回答像是 “How much was spent on machinery repairs last year?” (去年在機械維修上花費多少錢?) 的問題。
- 然後開發人員可以使用該答案為 LLM 提供更多內容。
- RAG 中的傳統或關鍵字搜索解決方案為知識密集任務產生的結果有限。開發人員也必須在手動準備資料時處理文字內嵌、文件區塊化和其他複雜問題。
- 相較之下,語義搜索技術完成知識庫準備的所有工作,不需要開發人員著手執行。它們還會產生語義相關的段落和按相關性排序的字符字詞,最大限度地提高 RAG 承載的品質。
AWS 如何支援您的擷取擴增產生要求?
- Amazon Bedrock 是一項全受管服務,可提供各種高效能基礎模型選擇,以及建置生成式 AI 應用程式的各種廣泛功能,同時簡化開發與維護隱私權和安全。
- 有了 Amazon Bedrock 的知識庫,您只需點擊幾下即可將 FM 連線到 RAG 的資料來源。向量轉換、擷取和改進的輸出產生都會自動處理。
- 對於管理自身 RAG 的組織,Amazon Kendra 是一項高度準確且採用機器學習技術的企業搜尋服務。它提供最佳化的 Kendra Retriever API,可讓您使用 Amazon Kendra 的高準確度語義排名器,做為 RAG 工作流程的企業擷取器。
舉例來說,您可以使用 Retrieve API:
擷取最多 100 個語義相關的段落,每段最多 200 個字符,按相關性排序。 使用熱門資料技術的預先建置連接器,例如 Amazon Simple Storage Service、SharePoint、Confluence 和其他網站。 支援各種文件格式,例如 HTML、Word、PowerPoint、PDF、Excel 和文字檔案。 根據最終使用者許可所允許的文件篩選回應。