Fabrice AI:當前技術實現

在上一篇文章《 Fabrice AI:技術之旅 》中,我解釋了我們構建 Fabrice AI 所經歷的循環過程。 我從使用 Chat GPT 3 和 3.5 開始。 對結果感到失望,我嘗試使用 Langchain 框架 在其上構建自己的 AI 模型,然後在他們開始使用向量資料庫並使用 4o 大幅改善結果後回到 Chat GPT。

以下是當前訓練 Fabrice AI 的流程:

  • 訓練數據(博客文章、Youtube URL、播客 URL、PDF URL 和圖像 URL)存儲在我們的 WordPress 資料庫中。
  • 我們提取數據並對其進行結構化。
  • 我們將結構化數據提供給 Open AI,以便使用 Assistants API 進行訓練。
  • 然後,Open AI 會創建一個向量存儲資料庫並進行存儲。

下面是一段結構化數據的示例。 每個內容都有自己的 JSON 檔。 我們確保不超過 32,000 個令牌的限制。

{

“id”: “1”, /編號

“日期”: “ ”,

“link”:“https://fabricegrinda.com/”, @連結

“標題”: {

“rendered”: “什麼是 Fabrice AI?”

  },

“Category”: “關於 Fabrice”,

“featured_media”: “https://fabricegrinda.com/wp-content/uploads/2023/12/About-me.png”,

“other_media”: “”,

“knowledge_type”: “博客”,

鑒於許多轉錄內容轉錄不完美,並且該博客只是 Fabrice 個人的有限代表,我們對不準確和缺失的資訊表示深表歉意。儘管如此,這是一個很好的起點,可以瞭解 Fabrice 對許多主題的看法。

}

這是當前的技術實現:

  • 面向消費者的網站託管在 AWS Amplify 上。
  • 公共網站和 Open AI 之間的整合是通過 API 層完成的,該層作為 Python API 伺服器託管在 AWS 上。
  • 我們使用 MongoDB 作為日誌來存儲公眾提出的所有問題、Chat GPT 給出的答案以及來源的 URL。
  • 我們使用各種腳本來構建來自博客、YouTube 等的數據,然後傳遞給 Open AI 進行訓練。
  • 我們使用 React-Speech Recognition 將語音查詢轉換為文本。
  • 我們還使用Google Analytics來跟蹤網站流量。

請務必注意,我們使用兩個助手:

  • 一個用於回答問題。
  • 一個用於獲取元數據 URL,即具有原始內容的博客 URL,用於在答案底部顯示源。

下一步是什麼?

  1. 語音轉文本改進

Open AI 的語音轉文本 Whisper 模型比 React 更準確。 它還支持開箱即用的多種語言,並且擅長處理混合語言語音、口音和方言。 因此,我很可能會在未來幾個月內轉向它。 也就是說,設置起來更複雜,因此可能需要一段時間。 您需要處理模型、管理依賴項(例如 Python、庫),並確保您有足夠的硬體來實現高效性能。 此外,Whisper 並不是為直接在瀏覽器中使用而設計的。 在構建 Web 應用程式時,您需要創建一個後端服務來處理轉錄,這會增加複雜性。

  • Fabrice AI 虛擬形象

我想創建一個外觀和聲音都像我的 Fabrice AI Avatar,您可以與之交談。 我評估了 D-iD ,但發現它對我來說太貴了。 Eleven Labs 僅支持語音。 Synthesia 很棒,但目前無法實時創建視頻。 最後,鑒於更合適的定價和功能,我決定使用 HeyGen

我懷疑 Open AI 會在某個時候發佈自己的解決方案,所以這項工作將是徒勞的。 我對此感到滿意,如果它出現,我會切換到 Open AI 解決方案。 在這個階段,整個練習的重點是瞭解 AI 的可能性,以及需要做多少工作才能説明我更好地瞭解這個領域。

  • 自定義儀錶板

現在,我需要運行 MongoDB 查詢來獲取當天問題和答案的摘要。 我正在構建一個簡單的儀錶板,在其中可以獲取有關每種語言的查詢數量、語音轉文本請求數量等的提取和簡單統計數據。

  • 其他數據源

我們剛剛將 FJ Labs 產品組合 上傳到 Fabrice AI。 您現在可以詢問公司是否是投資組合的一部分。 Fabrice AI 回答了公司的簡短描述和指向其網站的連結。

鑒於 Fabrice AI 收到的許多個人問題都沒有答案,我花時間在我的 50生日視頻 中手動標記了每位演講者,以提供所需的內容。

結論

根據我在過去 12 個月中在所有與 AI 相關的方面所做的所有工作,似乎有一個明確的普遍結論:您等待的時間越長,它就會變得越便宜、越容易、越好,Open AI 就越有可能提供它! 在此期間,如果您有任何問題,請告訴我。

Fabrice AI:技術之旅

正如我在 上一篇文章中提到的,開發 Fabrice AI 比預期的要複雜得多,這迫使我探索許多不同的方法。

最初的方法:Llama Index – 向量搜索

