I'm a mother of two precious kids and a professional programmer.
我的新書AI 職場超神助手:ChatGPT 與生成式 AI 一鍵搞定工作難題的教材投影片已製作完成
歡迎各位有需要的教師和博碩文化索取教材
獲得更好結果的六種策略 寫清楚的說明 提供參考文本 將複雜的任務拆分為更簡單的子任務 正如軟體工程中的良好做法是將複雜系統分解為一組模組化元件一樣,提交給語言模型的任務也是如此。複雜任務往往比簡單任務具有更高的錯誤率。此外,複雜任務通常可以重新定義為更簡單任務的工作流,其中早期任務的輸出用於構造後續任務的輸入。 給模型時間“思考” 如果要求將 17 乘以 28,您可能不會立即知道,但仍然可以隨著時間的推移計算出來。同樣,模型在試圖立即回答時會犯更多的推理錯誤,而不是花時間找出答案。在回答之前要求一個「思維鏈」可以説明模型更可靠地推理出正確的答案。 使用外部工具 通過向模型提供其他工具的輸出來補償模型的弱點。例如,文本檢索系統(有時稱為RAG或檢索增強生成)可以告訴模型有關相關文檔的資訊。像 OpenAI 的 Code Interpreter 這樣的代碼執行引擎可以説明模型進行數學運算和運行代碼。如果一項任務可以通過工具而不是語言模型更可靠或更高效地完成,請卸載它以充分利用兩者。 系統地測試更改 如果可以衡量性能,則更容易提高性能。在某些情況下,對提示的修改將在幾個孤立的示例上獲得更好的性能,但在更具代表性的示例集上會導致整體性能較差。因此,為了確保更改對性能有淨積極影響,可能需要定義一個全面的測試套件(也稱為“eval”)。 更多範例請見: https://platform.openai.com/docs/guides/prompt-engineering/strategy-write-clear-instructions
相關論文: https://arxiv.org/abs/2005.11401 Embedding向量搜尋的概念 在RAG(Retrieval-Augmented Generation)模型中,embedding 向量搜尋是一個關鍵步驟,用於在資料庫中找到與當前查詢相關的資訊。RAG結合了檢索和生成的能力,通過將外部知識融入生成過程中來提高生成內容的質量和相關性。以下是 embedding 向量搜尋的主要步驟: 簡單範例 假設我們有一個簡單的資料庫,包含以下句子: 用戶查詢:「什麼是GPT-3?」 以下為一個用書名做向量檢索的文章,看了此文章會更能理解向量空間的文字意義檢索的概念 https://towardsdatascience.com/building-a-recommendation-system-using-neural-network-embeddings-1ef92e5c80c9 從Fancy AI了解準備資料的幾種方式 網站如下: https://www.fancyai.co/ 從上面的圖片我們可看出大概可分為【直接分段】或【以QA方式去呈現】,而QA方式又分成【讓AI自動整理問答對】、【人工整理問答對】。 三種方式的優缺點比較 這三種方法各有其優缺點,適用於不同的應用場景和需求。 1. 手動輸入問答對 優點: 缺點: 2.…
LlamaIndex的教學資料 這邊有許多的簡單範例: https://github.com/SamurAIGPT/LlamaIndex-course 這邊則是載入文件的範例: https://github.com/SamurAIGPT/LlamaIndex-course/blob/main/dataconnectors/Data_Connectors.ipynb 範例程式載入PDF如下 載入YouTube的字幕的範例如下 使用上面的寫法我們會發現會跳出這樣的警告 DeprecationWarning: Call to deprecated function (or staticmethod) download_loader. (`download_loader()` is deprecated. Please install tool using pip install…
查詢流程解析 檢索器(Retrievers) 檢索器就像是一個數據查找工具,它會根據用戶的查詢從索引中高效地獲取相關的上下文信息。選擇合適的檢索策略至關重要,它會影響檢索到的數據的相關性和效率。 路由器(Routers) 路由器決定了應該使用哪個檢索器從知識庫中獲取相關的上下文信息。更確切地說,RouterRetriever 類負責基於查詢選擇一個或多個候選檢索器來執行查詢。它們會使用選擇器基於每個候選檢索器的元數據和查詢來選擇最佳選項。 節點後處理器(Node Postprocessors) 節點後處理器接收一組檢索到的節點,然後可以對它們進行轉換、過濾或重新排序等操作。 響應合成器(Response Synthesizers) 響應合成器使用大型語言模型 (LLM)、用戶查詢和給定的一組檢索到的文本片段來生成響應。 甚麼是Retriever 檢索器(Retriever)是用來根據給定的查詢從數據源中提取相關的資訊(節點)。這是檢索增強生成(Retrieval-Augmented Generation,RAG)流程中的關鍵步驟,其中檢索器有助於識別可用於生成回應的最相關數據。 以下是檢索器在LlamaIndex中的工作方式概述: 檢索器建立在索引之上,指定了如何從索引中檢索節點。 不同的Retriever介紹 https://docs.llamaindex.ai/en/stable/module_guides/querying/retriever/retrievers/ 有許多不同種的檢索器,較基本的有下面這些 簡單的使用範例 以下是使用ListIndex且模式為embedding的使用範例 使用範例 檢索出的資訊
甚麼是索引(Index) 在 LlamaIndex 中,索引是一種資料結構,用於組織和存儲來自各種數據來源的信息,使搜索變得更加容易。索引是建立在一組節點(Node)之上的。節點(Node)是 LlamaIndex 的基本單位,一種包含一段文本的資料結構。每當提供一個文件時,可以將其分割成多個片段並存儲在節點中。 索引類型 LlamaIndex 提供不同類型的索引,以下是要學習的一些類型: List Index 將節點存儲為像鏈表結構那樣的順序鏈。默認情況下,它會從所有節點中獲取數據並作為響應的一部分發送。 可以使用基於嵌入的查詢來獲取前 k 個節點,或者添加關鍵字過濾器進行查詢。 Vector Store Index 向量存儲索引將每個節點及其對應的嵌入存儲在一個向量存儲中。在查詢向量索引時,它總是提供與查詢最相關的前 k 個最相似的節點。 Tree Index 樹形索引從一組節點建立一個分層的樹狀結構。 在內部,樹是通過摘要提示形成的。它以一系列文本文件作為輸入,然後以自下而上的方式建立樹形索引,其中每個父節點是其下方節點的摘要。…
YouTube 文件載入器 將 YouTube 影片的文字記錄轉換為文件格式 會得到如下格式的json資料 載入PDF文件 使用下面的程式碼可以讀取本地端的pdf文件,請確保該檔案存在 會產生如下的json檔案 載入Notion筆記本 建立對話機器人 對話測試 LangChain是一个基于大语言模型的应用程序开发框架,旨在简化创建大模型应用程序的过程。它提供了一套完整的工具、组件和接口,使开发者能够轻松地利用大语…. 可得到以上回應
基礎元件 LlamaIndex 的基礎元件包括: 載入資料 使用SimpleDirectoryReader來載入本地端資料 將資料分割成節點 節點是基本的資料結構,用於保存輸入。我們將使用以下程式碼將上述輸入分割成多個節點。 產生索引 現在我們已經創建了節點,可以在其上建立索引。我們將使用 VectorStoreIndex,它會從節點中的所有文本創建嵌入,並將其存儲在向量數據庫中。 建立檢索器 我們將使用 VectorIndexRetriever,它會根據相似度檢索出前 k 個匹配的文件。在這個例子中,我們將 k 設為 2。 建立查詢引擎 現在我們可以在檢索器之上構建一個查詢引擎來開始進行查詢。 詢問問題 現在我們可以在檢索器上建立一個查詢引擎來開始進行查詢。 Jupyter Notebook完整範例下載 https://github.com/SamurAIGPT/LlamaIndex-course/blob/main/fundamentals/Fundamentals.ipynb
主要功能 LlamaIndex 專注於將非結構化數據(如文本文件、PDF、網頁內容等)轉換為可以用於查詢和分析的結構化索引。它為用戶提供了一種簡單的方法來構建和查詢這些索引,從而更好地利用大型語言模型進行數據處理和檢索。 LlamaIndex 提供了以下功能來幫忙構建上下文增強 LLM 應用程式: 使用教學(使用OpenAI的功能) 官方教學: https://docs.llamaindex.ai/en/latest/getting_started/starter_example/ LlamaIndex預設會使用OpenAI的Indexing功能去做文字的索引,以下為一個官方的範例,使用之前需要先安裝llama-index套件 接著下載數據並且放到data資料夾內,然後設定環境變數 設定環境變數的方法為到專案內新增.env檔案,並在其中設定OPENAI_API_KEY(可以到這邊申請) 接著新增一個檔案名為starter.py,內容如下: 此時文件結構應該像下面這樣子 執行之後,可以看到程式載入了data內的資料,呼叫https://api.openai.com/v1/embeddings來做詞嵌入的動作 以下是訊息中的一些重要部分: 上面這些訊息則代表已經生成了storage資料夾,儲存詞嵌入的結果 使用索引的資料詢問問題 下面這樣簡短的程式碼可自動載入”./storage”內的嵌入檔案,並且將嵌入的檔案和詢問的問題傳送給OpenAI API的https://api.openai.com/v1/chat/completions文字生成機器人 則可看到得到的回應如下: The author worked…
混淆矩陣 混淆矩陣(Confusion Matrix)是一種評估分類模型性能的工具,特別適用於監督學習中的分類問題。它能夠幫助你了解模型在不同類別上的預測結果,並提供更多信息來評估模型的準確性。 混淆矩陣是一個方陣,其中每一行代表實際的類別,每一列代表模型預測的類別。以下是一個二元分類問題的混淆矩陣範例: 預測為正類 (Positive) 預測為負類 (Negative) 實際為正類 (Positive) 真正類 (TP) 偽負類 (FN) 實際為負類 (Negative) 偽正類 (FP) 真負類 (TN) 準確率(Accuracy) 預測正確的樣本數量與總樣本數量之比 Accuracy= (tp+tn)/(tp+fp+fn+tn) 精確率(Precision)…
甚麼是LangChain LangChain是根據大型語言模型(LLM) 打造應用程式的框架。LangChain使用基礎鏈來建立由 LLM(大型語言模型)支援的應用程式。這些基本鍊是模組化構建塊,用於在應用程式中執行特定任務。 LangChain 是用於開發由語言模型驅動的應用程式的框架。 教學資源 鏈結構介紹 鏈( Chains )是一個非常通用的概念,它指的是將一系列模組化組件(或其他鏈)以特定方式組合起來,以實現共同的用例。 LLMChain(單鏈) 類別說明: https://api.python.langchain.com/en/latest/chains/langchain.chains.llm.LLMChain.html 最常用的鏈類型,它結合了PromptTemplate(input)、Model(LLM)和Guardrails(output)來接收用戶輸入,進行相應的格式化,將其傳遞給模型並獲取回應,然後驗證和修正(如果需要)模型的輸出。 SequentialChain(循序鏈) 類別說明: https://api.python.langchain.com/en/latest/chains/langchain.chains.sequential.SequentialChain.html 同一次的詢問,至少兩次的與LLM交互,把複雜的問題拆解成小的問題,然後再輸出回應 這邊是一篇說明文章:https://blog.csdn.net/wangjiansui/article/details/137509565 總之就是讓輸入到輸出之間串聯多個LLM系統並依序執行 以下是如何使用 SequentialChain 的一些範例: TransformChain(轉換鏈)…
17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。
如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!