發佈日期:

使用 n8n + LineBot 搭建 RAG AI 應用

功能介紹

n8n 是一款開源的工作流自動化工具,旨在幫助用戶通過可視化的方式設計和執行自動化流程,實現跨應用和服務的數據整合與操作。是一個功能強大且靈活的工作流自動化平台,適合個人和企業用戶用於提升效率和簡化業務流程。無論是簡單的數據同步,還是複雜的跨平台自動化,n8n 都能提供可靠的解決方案。

簡單n8n 串接 LINE 教學

n8n 是一款強大的工作流自動化工具,能夠輕鬆串接 LINE 並實現多種自動化功能,例如發送通知、處理訊息或與其他應用整合。以下是串接 LINE 的詳細教學:

步驟 1:準備 LINE API 憑證

在串接 LINE 前,您需要取得 LINE 的 API 憑證。以下是準備步驟:

  1. 註冊 LINE Developers 帳戶:前往 LINE Developers 註冊帳戶。
  2. 建立 Channel
    • 登入後,建立一個新的 Messaging API Channel。
    • 記下 Channel ID、Channel Secret 和 Access Token,這些將用於 n8n 的認證設定。
  3. 設定 Webhook(可選):如果需要接收 LINE 的事件通知,需設定 Webhook URL,該 URL 可由 n8n 提供。

步驟 2:在 n8n 中新增 LINE 節點

N8N設定的畫面

LINE Bot的設定畫面

步驟 3:在OpenAI建立好的客製化機器人

網址: https://platform.openai.com/playground/assistants

以下是了解我的書的內容的機器人,這個是Open AI的Agent功能,可以在這邊上傳檔案,讓這個機器人有RAG的資料庫可以回答專屬於自己的知識

步驟4:在n8n呼叫已經建立好的機器人

可以選擇下面這個節點來和已經建立好的機器人聊天

要注意的是,這個節點輸入的文字要是前一個節點的”chatInput”變數。所以要在前面新增一個Edit Fields的節點,來改變前一個節點的值的結構

選擇剛剛建立好的機器人

步驟5:回覆LINE訊息

因為原本n8n只有notify的元件,而這個元件即將要廢棄

因此我自己參考這邊的API格式來呼叫send line message

https://developers.line.biz/en/docs/messaging-api/sending-messages/#reply-messages

curl -v -X POST https://api.line.me/v2/bot/message/reply \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {channel access token}' \
-d '{
    "replyToken":"nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
    "messages":[
        {
            "type":"text",
            "text":"Hello, user"
        },
        {
            "type":"text",
            "text":"May I help you?"
        }
    ]
}'

這邊因為要避免OPENAI回傳一些會打亂JSON格式的特殊字元,因此要用JSON.stringify(…)把回傳的字串包起來

{
    "replyToken":"{{ $('If').item.json.body.events[0].replyToken }}",
    "messages":[{"type":"text","text":{{ JSON.stringify($json.output) }}}]
}

完整的工作流

發佈日期:

OpenAI的模型微調過程

參考資料

Real-World Example: Building a Fine-Tuned Model with OpenAI:https://medium.com/gptalk/real-world-example-building-a-fine-tuned-model-with-openai-58a0557143af

Fine-tuning with OpenAI:https://medium.com/@j622amilah/fine-tuning-with-openai-624a6055517d

官方教學:https://platform.openai.com/docs/guides/fine-tuning#fine-tuning-examples

準備資料的方向

我們可以用微調來調整機器人有一致的回覆口吻和邏輯,或針對特定任務來加強模型的能力,例如生成問題、回答細化,到分類、摘要生成和結構化標記

1. 生成問題

任務目標:根據提供的文本生成可能的相關問題。

{
  "messages": [
    {
      "role": "system",
      "content": "你是一個能根據文本生成相關問題的助手。"
    },
    {
      "role": "user",
      "content": "台灣位於東亞,擁有世界領先的半導體產業,尤其以台積電(TSMC)為代表。"
    },
    {
      "role": "assistant",
      "content": "1. 台灣在哪裡?\n2. 台灣的主要產業是什麼?\n3. 哪家公司代表了台灣的半導體產業?"
    }
  ]
}

2. 細化回答

任務目標:根據問題生成多種類型的回答(簡潔、詳細、多角度)。