我第一次嘗試增強 Fabrice AI 的檢索能力涉及使用 Llama Index 進行向量搜索。 概念很簡單:從我的博客中獲取內容,將其轉換為 Langchain 文件,然後將這些文檔轉換為 Llama 文件。 然後,這些 Llama 文件將儲存在向量索引中,使我能夠查詢此索引以獲取相關信息。

然而,當我開始測試系統時,很明顯這種方法並沒有產生我所希望的結果。 具體來說,當我用「市場創始人犯的最大錯誤是什麼」等上下文密集型問題查詢系統時,AI 未能提供有意義的答案。 它沒有檢索我知道嵌入在數據中的細微內容,而是返回了不相關或不完整的回應。

最初的失敗使我重新考慮了我的方法。 我意識到,僅僅將內容存儲在向量索引中是不夠的;檢索機制需要理解所提問題的上下文和細微差別。 這一認識是塑造 Fabrice AI 發展的眾多經驗教訓中的第一個。

存儲知識:MongoDB 文件存儲和檢索

考慮到 Llama Index 方法的局限性,我接下來探索了在 MongoDB 中存儲 Llama 文件。 MongoDB 靈活的架構和面向文檔的結構似乎是一個很有前途的解決方案,可以管理我多年來積累的各種類型的內容。

該計劃旨在打造更具活力和回應速度的搜索體驗。 但是,這種方法很快就遇到了問題。 我曾預計搜索功能會更健壯,但未能按預期執行。 本應返回相關文件的查詢卻沒有結果或不相關內容。

這一挫折令人沮喪,但也凸顯了一個關鍵的教訓:存儲方法與檢索策略同樣重要。 我開始考慮其他選項,例如利用 MongoDB Atlas 進行向量搜索,這可能會提供我所需的精度和可擴充性。 但是,在決定採用這種替代方案之前,我想探索其他方法,以確定是否有更有效的解決方案。

元數據檢索器和向量存儲:尋求特異性

我探索的下一個途徑之一是將元數據檢索器與向量存儲結合使用。 這種方法背後的想法是對 Fabrice AI 中的大量資訊進行分類,然後根據這些類別檢索答案。 通過使用元數據構建數據,我希望提高 AI 提供具體、有針對性的答案的能力。

然而,這種方法也有其局限性。 雖然表面上看起來很有希望,但 AI 難以對所有類型的查詢提供準確的回應。 例如,當我問道:「作者樂觀嗎? 系統未能在相關內容的上下文中解釋問題。 它沒有根據元數據提供有洞察力的分析,而是返回模糊的答案或沒有答案。

這種方法教會了我寶貴的一課,讓我明白了上下文在 AI 中的重要性。 簡單地對資訊進行分類是不夠的;AI 還必須瞭解這些類別如何相互作用和重疊,以形成對內容的連貫理解。 如果沒有這種深入的理解,即使是最複雜的檢索方法也可能達不到要求。

構建知識:SummaryTreeIndex

在我繼續優化 Fabrice AI 的過程中,我嘗試了創建 SummaryTreeIndex。 這種方法旨在將所有文檔匯總為樹格式,允許 AI 流覽這些摘要並根據內容的結構檢索相關信息。

這個想法是,通過總結文檔,AI 可以快速識別關鍵點,並使用簡潔、準確的信息回應查詢。 然而,這種方法也面臨著重大挑戰。 AI 努力為複雜的問題提供有意義的答案,例如「如何在生活中做出重要決定? AI 的回答往往是膚淺或不完整的,而不是從摘要中存儲的豐富、細微的內容中提取。

這一經歷凸顯了在 AI 中平衡廣度和深度的難度。 雖然摘要可以提供高級概述,但它們通常缺乏回答更複雜問題所需的詳細上下文。 我意識到,任何有效的解決方案都需要集成詳細的內容和高級摘要,讓 AI 能夠根據需要利用兩者。

這就是為什麼在當前上線的 Fabrice AI 版本中,我讓 AI 先給出答案的摘要,然後再介紹更多細節。

擴展視野:知識圖譜索引

認識到以前方法的局限性后,我轉向了一種更複雜的方法:知識圖譜索引。 這種方法涉及從非結構化文本構建知識圖譜,使 AI 能夠進行基於實體的查詢。 目標是創建對內容的更動態和相互關聯的理解,使 Fabrice AI 能夠更有效地回答複雜、上下文繁重的問題。

儘管前景廣闊,但知識圖譜指數也面臨著重大障礙。 AI 難以產生準確的結果,尤其是對於需要深入瞭解上下文的查詢。 例如,當被問到「什麼是公平的種子和A輪估值??時,AI再次未能提供相關的答案,突顯了將非結構化文本整合到連貫知識圖譜中的困難。

這種方法雖然最終沒有成功,但為在 AI 中使用知識圖譜的挑戰提供了重要的見解。 數據的複雜性和對精確上下文的需求意味著,即使是構建良好的知識圖譜也可能難以提供所需的結果。 知識圖譜索引的另一個缺點是速度慢。 相對於 vector store 索引,獲取相關文檔的回應時間非常長。

