前言
現在很多企業都在使用 Retrieval Augmented Generation(RAG),
先把各個文件先切一段一段(例如 利用各種 Library 將文件讀進來,再將 200 個字,每段又 overlap 50 個字)轉成 embeddings 再放到 embeddings 資料庫,
這裡會使用到 LLM 的 embeddings model ,例如 text-embedding-ada-002
。
當使用者輸入問題後,同時也將這個問題轉成 embeddings ,再與 embeddings 資料庫找相似度,例如使用 BM25 來比較。
取得相似度高的內容後,再呼叫 GPT-3.5 Turbo
轉成較口語化的回答內容。
這麼多的 Task ,現在可以透過 kernel-memory 來達成,
以下就來看看它有多簡單 ^_^
實作
以下 VSCode 建立 ipynb
檔,並用 AOAI 及 OpenAI 來測試,
建立 .env
檔案,並放入相關的設定值,如下,
1 | AOAI_APIKEY=你的AOAI API Key |
1.加入套件
1 |
|
2.透過 OpenAI 建立知識庫(存在 Memory 之中)
1 | var openaiApikey = env["OPENAI_APIKEY"]; |
3.透過 AOAI 建立知識庫(存在 Memory 之中)
1 | var embeddingDeployment = env["EMBEDDING_DEPLOYMENT"]; |
上述設定好之後,透過 ImportDocumentAsync 就幫我們做到,
取出文件的內容,
將文件的內容切成一段段易於搜尋,
將一段段的內容透過 embedding model 來轉成 embedding,
將這些內容存在 Memory 之中(目前是使用 MemoryServerless)
3.分別詢問 OpenAI 及 AOAI
1 | var answer = await memory.AskAsync("請問洗牙有什麼規定"); |
OpenAI (Embeddings + GPT-3.5 Turbo)結果如下,
AOAI (Embeddings + GPT-4)結果如下,
比較起來,OpenAI 似乎比 AOAI 來的簡潔一些,
另外筆者覺得利害的地方是,洗牙的同義詞是建立在 qa.docx 文件之中,
但是 kernel-memory 卻可以將它們與其他文件關連起來找出對應的內容,
參考資源
kernel-memory
Understanding the BM25 Ranking Algorithm
OpenAI Assistants API 初體驗