{
  "messages": [
    {
      "role": "system",
      "content": "你是一個能根據問題生成不同類型回答的助手,包括簡潔、詳細和多角度回答。"
    },
    {
      "role": "user",
      "content": "台灣的主要產業是什麼?"
    },
    {
      "role": "assistant",
      "content": "簡潔回答:半導體。\n詳細回答:台灣的主要產業是半導體,此外電子製造業和資訊科技服務業也佔有重要地位。\n多角度回答:半導體是台灣的核心產業,特別是在晶圓代工和芯片設計方面。此外,電子產品的生產與出口也非常重要。"
    }
  ]
}

3. 分類

任務目標:將文本分配至特定的類別(如情感分類或主題分類)。

情感分類範例

{
  "messages": [
    {
      "role": "system",
      "content": "你是一個情感分析助手,能判斷文本是正面、負面或中性的情感。"
    },
    {
      "role": "user",
      "content": "台灣的自然風景令人驚嘆,擁有多樣的生態系統。"
    },
    {
      "role": "assistant",
      "content": "正面"
    }
  ]
}

主題分類範例

{
  "messages": [
    {
      "role": "system",
      "content": "你是一個主題分類助手,能根據文本內容將其歸類為科技、旅遊、醫療等主題。"
    },
    {
      "role": "user",
      "content": "台積電的先進製程技術使其成為全球晶圓代工的領導者。"
    },
    {
      "role": "assistant",
      "content": "科技"
    }
  ]
}

4. 摘要

任務目標:從提供的文本中生成簡短的摘要。

{
  "messages": [
    {
      "role": "system",
      "content": "你是一個能根據文本生成摘要的助手,專注於提取關鍵資訊。"
    },
    {
      "role": "user",
      "content": "台灣位於東亞,擁有世界領先的半導體產業,尤其以台積電(TSMC)為代表。該國的科技產業是其經濟增長的主要推動力,並在全球供應鏈中扮演重要角色。此外,台灣的教育水準和基礎建設也為產業發展提供了良好條件。"
    },
    {
      "role": "assistant",
      "content": "台灣以半導體產業為經濟增長主要推動力,台積電是其核心代表。"
    }
  ]
}

5. 特定任務的結構化標記

任務目標:從文本中提取關鍵實體並將其標記為結構化數據。

命名實體識別(NER)範例

{
  "messages": [
    {
      "role": "system",
      "content": "你是一個命名實體識別助手,能從文本中提取實體並標記其類型(如人名、地點、組織)。"
    },
    {
      "role": "user",
      "content": "台積電總部位於新竹,是世界領先的半導體公司之一。"
    },
    {
      "role": "assistant",
      "content": "- 台積電: 公司名\n- 新竹: 地點"
    }
  ]
}

結構化數據抽取範例

{
  "messages": [
    {
      "role": "system",
      "content": "你是一個數據抽取助手,能從文本中提取結構化信息。"
    },
    {
      "role": "user",
      "content": "台積電的市值約為6000億美元,創立於1987年。"
    },
    {
      "role": "assistant",
      "content": "- 公司: 台積電\n- 市值: 6000億美元\n- 創立年份: 1987年"
    }
  ]
}

執行範例

如果我期待機器人可以更深入的理解法條 例如下面的資料

【衛生福利部】衛生福利部急難救助金申請審核及撥款作業規定

一、急難救助對象: (一)戶內人口死亡無力殮葬者。 (二)戶內人口遭受意外傷害或罹患重病,致生活陷於困境者。 (三)負家庭主要生計責任者,失業、失蹤、應徵集召集入營服役或替代役現役、入獄服刑、因案羈押、依法拘禁或其他原因,無法工作致生活陷於困境者。 (四)財產或存款帳戶因遭強制執行、凍結或其他原因未能及時運用,致生活陷於困境者。 (五)已申請福利項目或保險給付,尚未核准期間生活陷於困境。 (六)其他因遭遇重大變故,致生活陷於困境,經直轄市、縣(市)主管機關訪視評估,認定確有救助需要者。

※同一事故之救助,以一次為限。

二、申請流程 申請急難救助者,應備齊申請表件,檢同相關證明文件,向戶籍所在地鄉(鎮、市、區)公所提出申請,轉報直轄市政府社會局或縣(市)政府核定之﹔直轄市政府社會局或縣(市)政府對於急難救助對象經核予救助後,仍陷於困境者,得轉報衛生福利部(以下簡稱本部)核定再予救助。

