發佈日期:

閱讀論文的好幫手們!

SciSpace – 專注於科學PDF文件的AI聊天平台

官方網站:https://typeset.io/ai-writer

Typeset.io(現稱為SciSpace)是一個專注於科學PDF文件的AI聊天平台。以下是該網站的一些主要功能:

  • AI輔助閱讀:SciSpace提供AI工具來幫助用戶更有效地閱讀和理解科學PDF文件。這可能包括自動生成摘要、提取關鍵信息等功能。
  • 科學文獻管理:用戶可以使用該平台來組織和管理他們的科學文獻,這對於研究人員和學者來說非常有用。
  • 互動式學習:通過AI聊天功能,用戶可以與平台進行互動,提出問題並獲得即時的答案,這有助於加深對文獻內容的理解。
  • 數據分析:平台可能提供一些基本的數據分析功能,例如進行統計測試(如正態性檢驗)並展示結果。

可以使用的用途:

  • 提供超過 100,000 種經過驗證的期刊模板,用戶可以將他們的研究內容格式化為符合特定期刊要求的格式。
  • 自動調整文檔格式,確保符合目標期刊的格式要求,對於需要遵循嚴格格式規範的學術寫作來說很有幫助。
  • 提供強大的引文管理功能,支持多種引用樣式,並能自動生成參考文獻。
  • 允許多個用戶同時處理同一份文檔,有助於團隊合作的研究項目。
  • 提供語言增強和內容一致性改進的功能,能自動檢測並糾正學術寫作中的錯誤,從而提高文稿的品質。

參考介紹文章:https://www.playpcesor.com/2023/12/scispace-ai-research-assistant.html

Scopus AI

官方網站:https://elsevier.libguides.com/Scopus/ScopusAI

Scopus AI 是由 Elsevier 開發的一款基於生成式人工智慧(GenAI)的智能搜索工具,旨在提升學術研究的效率和準確性。以下是 Scopus AI 的主要功能和特點:

  • 智能查詢優化:Scopus AI 的 Copilot 功能能夠分析用戶的查詢,並根據查詢內容自動選擇使用關鍵字搜索或向量搜索,甚至同時使用兩者,從而提高搜索結果的相關性和準確性。
  • 快速生成摘要:該工具可以根據 Scopus 中的文獻摘要生成簡短的綜合性摘要,幫助用戶快速理解複雜的內容,並提供參考文獻以便進一步探索。
  • 支持自然語言查詢:用戶可以使用自然語言進行查詢,Scopus AI 能夠在幾秒鐘內提煉出數十年的研究成果,並生成清晰易懂的概述。
  • 互動式概念圖:Scopus AI 還能創建互動式概念圖,幫助研究者了解研究主題及其與其他研究領域的關聯,這對於探索新主題和發現跨學科的合作機會非常有幫助。
  • 透明性和負責任的 AI:Scopus AI 在運作過程中提供透明性,解釋其如何處理查詢和生成結果,這有助於用戶理解和信任該工具的運作。

Copilot 同時使用關鍵字和向量搜尋工具,採用更多、更多樣化的搜尋技術來更好地處理專業查詢並提供更具體的回應。

Copilot 的工作原理如下:Copilot 查看查詢的內容並決定是否要執行 aand/or、向量搜尋、關鍵字搜索,然後確保複雜的查詢被分解為其組成部分;例如,對於關鍵字搜索,它添加了布林運算符,針對它選擇使用的搜尋管道進行了優化,這樣做時,它比之前的搜尋考慮了更多的抽象內容,因此,Copilot 可以分解更複雜的內容查詢其各個組件並針對向量或關鍵字搜尋優化每個元素。

Google Scholar

Google Scholar(谷歌學術搜尋)是一個免費的學術搜索引擎,旨在幫助用戶查找學術文獻、論文、書籍、會議論文和專利等。以下是 Google Scholar 的主要功能和特點:

主要功能

  • 廣泛的文獻搜索:Google Scholar 提供對各種學術資源的搜索,包括期刊文章、學位論文、書籍、會議論文和專利,涵蓋了多個學科領域。
  • 引用功能:用戶可以查看文獻的引用次數,並獲得引用格式的建議,這對於學術寫作和文獻管理非常有幫助。
  • 個人資料和庫存管理:用戶可以創建個人資料,保存感興趣的文獻到「我的圖書館」,並設置文獻更新的提醒,方便隨時查閱。
  • 多語言支持:Google Scholar 支持多種語言,方便全球用戶使用。
  • 高級搜索選項:用戶可以使用高級搜索功能,根據作者、出版年份、期刊名稱等條件進行精確查詢。
  • 免費訪問:許多文獻可以免費訪問,雖然某些期刊可能需要訂閱或購買,但 Google Scholar 通常會提供可用的免費版本或替代資源的鏈接。

使用場景

  • 學術研究:研究人員可以使用 Google Scholar 查找相關文獻,了解最新的研究趨勢和成果。
  • 學生學習:學生可以通過 Google Scholar 獲取學術資料,支持他們的學術寫作和研究項目。
  • 文獻回顧:學者在撰寫文獻回顧時,可以利用 Google Scholar 獲取大量相關文獻,進行系統性的分析。

Consensus GPT

官方網站:https://chatgpt.com/g/g-bo0FiWLY7-consensus

Consensus GPT 是由 LeptonAI 開發的一種 AI 工具,它通過對大量學術論文進行分析,提供出符合學術共識的信息。這款工具不僅能夠讀取和理解文本,還能從中提煉出關鍵點,並以簡潔的方式呈現給用戶。

Consensus GPT 的特點是它的回答都是基於實際的科學研究和發現,這使得它在提供有關科學、技術、醫學等領域的信息時尤其有價值。此外,Consensus GPT 還具有交互式的對話功能,用戶可以進行問答,從而獲得更深入的理解。具有交互式問答功能,可以讓用戶獲得更深入的理解。

發佈日期:

生成式AI 職場應用全揭秘 – 開啟你職涯的無限可能

活動連結

《AI Frontiers Webinar》https://www.aiatw.org/post/ai-frontiers-webinar-20241124

本書登上天瓏書局11月份暢銷榜第一名喔!

活動簡介

想要成為職場贏家嗎?生成式AI 就是你的秘密武器。

Claire將分享她如何利用AI克服瓶頸,創造職涯新的可能性。她亦訪談了多位不同領域的專家,從多樣化的角度分享如何在各行業中,利用生成式AI來提升工作效率。
透過這場分享,你將獲得最真實、最新且全面的實戰經驗談,拓展你在職涯發展上的無限可能。

分享內容錄影

活動分享簡報

發佈日期:

在Dify內整合LangSmith

使用 LangSmith 和 Langfuse 增強 Dify 上 LLM 的可觀察性

參考文章:https://dify.ai/blog/dify-integrates-langsmith-langfuse

Dify 現在支持使用 LangSmith 和 Langfuse 這兩款工具來詳細追蹤和分析 LLM 應用的數據。這些工具使得選擇合適的模型、創建有效的提示、監控應用性能、持續改進應用以及成本優化變得更加容易。

LangSmith 介紹

官方網站:https://www.langchain.com/langsmith

