はじめに
LLM最近流行ってるじゃん、なんかやってみたくなっちゃったんだよね。
疑似人格を作ってその疑似人格に従って応答するようなLLMがあったら令和版伺か作れるじゃん?
あれは人工無能ベースだったけど、人工知能ベースで作り変えるのよさそう。
ベースコンセプト
なにがなんでもローカルで動かす人工知能のお友達を作るというコンセプトでやっていく。
一応OpenAIに5$課金したけど、ローカルで動くに越したことはないじゃん?確かにOpenAIのほうが安くてパワーあるかもだけどさ。
んなわけでやっていきます。
環境
ハードウェア | 名称 |
---|---|
OS | Microsoft Windows 11 Pro |
CPU | AMD Ryzen 7 1800X Eight-Core Processor |
GPU | NVIDIA GeForce GTX 1080 Ti |
ソフトウェア名称 | 用途 |
---|---|
Ollama | LLMランタイム |
OpenWebui | ChatGPTのようなチャットベースでLLMをいい感じに呼び出してくれるやつ。主にプロンプトエンジニアリングが出てきた3章で使って、プロンプトエンジニアリングとは何ぞやを学んだ。 |
LLMモデル | Gemmaとかをベースにしたモデルや未検閲モデルなんかを使って遊んだりした。 |
LLMの人格設定
とりあえず名前はアテリナにしようと思う。きっと俺よりは頭がいいはずなので、女神のアテナ(知恵や戦略)から取った。
この擬似人格の意図としては特にこれと言った理由はないんだけど、人格あったほうが丁寧に接していけそうだからね。
んで、このエージェントはプログラムと連携することを念頭に置いてJSON形式で質問に回答するという方法をとる。
とりあえずこのあたりにあるような方法を使った。
ただし、これでも壊れたjsonを吐き出してくることがあるので、json_repairというライブラリも併せて使うことにする。
第1章~第3章
LLMの概要からプロンプトエンジニアリングといった内容が書かれているので、OpenWebuiでいい感じに学習していくだけ。
システムプロンプトの役割といい感じのシステムプロンプトをググりまくって書いてみた。そこそこの量になった。(キャラクターの設定資料ってこういう風に書くんだなぁってなってた。多分違うけど)
こんな風にプロンプトをいじってJSONで返却するようになった。
ちゃんとキャラの設定を把握しながら発言してくれている。
あと、将来的にはできればVRMのモデルを感情パラメータを使って動かしたいので、感情パラメータ(喜怒哀楽+困惑)も出力するようにしてみた。
試しに、システムプロンプトの無効化(プロンプトインジェクション)も試みるなどした
無効化できた!やったね!セキュリティって大事だね。
一応これでプロンプトエンジニアリングができる(入門)と言っても差し支えなさそうな気がしてきた。
4章 LangChainの基礎
とりあえずここからPython、LangChainが出てくる。
本の内容をとりあえずOllamaに変えて読んでいった。
目標はLangChainそのものの使い方というよりはRAGをいい感じにやれたらいいなって感じ。
Langchainの使い方を何となく理解したので、Embeddedモデルでテキストをベクトル化(辞書化)して辞書を引くという部分だけ独立でやったところ
うまく引けてる。てかこれだけでもかなり十分だよねw
感情パラメータがどういう風に設定されたのか、という説明文(アテリナの気持ち)を出力するようにしてみた。
マジで第二種電気工事士試験の学科に関する質問に答えられるやつできるじゃんこれw
ただ、一般用電気工作物と自家用電気工作物の定義説明は資料内に入れてなかったから真逆のこと言ってるけどね。あと受電電圧も200Vじゃなくて600Vだけど、これも定義に入ってないから仕方ない。
とはいえですよ、これだけ精度が高く結果を得られるなら定義の説明をしっかり書いておいてやればいいってわけですよね。
マジで普通にやばいじゃん(語彙力がLLM未満)
ってわけで次はLCELの章に入るのでまたいずれ。