[TIL][Python]線上 PDF 逐頁查看比對導入資料的小工具(Python online PDF Viewer and comparison) 跟 Python 小碎念

小專案 Online PDF Viewer and Parse Data compare:

  • https://github.com/kkdai/pdf_online_editor
  • 比對你準備要導入的檔案,透過 PyPDF 。
  • 有在使用 PDF vector embedding 的人,但是又不知道導入資料長什麼樣子,可以透過這個小工具來查看 build by streamlit。

image-20230805094306589

最近由於在弄 LangChain 花了很多時間在玩 Python ,不過很多東西之前沒注意過。這裡稍微筆記一下:

  • PyPDF2 有 CVE 問題,其實切回PyPDF
  • 可以用 pip freezepipreqs搭配使用來打造 requirements.txt
  • Heroku 可以透過 Aptfile 來達到安裝 apt get 套件的方式:
    • 導入 "url": "heroku-community/apt" buildpack
    • 加入 Aptfile 裡面放你需要的套件清單 (e.g. pyimage 需要 poppler-utils)
    • 參考: How to add apt packages to Heroku 不然就是上面的 repo 。
  • Streamlit 是個好工具,對於我這種前端小白,提供了以下一些超好用東西:

[iThome Cloud Summit 2023] 結合生成式 AI 打造有趣的 LINE Bot 應用

前言

大家好,我是 LINE 台灣的資深技術推廣工程師的 Evan Lin 。前一段時間, OpenAI 將他們知名的 GPTv3 的 NLP Model 開放出來給大家使用,並且提供一個好用的介面 ChatGPT 。 在全世界受到相當多的注意,也看到有相當多社群的開發者有分享相關的開發案例。這一次我在 iThome 舉辦的 Cloud Summit 2023 擔任講者,並且分享「結合生成式 AI 打造有趣的 LINE Bot 應用」。

議程簡介

在現今智慧手機普及的時代,LINE 已成為人們溝通的主要管道之一,而 LINE Bot 更是其中一種廣受歡迎的應用方式。本演講將探討如何結合生成式人工智慧技術,打造有趣的 LINE Bot 應用。透過深度學習模型的訓練,我們可以讓 LINE Bot 具有更智能的對話能力,甚至可以幫助使用者解決問題、提供娛樂等多種應用場景。本演講將從實際案例入手,分享如何利用生成式 AI 技術開發 LINE Bot 應用,讓您了解如何運用 AI 技術,打造具有創意及趣味性的智慧應用。

投影片

生成式 AI 浪潮下社群有許多好玩的應用

這裡分享了幾個有趣的應用,大家可以參考看看:

  • 歷史名人 Bot: 加入好友
    • 還是會真的回覆相關內容,而且很堅持講日文。 XD
  • 拼盤小幫手: 加入好友
    • 原本是命理相當有研究的社群高手,透過生成式 AI 讓他的內容更加的口語化與人性化。
  • 就可妹妹:加入好友
    • 讓生成式AI 幫你講笑話,不過好像不太好笑XD
  • Cofacts 真的假的: 加入好友
    • 透過生成式AI 快速幫使用者檢查訊息是否是假的機率。

而透過 LINE 的生態系中,有著許多文字的相關應用。有哪一些有趣的應用可能會出現呢?

訊息摘要小幫手

大家是否都有類似的問題? 常常加入一個群組內,有太多的訊息在裡面跑來跑去,一回頭來看,發現已經有太多未讀的訊息在裡面了。 常常需要進去後,慢慢地追每一個訊息來避免自己錯過太多 (FOMO) ? 大家可以參考一下這篇文章如何透過生成式AI 來打造聊天室中的訊息摘要小幫手。

透過 LangChain 來打造自主性的 LINE Bot