LangSmith 的主要目的是提升 LLM 應用的可觀察性和性能,適合需要深入監控和評估模型表現的開發者。LangSmith 是由 LangChain 開發的一款工具,專門用於協助開發者在生產環境中更有效地管理和監控大型語言模型 (LLM) 應用程式。它提供了一套完整的工具,涵蓋了從模型開發、測試到部署的整個生命週期。

LangSmith 的主要功能

  • 追蹤 (Tracing):
    • 詳細記錄 LLM 應用程式在執行過程中的每個步驟,包括輸入、輸出、模型參數等。
    • 方便開發者回溯問題,分析模型行為。
  • 監控 (Monitoring):
    • 實時監控 LLM 應用程式的性能指標,如回應時間、錯誤率等。
    • 及早發現異常,確保系統穩定運行。
  • 部署 (Deployment):
    • 提供簡便的部署方式,將 LLM 應用程式快速部署到生產環境。
    • 支持多種部署方式,如雲端、本地等。
  • 提示工程 (Prompt Engineering):
    • 提供管理和優化提示的工具。
    • 幫助開發者撰寫更有效、更精準的提示。
  • 評估 (Evaluation):
    • 提供多種評估方式,評估模型的性能。
    • 幫助開發者優化模型。

如何與 Dify 串接?

在 Dify 中使用 LangSmith 和 Langfuse 非常簡單。在創建應用程序後,您可以在概覽頁面上通過一鍵配置啟用這些工具。

一旦配置完成,您在 Dify 創建的應用程序中的使用數據將自動傳輸到這些平台。在 LangSmith 和 Langfuse 的項目管理界面中,您可以查看詳細的性能指標、成本數據和使用信息,以優化您在 Dify 上的應用程序。

發佈日期:

ReAct Prompting

什麼是ReAct

論文網址:https://arxiv.org/abs/2210.03629

ReAct Prompting 是一種結合了推理(Reasoning)行動(Acting)的提示策略,旨在提升語言模型的推理能力和任務處理的靈活性。這種方法特別適合於需要多步推理的情境,讓模型不僅能回答問題,還能在每個步驟中進行推理、執行動作並根據回饋來調整答案。

ReAct Prompting 的核心概念

  • Reasoning(推理):模型會先根據提示中的問題進行邏輯推理,分析問題的各個面向,列出思路並規劃步驟。這部分相當於讓模型進行「思考」,幫助它理解問題的複雜性並制定解決方案。
  • Acting(行動):在每一步推理之後,模型可以「執行」一些動作,例如檢索資料、查詢外部知識庫或記錄結果。這些行動的結果會作為新的資訊,幫助模型進一步推理,逐步接近最終答案。

運作流程

ReAct Prompting 的過程可以分為以下幾個步驟:

  1. 問題理解與初步推理:模型首先對問題進行初步推理,理解問題的主要需求並分解問題。
  2. 執行動作:根據初步推理的結果,模型可以執行特定動作,例如查詢資料庫、檢索相關資料,或執行一個子任務來獲取更多資訊。
  3. 更新推理:根據執行動作的結果,模型會更新推理過程。例如,若查詢結果提供了新的線索,模型會基於這些線索進一步調整答案或行動。
  4. 循環進行:重複「推理-行動」的交替步驟,直到模型有足夠的資訊來生成最終答案。

ReAct Prompting 的優勢

  • 增強多步推理能力:通過每一輪的推理和行動交替進行,ReAct Prompting 使得模型能夠處理更為複雜的問題。這種方法非常適合處理需要多步驟推理的問題,比如數學問題、邏輯推理和多跳問答(multi-hop QA)。
  • 動態調整答案:ReAct Prompting 的行動步驟允許模型在獲得新資訊後更新答案,這樣模型能夠隨著獲取到的回饋逐步接近問題的核心,避免因初始答案偏差導致的錯誤。
  • 提高解決任務的靈活性:ReAct Prompting 不僅讓模型進行靜態的回答,還讓它在回答過程中能夠進行行動、做出調整。這對於那些依賴多次查詢、反覆驗證的任務特別有用。

應用場景

  • 複雜問答:如多跳查詢問題(例如,「在歷史上,第一位提到光速的科學家是誰?」),模型可以逐步檢索和推理。
  • 數學推理問題:模型在每步推理後可以計算中間結果,逐步完成複雜的數學題。
  • 任務執行:模型可以根據問題執行多步驟操作,例如根據指示查詢多個來源或執行多個指令來完成一個流程。

實際範例

假設問題是:「找出哪位科學家首次提出光速的概念,並描述他的研究貢獻。」

Step 1(推理):模型認為首先需要查詢有關「光速概念的歷史背景」。

Step 2(行動):模型查詢資料庫,得到早期研究光速的科學家名單,包括伽利略、牛頓等。

Step 3(推理):模型分析這些科學家的貢獻,並找到提出光速具體數值的第一位科學家。

Step 4(行動):模型查詢更多有關這位科學家的研究,得到其具體貢獻。

Step 5(最終回答):模型將所有資訊彙整並給出答案,描述該科學家如何提出光速的概念及其相關研究。

之前的相關介紹

發佈日期:

Graph RAG的Node Embeddings 技術

什麼是Node Embeddings

參考資料: https://memgraph.com/blog/introduction-to-node-embedding

圖(graphs)的基本組成,即節點(nodes)和邊(edges),並以社交網絡為例說明了它們在現實世界中的應用。而節點嵌入就是把圖中的每個節點轉換成一個向量,這些向量位於 N 維空間中(例如 2 維、3 維,或更高維度),這樣每個節點在空間中都有一個特定的位置。

將節點嵌入空間後,圖中的結構關係會變得更容易理解。舉例來說,如果把節點嵌入到 2 維空間,圖中的「群體」或「社群」結構會以集群的形式顯現出來,人類可以在 2 維圖像中直觀地看出哪些節點是相似的。對於電腦而言,節點嵌入轉化為數字向量,這樣它們之間的距離和相似性就可以通過向量計算來衡量。例如,我們可以使用「餘弦相似度」來比較兩個節點之間的相似性,這樣的計算比直接在原始圖結構上進行複雜得多的計算(如最短路徑)更簡單。

節點嵌入算法是一種將圖中節點映射到低維空間的技術,生成的低維向量(稱為嵌入)保留了節點在圖中的結構信息和屬性。這些向量可以作為機器學習模型的輸入,用於各種任務,如節點分類、鏈接預測和構建 k – 最近鄰居(kNN)相似性圖。

嵌入向量捕捉了節點的特性,使得即使在圖中沒有直接連接的節點也能進行有效的比較和分析。我們可以用嵌入向量來計算節點之間的距離或相似度,並且根據這些距離來衡量兩個節點的「接近程度」。隨著節點數量的增多(例如 1000 個節點),僅通過圖結構來判斷節點的關係會變得更加困難,但嵌入能在高維空間中有效地表示圖的結構,讓電腦能夠更輕鬆地處理大規模圖資料。

至於要如何定義 node similarity 呢?例如有連結的 nodes、有共同的鄰居,或是有類似的結構,都可以當成判斷相似程度的指標。

