Healthy Diet AI Agent は、Bun + TypeScript で構築された栄養・食事支援バックエンドです。チャット、食事画像解析、RAG ドキュメント知識検索、知識グラフ、および台湾衛生福利部 (MOHW) のデータ同期機能を提供します。
このリポジトリは現在、2 つのデプロイ(運用)モードをサポートしています。
health-diet-api エコシステムとの統合機能を維持BunTypeScriptExpressLangChain, LangGraph, DeepAgentsSQLite または SupabaseDocker Composeこのプロジェクトは、もともと次の 2 つのプロジェクトと組み合わせて使用するために作成されました。
PU-Hub/healthy-diet (API側プロジェクト)archie0732/healthy-diet-web (フロントエンドWebプロジェクト)その後、このリポジトリ自体に多くの注目と閲覧が集まるようになったため、プロジェクトの方向性を調整しました。元のシステムと統合する機能を維持しつつ、単独でデプロイして独立して使用できる AI エージェントサービスとして本リポジトリの整備を進めています。
sqlite または supabasehealth-diet-api に依存せず、直接単独でデプロイ可能.
├── .agents/ # エージェントのカスタムルール / 設定ファイル
├── agent_skills/ # エージェントのカスタムツール/スキルモジュール
├── data/ # ローカルデータベースディレクトリ (Standalone モードの SQLite DB 保存先)
├── docs/ # DB スキーマおよび補足ドキュメント
│ ├── sqlite/ # SQLite データベーススキーマおよびサンプルデータ
│ └── supabase/ # Supabase データベース設定およびスクリプト
├── knowledge_base/ # インジェストされたドキュメントおよび RAG データソースディレクトリ
│ ├── ingested_markdown/ # 解析済みの RAG 用 Markdown ドキュメント
│ ├── mohw_clarifications/ # 台湾衛生福利部 (MOHW) の同期データ格納先
│ ├── uploads/ # アップロードされたソースファイルのテンポラリディレクトリ
│ └── NUTRITION_RULES.md # 食事分析の基準となるガイドライン (Ground-truth)
├── raw_data/ # 生データファイルまたはスクリプト
├── scripts/ # ユーティリティスクリプト (データ前処理、バックアップなど)
├── src/ # メインソースコードディレクトリ
│ ├── config/ # アプリケーション設定 (ロガー、環境変数バリデータ)
│ ├── server/ # ビジネスロジックハンドラーおよびエージェントの実装
│ │ ├── agentRuntime.ts # コア LangChain/LangGraph エージェントランタイム設定
│ │ ├── httpRuntime.ts # HTTP サーバーランタイムの起動処理 (Bootstrap)
│ │ ├── knowledgeGraph.ts # 知識グラフの抽出および検索エンジン
│ │ ├── knowledgeIngestion.ts # ファイルアップロード、解析、埋め込みインジェスト処理
│ │ ├── mohwNews.ts # MOHW データ同期タスク
│ │ └── ragDocuments.ts # ドキュメントデータベースの CRUD およびインデクサーのルーティング
│ ├── storage/ # データベース抽象化レイヤー (SQLite および Supabase アダプター)
│ │ ├── sqlite/ # SQLite 接続およびアダプターロジック
│ │ └── supabase/ # Supabase クライアントおよびアダプターロジック
│ ├── cli.ts # コマンドラインインターフェース (CLI) のエントリポイント
│ ├── index.ts # HTTP Express サーバーのエントリポイント
│ └── serverHandlers.ts # サーバーエンドポイントのルーティングコントローラーハンドラー
├── technical_docs/ # アーキテクチャ設計書、変更履歴 (Changelog)
├── agent_config.json # エージェントの宣言的な動作制御およびデフォルトパラメータ設定
├── compose.yml # Docker Compose 設定ファイル
└── package.json # プロジェクト依存関係および実行スクリプト設定
以下のような用途に適しています: - ローカル環境でのセルフホスト - Docker を使用した直接起動 - ターミナルから直接プロンプトを実行したい場合 - 事前に Supabase を準備したくない場合
特徴:
- SUPABASE_URL および SUPABASE_SERVICE_KEY は不要
- 起動時に SQLite スキーマを自動初期化 (bootstrap)
- DB ファイルのパスは SQLITE_DB_PATH で制御
以下のような用途に適しています: - 既存の Supabase スキーマがある場合 - 元のシステムとの統合方法を維持したい場合 - このエージェントを既存システム内の 1 つのサービスとして動作させたい場合
特徴: - 既存の API ルーティングを維持 - チャット履歴、ユーザープロファイル、ドキュメントのメタデータを Supabase で永続化可能
bun install
cp .env.example .env
コアランタイム変数:
PORTAI_API_URLSTORAGE_BACKEND=sqlite|supabaseSQLITE_DB_PATHCLI_USER_IDCLI_THREAD_IDSupabase 統合モード用変数:
SUPABASE_URLSUPABASE_SERVICE_KEYGoogle モデルルーティング用変数:
GEMINI_AI_APIGEMINI_API_KEYGOOGLE_CHAT_MODELGOOGLE_BASE_URLプロジェクトレベルのエージェント動作設定(プロジェクトのルートディレクトリ):
agent_config.jsonバックグラウンド同期変数:
MOHW_NEWS_SYNC_ENABLEDMOHW_NEWS_SYNC_INTERVAL_MINUTESMOHW_NEWS_SYNC_RUN_ON_START設定の優先順位:
agent_config.json はプロジェクト全体のデフォルトの動作を提供します。.env)は、特定のデプロイにおいてデフォルト設定を上書きします。MOHW_NEWS_SYNC_ENABLED が明示的に設定されている場合、agent_config.json 内の features.mohw_enabled を上書きします。推奨される .env 設定:
PORT=8001
AI_API_URL=http://127.0.0.1:8080/v1/
STORAGE_BACKEND=sqlite
SQLITE_DB_PATH=./data/healthy-diet-agent.db
CLI_USER_ID=local-user
CLI_THREAD_ID=local-thread
HTTP サーバーの起動:
bun run start
デフォルトの URL とエンドポイント:
http://localhost:8001POST /api/chatGET /pingターミナルから直接プロンプトを送信します:
bun run cli -- --message "Analyze my lunch"
ユーザーID、スレッドID、モデルソースを指定することも可能です:
bun run cli -- --message "Give me a low sugar dinner idea" --user-id demo-user --thread-id demo-thread --model-source auto
通常、アプリ起動時に SQLite スキーマが自動的に初期化(bootstrap)されるため、手動でのテーブル作成は不要です。
事前にテーブルを作成したり、ローカルのテストデータをインポートしたりしたい場合は、以下を使用できます:
docs/sqlite/schema.sqldocs/sqlite/seed.sample.sqlお使いの環境に sqlite3 がインストールされている場合:
sqlite3 ./data/healthy-diet-agent.db < docs/sqlite/schema.sql
sqlite3 ./data/healthy-diet-agent.db < docs/sqlite/seed.sample.sql
seed.sample.sql はローカル開発用のサンプルです。インポートする前に、ファイル内のユーザー、チャットルーム、対話データを編集できます。
Docker は既定で standalone SQLite モードで動作します。
docker compose up --build
デフォルトの挙動:
- STORAGE_BACKEND=sqlite
- SQLITE_DB_PATH=/app/data/healthy-diet-agent.db
- ./data:/app/data ボリュームを介して SQLite データを永続化
一般的なマウントディレクトリ:
- ./data
- ./knowledge_base
- ./users_images
GitHub Actions、GHCR、およびセルフホストランナー(self-hosted runner)を使用した自動化された本番環境へのデプロイについては、以下を参照してください:
既存のシステムと接続する場合は、以下を設定します:
STORAGE_BACKEND=supabase
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=your-service-role-key
説明:
- 既存の API ルーティングは維持されます
- 実際のストレージ書き込みは、統合された共有ストレージレイヤーを経由します
- 既存の health-diet-api やその他の Supabase ベースのアーキテクチャへの組み込みに適しています
エージェントの役割(ペルソナ)や検索(RAG)の一般的なカスタマイズであれば、コアランタイムコードを編集することなく実施できます。
推奨されるカスタマイズ手順:
agent_config.json を編集するknowledge_base/AGENT.md を差し替えるknowledge_base/NUTRITION_RULES.md を差し替えるか、または削除するagent_config.json で mohw_news の有効/無効を切り替えるagent_config.json で制御可能な項目:
設定の優先順位:
agent_config.json はプロジェクト全体のデフォルトの動作を提供します。.env)は、特定のデプロイにおいてデフォルト設定を上書きします。MOHW_NEWS_SYNC_ENABLED が明示的に設定されている場合、agent_config.json 内の features.mohw_enabled を上書きします。POST /api/chatPOST /api/approvePOST /api/generate_titleGET /pingGET /api/rag/searchPOST /api/rag/searchGET /api/rag/documentsPOST /api/rag/documentsGET /api/rag/documents/:document_idDELETE /api/rag/documents/:document_idPOST /api/rag/documents/:document_id/reindexGET /api/rag/documents/:document_id/fileGET /api/rag/documents/:document_id/previewGET /api/rag/sources/:document_id/fileGET /api/rag/sources/:document_id/previewPOST /api/admin/knowledge/uploadPOST /api/admin/knowledge/ingest/:idGET /api/admin/knowledge/jobs/:jobIdPOST /api/graph/extract-allGET /api/graph/statusPOST /api/graph/documents/:document_id/extractGET /api/graph/documents/:document_idPOST /api/graph/searchGET /api/graph/nodesGET /api/graph/nodes/:node_idGET /api/graph/relations/:relation_id/evidencePOST /api/news/syncGET /api/newsGET /api/news/:idGET /api/news-filesdata/healthy-diet-agent.db または SQLITE_DB_PATHusers_images/knowledge_base/uploads/knowledge_base/ingested_markdown/knowledge_base/NUTRITION_RULES.mdknowledge_base/mohw_clarifications/主要なテストの実行:
bun test src/server/httpRuntime.test.ts src/storage/runtime.test.ts src/server/serverHandlers.test.ts src/server/dbTools.test.ts src/server/ragDocuments.test.ts src/cli.test.ts
すべてのテストの実行:
bun test
health-diet-api は不要です。AI_API_URL または設定された Google 接続先を介して、有効なモデルエンドポイントが利用可能である必要があります。X-Admin-User-Id および X-Admin-Role (admin または nutritionist) ヘッダーの指定が必須となりました。Authorization ヘッダーのみでは、管理者権限として認識されなくなりました。/api/chat で初期チャット履歴を作成した後に処理が失敗した場合、プレースホルダーの返信は __PENDING__ から [FAILED] ... というマーカーに書き換えられます。本プロジェクトは MIT ライセンスのもとで公開されています。詳細は LICENSE を参照してください。
$ claude mcp add healthy-diet-ai-agent \
-- python -m otcore.mcp_server <graph>