透過基本的生成式AI 打造一個聊天機器人之後,我們可以進階的透過一些有系統的架構來打造「自主性」的 LINE Bot 。 所謂的自主性會是什麼意思:

  • 具有基本思考與處理能力,知道資料要去哪裡尋找。
  • 有相關的記憶能力,能記住使用者的相關需求。
  • 可以有效的回覆使用者的疑問,或是可以啟動相關的服務。

這裡就要介紹如何透過 LangChain 來打造一個具有「自主性」的 LINE Bot 小幫手。

什麼是 LangChain?

要讓你的 LINE Bot 做出以上的事情,你需要很多很多的相關 Prompt 。不論是定義 LLM 的模型該如何解讀你的文字,該如何挑選即將要執行的動作,或是如何將結果作為有效的拆解,到把以往訊息得內容加以存在 Prompt 之中。

但是透過 LangChain 你可以將這些工作拆解成一個個的小方塊,讓你打造相關服務與應用的時候不用在重複使用那些的 Prompt ,就可以快速打造出來。 以下透過一些簡單的程式碼範例來講解使用了 LangChain 之後,你的程式碼會變得多簡潔。

關於如何自主性挑選適合的 Tool 去做的能力 Function Calling

這個部分很建議看一下這篇文章,裡面有相當多的說明。

透過這個流程的解釋,你可以很了解到為什麼 LLM 可以了解使用者的內容。並且知道要如何去拆解變成參數。這就是如何讓「自主性」這件事情成真的重點。

LangChain 的程式碼

根據以上的程式碼,你可以看到定義一個工具的重點,就是要跟 LLM 模型講:

  • 這麼工具是做什麼的?(他是一個查詢股價的工具)
    • "Useful for when you need to find out the price of stock. You should input the stock ticker used on the yfinance API"
  • 他需要什麼樣的參數? 你需要給定股價的 ticker
    • stockticker就是股票代號,是一個字串。

透過這些資訊 LLM 可以透過剛剛提供的有效思考來幫你查詢股票。那結果會如何呢?

透過打包 LangChain 的小工具 - EmbedChain 打造客服機器人

EmbedChain 提供一個良好的打包工具,透過 LangChain 為底層打包出相關的文件解讀的套件。他支持的文件有:

  • PDF 檔案
  • YouTube 的字幕檔案(如果有)
  • 網頁
  • 甚至是透過程式碼把相關內容丟給他

他就會針對這樣的內容,將其做過 Split 與 Embeding 之後。可以透過一問一答的方式來查詢資料。 我也將相關的資料打包成一個 LINE Bot 的套件,大家可以看一下:

透過生成式 AI 打造 LINE Bot 的小訣竅

以下開始整理一些,你在打造生成式AI的時候可能會需要知道的小訣竅:

Tip1: 加上相關規則與規範式輸出

這篇可以參考教學影片(中文)

就像一開始在使用生成式 AI 開發相關的應用一樣,所有的工程團隊都在思考如何透過有效的「咒語」(也就是 Prompt) 跟 LLM 溝通。這邊有相當多的 prompt 可以有效地讓 LLM 盡可能地依照你的要求來做事,並且遇到其他額外的要求(比如說叫他寫一首詩)能避免掉。

要注意 Prompt 使用英文的效果會最好,雖然我們經常使用母語來問答。但是要走 API 的時候,建議還是要用英文。

Tip2: 教懂你的 LLM

第二個小訣竅,就是教導大家如何讓你的 LLM 更加的聰明。 雖然我們都知道現在使用的許多 LLM 都是相當的聰明,但是經常還是需要一些敘述來讓他更聰明,能夠有效地處理使用者的疑問。

這裡的案例是使用中央氣象局的天氣資料 API 的時候,在輸入地區的時候,由於官方系統規定使用的規定的縣市名稱來輸入。不能接受其他地區的輸入。比如說:墾丁,關西.. 這些不屬於台灣縣市的輸入。 甚至是「台北縣」「台北市」,因為他給的範例只接受「臺北縣」「臺北縣」。

