Spaces:
Sleeping
Sleeping
upload: README.md
Browse files
README.md
CHANGED
|
@@ -1,10 +1,135 @@
|
|
| 1 |
-
---
|
| 2 |
-
title: Level Bridge Chat
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
-
colorTo:
|
| 6 |
-
sdk: docker
|
| 7 |
-
pinned: false
|
| 8 |
-
---
|
| 9 |
-
|
| 10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: Level Bridge Chat
|
| 3 |
+
emoji: 💬
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: indigo
|
| 6 |
+
sdk: docker
|
| 7 |
+
pinned: false
|
| 8 |
+
---
|
| 9 |
+
|
| 10 |
+
# Level Bridge Chat
|
| 11 |
+
|
| 12 |
+
ダッシュボードに埋め込めるチャット型広告改善提案システム。
|
| 13 |
+
|
| 14 |
+
情報量(level1〜3)に応じた2種類の返答を自動生成します:
|
| 15 |
+
- **現在の提案**: 今ある情報で出せる最善提案
|
| 16 |
+
- **次レベル予告**: 追加情報で何が可能になるかの予告
|
| 17 |
+
|
| 18 |
+
## Embedding
|
| 19 |
+
|
| 20 |
+
```html
|
| 21 |
+
<!-- 基本埋め込み -->
|
| 22 |
+
<iframe
|
| 23 |
+
src="https://your-space.hf.space?campaign_name=サマーセール&industry=EC&cvr=2.1"
|
| 24 |
+
width="420"
|
| 25 |
+
height="680"
|
| 26 |
+
style="border:none; border-radius:12px;">
|
| 27 |
+
</iframe>
|
| 28 |
+
```
|
| 29 |
+
|
| 30 |
+
### URLパラメータ(初期化)
|
| 31 |
+
|
| 32 |
+
| パラメータ | 型 | 説明 | 例 |
|
| 33 |
+
|---|---|---|---|
|
| 34 |
+
| `campaign_name` | string | キャンペーン名 | `サマーセール` |
|
| 35 |
+
| `industry` | string | 業界 | `EC` |
|
| 36 |
+
| `cvr` | number | CVR (%) | `2.1` |
|
| 37 |
+
| `ctr` | number | CTR (%) | `0.8` |
|
| 38 |
+
| `cpa` | number | CPA (円) | `3500` |
|
| 39 |
+
|
| 40 |
+
## API Endpoint
|
| 41 |
+
|
| 42 |
+
```
|
| 43 |
+
POST /api/chat/bridge
|
| 44 |
+
Content-Type: application/json
|
| 45 |
+
|
| 46 |
+
{
|
| 47 |
+
"session_id": null,
|
| 48 |
+
"message": "",
|
| 49 |
+
"dashboard_context": {
|
| 50 |
+
"campaign_name": "サマーセール",
|
| 51 |
+
"industry": "EC",
|
| 52 |
+
"metrics": { "cvr": 2.1, "ctr": 0.8, "cpa": null },
|
| 53 |
+
"image_base64": null
|
| 54 |
+
}
|
| 55 |
+
}
|
| 56 |
+
```
|
| 57 |
+
|
| 58 |
+
### Response
|
| 59 |
+
|
| 60 |
+
```json
|
| 61 |
+
{
|
| 62 |
+
"ok": true,
|
| 63 |
+
"session_id": "uuid",
|
| 64 |
+
"turn_number": 1,
|
| 65 |
+
"inferred_level": "level2",
|
| 66 |
+
"level_confidence": "high",
|
| 67 |
+
"level_reason": "at least one metric present",
|
| 68 |
+
"best_now": {
|
| 69 |
+
"summary": "...",
|
| 70 |
+
"actions": ["..."],
|
| 71 |
+
"confidence": "mid",
|
| 72 |
+
"reasoning_basis": ["cvr", "campaign_name"]
|
| 73 |
+
},
|
| 74 |
+
"next_level_preview": {
|
| 75 |
+
"current_level": "level2",
|
| 76 |
+
"next_level": "level3",
|
| 77 |
+
"needed_info": [{"key": "image_base64", "label": "クリエイティブ画像", "example": "バナー画像"}],
|
| 78 |
+
"what_will_be_possible": ["クリエイティブ要素の具体的改善提案"],
|
| 79 |
+
"expected_impact": "..."
|
| 80 |
+
},
|
| 81 |
+
"follow_up_question": "..."
|
| 82 |
+
}
|
| 83 |
+
```
|
| 84 |
+
|
| 85 |
+
## Level Rules
|
| 86 |
+
|
| 87 |
+
| Level | 条件 | 今できること |
|
| 88 |
+
|---|---|---|
|
| 89 |
+
| level1 | campaign_name or industry のみ | 業界仮説ベースの提案 |
|
| 90 |
+
| level2 | CVR/CTR/CPA のいずれかあり | ファネル診断・優先度付き打ち手 |
|
| 91 |
+
| level3 | image_base64 あり | クリエイティブ視覚要素の改善提案 |
|
| 92 |
+
|
| 93 |
+
Level は会話内で上方向にのみ更新されます(情報は蓄積され続けます)。
|
| 94 |
+
|
| 95 |
+
## Environment Variables
|
| 96 |
+
|
| 97 |
+
| 変数 | デフォルト | 説明 |
|
| 98 |
+
|---|---|---|
|
| 99 |
+
| `MOCK_MODE` | `true` | `true` の間はモック応答を返す |
|
| 100 |
+
| `SESSION_TTL_SEC` | `1800` | セッション有効期間(秒) |
|
| 101 |
+
| `MAX_SESSIONS` | `1000` | 最大同時セッション数 |
|
| 102 |
+
| `MAX_IMAGE_SIZE_MB` | `5` | 画像の最大サイズ(MB) |
|
| 103 |
+
| `PORT` | `7860` | サーバーポート |
|
| 104 |
+
|
| 105 |
+
## Real Implementation
|
| 106 |
+
|
| 107 |
+
`mock_responses.py` の以下の関数を実装してください:
|
| 108 |
+
|
| 109 |
+
```python
|
| 110 |
+
def level1_propose(ctx: AccumulatedContext, history: list) -> BestNow:
|
| 111 |
+
# Level 1 の実際のロジック(LLM呼び出しなど)
|
| 112 |
+
...
|
| 113 |
+
|
| 114 |
+
def level2_propose(ctx: AccumulatedContext, history: list) -> BestNow:
|
| 115 |
+
# Level 2 の実際のロジック
|
| 116 |
+
...
|
| 117 |
+
|
| 118 |
+
def level3_propose(ctx: AccumulatedContext, history: list) -> BestNow:
|
| 119 |
+
# Level 3 の実際のロジック(画像base64を ctx.image_base64 で参照)
|
| 120 |
+
...
|
| 121 |
+
```
|
| 122 |
+
|
| 123 |
+
実装後、`MOCK_MODE=false` に設定します。
|
| 124 |
+
|
| 125 |
+
## MCP Readiness
|
| 126 |
+
|
| 127 |
+
将来 MCP ツールとして公開する場合、`bridge_service.process_request()` を薄くラップするだけで対応できます。
|
| 128 |
+
Pydantic モデルがそのまま JSON Schema になります。
|
| 129 |
+
|
| 130 |
+
## Health Check
|
| 131 |
+
|
| 132 |
+
```
|
| 133 |
+
GET /healthz
|
| 134 |
+
→ {"ok": true, "sessions": 42}
|
| 135 |
+
```
|