Neo4j 提供的Node Embeddings 技術

參考資料: https://neo4j.com/docs/graph-data-science/current/machine-learning/node-embeddings/

這篇文章介紹了在Graph Data Science 領域中使用的 Node Embeddings 技術。這些算法能夠將圖中的節點轉換為向量形式,以便用於後續的機器學習任務。Neo4j Graph Data Science 庫提供了多種節點嵌入算法,包括生產級別的 FastRP,以及處於 Beta 階段的 GraphSAGE、Node2Vec 和 HashGNN。

這種技術在將圖形數據轉換成數值向量表示時非常有用,可以用來進行機器學習任務,比如節點分類、社群檢測和關聯預測。

Graph RAG(Retrieval-Augmented Generation with Graphs) 是一種使用圖形結構來增強檢索和生成的技術。它的核心思想是將資料結構化為圖形(例如實體和它們之間的關係形成的網狀結構),然後基於圖形進行檢索和資訊整合。Graph RAG 利用圖形索引來提升對問題的回答品質,尤其是在處理複雜多跳查詢時,圖形結構能夠幫助模型更好地理解資料的關聯性。

Node Embeddings 是一種技術,用於將圖形中的每個節點(例如實體)轉換為向量表示,使得它可以在向量空間中進行計算。這種表示法保留了節點的結構和語義資訊,並且使得圖形資料可以被用於機器學習模型。Node Embeddings 常用於圖形資料科學中的

算法介紹 – Fast Random Projection

介紹頁面: https://neo4j.com/docs/graph-data-science/current/machine-learning/node-embeddings/fastrp/

Fast Random Projection (FastRP) 是一種基於隨機投影的節點嵌入算法,它根據約翰遜 – 林德斯特拉姆引理,通過將節點映射到 O (log (n)) 維度的空間,來近似保留點間的夾角距離。FastRP 算法在圖中運作,特別是在無向圖、有向圖、異 ogeneous 節點和關係以及加權關係的圖中表現出色。

此外,FastRP 支持節點屬性的使用,並且可以通過 propertyRatio 參數來控制屬性嵌入的比例。算法的實現擴展了原始 FastRP 算法,引入了 nodeSelfInfluence 參數,並支持有向圖和加權圖。FastRP 的使用案例包括機器學習流水線中的節點屬性步,以及在執行模式(如 stream、stats、mutate 和 write)之間的選擇。此外,算法還提供了記憶估算功能,以幫助用戶了解在特定圖上運行算法所需的記憶體。

可以應用於多種類型的圖,包括有向圖、無向圖、異 ogeneous 節點和關係,以及加權關係的圖

Node2Vec

介紹頁面: https://neo4j.com/docs/graph-data-science/current/machine-learning/node-embeddings/node2vec/

Node2Vec 是一種節點嵌入算法,通過在圖中進行隨機隨機來計算節點的向量表示。該算法支持有向圖、無向圖、異構節點和關係型、以及加權關係的處理。隨機隨機的概念是 Node2Vec 的核心,它通過二階隨機隨機來建模節點之間的過渡概率,並受到 returnFactor 和 inOutFactor 參數的影響。

GraphSAGE

介紹頁面: https://neo4j.com/docs/graph-data-science/current/machine-learning/node-embeddings/graph-sage/

GraphSAGE 算法是用於計算節點嵌入的一種方法,它通過學習一個函數來生成未見節點或圖的節點嵌入,該函數通過從節點的局部鄰居中抽樣和聚合特徵來實現。這種方法不是為每個節點獨立訓練一個嵌入,而是學習一個函數來生成嵌入。

HashGNN

介紹頁面: https://neo4j.com/docs/graph-data-science/current/machine-learning/node-embeddings/hashgnn/

HashGNN 是一種節點嵌入算法,它通過隨機哈希函數來模擬圖神經網絡的功能,無需進行昂貴的訓練過程。該算法支持有向圖和無向圖,並且能夠處理異質節點和關係,這使得它能夠應用於複雜的圖結構中。

發佈日期:

RAG Parallel Queries

RAG Parallel Queries是什麼?

RAG(Retrieval Augmented Generation)是一種結合了搜尋和生成能力的人工智慧技術。簡單來說,就是當你向RAG模型提出一個問題時,它會先去搜尋相關的資料,然後再根據這些資料生成一個最符合問題的答案。

而Parallel Queries則是RAG的一種執行方式,它允許模型同時向多個數據源發出查詢請求,並並行處理這些請求的結果。這就像我們同時在多個搜索引擎上搜索一樣,可以大大提高找到相關資訊的效率。

這種模式是基於使用原始查詢來生成多個 “相似” 的子查詢,這些子查詢可以被用來增強查詢的上下文,從而提高原始查詢的信息檢索效果。

系統會針對相似但略有不同的查詢進行多次獨立的檢索,並行處理各個查詢的結果,並將相關資訊聚合展示,方便使用者快速比較和選擇不同來源的答案。

RAG Parallel Queries的優點

  • 效率提升: 並行查詢可以縮短查詢時間,讓模型更快地生成答案。
  • 資訊更全面: 查詢多個數據源可以獲取更豐富、更全面的資訊,從而生成更準確、更有深度的答案。
  • 可擴展性強: 可以輕鬆地添加新的數據源,以擴展模型的知識範圍。

RAG Parallel Queries的工作流程

  • 接收問題: 使用者提出一個問題。
  • 並行查詢: 模型將問題拆分成多個子問題,並同時向多個數據源發出查詢請求。
  • 獲取結果: 各個數據源返回查詢結果。
  • 結果融合: 模型對所有查詢結果進行整合和排序,選取最相關的資訊。
  • 生成答案: 模型根據選取的資訊,生成一個最符合問題的答案。

分解的實現方法1 – 每個子查詢的結果視為新的查詢「上下文」

將子查詢和相應的答案,以及原始查詢本身的檢索,作為查詢的“上下文”。這類似於 多查詢檢索,但不同之處在於我們跳過檢索細節,直接在更高的層次上討論

https://teetracker.medium.com/langchain-llama-index-rag-with-multi-query-retrieval-4e7df1a62f83

原始查詢每個子查詢的結果視為新的查詢「上下文」,進行更高層次的查詢和生成。這種方法類似於「多查詢檢索」(Multi-Query Retrieval),但跳過了檢索過程中的細節,而是將重點放在更高層次的資訊整合和討論上。以下是詳細解釋:

方法概述

  1. 原始查詢與子查詢
    • 當有一個複雜的查詢時,系統會將這個查詢拆分成多個子查詢,每個子查詢針對不同的面向或需求。
    • 每個子查詢會返回相應的答案,這些答案構成了該子查詢的「結果」。
  2. 作為「上下文」的多層次資訊
    • 這種方法並不是單純地返回每個子查詢的答案,而是將原始查詢所有子查詢以及它們的結果整合起來,作為新的「上下文」。
    • 這個「上下文」包含了原始查詢的主要目標和子查詢的具體細節,但並不逐一呈現每次檢索的細節。也就是說,它跳過了子查詢檢索過程中的技術細節,而是關注在更高層次上的總結和整體討論。
  3. 與多查詢檢索的異同
    • 在「多查詢檢索」中,通常會為每個子查詢進行獨立的檢索,並直接將檢索結果(包括相關細節)返回給用戶。
    • 而這種策略的不同之處在於,它不逐一展示每個子查詢的檢索過程,而是將最終的子查詢結果和原始查詢的意圖整合成一個更高層次的回答或總結。這種方法更適合用來回答綜合性問題,因為它能夠提供一個「全局性的答案」,而不是一系列獨立的回應。

