
這是我花了 1 天的時間寫的 1 支「語意搜尋」全端 app,主要是自己練功、做做作品,證明自己在 AI 這領域所學。雖不是現在 AI 領域很了不起的東西,但起碼是在往 AI 領域發展的路上😅
「向量式語意搜尋」本身雖然不是直接的 AI 的應用,但卻是一項 AI 應用 – RAG (retrieval augmented generation) 的重要的一部分。
現在 LLM 很強大,可以應用在問答。但訓練一個 LLM 很吃算力 (CPU, GPU),不是普通的電腦硬體能完成的,所以想訓練一個使用自己的資料集的 LLM 有困難。
幸好有人研究出可以在輸入提示詞 (prompt) 給 LLM 前,加上一些上下文 (context) 資訊,LLM 就能輸出高品質的生成內容,如此一來就不一定要去訓練 LLM。
而 RAG 就是一種利用此類所謂的提示詞工程 (prompt engineering) 的方式。首先它將特定領域文字知識庫轉成多維向量的庫,再利用相近向量有相近「語意」的特性,做到「 語意搜尋」。比如給一個句子,將它轉成向量,再從向量庫找相近向量其對應的語句,就是找出相近語意的搜尋!
所以,RAG 的使用者輸入了一個問題,然後 RAG 程式利用語意搜尋先找出相關資料,再將原問題與相關資料一併輸入 LLM,讓它輸出高品質的答案!因此「向量式語意搜尋」是 RAG 重要的一部分。
我之前有用 ChatGPT 做過一個簡易 RAG。不過這次我想練功,就沒用 ChatGPT 寫主要的程式碼。這次我寫了向量搜尋的部分,相較於之前簡易 RAG 的向量搜尋,有更多的改進,比如使用 PDF 文件輸入 PyMuPDF, 向量資料庫 Qdrant, AI app 開發框架 LangChain,並且也作前後端分離式設計,前端 JS / Vue、後端 Python / FastAPI,並且使用 Docker Compose 一鍵啟動。
原始碼:
https://github.com/MrMYHuang/demo_langchain_vec
下圖是我的 app demo。
我的履歷又能記上一筆😆