這時候該怎麼辦呢? 只要在說明的 Prompt 中去詳細敘述即可,因為其實 Agent 的 說明 ‘Description’ 其實就是 Prompt 。詳細更多內容也可以參考這篇文章

Tip3: 專注的小幫手

最後給予大家一些小建議,建議儘量不要讓所有功能放在一個聊天機器人上。就像是開發 App 一樣,一個好的 LINE 官方帳號應該是盡可能的滿足使用者在一個方面的需求。 如此一來能將所有使用者體驗加以優化, 比如說:

讓你的 LINE 官方帳號創業夢實現

這裡跟大家分享,在沒有生成式AI 之前,其實許多交談對話的處理上都需要使用到 NLU(自然語言理解) 的技術。但是當時的 NLU 技術其實還有相當大的限制,造成許多的流程無法有效地改善整體使用者的體驗。

透過「生成式AI」的幫助,我們相信許多的流程會變得更加的簡單,不光只是將訊息丟給 LLM 來回答而已。更可以有相關更多的相關應用,比如說:

  • 一些行事曆的相關工具類別:
    • 透過 LangChain 的幫助,你可以快速打造一些打字就輸入相關記事的內容。透過將「新增記事」打造成一個工具,來連接到你的資料庫,或是一些雲端的工具來協助紀錄事項。 但是透過 LangChain 的 Agent 技術可以快速地去開發出透過口語化文字可以快速了解使用者的需求,再也不需要透過某一些「關鍵字」的處理方式來處理需求。
  • 一些文字導覽型的應用:
    • 透過文字導覽類型的應用,原本無法做成有效的 Q&A 。但是得力於 LangChain 甚至是 EmbedChain 的應用,我們可以將相關文件導入之後。讓生成式AI 聊天機器人來協助回答問題。

最後,生成式 AI 是一個很好的工具。可以讓你的 LINE 官方帳號更加的有溫度,我們也希望每一位開發者都可以嘗試將自己的 LINE 聊天機器人來加入相關的功能,讓我們的使用者與官方帳號能夠更加的「Closing The Distance」。

LINE Developers 相關技術文件與部落格:

活動小結

感謝最後一個議程的每一位聽眾。我相信我可能是前幾位在台灣大場地講 LangChain 的講者。 但是接下來開始自主性聊天機器人(Chat Bot) 或是代理人服務(Agent) 將會是市場上一個很主流的議題。

希望每一個開發者都能透過生成式AI 打造具有溫度的 LINE 官方帳號,一起來 Closing the Distance.

立即加入「LINE 開發者官方社群」官方帳號,就能收到第一手 Meetup 活動,或與開發者計畫有關的最新消息的推播通知。▼

「LINE 開發者官方社群」官方帳號 ID:@line_tw_dev

img

關於「LINE 開發社群計畫」

LINE 於 2019 年開始在台灣啟動「LINE 開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,已經舉辦 30 場以上的活動。歡迎讀者們能夠持續回來查看最新的狀況。詳情請看:

[TIL] Knowledge Retrieval Architecture for LLM’s (2023)筆記

Knowledge Retrieval Architecture for LLM’s (2023)

在網路上尋找關於 RAG 跟 LangChain 相關的文章,偶然發現這篇好文: Knowledge Retrieval Architecture for LLM’s (2023)

摘要:

這一篇專門在講怎麼做一個 LLM Retrieval Architecture (中文不太會翻 XD) 從最簡單的 OpenAI Cookbook repo 到, RAG, RETRO 到 REALM 架構都有提到。

也有提出之前資料假象的問題,找了兩篇論文來討論 HyDEGenREAD

詳細解釋

查詢大型資料的問題:

  • 要小心 4000 token 的限制

  • Token 越多,處理速度越慢。

解決方式

img

  • (R: Retrieval)(上圖)透過外部資料的導入
  • 許多外部資料, txt/pdf/API 透過切開來後透過 Embedding 放入某些向量空間的 Embedding Store 之中。

