我的新書AI 職場超神助手:ChatGPT 與生成式 AI 一鍵搞定工作難題的教材投影片已製作完成

歡迎各位有需要的教師和博碩文化索取教材

  • 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…

    Continue Reading…: Graph RAG的Node Embeddings 技術

  • 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),但跳過了檢索過程中的細節,而是將重點放在更高層次的資訊整合和討論上。以下是詳細解釋: 方法概述 實際範例 假設用戶的原始查詢是:「如何在大型組織中實施遠端工作政策?」 這樣一來,用戶得到的是一個完整的、全局性的答案,而不是單獨呈現每個子查詢的答案。這種方法更適合處理需要綜合理解的問題。 分解的實現分法2 – Prio-reasoning 另一種方法是類似於 Prio-reasoning,每個子查詢的結果會被存儲在一個 “記憶” 中,並且每個子查詢的問題不僅基於自己的檢索結果,還基於之前子查詢的結果。 MultiStepQueryEngine 的 Llama-Index 也是一種“Prio-reasoning”實現 https://teetracker.medium.com/prio-reasoning-919fd6e90d86 在 Prio-reasoning…

    Continue Reading…: RAG Parallel Queries

  • ,

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

    什麼是RAPTOR 參考資料:https://www.cnblogs.com/xiaoqi/p/18060281/RAPTOR RAPTOR 是一種基於「樹狀結構」的 RAG 方法。首先,RAPTOR 將所有文本分割成小塊,並將這些塊轉化為向量,然後通過聚類這些向量形成樹狀結構的層級索引(例如,不同層級的主題群組)。在查詢時,模型可以根據這棵樹的結構,有針對性地檢索和生成答案。 RAPTOR 是基於樹狀結構的分層檢索方法,將文本片段轉換成向量並聚類形成樹狀索引。這種方法讓系統可以在樹狀結構中快速定位特定的主題或類別,並支持多層次的檢索。RAPTOR 依賴樹狀結構的索引來進行分層檢索,根據查詢在預先建立的分層索引中找到最佳匹配的層次和分支。這使得它在面對大量資訊的時候,可以快速進行全局性或細節性的檢索。 高度依賴於樹狀索引結構,這使得它能更快地找到分層的資訊,但靈活性相對較低。 這種基於樹的索引方式可以讓檢索更高效,因為系統可以快速定位到與查詢最相關的分支。這也有助於全局性查詢,特別是需要在不同主題中查找關鍵資訊的情境。樹狀結構還提供了一種自然的分層索引方法,能適應不同的查詢深度。 和Graph RAG的差異 RAPTOR 和 Graph RAG 有一些相似之處,因為它們都基於結構化的索引來組織和檢索資料,並試圖在回答查詢時提供更全面和有層次的資訊。不過,它們在具體的結構、處理流程和應用場景上仍有一些關鍵區別: 相似之處 RAPTOR 和 Graph RAG 都依賴預先建立的結構化索引,RAPTOR 使用樹狀結構,而 Graph RAG 則使用多層次的圖形社群結構。這些方法預先組織了資料,以便在查詢時可以快速定位。 區別之處 RAPTOR 和 Graph RAG 通過層級結構或社群摘要來進行資訊組織,這些摘要是預先準備好的,可快速調用。RIG 的資訊生成過程是動態的,每次生成部分答案後再進行新一輪檢索和生成,因此不依賴於預先準備的摘要,而是根據查詢需要來即時擴充答案。

    Continue Reading…: RAPTOR – 基於樹狀結構的 RAG 方法

  • ,

    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 更加靈活,但在處理大型資料集時可能會相對較慢。其資訊生成過程是動態的,每次生成部分答案後再進行新一輪檢索和生成,因此不依賴於預先準備的摘要,而是根據查詢需要來即時擴充答案。 Retrieval Interleaved Generation (RIG)範例查詢 用戶提出一個多步驟的問題: 「阿基米德是如何影響現代物理學的?」 這個問題相對複雜,因為它不僅涉及阿基米德的生平,還包括他的貢獻如何影響後來的物理學理論,需要多步驟推理來構建答案。 RIG 運作流程 最終答案示例 「阿基米德對現代物理學的影響主要體現在他的浮力原理和杠杆原理。浮力原理為伽利略對於運動的研究提供了基礎,而杠杆理論則是牛頓力學的重要基石。此外,阿基米德的研究還在流體力學方面影響了後來的科學家,進一步推動了流體動力學的發展。」

    Continue Reading…: Retrieval Interleaved Generation (RIG)

  • ,

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

    論文網址: https://arxiv.org/abs/2404.16130 Graph RAG 介紹 一種新的 Graph RAG 方法,透過建立基於圖形的文本索引,提升對全球性問題的回答品質。這種方法能夠有效地處理大規模文本語料庫,並且能夠擴展到用戶問題的普遍性和要索引的源文本數量。 Graph RAG 管道利用 LLM 衍生的文本圖索引進行資料處理。首先,該管道從來源文件中構建出實體知識圖,將文件中的實體與其關聯關係組織成網狀結構。接著,Graph RAG 使用 LLM 在索引建立階段進行群體預摘要,針對每個具有相似性的實體群體生成摘要,以便更快速地調用相關資訊。當查詢進來時,Graph RAG 可以在查詢時間使用這些預摘要來快速生成「全局答案」。這種方法不僅提升了答案的全面性和多樣性,還能有效降低生成回答時的 token 成本。 Graph RAG 系統的工作流程 RAG 的作用:RAG 的目的是提升 LLM 在回答問題時的準確度和廣度。它先從外部數據來源檢索資料,再將這些資料與問題一起添加到 LLM 的上下文中,讓模型能更有針對性地回答問題。 Graph RAG 的優勢:和一般 RAG 不同,Graph RAG 使用了「圖形索引」來組織和檢索資料,這種方法能更好地處理大型資料集,並且在回答問題時能提供更豐富、全面的答案。 其工作流程如下:…

    Continue Reading…: Graph RAG – 圖形式的檢索增強生成

  • ,

    讓LLM記憶對話的實現方式

    讓LLM記憶對話的幾種方式 參考資料: https://www.pinecone.io/learn/series/langchain/langchain-conversational-memory/ 這些模式是以LangChain的實作為範例,實現對話記憶可以使 LLM 能夠進行連貫的對話,這對於像聊天機器人這樣的應用來說非常重要。 對話記憶的不同形式,包括 每種記憶形式都有其獨特的應用場景,例如 ConversationBufferMemory 適合簡短對話,而 ConversationSummaryMemory 適合長對話,因為它通過總結歷史對話來節省令牌使用。此外,網頁還提到了其他類型的對話記憶,如 ConversationKnowledgeGraphMemory 和 ConversationEntityMemory。 雖然需要更多的調整來決定總結什麼以及在緩衝區窗口中保持什麼,但ConversationSummaryBufferMemory確實給了我們很多靈活性,也是我們的記憶類型中唯一一個(到目前為止)允許我們記住遙遠互動和以其原始——以及信息最豐富——的形式存儲最近的互動。 ConversationBufferWindowMemory的token使用比較圖 ConversationSummaryBufferMemory的token使用比較圖 進階的記憶模式 – 實體、圖形記憶 參考資料:https://www.comet.com/site/blog/advanced-memory-in-langchain/ ConversationEntityMemory(實體記憶) 實體記憶能夠幫助 AI 模型記住和理解對話中的關鍵實體,從而提供更準確和相關的回答 使用一個LLM來提取有關實體的信息,並隨著時間的推移建立對這些實體的知識。實體記憶對於維持上下文和保留在對話中提到的實體的信息非常有用。它可以幫助模型根據對話的歷史提供準確和相關的回應。 若希望模型了解特定實體及其相關信息時,應使用實體記憶。 以下為實體記憶對話的一個應用範例: 1. 輸入對話: Abi, Andy, Lucas, and Harpreet are building the LLMOps…

    Continue Reading…: 讓LLM記憶對話的實現方式

  • Line Bot圖文回覆的幾個功能

    列出快速回覆選項 官網教學:https://developers.line.biz/en/docs/messaging-api/using-quick-reply/#set-quick-reply-buttons 可在訊息中加入快速回覆按鈕,讓使用者能夠快速回應。快速回覆功能可在一對一聊天、群組聊天和多人的聊天中使用,每則訊息最多可設定 13 個快速回覆按鈕。 快速回覆按鈕的消失時機: LINE Front-end Framework LINE 前端框架(LIFF,LINE Front-end Framework)是由 LINE 提供的網頁應用程式框架,透過將 LIFF SDK 整合至您的網頁應用程式,您可以存取 LINE 平台提供的資訊,或使用 LINE 應用程式的功能。 主要功能: 為了協助新手快速上手,LINE 提供了 LIFF 起始應用程式,這是一個包含基本功能的範本,開發者可以在此基礎上進行自訂和開發。 開始使用 LIFF 起始應用程式的步驟: LIFF視窗的大小可以以以下三種大小之一顯示。 要在 LINE 平台上運行 LIFF(LINE Front-end Framework)應用程式,您需要將其新增至 LINE Login 頻道。以下是詳細步驟:…

    Continue Reading…: Line Bot圖文回覆的幾個功能

  • ,

    生成只包含專案使用的Library列表

    傳統方式如下 傳統匯出專案模組清單的方式很容易會產生一大堆檔案列表,因為會是從python的env中的site package裡面去讀取所使用的專案列表 而且很容易出現一大堆本地端的資訊如下,尤其當我們有使用.whl檔案來安裝環境時,特別會出現下面這種狀況,會導致難以利用這列表去建立新的環境 這邊推薦一個套件名為pipreqs pipreqs 介紹 pipreqs 是一個非常方便的 Python 工具,主要用於 自動生成 Python 專案的 requirements.txt 檔案。這個檔案列出了專案所依賴的所有第三方套件,以及它們的版本號。 pipreqs 會掃描指定的目錄,分析 Python 檔案中的 import 語句,並根據這些資訊來確定專案所依賴的套件。它會盡可能地精確地找出這些套件的版本號。 基本用法 常用選項 建議 官方網站:https://github.com/bndr/pipreqs

    Continue Reading…: 生成只包含專案使用的Library列表

  • 用Chrome將本地端檔案替代伺服器檔案

    功能介紹 很多時候我們在除錯前端時,會需要把某些例如像設定檔之類換成別的(例如換成DEV環境的設定檔),這個時候可以用Chrome Developer Tool內建的功能,指定替換掉某個伺服器上面的檔案,非常方便。 很多時候我們要了解別人的網站的一些技術,這個功能也可以幫上很多忙 使用方法 在 Chrome 中可以使用”Developer Tool > Source > 找到要取代的檔案 > 右鍵 > Override Content”去把內容取代掉 點選了之後,切換到Override頁籤,選擇取代的檔案所放置的資料夾,接著就可以去該資料夾看你剛剛所選的Override的檔案 然後更改裡面的檔案,同步就會更改線上的檔案,我們可以console.log出一些我們有興趣知道的東西,或者修改某些設定。 取代後不能下載檔案的問題 如果某些檔案不能取代,而出現錯誤訊息時,如下 則可以去關掉Source Map的功能

    Continue Reading…: 用Chrome將本地端檔案替代伺服器檔案

  • ,

    使用Dify開發Agent聊天機器人

    什麼是Agent 參考資料:https://docs.dify.ai/zh-hans/guides/application-orchestrate/agent 智能助手(Agent Assistant),利用大語言模型的推理能力,能夠自主對複雜的人類任務進行目標規劃、任務拆解、工具調用、過程迭代,並在沒有人工干預的情況下完成任務。 在Dify創建Agent 我們可以在Studio > Agent創建一個具備Agent功能的機器人 在認識Agent之前,要先了解工具是什麼 在工作流的地方,我們可以呼叫外部的API,在那邊,呼叫的動作是我們自己在工作流程中設定如何呼叫,但是如果流程不是固定的,而會隨著使用者的回應而改變,那麼工作流就會不堪用,就要改使用Agent,由大語言模型來幫忙判斷何時該呼叫那些外部API或那些功能 在Dify裡面已經有很多預設的工具,但是很多時候如果不符合需求,我們就會需要設定自己的工具 在Dify自己創建工具 首先就是要寫一個API,關於API的格式,我在我的前一篇文章有分享過 那要如何把這個寫好的API給Dify使用呢?這時候就要大推下面這個網址 https://chatgpt.com/g/g-TYEliDU6A-actionsgpt 基本上我就把我的API的程式碼整個貼給他,叫他幫我產生一個YAML檔案,噹噹噹~就完成啦!連解釋都大致正確喔! 在這邊創建自己的工具,然後回到剛剛在Studio > Agnet創建的機器人,在工具部分增加自己的工具,LLM會根據你在YAML裡面寫的工具說明(英文)和參數說明,自動產生相對應的資料去呼叫函數,非常的聰明!但也因為這樣,工具說明和參數說明一定要認真寫,千萬不要亂寫,會影響到呼叫的成功率

    Continue Reading…: 使用Dify開發Agent聊天機器人


17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。

如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!