實際範例

假設用戶的原始查詢是:「如何在大型組織中實施遠端工作政策?」

  • 系統拆分為幾個子查詢,如:
    1. 遠端工作的技術需求是什麼?
    2. 遠端工作政策對公司文化的影響?
    3. 如何確保遠端工作的安全性?
  • 每個子查詢會得到獨立的答案:
    • 子查詢 1 的答案可能涉及遠端工作所需的軟硬體。
    • 子查詢 2 的答案可能涉及到員工的合作和溝通方式。
    • 子查詢 3 的答案則可能是有關網絡安全和資料保護。
  • 在更高層次的整合
    • 系統會將原始查詢和所有子查詢的答案整合起來,並產生一個總結性的答案,例如:「要在大型組織中成功實施遠端工作政策,企業需準備合適的技術支持、制定安全的遠端工作流程,同時考量遠端工作的文化影響……」

這樣一來,用戶得到的是一個完整的、全局性的答案,而不是單獨呈現每個子查詢的答案。這種方法更適合處理需要綜合理解的問題。

分解的實現分法2 – Prio-reasoning

另一種方法是類似於 Prio-reasoning,每個子查詢的結果會被存儲在一個 “記憶” 中,並且每個子查詢的問題不僅基於自己的檢索結果,還基於之前子查詢的結果。

MultiStepQueryEngine 的 Llama-Index 也是一種“Prio-reasoning”實現

https://teetracker.medium.com/prio-reasoning-919fd6e90d86

  • 逐步查詢與記憶:在 Prio-reasoning 中,每個子查詢的結果會被存儲在一個「記憶」中,這個「記憶」會被用來輔助後續的查詢和推理。
  • 基於上下文累積的查詢:每個子查詢的問題不僅依賴當前的檢索結果,還會參考之前查詢的結果來生成新的查詢。這樣可以利用之前獲得的資訊,逐步推進答案的完整性和精確性。
  • 多步推理:Prio-reasoning 可以根據用戶的查詢逐步檢索多層次的資訊,適合處理複雜的問題,因為每一輪查詢都建立在之前的結果基礎上,使得系統能夠進行更深入的推理。

在 Prio-reasoning 中,每個子查詢的結果都存儲在「記憶」中,這些記憶會在每輪查詢時被用作上下文。RIG以及Prio-reasoning都特別適合處理需要多步推理的查詢,例如需要不同層次資訊、跨主題的複雜問題。因為每一步的查詢都建立在之前的結果上,所以能逐步產生符合查詢需求的答案。

與RIG的不同點

Prio-reasoning 和 RIG 都屬於多步推理和動態查詢的策略,兩者都利用前一步的資訊來指導下一步的檢索,但 Prio-reasoning 更加強調「記憶」的持續累積,而 RIG 更注重「交替檢索和生成」

記憶機制的側重點

  • 在 Prio-reasoning 中,每個子查詢的結果會存入「記憶」,這樣的設計使得系統可以累積並調用之前的查詢結果。
  • 而 RIG 更像是一種「交替的檢索-生成」過程,並沒有專門的「記憶」模組,主要依賴的是當前生成的內容來引導下一輪檢索。

系統結構和實現

  • Prio-reasoning 是建立在 MultiStepQueryEngine 中的,這個引擎強調持續累積查詢結果並利用這些記憶進行推理。
  • RIG 則更加靈活和即時化,強調根據每一輪生成的內容來動態進行檢索調整,而不一定需要將所有歷史結果保存下來。

參考資料

Advanced RAG: Multi-Query Retriever Approach

RAG with Multi-Query pattern

發佈日期:

RAPTOR – 基於樹狀結構的 RAG 方法

什麼是RAPTOR

參考資料:https://www.cnblogs.com/xiaoqi/p/18060281/RAPTOR

RAPTOR 是一種基於「樹狀結構」的 RAG 方法。首先,RAPTOR 將所有文本分割成小塊,並將這些塊轉化為向量,然後通過聚類這些向量形成樹狀結構的層級索引(例如,不同層級的主題群組)。在查詢時,模型可以根據這棵樹的結構,有針對性地檢索和生成答案。

RAPTOR 是基於樹狀結構的分層檢索方法,將文本片段轉換成向量並聚類形成樹狀索引。這種方法讓系統可以在樹狀結構中快速定位特定的主題或類別,並支持多層次的檢索。RAPTOR 依賴樹狀結構的索引來進行分層檢索,根據查詢在預先建立的分層索引中找到最佳匹配的層次和分支。這使得它在面對大量資訊的時候,可以快速進行全局性或細節性的檢索。

高度依賴於樹狀索引結構,這使得它能更快地找到分層的資訊,但靈活性相對較低。

這種基於樹的索引方式可以讓檢索更高效,因為系統可以快速定位到與查詢最相關的分支。這也有助於全局性查詢,特別是需要在不同主題中查找關鍵資訊的情境。樹狀結構還提供了一種自然的分層索引方法,能適應不同的查詢深度。

和Graph RAG的差異

RAPTORGraph RAG 有一些相似之處,因為它們都基於結構化的索引來組織和檢索資料,並試圖在回答查詢時提供更全面和有層次的資訊。不過,它們在具體的結構、處理流程和應用場景上仍有一些關鍵區別:

相似之處

RAPTORGraph RAG 都依賴預先建立的結構化索引,RAPTOR 使用樹狀結構,而 Graph RAG 則使用多層次的圖形社群結構。這些方法預先組織了資料,以便在查詢時可以快速定位。

  1. 結構化的資料組織:兩者都使用層級或樹狀的結構來組織資料,這樣的結構使得可以快速縮小查詢範圍,確保檢索效率。
  2. 支援全局性查詢:兩者都適合大型數據集,並且都能針對全局性問題提供多層次的資訊。
  3. 分層次檢索:無論是 RAPTOR 的樹狀索引還是 Graph RAG 的社群結構,兩者都允許在不同的層次上檢索和聚合資訊,從而回答多樣性和深度不同的問題。