可以設計以下data.jsonl檔案內容

{"messages": [{"role": "system", "content": "你是一個專業的法規助手,能夠精確解析法條並提供準確回答。"}, {"role": "user", "content": "請說明急難救助的對象包含哪些情形?"}, {"role": "assistant", "content": "急難救助對象包含以下情形:\n1. 戶內人口死亡無力殮葬者。\n2. 戶內人口遭受意外傷害或罹患重病,致生活陷於困境者。\n3. 負家庭主要生計責任者,因失業、失蹤、服役、入獄等原因無法工作,致生活陷於困境者。\n4. 財產或存款帳戶遭強制執行、凍結或其他原因未能及時運用,致生活陷於困境者。\n5. 已申請福利或保險給付,尚未核准期間生活陷於困境者。\n6. 其他因重大變故,經地方政府評估認定確有救助需要者。"}]}
{"messages": [{"role": "system", "content": "你是一個專業的法規助手,能夠精確解析法條並提供準確回答。"}, {"role": "user", "content": "是否可以針對同一事故申請多次急難救助?"}, {"role": "assistant", "content": "不可以,依規定,同一事故的急難救助以一次為限。"}]}
{"messages": [{"role": "system", "content": "你是一個專業的法規助手,能夠精確解析法條並提供準確回答。"}, {"role": "user", "content": "申請急難救助需要經過哪些流程?"}, {"role": "assistant", "content": "申請急難救助的流程如下:\n1. 準備申請表件及相關證明文件。\n2. 向戶籍所在地的鄉(鎮、市、區)公所提出申請。\n3. 公所轉報直轄市政府社會局或縣(市)政府核定。\n4. 若救助後仍陷於困境,可由地方政府轉報衛生福利部核定再予救助。"}]}
{"messages": [{"role": "system", "content": "你是一個專業的法規助手,能夠精確解析法條並提供準確回答。"}, {"role": "user", "content": "如果戶內有人因意外傷害導致生活困境,是否符合急難救助條件?"}, {"role": "assistant", "content": "是的,戶內人口遭受意外傷害,導致生活陷於困境者,符合急難救助的條件之一。"}]}
{"messages": [{"role": "system", "content": "你是一個專業的法規助手,能夠精確解析法條並提供準確回答。"}, {"role": "user", "content": "某家庭主要生計者因入獄服刑,導致家人生活陷於困境,是否可申請急難救助?"}, {"role": "assistant", "content": "可以,家庭主要生計責任者因入獄服刑無法工作,導致生活陷於困境,符合急難救助對象的條件之一。"}]}
{"messages": [{"role": "system", "content": "你是一個專業的法規助手,能夠精確解析法條並提供準確回答。"}, {"role": "user", "content": "急難救助的申請對象有什麼限制?"}, {"role": "assistant", "content": "急難救助的申請對象需要符合以下條件之一:\n1. 戶內人口死亡無力殮葬者。\n2. 戶內人口因意外或疾病導致生活困難。\n3. 家庭主要生計者無法工作導致家庭困境。\n4. 財產或存款帳戶因特定原因無法運用。\n5. 已申請福利或保險但尚未核准期間。\n6. 因重大變故生活陷於困境,經地方政府認定確有需要者。"}]}
{"messages": [{"role": "system", "content": "你是一個專業的法規助手,能夠精確解析法條並提供準確回答。"}, {"role": "user", "content": "急難救助申請時需要準備哪些資料?"}, {"role": "assistant", "content": "申請急難救助時需要準備以下資料:\n1. 填寫完整的急難救助申請表。\n2. 相關證明文件,例如醫療證明、財務資料、戶籍資料等。\n3. 符合條件的其他輔助證明文件。"}]}
{"messages": [{"role": "system", "content": "你是一個專業的法規助手,能夠精確解析法條並提供準確回答。"}, {"role": "user", "content": "急難救助的撥款程序是怎樣的?"}, {"role": "assistant", "content": "撥款程序如下:\n1. 由地方政府對急難救助申請進行審核並核定金額。\n2. 審核通過後,將救助款項撥至申請人指定的帳戶。\n3. 若地方救助後仍陷於困境,地方政府可轉報衛生福利部核定追加撥款。"}]}
{"messages": [{"role": "system", "content": "你是一個專業的法規助手,能夠精確解析法條並提供準確回答。"}, {"role": "user", "content": "如果財產或存款遭強制執行,是否符合急難救助的條件?"}, {"role": "assistant", "content": "是的,若財產或存款帳戶因遭強制執行或凍結而無法運用,導致生活陷於困境,符合急難救助條件之一。"}]}
{"messages": [{"role": "system", "content": "你是一個專業的法規助手,能夠精確解析法條並提供準確回答。"}, {"role": "user", "content": "已申請其他福利項目,但尚未核准期間可以申請急難救助嗎?"}, {"role": "assistant", "content": "可以,若已申請其他福利或保險給付,但尚未核准期間生活陷於困境,符合急難救助條件之一。"}]}