img

  • (上圖)使用者問的問題,也透過 Embedding 來找到相關資料。 比如說: 問哪裡可以找到鍛鍊跟減肥的場地,就會跟健身房場地的「向量空間」相當的接近。
  • (A: Augment) 增強:
    • 將相關內容,跟使用者的問題,一起放在 Prompt 中去詢問。但是為了讓提問的答案效果會更好,可能需要有相關增強的相關語句。比如說:
    • 請用中文回覆
    • 請不要回覆你不知道的答案
    • 必要時候,請給我追問語句
    • 相關資料可以看: OpenAI Cookbook repo
  • G: Generative) 生成:
    • 就是把相關資料丟入 LLM 去生成解答。

優化設計

有一些方式可以優化以上的基本架構:

產生更有意義的 Retrieval 資料

  • Precise Zero-Shot Dense Retrieval without Relevance Labels: (a.k.a. HyDE: Hypothetical Document Embeddings~(HyDE).)
    • 論文摘要:
      • 本文提出了一種通過虛擬文件嵌入來解決零樣本情況下的密集檢索系統的困難。在沒有相關性標籤的情況下,HyDE通過指示模型生成虛擬文件,該文件捕捉了相關性模式,但仍然不真實且可能包含錯誤細節。然後,通過無監督對比學習的編碼器將該文件編碼為嵌入向量。該向量在嵌入空間中識別出一個近似的鄰域,根據向量相似性檢索出相似的真實文件。我們的實驗結果表明,HyDE明顯優於最先進的無監督密集檢索器Contriever,在各種任務(例如網絡搜索、問答、事實驗證)和語言(例如瑞典語、韓語、日語)上表現出強大的性能。
    • 透過 LLM 來增加文章本體的上下文,透過這樣的方式來增加整體回覆的完整性。也能進而提升回覆的正確性。
  • 名為“生成然後讀取”(GenRead): Generate rather than Retrieve: Large Language Models are Strong Context Generators
    • 論文摘要:
      • 本論文提出了一種解決知識密集型任務的新方法,該方法使用大型語言模型生成文檔,而不是使用文檔檢索器。這種方法首先給語言模型提供問題,生成相關的文檔,然後閱讀這些文檔以生成最終答案。此外,作者還提出了一種基於聚類的提示方法,從而選擇不同的提示,生成涵蓋不同觀點的文檔,從而提高答案的回收率。研究人員在三個不同的知識密集型任務上進行了廣泛實驗,包括開放領域問答、事實檢查和對話系統。其中,該方法在TriviaQA和WebQ上取得了71.6和54.4的精確匹配分數,明顯優於目前最先進的檢索-閱讀流程DPR-FiD的+4.0和+3.9,而且不需要從任何外部知識來源檢索文檔。最後,作者還演示了通過結合檢索和生成可以進一步提高模型性能。相關代碼和生成的文檔可以在https://github.com/wyu97/GenRead 找到。
    • 也是類似 HyDE 的方式,而是採取多個上下文的方式來確保內容更有意義。

相關資料

[TIL] AI安全與啟蒙時代

image-20230713095738135

從 Fast.ai 看到這篇貼文: AI Safety and the Age of Dislightenment

摘要:

嚴格AI模型授權和監控建議可能無效或產生反效果,在捍衛社會和使社會自衛之間取得平衡是微妙的。我們應主張開放、謙卑和廣泛諮詢,制定更好回應,使其與原則和價值相一致,了解更多關於這潛力的技術的過程中不斷演進。

心得:

裡面論文都是這篇: FAR (Frontier AI Regulation: Managing Emerging Risks to Public Safety) https://arxiv.org/abs/2307.03718

  1. 加強GPAI監管只會增加進入者門檻,讓競爭者更少。
  2. 規範使用會比開發對於社會安全更有幫助。
  3. 開源是可以增加多樣性並且降低大型公司的危險性。