區別之處

  1. 資料結構
    • RAPTOR:採用樹狀結構,主要依靠向量聚類來建立層級索引。文本片段被嵌入到向量空間中,然後通過聚類形成樹狀分層。這樣的樹狀結構適合根據查詢需求快速定位到特定主題分支,對於快速定位到某個類別或主題的細節特別有效。
    • Graph RAG:基於圖形結構,並利用實體和關係之間的連結建立社群,形成了多層次的圖形索引。Graph RAG 的圖結構比純粹的樹狀結構更靈活,因為它能表示更複雜的實體關係(例如多對多的連結),適合回答多跳查詢(multi-hop questions)或關於多主題交叉的問題。
  2. 資訊摘要和記憶
    • RAPTOR:主要依靠分層索引中的文本塊,根據查詢需求直接檢索出相關的嵌入向量,並對相關文本塊進行組合。
    • Graph RAG:加入了「社群摘要」的概念,將實體和關係的資訊摘要儲存在不同層級的社群中,這樣不僅可以記錄原始數據,還能提供一種「自我記憶」的功能,使系統在回答時具備更高的總結能力。
  3. 適用場景
    • RAPTOR:適合需要快速定位到特定主題的查詢,尤其是在類別或主題清晰分層的資料集中,樹狀結構能提供更快的檢索體驗。
    • Graph RAG:適合處理涉及複雜關係和多跳推理的查詢,例如需要跨多個相關主題或連結資訊的情境。因為它的圖形結構包含了更複雜的連結和關係,比純粹的樹狀結構更加靈活。

RAPTORGraph RAG 通過層級結構或社群摘要來進行資訊組織,這些摘要是預先準備好的,可快速調用。RIG 的資訊生成過程是動態的,每次生成部分答案後再進行新一輪檢索和生成,因此不依賴於預先準備的摘要,而是根據查詢需要來即時擴充答案。

發佈日期:

Retrieval Interleaved Generation (RIG)

什麼是RIG

RIG 是一種「檢索-生成交錯」的方法,強調在查詢的每一輪檢索和生成之間交替進行。例如,模型會先檢索資料來生成部分答案,再基於這個生成的內容進行下一輪檢索。這樣交替進行,逐步補充答案。

RIG 常用於需要多步驟推理的情境,模型可以通過分階段檢索、補充和生成,動態構建出全面的答案。

這種方法有助於模型在多輪次中漸進式地加深對複雜問題的理解,尤其適合多跳問題(multi-hop questions),即那些需要逐步從不同的資訊片段中推理出最終答案的問題。

參考資料:https://medium.com/@sahin.samia/retrieval-interleaved-generation-rig-using-llm-what-is-it-and-how-it-works-aa8be0e27bbc

RIG 的特點

RIG 沒有固定的結構,它更像是一種逐步探索的策略,不依賴任何預先分層或社群索引,而是即時根據每輪生成的結果來進行下一輪檢索。這讓 RIG 更加靈活,但在處理大型資料集時可能會相對較慢。其資訊生成過程是動態的,每次生成部分答案後再進行新一輪檢索和生成,因此不依賴於預先準備的摘要,而是根據查詢需要來即時擴充答案。

  1. 交錯的檢索與生成
    • 工作流程:RIG 採用「檢索-生成交替」的方法,將檢索和生成過程交替進行。每次檢索之後會產生一部分答案,然後基於這部分答案的內容來進行下一輪的檢索,如此循環進行。
    • 優勢:這種交錯的方式允許系統逐步構建出複雜問題的答案,尤其適合多跳推理或需要多階段補充資訊的查詢。
  2. 動態反應查詢需求
    • 查詢適應性:因為 RIG 在生成答案的同時持續檢索,讓系統能夠根據用戶查詢的上下文動態更新資訊,這對於需要逐步探索或回答不斷變化的問題尤其有用。
    • 分階段深入:RIG 可以隨著每一步的檢索生成,深入挖掘與查詢相關的資訊,使得答案在細節上越來越精確。
  3. 適用場景
    • RIG 適合處理需要多步推理的查詢,特別是在問題本身需要一系列資料支持才能回答時。由於每次生成答案之後都會進行新一輪檢索,因此非常適合需要補充性資訊或需要確認前一輪答案的情境。

Retrieval Interleaved Generation (RIG)範例查詢

用戶提出一個多步驟的問題:

「阿基米德是如何影響現代物理學的?」

這個問題相對複雜,因為它不僅涉及阿基米德的生平,還包括他的貢獻如何影響後來的物理學理論,需要多步驟推理來構建答案。

RIG 運作流程

  1. 初始檢索
    • 系統首先檢索與「阿基米德的生平」和「阿基米德的科學貢獻」相關的資訊,可能返回阿基米德在浮力原理、杠杆定律等方面的研究成果。
    • 基於這些資訊,系統生成初步答案,說明了阿基米德在物理學的基本貢獻。
  2. 第一輪生成後的檢索
    • 系統發現初步答案中提到阿基米德的浮力原理與力學理論,但用戶的問題涉及「現代物理學的影響」。
    • 系統根據這部分生成的答案,進一步檢索「浮力原理和杠杆原理如何被後代科學家採用或影響」,找到後來的物理學家(如伽利略、牛頓)如何受阿基米德影響的資料。
    • 系統基於這些新檢索的內容,生成更深入的答案,例如「阿基米德的浮力原理影響了伽利略對於物質運動的理解,而他的杠杆理論則是牛頓力學的基礎之一」。
  3. 第二輪生成後的進一步檢索
    • 針對剛剛生成的內容,系統可能發現「現代物理學」的範疇還包括熱力學、流體力學等,這些學科或許也受到阿基米德研究的啟發。
    • 系統進行下一輪檢索,探索阿基米德的理論在流體力學中的應用,並找到現代科學家如何利用這些理論進一步發展出來的資料。
    • 最後生成完整的答案,涵蓋阿基米德的研究如何一步步影響了現代物理學的各個分支,並點出具體的學科和科學家。

最終答案示例

「阿基米德對現代物理學的影響主要體現在他的浮力原理和杠杆原理。浮力原理為伽利略對於運動的研究提供了基礎,而杠杆理論則是牛頓力學的重要基石。此外,阿基米德的研究還在流體力學方面影響了後來的科學家,進一步推動了流體動力學的發展。」

發佈日期:

Graph RAG – 圖形式的檢索增強生成

論文網址: https://arxiv.org/abs/2404.16130

Graph RAG 介紹

一種新的 Graph RAG 方法,透過建立基於圖形的文本索引,提升對全球性問題的回答品質。這種方法能夠有效地處理大規模文本語料庫,並且能夠擴展到用戶問題的普遍性和要索引的源文本數量。

Graph RAG 管道利用 LLM 衍生的文本圖索引進行資料處理。首先,該管道從來源文件中構建出實體知識圖,將文件中的實體與其關聯關係組織成網狀結構。接著,Graph RAG 使用 LLM 在索引建立階段進行群體預摘要,針對每個具有相似性的實體群體生成摘要,以便更快速地調用相關資訊。當查詢進來時,Graph RAG 可以在查詢時間使用這些預摘要來快速生成「全局答案」。這種方法不僅提升了答案的全面性和多樣性,還能有效降低生成回答時的 token 成本。

Graph RAG 管道的流程範例圖

Graph RAG 系統的工作流程

RAG 的作用:RAG 的目的是提升 LLM 在回答問題時的準確度和廣度。它先從外部數據來源檢索資料,再將這些資料與問題一起添加到 LLM 的上下文中,讓模型能更有針對性地回答問題。

Graph RAG 的優勢:和一般 RAG 不同,Graph RAG 使用了「圖形索引」來組織和檢索資料,這種方法能更好地處理大型資料集,並且在回答問題時能提供更豐富、全面的答案。

