簡単なチャットプログラム
C#のプログラミングについての話題ですので、ご興味ない方はスルーしてください。
Llama系のLLMを動かすのにllama.cppというC++で書かれたプログラムを使用しますが、それをC#でも使いやすくしてくれてるのがllamaSharpになります。
スゴく便利なものを作成してくださった方に感謝。
C#のプログラミングにはVisualStudioを使用します。商用じゃなく個人で使用するんやったらVisual Studio Communityを無料で使用できます。
1.ダウンロードしてVisualStudioを使用できる前提でお話しします。まず最初にC#のコンソールアプリのプロジェクトを作成します。プロジェクトの名前とか適当につけて場所を決めちゃってください。
2.次にメニューの「ツール」⇒「NuGetパッケージマネージャ」⇒「ソリューションのNuGet管理」を開きます。参照でllamaで検索するとLLamaSharp本体とCPU用、Cuda(GPU)用のBackendが出てきますがまずはLLamaSharp.Backebd.CpuをNuGetします。CPUは遅いのでCUDA(GPU)を使いたいところですがあるものをインストールしないとCUDAが動きませんので次回説明しますね。
3.インストールしたいパッケージを選ぶと右側に下の図のようなインストール画面が出てきますのでプロジェクトにチェックを入れてインストールボタンを押します。LLamaSharp本体とLLamaSharp.Backebd.Cpuをインストールしてください。
4.下記がLLMをただ動かすだけのチャットプログラムです。LM StudioでダウンロードしたLLMを使用しますので各々の環境に応じたLLMモデルの場所を書き換えてくださいね。
using LLama.Common;
using LLama;
// LLMモデルの場所
string strPath = @"E:\lm-studio\mmnga\ArrowPro-7B-KillerWhale-gguf\ArrowPro-7B-KillerWhale-Q8_0.gguf";
Console.ForegroundColor = ConsoleColor.Green;
ModelParams modPara = new(strPath);
using LLamaWeights llmWeit = LLamaWeights.LoadFromFile(modPara);
using LLamaContext llmContx = llmWeit.CreateContext(modPara);
InteractiveExecutor itrEx = new(llmContx);
ChatSession chtSess = new(itrEx);
var varHidewd = new LLamaTransforms.KeywordTextOutputStreamTransform(["User:", "Assistant: "]);
chtSess.WithOutputTransform(varHidewd);
InferenceParams infPara = new()
{
Temperature = 0.6f,
AntiPrompts = new List<string> { "User:" }
};
while (true)
{
// ユーザーのターン
Console.ForegroundColor = ConsoleColor.White;
Console.Write("\nUser: ");
string strInput = Console.ReadLine() ?? "";
ChatHistory.Message msg = new(AuthorRole.User,"User: " + strInput);
if (strInput == "exit") break; // 'exit'と入力したら終わり
// AIのターン
Console.ForegroundColor = ConsoleColor.Yellow;
await foreach (string strAns in chtSess.ChatAsync(msg, infPara))
{
Console.Write(strAns);
}
}
5.前々回の記事で使ったArrowPro-7B-KillerWhaleです。専門的な知識が豊富なのでエロ以外では全然使える優秀なLLMです。関西の観光スポットを聞いてみました。