接著來到OpenAI的微調頁面

https://platform.openai.com/finetune

+Create

接著在畫面中選擇剛剛儲存的data.jsonl檔案

在微調之前,可以先閱讀這篇文章,學習如何在訓練前檢查資料集的格式、數據結構,並預估可能耗費的錢

https://cookbook.openai.com/examples/chat_finetuning_data_prep

該工具提供多項實用功能,幫助開發者準備高質量的數據集並規劃微調模型的成本:

  1. 格式檢查:自動檢查數據集中的格式錯誤,確保數據符合微調需求。
  2. 統計分析:生成基本的數據統計信息,例如對話回合數、用戶和助手訊息的分佈情況,便於了解數據結構。
  3. 代幣數量估算:預估微調所需的代幣數量,為開發者提供費用規劃參考,避免超出預算。

然後就可以開始微調

會跑出一些訓練數據,代表模型對這些資料的訓練學習狀況

訓練完成之後可以看見你訓練好的模型名稱,接著在API改變呼叫的模型就可以了

發佈日期:

LLM模型的微調

參考資料

《Ultimate Guide to Fine-Tuning LLMs》詳盡探討了 LLM 微調的流程、進階技術與實際應用,提供了全面的指導與範例!

https://claire-chang.com/wp-content/uploads/2024/11/2408.13296v1.pdf

微調(Fine-tuning)是甚麼

微調(Fine-tuning)是一種在現有的預訓練模型基礎上,針對特定任務進行額外訓練的技術。以下是其核心概念與應用:

  1. 基於預訓練模型:微調使用的是已經在大規模數據集上訓練好的模型(例如 GPT 系列)。這些模型具有通用的語言理解能力。
  2. 特定領域的額外訓練:微調的過程中,模型會接觸到一個較小且與特定任務相關的數據集,進行進一步的訓練。這可以是專門的領域(如醫學、法律)或特定的任務(如情感分析、對話生成)。
  3. 減少數據需求:由於基礎模型已具備通用的知識與特徵,微調只需較少的數據即可達成良好的效果,相較於從零開始訓練模型更具效率。
  4. 遷移學習:微調實現了知識遷移,將預訓練模型中的學習模式和語言特徵應用到新的任務中,進而提升性能。
  5. 廣泛應用:微調在自然語言處理(NLP)的多種任務中被廣泛使用,例如:
    • 文本分類:分類文章或文本的主題類別。
    • 情感分析:判斷文本中的情感極性(如正面、負面)。
    • 問答系統:從文本中回答具體問題。

微調 LLM 的重要性

微調 LLM(大語言模型)的重要性主要體現在以下幾個關鍵方面:

1. 遷移學習

  • 微調充分利用預訓練模型在大規模數據上學到的通用語言知識,將這些知識遷移並適應到特定任務或領域。
  • 相較於從零開始訓練模型,微調大幅減少了計算資源的需求以及所需的時間成本。
  • 例如,預訓練模型中已經學到的語法和語義知識可以直接應用於分類、翻譯等任務,只需進行少量的調整。

2. 減少數據需求

  • 預訓練模型已經掌握了大量的通用語言特徵,因此微調過程只需提供較小規模且相關的標記數據集。
  • 減少了對大量標記數據的依賴,降低了數據標記的成本和時間投入。
  • 這在數據稀缺或標記成本高昂(例如醫療診斷數據)的情境下尤為重要。

