ユーザーごとにLLMのAPIキーやモデル設定を管理する機能を設計します。これにより、複数ユーザーが同一のコーディングエージェントを使用する際に、各ユーザーの設定を個別に管理できます。
- REST API: コーディングエージェントからの設定取得
- Streamlit管理画面: ブラウザからの設定管理
- Active Directory認証: 企業環境での認証連携
- データベース管理: SQLAlchemyによる設定の永続化
flowchart TD
subgraph External[外部システム]
AD[Active Directory]
GitHub[GitHub/GitLab]
end
subgraph UserConfigAPI[ユーザー設定API]
FastAPI[FastAPI Server<br/>ポート: 8080]
Streamlit[Streamlit App<br/>ポート: 8501]
DB[(SQLite/PostgreSQL)]
end
subgraph CodingAgent[コーディングエージェント]
Consumer[Consumer]
end
User[ユーザー] -->|ブラウザ| Streamlit
Streamlit -->|認証| AD
Streamlit -->|CRUD| DB
Consumer -->|設定取得| FastAPI
FastAPI -->|読み取り| DB
Consumer -->|タスク処理| GitHub
- FastAPIサーバー(ポート8080): 設定取得API
- Streamlitサーバー(ポート8501): 管理画面
- データベース: SQLite(開発)またはPostgreSQL(本番)
ユーザー名を指定して設定を取得します。
- メソッド: GET
- パス: /api/v1/config/{username}
- 認証: APIキー認証
サーバーの状態を確認します。
- メソッド: GET
- パス: /health
設定取得APIは以下の情報を返します:
- llm_provider: LLMプロバイダー
- openai_api_key: OpenAI APIキー(暗号化解除済み)
- openai_model: OpenAIモデル
- ollama_endpoint: Ollamaエンドポイント
- ollama_model: Ollamaモデル
- lmstudio_base_url: LM StudioベースURL
- lmstudio_model: LM Studioモデル
flowchart TD
A[ログイン] --> B{認証成功?}
B -->|Yes| C[ダッシュボード]
B -->|No| A
C --> D[ユーザー管理]
C --> E[個人設定]
D --> F[ユーザー一覧]
D --> G[ユーザー追加]
D --> H[ユーザー編集]
E --> I[プロファイル]
E --> J[LLM設定]
E --> K[API設定]
システムの概要情報を表示します:
- 登録ユーザー数
- アクティブセッション数
- システム状態
管理者がユーザーを管理する画面です:
- ユーザー一覧表示
- ユーザー追加
- ユーザー編集
- ユーザー削除
ユーザーが自身の設定を管理する画面です:
- プロファイル編集
- LLM設定(プロバイダー、モデル選択)
- APIキー設定(暗号化保存)
sequenceDiagram
participant User as ユーザー
participant Streamlit as Streamlit
participant Auth as AuthService
participant AD as Active Directory
participant DB as Database
User->>Streamlit: ログイン
Streamlit->>Auth: authenticate(username, password)
Auth->>AD: LDAP認証
AD-->>Auth: 認証結果
alt 認証成功
Auth->>DB: ユーザー情報取得/作成
Auth-->>Streamlit: セッショントークン
Streamlit-->>User: ログイン成功
else 認証失敗
Auth-->>Streamlit: エラー
Streamlit-->>User: ログイン失敗
end
config.yamlのad_authセクションで以下を設定します:
- enabled: AD認証の有効/無効
- server: ADサーバーアドレス
- domain: ADドメイン
- base_dn: ベースDN
- user_filter: ユーザー検索フィルター
erDiagram
users {
int id PK
string username UK
string email
string display_name
bool is_admin
datetime created_at
datetime updated_at
}
user_configs {
int id PK
int user_id FK
string llm_provider
string openai_api_key
string openai_model
string ollama_endpoint
string ollama_model
string lmstudio_base_url
string lmstudio_model
datetime created_at
datetime updated_at
}
users ||--o| user_configs : has
ユーザー情報を管理します:
- id: 主キー
- username: ユーザー名(一意)
- email: メールアドレス
- display_name: 表示名
- is_admin: 管理者フラグ
- created_at: 作成日時
- updated_at: 更新日時
ユーザーごとの設定を管理します:
- id: 主キー
- user_id: ユーザーID(外部キー)
- llm_provider: LLMプロバイダー
- openai_api_key: OpenAI APIキー(暗号化)
- openai_model: OpenAIモデル
- ollama_endpoint: Ollamaエンドポイント
- ollama_model: Ollamaモデル
- lmstudio_base_url: LM StudioベースURL
- lmstudio_model: LM Studioモデル
APIキーはFernetを使用して暗号化して保存します。暗号化キーは環境変数または設定ファイルで管理します。
Streamlitのセッション管理機能を使用してユーザーセッションを管理します。セッションタイムアウトは設定可能です。
- FastAPI: APIキー認証
- Streamlit: Active Directory認証またはローカル認証
- 管理機能: 管理者ロールによるアクセス制御
user_config_apiセクションで以下を設定します:
- enabled: ユーザー設定API機能の有効/無効
- fastapi_port: FastAPIサーバーポート(デフォルト: 8080)
- streamlit_port: Streamlitサーバーポート(デフォルト: 8501)
- database_url: データベース接続URL
- encryption_key: APIキー暗号化キー
docker-compose.ymlに以下のサービスを追加します:
- イメージ: プロジェクトのDockerfile
- コマンド: uvicornでFastAPIサーバーを起動
- ポート: 8080
- ボリューム: データベースファイル
- イメージ: プロジェクトのDockerfile
- コマンド: streamlit runでStreamlitアプリを起動
- ポート: 8501
- ボリューム: データベースファイル
sequenceDiagram
participant Consumer as Consumer
participant API as FastAPI
participant DB as Database
participant LLM as LLMClient
Consumer->>Consumer: タスク取得(ユーザー情報含む)
Consumer->>API: GET /api/v1/config/{username}
API->>DB: 設定取得
DB-->>API: 設定データ
API-->>Consumer: 設定(APIキー復号化済み)
Consumer->>LLM: 設定を適用してLLMクライアント初期化
ユーザー設定が取得できない場合は、config.yamlのデフォルト設定を使用します。
パスワード認証機能の追加に伴い、既存の users テーブルに4つのカラムが追加されています。
新規インストールでは自動的に全カラムが作成されるため、マイグレーション作業は不要です。
既存環境をアップグレードする場合のみ、以下の手順を実施してください。
| カラム | 型 | デフォルト値 | 説明 |
|---|---|---|---|
auth_type |
VARCHAR(20) |
'ldap' |
認証タイプ("ldap" または "password") |
password_hash |
VARCHAR(255) |
NULL |
bcryptハッシュ化パスワード |
password_must_change |
BOOLEAN |
FALSE |
初回ログイン時のパスワード変更要求フラグ |
password_updated_at |
DATETIME |
NULL |
パスワード最終更新日時 |
user_config_api/app/commands/migrate_password_auth.py を使用して既存DBを自動更新できます。
cd user_config_api
# ドライラン(実際の変更なし・確認のみ)
DATABASE_URL=sqlite:///./data/users.db python app/commands/migrate_password_auth.py --dry-run
# 実際のマイグレーション実行
DATABASE_URL=sqlite:///./data/users.db python app/commands/migrate_password_auth.py# 実行中のuser-config-apiコンテナでマイグレーションを実行
docker compose exec user-config-api python app/commands/migrate_password_auth.py
# ドライラン(確認のみ)
docker compose exec user-config-api python app/commands/migrate_password_auth.py --dry-run# PostgreSQL接続URLを指定して実行
DATABASE_URL=postgresql://user:password@localhost/dbname python app/commands/migrate_password_auth.py
# または環境変数を設定してから実行
export DATABASE_URL=postgresql://coding_agent:password@localhost:5432/coding_agent
python app/commands/migrate_password_auth.py# コマンドライン引数で直接URLを指定する場合
python app/commands/migrate_password_auth.py --database-url sqlite:///./data/users.dbマイグレーション完了後、以下のSQLでカラムが追加されたことを確認できます。
# SQLite の場合
sqlite3 data/users.db ".schema users"
# PostgreSQL の場合
psql -U coding_agent -d coding_agent -c "\d users"スクリプトを使わずにSQLで直接マイグレーションすることもできます。
ALTER TABLE users ADD COLUMN auth_type VARCHAR(20) NOT NULL DEFAULT 'ldap';
ALTER TABLE users ADD COLUMN password_hash VARCHAR(255) NULL;
ALTER TABLE users ADD COLUMN password_must_change INTEGER NOT NULL DEFAULT 0;
ALTER TABLE users ADD COLUMN password_updated_at DATETIME NULL;ALTER TABLE users ADD COLUMN IF NOT EXISTS auth_type VARCHAR(20) NOT NULL DEFAULT 'ldap';
ALTER TABLE users ADD COLUMN IF NOT EXISTS password_hash VARCHAR(255) NULL;
ALTER TABLE users ADD COLUMN IF NOT EXISTS password_must_change BOOLEAN NOT NULL DEFAULT FALSE;
ALTER TABLE users ADD COLUMN IF NOT EXISTS password_updated_at TIMESTAMP NULL;マイグレーション後、管理者はStreamlitのユーザー管理画面から auth_type=password のユーザーを追加できます。
コマンドラインから作成したい場合は create_admin.py を使用してください(管理者はLDAP認証のみ)。
cd user_config_api
# LDAP認証タイプの管理者を作成
python app/commands/create_admin.py --username admin --display-name "管理者"文書バージョン: 2.1
最終更新日: 2026-03-07
ステータス: 実装済み