目前的進展正因為大眾的未知與沒有監管,所以應該要謹慎避免新科技恐慌帶來的不必要的限制。 參考:歐盟監管開源人工智能的嘗試適得其反

https://www.brookings.edu/articles/the-eus-attempt-to-regulate-open-source-ai-is-counterproductive/

[LangChain] LangChain Embedding 中可能發生的問題

What is LangChain and how to use it

前提:

之前在 DeepLearning.ai 開放新的課程「LangChain Chat with Your Data」,裡面有許多相當實用的案例分享。這裡要分享一個關於容易誤解的問題。

案例一: 追求過於近似,但是卻忘記重要訊息的搜尋法

image-20230711210300257

這裡有載入四份文件,你有發現他故意重讀檔案一兩次,意圖去讓資料不正確。

image-20230711210431891

想要去查詢「是否有關於 Regression 資料在“第三章”」的時候,由於資料混亂。也會傳回第一章的結果,因為就是有混亂的問題。造成他無法注意“第三章”,而是只注意到 “regression” 這個字。

image-20230711211030414

這時候要使用 “Maximum Marginal Relevance (MMR)” 的方式來尋找資料,而不要找最接近的資料。

vectordb.max_marginal_relevance_search(query,k=2, fetch_k=3)

image-20230711211637196

query = "What is the bitcoin?" query = "What is the bitcoin?" vectordb.similarity_search(query, k=2, filter={"page": 1})

透過 filter 你可以去指定許多參數,從哪一份文件,從哪切割的內容,甚至是內容對照。

參考內容:

[好書分享]我的99個私抽屜-唐鳳的AI時代生存心法

我的99個私抽屜
唐鳳的AI時代生存心法
何もない空間が価値を生む AI時代の哲学
作者: 唐鳳  丘美珍  出版社:網路與書 

買書推薦網址:

前言:

這是 2023 年第六本讀完的書,雖然說唐鳳是近幾年算是很受注目的素人政壇人物之一,他的這些書籍其實都蠻有內容,也很推薦大家來看。

內容摘要:

臺灣數位發展部長唐鳳五歲時閱讀老子《道德經》,其中有云:「埏埴以為器,當其無,有器之用。」她自此深知「價值的產生,在於空間」之道,最終遷徙到網路世界中獨自尋思、與人協作:她與素未謀面之人共筆、共創,打造橫向溝通平台,每日結束時都將所知所得發表上線;更以自身體歷為基底,提出在AI時代生存的多元心理準備。全書以唐鳳第一視角敘事,分為「思考/學習/網路/工作/人生」五大篇章:99個唐鳳的「私抽屜」,每拉開一格,都可發現直透人心的知行祕訣,當下轉念受用!

日本人看唐鳳,就像江戶幕府時代的人,在看明治時代的人!—— 野島剛

在別人提供的知識基礎上,我會加上自己實作的經驗,
作為驗證,加深理解,或進一步擴大影響力。
我稱這樣的過程為「增幅」。

如果我能提供一個空間,甚至自己就變成一個空間、一個通道,
在「無我」的狀態下,讓眾人透過我,
完成他們在意的工作或任務,這就是我的價值。
創造一個讓眾人可以互動的空間,就變成我這輩子持續在做的事。
來拜訪我的人,帶著他們的人生經驗和夢想,提出想讓世界更好的創新思維,
而我的價值,不在於我想要完成什麼,而在於我如何幫他們做想做的事。
—— 唐鳳

心得:

之前他就任的時候,身邊有一些因為主政的政黨取向而懷疑他的能力。但是我只有在思考說:如果你的反對是因為換了一個政黨就不會,那麼你可能受到政黨取向的偏頗。蠻推薦大家可以看這一本數來更了解唐鳳,如果你想要了解他的家庭如何造就她勇敢的決定停止去學校就學,並且可以包容她的各種意見。更可以看看這本,更了解一個良好的家庭教育的想法。