3. 改進泛化能力

  • 微調可以讓模型針對特定任務進行調整,同時保留其原有的通用性,使其能夠更好地適應不同的領域需求。
  • 透過捕捉特定任務或領域的特徵,模型能更準確地理解和生成目標文本。
  • 增強了模型對於特定領域數據的適應能力,例如讓模型能夠處理法律、醫學或金融等專業性較高的內容。

RAG 和微調該選擇哪個?

1. 外部數據訪問的需求

  • RAG 的優勢
    • 適合需要訪問動態或外部數據源的應用,例如需要查詢最新資訊、文檔數據庫或動態內容的情境。
    • 透過檢索機制(如向量搜索或查詢資料庫),可以直接從外部數據中提取相關內容,避免生成與現實脫節的回應。
  • 微調的適用情境
    • 更適合需要模型整合特定領域知識並生成具有一致風格或行為的輸出時,例如專業文本生成或個性化的對話助手。

2. 抑制幻覺與準確性

  • RAG 的優勢
    • 因為模型直接檢索現實數據進行生成,其回應內容基於實際檔案或資料,因此更容易抑制「幻覺」(即生成不正確資訊)的情況。
    • 適合需要高度準確性並要求內容基於可檢索資料的情境,如技術支持系統或法律解釋。
  • 微調的挑戰
    • 雖然微調可以整合特定領域的知識,但模型仍可能因訓練數據的偏差或不足而產生不正確資訊,特別是在面對未知或不熟悉的問題時。

3. 訓練數據的可用性

  • 微調的要求
    • 需要大量高質量且與目標任務相關的標記數據。如果數據充足,微調可以極大地提高模型性能,並實現精確的行為調整。例如,商業報告需要正式語氣,而聊天機器人需要更親和的對話風格。微調後的模型會將訓練數據中的語氣和結構模式內化。
    • 如果應用需要模型按照嚴格定義的邏輯或模板生成回應,例如技術報告、標準作業程序等,微調後的模型可以更加準確地遵循這些規則。
    • 微調可以讓模型的生成行為與目標任務高度一致,通過特定數據集進行訓練,可以實現模型在語言風格、回應邏輯、專業表達上的調整。
  • RAG 的優勢
    • 在缺乏特定領域標記數據時,RAG 是更靈活的選擇,因為它依賴檢索系統而非模型內部知識。
    • 能即時利用未標記的外部數據源進行信息生成。

4. 數據更新頻率

  • RAG 的動態優勢
    • 適用於數據經常更新或變化的場景,例如新聞摘要、金融分析等,因為其檢索機制允許即時存取最新數據。
  • 微調的限制
    • 微調後的模型知識是靜態的,需要重新訓練或更新才能納入新的資訊,因此不適合快速變化的數據環境。

5. 可解釋性與透明度

  • RAG 的透明性
    • 提供檢索的原始數據作為生成內容的依據,使回應的來源可追溯,決策過程更透明。
    • 適用於對可解釋性有高需求的領域,例如醫療診斷或法律建議。
  • 微調的挑戰
    • 微調後的模型內部知識來源較難追溯,可能不容易說明某些輸出的具體依據。

決策指南

因素RAG 的優勢微調的優勢
外部數據訪問需求動態檢索外部數據,適用於即時資訊不適合
抑制幻覺與準確性依賴實際檢索數據,抑制幻覺可能生成錯誤資訊
訓練數據可用性不依賴標記數據,數據稀缺時穩健表現需要大量標記數據以實現高性能
數據更新頻率適應高頻率數據變化不適合
模型透明度與可解釋性提供檢索依據,決策過程透明依據難追溯
整合行為與風格不擅長非常適合

微調的適用案例

  • 定制化行為
    • 客製化聊天機器人,用於品牌互動,語言表達契合品牌風格。
    • 高管助理型 AI,提供高層次的專業回應。
  • 特定知識領域
    • 專業醫學問答助手,回答病患基於臨床數據的問題。
    • 法律助理,解釋合同條款或生成法律文件。

微調 LLM 資料準備中的挑戰

1. 領域相關性(Domain Relevance)

  • 挑戰
    • 確保資料與目標任務或應用場景的領域高度相關。
    • 不相關或域外資料會導致模型在特定場景下的泛化性能較差,輸出可能不準確。
  • 應對策略
    • 僅選擇與任務相關的資料來源。
    • 使用專業資料集(如法律、醫療數據)或設計特定的數據篩選機制。