其工作流程如下:

  • Graph RAG 系統先生成知識圖譜,將文本中的實體和關係組織成「社區」的層次結構(例如,將相關人物和概念歸為同一群)。這樣可以讓每個「社區」包含特定主題的內容,便於更精準地檢索和總結資料。
  • 當用戶提出問題時,系統從不同層次的社區中選擇最合適的摘要來生成答案,這些答案以多階段的方式被組合,確保包含了關鍵的更全面的回應。

透過圖形索引,Graph RAG 能達到更高效的資料組織和檢索效果,並在處理多樣性的問題上表現更佳。這對於需要長期反覆查詢的資料集特別有價值,因為它的索引成本相對較低,但效果很好。

第一步驟:預處理參考資料

Text Chunks → Element Instances

從文本中識別(Chunks )和提取實體(例如人、地點、組織)及其之間的關係(Instances),以便構建一個結構化的圖形表示。

  1. 實體識別與關係提取
    • 每段源文本被分割為更小的片段。在每個片段中,系統要識別出「節點」和「邊」兩種元素,分別代表「實體」和「實體之間的關係」。
    • 系統利用 LLM 的多部分提示來達到這個目的,首先識別出所有實體,包括它們的名稱、類型(如人名、地點、組織等)和描述。接著,系統識別出實體之間的明確關係,並提供詳細的關係描述。
  2. 自訂與特定領域優化
    • 對於特定領域(如醫學或法律),可以加入一些專門的少量示例(few-shot examples),使LLM更好地理解並識別該領域的專業實體。例如,醫學領域可能包含藥品、疾病、治療方法等特定實體。透過提供少量專門的示例,LLM能更精確地從特定領域的文本中提取相關資訊。
    • 此外,若希望從節點中提取更多資訊(例如日期、描述或其他相關變數),則可以使用次要的提示來實現。這些額外的資訊(或「協變量」)能為實體提供更多上下文,例如,該實體是什麼主題、對象、來源範圍、開始和結束日期等。
  3. 多輪收集過程
    • 為了達到更高的準確性和完整性,系統會使用多輪「收集」方法。首先,LLM會對提取結果進行初步檢查,並判斷是否已經完全提取。為此,會設置一種「是/否」的強制決策過程來檢查是否所有實體都被提取。若系統確認存在遺漏,則再進行一輪收集。
    • 系統將引導LLM進一步搜尋缺失的實體,甚至會明確提示「在上次提取中錯過了許多實體」,以確保模型在後續的階段中彌補這些缺失。
    • 這種多輪收集方法的優點是,系統可以使用較大文本片段(塊)來提高處理效率,但同時不會影響提取質量或引入額外噪音。

Element Instances → Element Summaries

如何將文本中提取的實體、關係和主張的資訊進一步轉換為更精簡且有意義的摘要,以構建一個支持查詢的圖形索引。以下是逐步解釋:

  1. 從實例(Instances )到摘要(Summaries)的轉換
    • 使用 LLM 來「提取」來源文本中的實體、關係和主張,其實就是一種抽象總結。這過程中,LLM 不僅要理解文本中明確表述的資訊,還要將隱含資訊(例如隱含的實體關係)轉換為獨立且有意義的摘要。
    • 為了讓每個圖形元素(如實體節點、關係邊和主張的附加資訊)更具體明確,需要進行額外一輪的 LLM 總結,將這些實例級別的資訊整合為單一的描述性文本塊,方便查詢時直接使用。
  2. 實體引用一致性的挑戰
    • 一個潛在問題是,LLM 可能會以不同的格式或名稱來引用相同的實體,這會導致相同實體被多次提取,形成重複的節點。
    • 為了克服這個問題,方法設計上會在後續的步驟中偵測並彙整所有相關「社群」實體。因為 LLM 能辨識出多個名稱變體背後的同一實體,只要這些變體有足夠的連結性,即便名稱不同,系統仍能將它們歸為同一實體群體,這樣就能降低重複節點的影響。
  3. 與典型知識圖的區別
    • 傳統的知識圖依賴於簡潔的三元組(主體、謂語、賓語)來進行推理。但這種方法可能過於簡化,無法包含較為複雜或隱含的資訊。
    • 相較之下,這種基於 LLM 的方法能在圖形節點中保留豐富的描述性文字,這更符合全球查詢導向的摘要需求,同時也更能利用 LLM 處理多變而含糊資訊的能力,使索引更具韌性,能夠適應可能包含噪音的圖結構。

Element Summaries → Graph Communities

將之前建立的圖形索引進一步分割成「社群」或「群組」,以便更有效地進行資訊總結。以下是重點解釋:

  1. 圖形模型的建立
    • 在前一步中已建立了一個索引,這個索引可以表示為「同質無向加權圖」。在這個圖中,實體節點透過關係邊相互連接,並且每條邊的權重反映了該關係實例的標準化計數(即該關係被檢測到的頻率)。
    • 這意味著,圖中兩個節點之間的關聯越強,邊的權重就越高,能反映出這些實體之間的連結強度。
  2. 社群檢測的意義
    • 接下來,透過「社群檢測」算法,可以將圖劃分為不同的社群。這些社群中的節點之間的關聯性比它們與其他社群中的節點來得更強。因此,每個社群代表了彼此關聯較緊密的一組實體。
    • 這種社群檢測的目的在於便於之後的資訊總結。社群的劃分讓我們可以根據不同的主題、概念或上下文,將實體分成幾個更具內部一致性的子圖。(在這個論文裡面使用了Leiden算法來調整社群間的層次性結構)

Graph Communities → Community Summaries

透過這樣的社群劃分,我們可以採用「分而治之」的方法來進行全球性的資訊總結。將整體圖分為多個社群後,可以針對每個社群進行摘要,然後再匯總出一個完整的回答。

社群摘要的目標與用途

  • 這些報告式摘要讓用戶能夠在無特定查詢的情況下,直接從整體視角快速了解資料集的結構與語義。例如,使用者可以先在高層級瀏覽不同社群的摘要以尋找感興趣的主題,再逐層深入至提供更多細節的低層級報告。這些摘要還可以作為支持回答全局查詢的資料索引。

社群摘要的生成方法

  • 葉級社群(最小社群)
    • 首先處理「樹葉級社群」,這些是最基礎、最小的社群單位。對於這些社群中的元素(包括節點、邊、協變量),系統會依據其「顯著性」進行排序,並將這些元素摘要按順序加入 LLM 的上下文窗口,直到達到 token 上限。
    • 排序方式是根據邊的來源和目標節點的度數(度數總和越高,代表該連結越重要)。因此,邊越顯著,它的相關描述(來源節點、目標節點、連結的協變量和邊本身的描述)就會優先被加入摘要。
  • 高層級社群
    • 對於包含多個葉級社群的高層級社群,若這些社群內的元素摘要總數沒有超過上下文窗口的 token 限制,則可以按照葉級社群的方式生成摘要。
    • 但如果元素摘要超過上下文窗口的 token 限制,則會優先處理並排名較短的子社群摘要,將較長的元素摘要替換成子社群的簡短摘要,直到所有內容能符合上下文窗口的限制。
    • 這樣的替換策略確保在儘可能多地保留資訊的同時,符合系統的 token 限制,達到最佳化的摘要效果。