重新評估數據:雙子座

在經歷了幾次挫折之後,我決定採取不同的方法,利用Google的AI Gemini。 這個想法是從 JSON-CSV 檔案創建數據集,然後使用這些數據訓練自定義模型 LLM。 我希望通過使用結構化數據和強大的訓練模型,我能夠克服以前嘗試中困擾的一些挑戰。

然而,這種方法也遇到了困難。 由於數據格式不正確,訓練過程已停止,這導致模型無法得到有效訓練。 這一挫折凸顯了 AI 訓練中數據完整性的重要性。 如果沒有正確格式化和結構化的數據,即使是最先進的模型也可能無法按預期執行。

這段經歷讓我考慮了使用 BigQuery 存儲 JSON 數據的潛力,從而提供了一個更具可擴展性和可靠的平臺來管理有效訓練 Fabrice AI 所需的大型數據集。

結合優勢:Langchain 文件與 Pinecone

儘管到目前為止面臨挑戰,但我決心找到一種解決方案,讓 Fabrice AI 能夠有效地存儲和檢索知識。 這個決心促使我嘗試了 Langchain 文件和 Pinecone。 該方法涉及使用 Langchain 文件和 OpenAI 嵌入創建 Pinecone 向量存儲,然後根據查詢檢索排名靠前的相似文檔。

此方法顯示出希望,尤其是當查詢包含文檔的標題時。 例如,當被問到 「幸福的關鍵是什麼 」時,AI 能夠準確地檢索和總結相關內容。 但是,仍然存在限制,尤其是當查詢缺少特定的關鍵字或標題時。

這種方法展示了結合不同技術來提高 AI 性能的潛力。 通過將 Langchain 文件與 Pinecone 的向量存儲集成,我能夠提高 AI 回應的相關性和準確性,儘管存在一些限制。

實現一致性:GPT Builder OpenAI

在探索了各種方法和技術之後,我轉向 Open AI 的 GPT Builder 來整合和完善存儲在 Fabrice AI 中的知識。 通過將所有內容上傳到 GPT 知識庫中,我旨在創建一個更加一致和可靠的平臺來檢索我的知識並與之交互。

事實證明,這種方法是最成功的方法之一,AI 能夠在一系列查詢中提供更好的結果。 這一成功的關鍵是將所有知識集成到一個單一的、有凝聚力的系統中,使 AI 在回答問題時能夠利用全部內容。

正如我在上一篇文章中提到的,我無法讓它在我的網站上運行,而且它僅適用於Chat GPT的付費訂閱者,我覺得這太有限了。 此外,雖然它更好,但我仍然不喜歡答案的品質,也不願意將其發佈給公眾。

最終改進:使用 Model 4o 的 GPT 助手

開發 Fabrice AI 的最後一塊拼圖來自使用 Model 4o 的 GPT 助手 的引入。 這種方法代表了我在整個專案中學到的一切的巔峰之作。 通過利用向量資料庫並改進提示,我的目標是在 AI 的響應中實現盡可能高的準確性和上下文理解。

這種方法涉及將我積累的所有知識上傳到向量資料庫中,然後將其用作 AI 交互的基礎。 向量資料庫允許 AI 執行更複雜的搜索,根據查詢的語義含義檢索資訊,而不是僅僅依賴關鍵字匹配。 這標誌著與以前方法相比的重大進步,使 AI 能夠更好地理解和回答複雜、細微的問題。

這種方法的關鍵創新之一是對提示的仔細優化。 通過精心製作和測試不同的提示,我能夠指導 AI 提供更準確和相關的答案。 這不僅涉及調整提示的措辭,還涉及嘗試不同的查詢構建方式以獲得最佳回應。

結果令人印象深刻。 AI 現在能夠高精度地處理各種查詢,即使問題是開放式的或需要對上下文有深入的理解。 例如,當被問到「如何做出你生命中最重要的決定? AI 提供了全面而有洞察力的答案,利用各種來源和觀點來提供全面的回應。

這一成功是數百小時工作和無數實驗的結晶。 它表明,通過將技術與改進正確結合,可以創建一個 AI,它不僅可以有效地存儲和檢索資訊,還可以以有意義的方式與信息互動。 使用 Model 4o 的 GPT 助手的開發標誌著 Fabrice AI 真正發揮作用,達到了我從一開始就設想的複雜程度和準確性。 然後,GPT Assistants API 被整合到我的博客中,以允許最終使用者以您現在在博客上看到的方式與 Fabrice AI 進行交互。

反思旅程

開發 Fabrice AI 的過程凸顯了使用 AI 的複雜性,尤其是在理解和情境化資訊方面。 它教會了我,AI 開發沒有捷徑可走——每一步、每一次反覆運算和每一次實驗都是創造真正有效的東西的必要部分。

展望未來,我很高興能繼續完善和擴展 Fabrice AI。 如上一篇文章所述,我將回顧在存在差距的情況下完成知識庫時提出的問題。 我還希望最終發佈一個互動版本,它的外觀和聲音都像我,你可以與之交談。

>