SimpleRAG-v1.0.3:增加檔案對話功能

mingupupup發表於2024-09-26

Kimi上有一個功能,就是增加檔案之後對話,比如我有如下一個私有文件:

會議主題:《如何使用C#提升工作效率》
參會人員:張三、李四、王五
時間:2024.9.26 14:00-16:00
會議內容:
1. 自動化日常任務
許多日常任務可以自動化,從而節省時間和精力。例如,如果你需要定期處理大量資料,可以使用C#編寫指令碼來自動化資料匯入、清理和分析過程。
2. 構建自定義工具
C#可以用來構建各種自定義工具,以滿足特定需求。
3. 整合現有系統
C#可以輕鬆整合現有的系統和API,從而提高工作效率。
4. 開發外掛和擴充套件
許多應用程式支援外掛和擴充套件,C#可以用來開發這些外掛,以增強現有應用程式的功能。
5. 最佳化現有程式碼
C#提供了豐富的庫和框架,可以幫助你最佳化現有程式碼,提高效能和可維護性。

我上傳這個文件之後,提問文件中的內容,如下所示:

image-20240926121012250

image-20240926121043360

image-20240926121113883

image-20240926121155095

那麼我們自己該如何實現這個功能呢?

我們之前接觸過RAG,那可以用來應對文件內容超出模型上下文的情況,但是很多時候,我們只是上傳一份簡單的文件,文件內容並不多,而且也不需要進行儲存,那麼這時候,就可以直接讀檔案內容,不用RAG。

以下是自己實現的效果:

image-20240926121558886

image-20240926121806875

image-20240926121839435

image-20240926121915911

也實現了同樣的效果。

實現要點

 public async IAsyncEnumerable<string> GetAIResponse3(string question,string filePath)
 {
     string fileContent = File.ReadAllText(filePath);
     string skPrompt = """
                        獲取到的檔案內容:{{$FileContent}}。
                        根據獲取到的資訊回答問題:{{$Question}}。
                        如果檔案內容中沒有提到,直接回答不知道。
                     """;
     await foreach (var str in _kernel.InvokePromptStreamingAsync(skPrompt, new() { ["FileContent"] = fileContent, ["Question"] = question }))
     {
         yield return str.ToString();
     }
 }

使用這個簡單的prompt即可實現。

快速體驗

我在github上釋出了依賴框架與不依賴框架的版本。解壓之後在appsettings.json檔案中填入你的api key即可開始體驗。

image-20240926144248293

SimpleRAG地址:https://github.com/Ming-jiayou/SimpleRAG

相關文章