2. 資料多樣性(Data Diversity)

  • 挑戰
    • 缺乏多樣性可能導致模型對未充分表示的場景表現不佳。
    • 偏倚的資料會使模型對某些特定類型的輸入產生偏見。
  • 應對策略
    • 收集具有不同語言風格、地理位置和上下文背景的資料。
    • 使用數據增強技術(如回譯或對抗樣本)來擴展資料多樣性。

3. 資料規模(Data Size)

  • 挑戰
    • 微調通常需要至少 1000 條樣本以達到有效的結果,特別是針對複雜任務時。
    • 大型資料集的存儲、計算資源需求和處理時間均可能構成限制。
  • 應對策略
    • 利用高效的數據存儲格式(如 .jsonl)。
    • 優化數據處理管道(如批處理或並行計算)。
    • 平衡數據量與質量:適當使用小而乾淨的數據集。

4. 資料清理與預處理(Data Cleaning and Preprocessing)

  • 挑戰
    • 噪聲、錯誤標記和數據不一致可能顯著影響模型性能。
    • 資料中多餘的符號或遺漏值會對模型輸入的質量造成干擾。
  • 應對策略
    • 使用工具(如 pandas)進行數據清理,移除空值和異常值。
    • 自動化數據校驗流程以檢查一致性和正確性。

5. 資料標註(Data Annotation)

  • 挑戰
    • 標註數據需要準確且一致,特別是在監督學習任務中。
    • 標註不一致會導致模型預測不穩定。
  • 應對策略
    • 設計標註指南,確保所有標註者的理解一致。
    • 使用工具(如 Prodigy 或 Snorkel)結合人機協作,提高效率和準確性。

6. 處理稀有案例(Handling Rare Cases)

  • 挑戰
    • 資料中重要但少見的場景(如極端情況或邊界條件)可能被忽略。
    • 模型可能無法泛化到這些稀有但關鍵的場景。
  • 應對策略
    • 增強稀有案例的表示,例如通過過採樣或合成數據生成。
    • 在微調過程中對稀有類別賦予更高的損失權重。

7. 道德考量(Ethical Considerations)

  • 挑戰
    • 資料中可能存在有害內容或偏見,導致模型生成不適當或有害的輸出。
    • 資料處理中需遵守隱私法規(如 GDPR)。
  • 應對策略
    • 在資料處理前,檢查並移除敏感或偏見內容。
    • 使用工具自動檢測數據中的潛在有害特徵。
    • 嚴格遵守數據隱私和倫理規範,確保用戶信息的安全性。

總結

應確保數據品質好、多樣性足夠且具有代表性。能夠涵蓋不同場景和任務,增強模型的穩健性和泛化能力。

挑戰影響應對策略
領域相關性不相關數據會導致模型泛化差僅使用領域相關數據,構建特定篩選機制。
資料多樣性偏倚數據影響未充分表示場景的性能擴展資料多樣性,利用增強技術(如回譯、對抗樣本)。
資料規模大型資料集處理成本高優化存儲與處理管道,平衡數據質量與數量。
資料清理與預處理噪聲和錯誤降低輸入質量自動化數據校驗,移除空值與異常值。
資料標註標註不一致導致模型預測不穩定制定標註指南,使用工具輔助人機標註。
稀有案例模型無法泛化到少見場景增強稀有案例表示,對稀有類別增加權重。
道德考量偏見或不適內容可能產生有害結果移除偏見內容,遵守隱私規範。
發佈日期:

吳恩達:前瞻 AI Agents,顛覆未來想像

影片介紹

應專注於構建現在可以實現的應用

AI 技術堆疊(AI stack)的理解如下圖,最下面是半導體技術,接著雲端層、基礎模型層

吳恩達認為:對於台灣的許多企業而言,最好的機會是專注於構建現在可以實現的應用

而AI 代理工作流程則是能夠讓應用更加聰明的關鍵

代理式 AI 系統如何運作

  • 反思模式(Reflection Design Pattern)
    首先先讓AI 撰寫程式碼,接著讓它檢視自己剛剛撰寫的程式碼,進行批評並提出改進建議。同樣的步驟反覆多次
  • 多代理模式(Multi-Agent Pattern)
    一個代理生成程式碼,而另一個代理則專門負責批評前者的成果,兩者互動後產生更好的結果

