メモ

ローカルAI開発記録①|画像生成とAIチャットを自分用に作っています

今回から、自分用のローカルAIアプリを作っている記録を残していこうと思います。

作っているのは、画像生成アプリと、キャラクターとの会話を楽しむAIチャットアプリです。AIに開発を手伝ってもらいながら、使いたい機能や画面のイメージを少しずつ形にしています。

この記事では、まず何を作っているのか、今どこまでできているのかをまとめます。連載では実際のUIや処理の流れ、保存の境界、失敗と確認方法まで掘り下げ、同じような開発に取り組む方の参考になる記録を残していきます。

作りたいのは、家のPCとスマホから使える自分用AI

目指しているのは、自分のPCで動かすAIを、PCだけでなく同じ家庭内ネットワークにつないだスマホからも使えるようにすることです。

画像生成では、日本語でイメージを入力し、AIが変換したプロンプトを確認してから画像を作ります。チャットでは、人物や世界観を設定して、会話や物語を続けられるようにしています。

スマホ側でAIを動かす仕組みではなく、生成を担当するのはPCです。そのため、PCが停止している間は新しい画像や会話を生成できません。

最初に作ったのは画像生成アプリ

画像生成側では、すでに使っているStable Diffusion WebUI Forgeと連携する形にしています。日本語の入力から英語のタグを作る部分には、ローカルで動くOllamaを利用しています。

現在は、日本語からのプロンプト変換、タグや重みの編集、モデルやLoRAの選択、生成前の確認、生成履歴からの条件再利用などに対応しています。

AIが出した案をそのまま使うだけではなく、自分で確認して直せるようにしているのがポイントです。文章や生成画像をレビューしてもらい、改善案の差分を確認して採用したり、適用を元に戻したりする機能も追加しました。

次に、キャラクターと会話するAIチャットを追加

チャット側は、複数のキャラクター、舞台、世界観のルールなどを設定して遊ぶロールプレイ向けのアプリです。会話を進めるだけでなく、前の発言から別の流れを試す分岐や、応答の再生成も用意しています。

特に大切にしているのは、AIがプレイヤーの台詞や行動、判断を勝手に決めないことです。人物の設定を渡す部分や、会話・分岐を保存する部分は、できるだけアプリ側でも支える方針にしています。

表示も、会話全体が完成してから一度に出る形から、生成途中の文字が順番に流れてくるストリーミング表示へ変更しました。キャラクター名や吹き出しを分けながら、返答ができていく途中から読めるようにしています。

今は画像生成とチャットを別アプリにしています

もともとは画像生成とチャットを一つのアプリにまとめていましたが、現在はLocalImageStudioとLocalAIChatという二つのアプリに分けています。

アプリ主な役割
LocalImageStudio画像の生成、プロンプト編集、モデル選択、履歴やレビュー
LocalAIChatキャラクター設定、会話、世界観、分岐や記憶の管理

それぞれの設定やデータ、更新する場所を分けるための整理です。ただし、同じPCや一部の共通基盤を使っているため、片方の変更がどんな場合も影響しない、という意味ではありません。

まだ、全部が完成したわけではありません

チャットは日本語での自然さやキャラクターらしさ、返答の速さを見ながら調整を続けています。長く会話したときの設定や記憶の崩れ、似た返答の繰り返しなども、今後確認していく課題です。

スマホ向けの画面や起動の仕組みも整えていますが、PC上でスマホ幅の表示を確認することと、実際の端末でキーボードや画面回転まで確認することは分けて記録しています。試験に通った範囲だけで、すべて完成したことにはしないようにしています。

音声読み上げや会話に合わせたシーン画像、動画生成も将来の候補です。ただ、これらは今回紹介した機能と同じように使える段階ではなく、具体的な方法や順番はこれから詰めていく部分です。

これからの開発記録について

今後は、どんな機能を追加したのか、思ったとおりに動かなかったところは何か、どう直したのかを、区切りごとに残していこうと思います。

まずは画像生成とAIチャットの二つが、現在の開発の中心です。使いたい形を言葉にして、動くものを確認しながら、少しずつ整えていきます。

画像生成:日本語入力と結果領域(PC)
画像生成:日本語入力と結果領域(PC)。10/16の画像UI改修を確認した実装画面。隔離した検証データ・モック動作で、実生成結果ではありません。 画像を押すと原寸を開けます。
AIチャット:会話背景・人物欄・入力欄(PC)
AIチャット:会話背景・人物欄・入力欄(PC)。代表画像改修の実装検証画面。幾何学模様はテスト画像です。生成中や実会話のスクリーンショットではありません。 画像を押すと原寸を開けます。

構成の見取り図

層担当所有・境界
スマホ/PCReact画面・PWA入力と表示。推論はPC側
HTTPS入口Caddy二つのアプリで共通
AIチャットFastAPI・SQLite人物・会話・記憶・分岐
画像生成FastAPI・SQLiteタグ・条件・画像・履歴
推論基盤Ollama/Forge共有PC・GPU。アプリの独立更新とは別
開発記録をもとにした説明用の整理表です。

構成と使用技術を先に整理する

画面はReact 19.1.0・TypeScript 5.8.3・Vite 6.3.5、APIはPython 3.10.6・FastAPI 0.115.12・Uvicorn 0.34.2を使用しています。保存はSQLiteとSQLAlchemy 2.0.43、入出力の型と制約はPydantic 2.11.7です。これらは10月18日の開発資料で確認した版で、最新推奨版の一覧ではありません。

ブラウザー/PWA → CaddyのHTTPS入口 → LocalAIChatまたはLocalImageStudio → Ollama/Forge、という順に要求が流れます。画面がスマホにあっても推論は自宅PCで行います。チャットは人物・記憶・会話の枝、画像側はタグ・生成条件・画像履歴を所有し、DBと更新単位を分けています。

今回の連載ではソースコードを公開せず、代わりに入力と出力、保存するタイミング、失敗したときの扱い、確認条件を説明します。同じ構成をコピーするためだけでなく、別のアプリでも設計を比較できる記録にしたいからです。

画面写真の読み方

掲載する写真は、自作アプリの実装済みUIに検証用データを表示したものです。画像生成の10/16改修と、チャットの代表画像改修に関する保存済みの検証画面を使用します。現在の独立アプリそのものを新たに撮影した写真ではないため、旧名称や統合版のメニューが写っています。

模擬の背景や人物、モック変換はレイアウトを説明するための素材です。実際の生成品質・モデル性能・個人の会話を示す画像ではありません。各図にも時点と確認条件を添えます。

-メモ