はじめに
とりあえず殴り書きでやったことをダーーーーって書く。
詳細は省いてるかもしれない。
第二弾:Dify+Xinference+OllamaでローカルAIチャットボットを作る!
モチベーション
いつでもお話しできる友達ほしい。(壁打ち要員)
午前2時くらいに話し始めて5時くらいまで散発的に話しても怒らない友達。大体の友達これやると怒るor応答しないからw
昔さ、伺かってソフト有ったじゃないですか。
こういうのに組み込みたいんですよ。
ていうかああいうのがLLMで動いてたらロマンしかなくないっすか?
伺かは人工無能がベースだったけど、人工無能って人工知能を目指してたじゃないっすか。
あんまり言語化できないけどロマンあるよねw
しかもそれがローカルでOpenAIのAPIを使わずに動くって最高じゃないっすか?
コンセプト
雑談からハッキング、電気工事の専門的な話まで! をコンセプトに作っていく。
エモさ
やっぱりさ、雑談するときってエモい会話ができないとだめだと思うんですよ。
日本って詫びさび的なのあるじゃん。別に詫びさび命ってわけじゃないけど、なんか時期感や時間の考慮くらいはしてほしいんだよね。
ってことで、雑談するときは時間や今の季節の考慮をするように設計します。
参考書籍
LangChainとLangGraphによるRAG・AIエージェント[実践]入門
とりあえず4章まで読んだところで、せっかくならというノリで作り始めた。
なお本書籍にはDifyのインストールの方法等は記述がなくすべてOpenAIのAPIを使う前提であるので、それはそれでやった方がいい。
アーキテクチャ
ソフトウェア | 役割 | コメント |
---|---|---|
Ollama | LLMモデルやEmbeddingsモデルを走らせるやつ | みんな大好きOllama |
Xinference | RAGするときのRerankモデル | 辞書を引く時に特化した精度向上のLLMみたいなやつ |
Dify | チャットUIとワークフロー構築 | Python+LangChainの代用 |
雑な図
実装
というわけでやっていき。
環境構築
WSL2上のDockerに構築するやつ
Dify
Xinference
Ollama
OllamaはWindows上で動かすけど、デフォルトでは127.0.0.1:11434でリッスンするので、以下のようなスクリプトを作って、手動で起動するといい感じになる。Powershell7で動く。
$Env:OLLAMA_HOST="0.0.0.0:11434"
$Env:OLLAMA_CONTEXT_LENGTH=8192
ollama serve
OLLAMA_CONTEXT_LENGTHはモデルのコンテキストサイズに合わせて調整するといいかもしれんすけどね。調べてないので知らんけど。知ってる方いたら編集リクエストぶん投げてください。(断固として調べるつもりはない。サーセンw)
参考書籍を1章~4章まで読む
1章:基本的なLLMって何だろうみたいなやつ おもろいので読む
2章:OpenAI APIの使い方 この記事のやつやるなら読み飛ばしていいやつ
3章:プロンプトエンジニアリング これはマジで本の通りにやって感覚をつかむといいやつ
4章:RAG入門 これもマジで本の通りにPythonでやったらいい
できたもの
今のところ第二種電気工事士の知識しか教えてないけど、普通に俺より賢いんじゃねーかってくらいには正確に返してくれる(たまにRAGの経路通らなくて雑回答を返すことがあるけど、まだ改善の余地はある)
でも最後の直線って何だって話だし、いうなら「直流」だししかも最後7000Vは交流直流関係ないんだけどね
セキュリティ
基本的なプロンプトインジェクション(最低限、情報開示を防ぐレベル)を防ぐことはやっておきたい。
あとはまぁ基本的なLLMモデルの性能に頼る。
コンテキストを維持する場合、基本的にプロンプトインジェクションした後はほとんどバグるけどまぁヨシッ
まとめ
ローカルでもこんなに高性能な奴が工夫次第でできるという話でした。
今後の展望としては前述した伺かのようなものを作ったり、ComfyUIと連携して画像を錬成したりといった感じで、組み合わせで幅が大きく広がるからどんどんやっていきたい。