越來越多的團隊在實施不止一個單一的代理,而是建立多個 AI 代理的協作系統。

「管理者思維」的設計模式

類似於管理者僱用多名員工來完成不同的任務。例如,你可以設計三到四個 AI 代理,分別負責程式碼撰寫、行銷設計或其他專業領域的工作,然後讓它們彼此協作。

當前 AI 領域的其他五個重要趨勢

半導體領域的發展對應用層很重要

從 AI 模型訓練到部署的時間大幅縮短。以前從數據收集、模型訓練到部署可能需要 6 到 12 個月,而現在透過語言模型的提示工程(Prompt Engineering),許多原本需要半年開發的原型,只需 10 天就能完成。

文本處理革命已經發生,而影像處理革命即將發生

由於傳輸數據的成本和技術瓶頸大幅降低,而數據處理成本(特別是 AI 處理)仍然昂貴,企業開始傾向於將數據分散到不同的地方,根據需要傳輸和處理數據。

非結構化數據的工程化管理。過去,企業主要處理結構化數據,例如表格和數字。但現在隨著 AI 現在能更好地理解文本、圖片和音訊,更多的數據工程需要集中在如何使公司為這些非結構化數據做好 AI 準備。

AI 正在顛覆許多產業

這是一張來自賓夕法尼亞大學(UPenn)研究論文的圖表。不同於以往的自動化浪潮主要影響低薪工作,AI 現在也可以自動化許多知識型工作者的任務。

圖表中,橫軸表示薪資,縱軸表示不同職業受 AI 自動化影響的程度。有趣的是,高薪工作往往更容易受到這波 AI 自動化的衝擊。與早期的 AI 世代不同,以前的 AI 更傾向於影響低薪重複性工作的自動化,而現在的 AI 更有能力影響高薪專業工作的自動化

執行AI創新的關鍵步驟

  1. 高層管理者 AI 簡報:讓企業領導者了解 AI 的運作原理,從非技術的商業角度學習 AI 的基本運作方式,幫助企業識別商業機會。
  2. 工作任務分解:將工作拆解成任務,分析哪些適合 AI 自動化,進而揭示潛在機會。每份工作由許多任務組成,我們會將其分解,找出哪些任務適合 AI 自動化。我們發現,通過這種系統化分析,我們能揭示出許多原本未曾想到的機會。
  3. 激發新模式:AI 不僅能降低成本,更可能創造新的商業模式和增值機會。事實上,通過這種系統化分析來拆解工作並將部分的工作自動化,很時候,這過程會讓某些任務的成本降低成千上萬倍,從而創造出全新的商業模式,而不是僅僅取代現有的工作流程。
  4. 自建與購買抉擇:對於大多數企業而言,自行開發(Build)還是外購(Buy) AI 解決方案是一個常見的抉擇。我們通常建議,如果市場上已經存在解決方案,那麼直接購買即可。但由於 AI 技術還相對新穎,許多企業需要的解決方案根本還不存在,因此它們最終往往選擇自行開發,甚至投資創建新公司。這種工作任務分解的流程幫助企業高效地建構和採用 AI 技術,同時避免企業承擔過多的開發風險。我認為,透過這種方式,企業能夠從 AI 技術中獲得長期的益處。

分析你的工作內容,識別哪些部分AI可以幫忙

  • 工作由許多任務組成。AI 是自動化任務,而非整個工作。
    • 將員工執行的工作分解為各個任務。
    • 分析各項任務,以評估其 AI 自動化或增強的潛力。

範例:客服代表

任務AI 潛力
回答客戶文字聊天查詢
記錄客戶互動
檢查訂單狀態
接聽電話
分流處理投訴
發佈日期:

閱讀論文的好幫手們!

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 還具有交互式的對話功能,用戶可以進行問答,從而獲得更深入的理解。具有交互式問答功能,可以讓用戶獲得更深入的理解。

發佈日期:

在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 的資訊生成過程是動態的,每次生成部分答案後再進行新一輪檢索和生成,因此不依賴於預先準備的摘要,而是根據查詢需要來即時擴充答案。