Skip to content

LLM 設定

Doggy はグラフィカルな LLM 設定管理システムを提供し、マルチベンダー、マルチモデル、マルチロールの柔軟な設定とランタイムでの動的切り替えをサポートし、AI 機能に統一されたモデル基盤を提供します。

概要

LLM 設定システムは src/Service/Platform/Llm/ にあり、Symfony AI Bundle の Platform 設計理念を参考にしています:

  • マルチベンダー対応: OpenAI、Azure、Anthropic、Ollama、カスタム OpenAI 互換ゲートウェイ
  • グラフィカル管理: YAML ではなく、管理画面で動的に管理
  • ロール分離: 設定と用途を分離し、ロールがモデルをバインド
  • 鍵の暗号化: API Key を暗号化して保存し、フロントエンドには触れさせない

データモデル

LlmProvider(ベンダー設定)

フィールドタイプ説明
namestring表示名("GPT-4o" など)
providerstringベンダー識別子: openai / anthropic / azure / ollama / custom
modelstringモデル名: gpt-4o / claude-3-5-sonnet / ...
apiKeyencryptedAPI Key(暗号化保存)
apiEndpointstringエンドポイントURL(任意)
optionsJSON追加パラメータ: temperature, max_tokens, top_p など
isEnabledboolean有効かどうか
sortOrderintソート順

LlmRole(ロール/用途)

フィールドタイプ説明
codestringロールコード: view_editor / entity_generation / workflow_analysis / query_assistant / chat / coding
labelstring表示名
providerIdUUIDバインドするモデル設定
systemPrompttextこのロールのシステムプロンプト
optionsJSONロールレベルのパラメータオーバーライド
isEnabledboolean有効かどうか

ロール用途計画

ロール code用途推奨モデル
view_editorビューデザイナーの AI アシスタントgpt-4o / claude-3.5-sonnet
entity_generationAI アシストエンティティ生成gpt-4o-mini
workflow_analysisワークフロー分析と提案gpt-4o
query_assistant自然言語 → データクエリgpt-4o-mini
chat汎用 AI 対話アシスタントgpt-4o-mini
codingコード生成(Twig/JS/PHP)gpt-4o / claude-3.5-sonnet

呼び出しチェーン

LlmRouter::chatByRole(roleCode, messages, opts)
  ├─ 查询 LlmRole(code) → 获取绑定的 LlmProvider
  ├─ LlmGatewayFactory::create(provider) → 实例化适配器
  ├─ 解密 API Key(LlmEncryptor)
  └─ 调用 LLM API(支持工具调用、流式响应)

LlmGatewayFactory

LlmProvider.provider フィールドに基づいてアダプターを自動ルーティングします:

providerアダプター説明
openaiOpenAiGatewayOpenAI 互換インターフェース
anthropicAnthropicGatewayAnthropic Claude API
azureAzureGatewayAzure OpenAI
ollamaOllamaGatewayローカル Ollama
customCustomGatewayカスタム OpenAI 互換ゲートウェイ

フェイルオーバー

LlmRouterchatByRoleWithFallback をサポートし、メインのベンダーが失敗した場合にバックアップモデルへ自動的にダウングレードします。

管理画面

入口: システム設定 → LLM 設定/admin/platform/llm-config

一覧ページ

  • ベンダーをカード形式で表示し、1 つのベンダーが複数のモデルバリアントに対応可能
  • そのモデルをバインドしているロール/用途を直接表示
  • スイッチで有効/無効を切り替え
  • ドラッグ&ドロップで並び替え

編集フォーム

  • 名前、ベンダー、モデル、API Key(暗号化保存)、エンドポイントURL
  • ロール管理(LlmRoleType): ロールコード、システムプロンプト、モデルバインド

鍵の暗号化

LlmEncryptor はプラットフォームの暗号化キーで API Key を暗号化/復号します。キーはサーバー側のみに保存され、フロントエンドは元の Key に触れません:

php
// 存储时
$encrypted = $llmEncryptor->encrypt($apiKey);

// 调用时
$apiKey = $llmEncryptor->decrypt($provider->getApiKey());

AI アシスタントとの統合

AI アシスタント(AI アシスタント を参照)は LlmRole/LlmProvider 体系を再利用します:

前端 → POST /api/admin/ai/chat
  → LlmRouter.chatByRole(roleCode, messages)
    → 查询 LlmRole → LlmGatewayFactory → LLM API
  • API Key はサーバー側のみに保存(データベースで暗号化)
  • モデル切り替えは管理画面で完了し、コード変更不要
  • マルチベンダーは LlmGatewayFactory が自動ルーティング

関連ファイル

ファイル責務
src/Service/Platform/Llm/LlmGatewayInterface.phpゲートウェイインターフェース
src/Service/Platform/Llm/LlmGatewayFactory.phpアダプターファクトリ
src/Service/Platform/Llm/LlmRouter.phpロールルーティング + フェイルオーバー
src/Service/Platform/Llm/ModelRegistry.phpモデルレジストリ
src/Service/Platform/LlmEncryptor.phpAPI Key の暗号化/復号
src/Entity/Platform/LlmProvider.phpベンダー設定エンティティ
src/Entity/Platform/LlmRole.phpロール設定エンティティ
src/Controller/Admin/Platform/LlmConfigController.php管理画面コントローラー

MIT ライセンスでオープンソース | Copyright © 2026 Doggy