105 lines
2.4 KiB
Markdown
105 lines
2.4 KiB
Markdown
# Ponshu Room AI Proxy Server
|
||
|
||
## 概要
|
||
|
||
Ponshu Room Liteアプリのバックエンドプロキシサーバー。Gemini APIへのリクエストを中継し、以下の機能を提供します:
|
||
|
||
### 主な機能
|
||
|
||
1. **APIキー保護**
|
||
- アプリにAPIキーを埋め込まない
|
||
- サーバー側で環境変数として管理
|
||
|
||
2. **デバイスID認証**
|
||
- SHA256ハッシュ化されたデバイスIDで認証
|
||
- 未登録デバイスのアクセスを制限可能(将来実装)
|
||
|
||
3. **レート制限**
|
||
- 1デバイスあたり1日10回まで(Lite版)
|
||
- Pro版では無制限に拡張可能
|
||
|
||
4. **使用状況ログ**
|
||
- JSON形式で使用履歴を記録
|
||
- 30日以上前のデータは自動削除
|
||
|
||
## 技術スタック
|
||
|
||
- **言語**: Python 3.11
|
||
- **フレームワーク**: FastAPI
|
||
- **HTTPクライアント**: httpx
|
||
- **デプロイ**: Docker
|
||
|
||
## エンドポイント
|
||
|
||
### `GET /`
|
||
ヘルスチェック
|
||
|
||
### `GET /health`
|
||
詳細なヘルスチェック(APIキー設定状況など)
|
||
|
||
### `POST /analyze`
|
||
日本酒ラベル画像を解析
|
||
|
||
**リクエスト:**
|
||
```json
|
||
{
|
||
"device_id": "sha256ハッシュ(64文字)",
|
||
"images": ["base64エンコードされた画像1", "画像2", ...],
|
||
"prompt": "カスタムプロンプト(オプション)"
|
||
}
|
||
```
|
||
|
||
**レスポンス:**
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"name": "獺祭 純米大吟醸",
|
||
"brand": "旭酒造",
|
||
"prefecture": "山口県",
|
||
...
|
||
},
|
||
"usage": {
|
||
"today": 3,
|
||
"limit": 10
|
||
}
|
||
}
|
||
```
|
||
|
||
### `GET /usage/{device_id}`
|
||
デバイスの使用状況を取得
|
||
|
||
## 環境変数
|
||
|
||
| 変数名 | 説明 | デフォルト |
|
||
|--------|------|-----------|
|
||
| `GEMINI_API_KEY` | Gemini API Key | (必須) |
|
||
| `GEMINI_MODEL` | 使用するモデル | `gemini-1.5-flash` |
|
||
| `RATE_LIMIT_PER_DAY` | 1日あたりの制限 | `10` |
|
||
|
||
## データ保存
|
||
|
||
- 使用状況: `/app/data/usage.json`
|
||
- 30日以上前のデータは自動削除
|
||
|
||
## セキュリティ
|
||
|
||
- デバイスIDはSHA256ハッシュ化されたもののみ受け入れ
|
||
- CORS設定でオリジン制限可能
|
||
- APIキーは環境変数で管理(コードに埋め込まない)
|
||
|
||
## ローカルでのテスト
|
||
|
||
```bash
|
||
# 依存関係インストール
|
||
pip install -r requirements.txt
|
||
|
||
# 環境変数設定
|
||
export GEMINI_API_KEY="YOUR_API_KEY"
|
||
|
||
# サーバー起動
|
||
python server.py
|
||
```
|
||
|
||
http://localhost:8080 でアクセス可能
|