2024/10/13
Semantic Kernelを使う(6)
Semantic KernelでRAG(Retrieval-Augmented Generation)を実現するために、試行錯誤を継続しています。以前のブログでは、Semantic KernelのPlugin機能を用いましたが、今回はMemory機能を使いました。このシリーズの1回目、2回目でもMemory機能を使いましたが、簡単な文をMemory登録しただけで、長いテキスト文書を試していませんでした。
今回は長い文章を使って検証しました。題材は、以前のブログで使った『注文の多い料理店』の全文です。動かしたプログラムは以下の通り。11行目でテキスト文書をKernel Memoryに登録しています。
using Microsoft.KernelMemory;実行結果は以下の通りで、問題なく正解を導けました。
using dotenv.net;
dotenv.net.DotEnv.Load();
var env = dotenv.net.DotEnv.Read();
var memory = new KernelMemoryBuilder()
.WithOpenAIDefaults(env["OPENAI_API_KEY"])
.Build<MemoryServerless>();
await memory.ImportDocumentAsync("chumon.txt", documentId: "doc001");
var question = "料理店の札には何という店名が書かれていましたか";
var answer = await memory.AskAsync(question);
Console.WriteLine($"Question: {question}\n\nAnswer: {answer.Result}");
次の題材も以前のブログでお話しした、私のブログ内容のテキストデータです。実行結果は以下の通りで、正しい回答を導くことはできませんでした。同じテキストデータで、文章の長さ(容量)が多いだけという認識ですが、詳しい調査ができていないので、原因は分かりません。
今回、Semantic KernelのMemory機能でRAGを導入しようとしましたが、結果が中途半端なので引き続き調査を行っていこうと思います。
コメント