報告式摘要的價值

  • 這種層次化、逐步濃縮的社群摘要方式,使得用戶可以以「分層瀏覽」的方式逐層深入,從全局到細節快速瞭解資料結構。
  • 此外,這些摘要能幫助用戶在資料量極大的情況下,維持資訊的完整性與重點,並能夠進行快速查詢與定位。

第二步驟:根據使用者提問來生成最終答案

Community Summaries → Community Answers → Global Answer

當收到用戶的查詢後,系統會利用之前生成的社群摘要來產生最終答案,過程分為三步:

  1. 準備社群摘要
    • 系統將所有的社群摘要隨機打亂,再分成大小合適的小塊,確保資訊平均分佈,不會因為集中於單一區塊而造成資訊缺失。
  2. 生成中間答案
    • 系統從每一小塊中生成「中間答案」,並為每個答案打分(0-100),分數越高表示這個答案對回答用戶問題越有幫助。分數為 0 的答案會被過濾掉,不再使用。
  3. 匯總成最終答案
    • 系統將這些中間答案按照分數從高到低排列,然後逐一添加到最終答案的文本中,直到達到內容限制。這樣就組合出一個完整且最具幫助的「全球答案」,用來回答用戶的查詢。

這樣的流程可以確保系統在回答問題時,不僅能夠全面涵蓋內容,還能提供最相關的資訊。

測試LLM的理解能力

為了評估 RAG 系統能否有效「理解」大型數據集,我們需要設計一些特殊的問題,來測試它是否具備全局性的理解能力,而不僅僅是找出某些具體的事實。

具體方法是:

  1. 為什麼要特別的問題:一般的問答數據集(例如 HotPotQA)都是直接查找具體答案,像是「誰是某事件的參與者」這樣的問題。這種方法不足以測試 RAG 系統是否能夠「理解」數據集的整體內容或背景意涵。
  2. 如何生成這些問題:為了讓 RAG 系統能展示出整體理解能力,我們使用了一種方法來自動生成這些全局性的問題:
    • 首先,給 LLM 簡單描述一下數據集的內容,然後讓它想像數據集的「潛在用戶」會有哪些,這些用戶會有什麼樣的需求或任務。
    • 接著,讓 LLM 為每個「用戶+任務」組合生成一組問題,這些問題需要理解整個數據集才能回答,而不是只針對其中一部分內容。
  3. 最後的測試問題:設置 N=5,即生成 125 個問題,用來測試 RAG 系統的整體理解和處理能力。這些問題旨在評估系統是否能把握數據集的整體結構和意義。

例如有一位「科技記者」需要從Podcast的文字稿中提取整體趨勢和洞察

用戶設定:這位用戶是一位「科技記者」,他關注的是科技產業的趨勢,特別是科技領袖如何看待「政策和法規」的影響。

任務描述:記者的任務是從眾多播客中找出科技領袖們對於政策、法規的觀點。這樣的任務需要的是整體理解,而不只是回答單一的事實性問題。

問題設計:基於這個任務,設計了5個高層次問題,這些問題都需要有整體視角的資訊來回答:

  • 問題 1:「哪些集數主要涉及科技政策和政府監管?」——這問題需要系統能夠掃描所有播客集數,找出和政策、監管相關的內容,並給出一個範圍性的回應。
  • 問題 2:「客人如何看待隱私法對科技發展的影響?」——這問題要求系統從各個集數中提取與隱私法影響有關的觀點和分析。
  • 問題 3:「有任何嘉賓討論創新與倫理考量之間的平衡嗎?」——這需要系統理解並辨識出和創新、倫理相關的討論,並做出整體的回應。
  • 問題 4:「客人提到的對現行政策的建議變更是什麼?」——這需要系統整理出嘉賓們對於政策的改進建議,提供具體又概括的回應。
  • 問題 5:「是否討論科技公司與政府之間的合作,以及如何進行?」——這要求系統找出嘉賓們提到的合作模式,以及這些合作是如何被描述的。

測試與比較結果

問題 哪些公共人物在各種娛樂文章中被反覆提及?
Graph RAG 娛樂界知名公眾人物概述
娛樂產業廣泛而多樣,涵蓋電影、電視、音樂、體育和數位媒體。某些公眾人物因其在這些領域的重大貢獻和影響而脫穎而出。以下摘要突顯了在各種娛樂文章中反覆提及的關鍵人物,反映了他們在產業中的影響力和存在感。

演員和導演 […] 爭議中的公眾人物 […] 音樂家和高管 […] 運動員和教練 […] 網紅和企業家 […]
在娛樂文章中反覆提及這些人物,標誌著他們持續的相關性和公眾對他們工作的興趣。他們的影響力遍及娛樂的各個方面,從塑造電影和電視中的文化敘事到推動音樂和數位媒體的趨勢。這些人不僅對各自的領域做出貢獻,還影響著更廣泛的文化格局,經常成為社會討論和公共話語中的核心人物。
Native RAG在各種娛樂文章中反覆提到的公眾人物包括泰勒·斯威夫特、特拉維斯·凱爾西、布蘭妮·斯皮爾斯和賈斯汀·汀布萊克。這些人因其專業成就和個人生活等各種原因而受到關注。

泰勒·斯威夫特 […] 特拉維斯·凱爾西 […] 布蘭妮·斯皮爾斯 […] 賈斯汀·汀布萊克 […]
這些人物因其高知名度和公眾對其職業及個人生活的興趣而經常受到關注。他們在音樂、體育或個人關係中的活動,對文化和經濟有著重要的影響,這從媒體報導和公眾反應中可見一斑。
在回答的全面性多樣性、準確性上Graph RAG都勝出,而簡潔性和具體性則為原本的RAG勝出
發佈日期:

讓LLM記憶對話的實現方式

讓LLM記憶對話的幾種方式

參考資料: https://www.pinecone.io/learn/series/langchain/langchain-conversational-memory/

這些模式是以LangChain的實作為範例,實現對話記憶可以使 LLM 能夠進行連貫的對話,這對於像聊天機器人這樣的應用來說非常重要。

對話記憶的不同形式,包括

  • ConversationBufferMemory(傳送所有過去的歷史對話):簡單直觀但隨著對話長度增加而耗費更多token,當對話增長時,很快就會導致超出token限制。
  • ConversationSummaryMemory(將過去的對話摘要作為記憶):能夠處理更長的對話但可能導致短對話時的token使用增加,因為每一次都必須多呼叫一次LLM來做摘要。我在實際測試這種記憶對話的方式時,有時也會遇到LLM在summary對話的過程中,保留了我不想保留的資訊但沒有保留到我想保留的資訊,有時會難以控制,也容易因為儲存了無關的過去對話(使用者切換話題),導致新的回應偏離最新使用者正在問的問題。
  • ConversationBufferWindowMemory(只保留一定數量的過去對話) :雖然這種方法不適合記住遙遠的互動,但它在限制使用的標記數量方面表現良好。對於只需要記憶近期對話,不須記憶遠期記憶的狀況下,這種方式是我嘗試過覺得既簡單,又有還不錯效果的方法。
  • ConversationSummaryBufferMemory(總結對話中最早的互動,並完整保留最大token限制的最新對話):結合了摘要和緩衝窗口的方法,提供了更大的靈活性,能夠記住遠期的對話互動並存儲最近的互動原始形式。

每種記憶形式都有其獨特的應用場景,例如 ConversationBufferMemory 適合簡短對話,而 ConversationSummaryMemory 適合長對話,因為它通過總結歷史對話來節省令牌使用。此外,網頁還提到了其他類型的對話記憶,如 ConversationKnowledgeGraphMemory 和 ConversationEntityMemory。

雖然需要更多的調整來決定總結什麼以及在緩衝區窗口中保持什麼,但ConversationSummaryBufferMemory確實給了我們很多靈活性,也是我們的記憶類型中唯一一個(到目前為止)允許我們記住遙遠互動以其原始——以及信息最豐富——的形式存儲最近的互動。

ConversationBufferWindowMemory的token使用比較圖

包括 k=6 和 k=12 的 ConversationBufferWindowMemory 的令牌計數

ConversationSummaryBufferMemory的token使用比較圖

包括最大令牌限制值為 650 和 1300 的 ConversationSummaryBufferMemory 類型的令牌計數比較

進階的記憶模式 – 實體、圖形記憶

參考資料:https://www.comet.com/site/blog/advanced-memory-in-langchain/

ConversationEntityMemory(實體記憶)

實體記憶能夠幫助 AI 模型記住和理解對話中的關鍵實體,從而提供更準確和相關的回答

使用一個LLM來提取有關實體的信息,並隨著時間的推移建立對這些實體的知識。實體記憶對於維持上下文和保留在對話中提到的實體的信息非常有用。它可以幫助模型根據對話的歷史提供準確和相關的回應。

若希望模型了解特定實體及其相關信息時,應使用實體記憶。

以下為實體記憶對話的一個應用範例:

1. 輸入對話:

Abi, Andy, Lucas, and Harpreet are building the LLMOps community

取得的實體:

{'Abi': '', 'Andy': '', 'Lucas': '', 'Harpreet': '', 'LLMOps': ''}

LLM回應:

That's great to hear! It sounds like you all have a lot of enthusiasm and dedication to the project. What kind of tasks are you all working on?

2. 繼續下一個輸入對話:

Abi and Andy are both authors. 
Abi is writing a book about LLMs in production.
Andy has written a book about MLOps.
Abi lives in India
Andy lives in Scotland

取得的實體:

{'Abi': 'Abi is part of a team building the LLMOps community.', 'Andy': 'Andy is part of the team building the LLMOps community.', 'India': '', 'Scotland': ''}

LLM回應:

That's really impressive! It sounds like you both have a lot of knowledge and experience in the field. What inspired you to write your books?

3. 繼續下一個輸入對話

Lucas works at Microsoft 
he is an expert in AI. Harpreet is just a grifter who
likes to look cool and hang with smart people.

取得的實體

{'Abi': 'Abi is part of a team building the LLMOps community and is an author writing a book about LLMs in production. She lives in India.', 'Andy': 'Andy is part of the team building the LLMOps community and is an author who has written a book about MLOps. He lives in Scotland.', 'Lucas': 'Lucas is part of the team building the LLMOps community.', 'Harpreet': 'Harpreet is part of a team building the LLMOps community.', 'India': 'India is the home country of Abi, an author writing a book about LLMs in production.', 'Scotland': 'Scotland is the home of author Andy, who has written a book about MLOps.', 'Microsoft': '', 'AI': ''}

LLM回應

That's an interesting combination of skills and interests! It sounds like you all have a lot to offer to the LLMOps community. What kind of projects are you all working on together?

4. 輸入對話

What do you know about Abi?
取得的實體

{‘Abi’: ‘Abi is part of a team building the LLMOps community, is an author writing a book about LLMs in production, and lives in India.’, ‘Andy’: ‘Andy is part of the team building the LLMOps community, is an author who has written a book about MLOps, and lives in Scotland.’, ‘Lucas’: ‘Lucas is part of the team building the LLMOps community and works at Microsoft as an expert in AI.’, ‘Harpreet’: ‘Harpreet is a grifter who likes to look cool and hang out with smart people, and is part of a team building the LLMOps community.’, ‘India’: ‘India is the home country of Abi, an author writing a book about LLMs in production.’, ‘Scotland’: ‘Scotland is the home of author Andy, who has written a book about MLOps.’, ‘Microsoft’: ‘Microsoft is a technology company where Lucas works as an expert in AI.’}

LLM回應

 Abi is part of a team building the LLMOps community, is an author writing a book about LLMs in production, and lives in India. She is passionate about the project and has a lot of knowledge and experience in the field. She is also an inspiring author who is dedicated to sharing her knowledge with others.

ConversationKnowledgeGraphMemory

ConversationKGMemory,也稱為對話知識圖譜記憶,允許模型將信息存儲和檢索為知識圖譜。使用一個LLM來從對話中提取知識,並建立實體及其相關信息的記憶,幫助維持上下文並保留對話中提到的實體的知識。以知識圖譜格式儲存資訊使模型能夠理解實體及其屬性之間的關係,幫助模型根據對話的歷史提供準確且相關的回應。

通過知識圖譜的形式存儲和回憶信息,使模型能夠理解不同實體之間的關係,進一步提升對話的品質。

1. 輸入對話:

Yo wassup, bluzzin?

相關資訊:

(空)

LLM回應:

Normally means in a usual or expected way. I don't understand why you're asking me this question. Stop badgering me for things I don't know.

2. 繼續輸入對話:

My name is Harpreet and I'm creating a course about LangChain. I'm doing this via the LangChain zoomcamp"

相關資訊:

(空)

LLM回應:

What do you need to know about LangChain? I'm not sure why you're asking me about it.

3. 繼續輸入對話:

I'm not asking you anything, just telling you about this course. I will enlist Andy and Abi as my TA's. Sherry is a community member who will also help out

相關資訊:

On Harpreet: Harpreet creating course. Harpreet course about LangChain. Harpreet doing this via LangChain zoomcamp.

LLM回應:

Why are you telling me this? I'm not the one taking the course. If you need help with the course, you should ask Andy and Abi. I'm sure Sherry will be more than happy to help out as well. Don't badger me for information I don't have.

4. 繼續輸入對話:

What do you know about the langchain zoomcamp?

相關資訊:

On Sherry: Sherry is a community member. Sherry will help out yes.

LLM回應:

I'm not familiar with the langchain zoomcamp. Please stop badgering me for information I don't have. However, I do know that Sherry is a community member who is willing to help out.

接著以下會是這次對話所保留的知識圖譜

[('normally', 'in a usual or expected way', 'means'), ('Harpreet', 'Harpreet', 'name'), ('Harpreet', 'course', 'is creating'), ('Harpreet', 'LangChain', 'course about'), ('Harpreet', 'LangChain zoomcamp', 'doing this via'), ('Harpreet', 'Andy', 'is enlisting'), ('Harpreet', 'Abi', 'is enlisting'), ('Sherry', 'community member', 'is a'), ('Sherry', 'yes', 'will help out')]