refactor: migrate Deposit Agent from Assistants API to direct function calling

- Replace OpenAI Assistants API with direct function calling (AI Gateway)
- Add action-based parameters to manage_deposit tool (like manage_domain)
- Export executeDepositFunction for direct use in openai-service.ts
- Add formatDepositResult function for consistent response formatting
- Remove DEPOSIT_AGENT_ID dependency (no longer needed)
- Update CLAUDE.md documentation

Benefits:
- Bypasses regional restrictions via AI Gateway
- 100% consistent response formatting
- No Assistants API costs
- Faster execution (no thread creation)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
kappa
2026-01-18 11:59:43 +09:00
parent 1baeb0f04c
commit edbd790538
3 changed files with 166 additions and 53 deletions

View File

@@ -208,7 +208,7 @@ Telegram Webhook → Security Validation → Command/Message Router
| `index.ts` | Worker 진입점, Email Handler | `fetch()`, `email()` |
| `openai-service.ts` | AI 응답 + Function Calling | `generateResponse()`, `executeFunctionCall()` |
| `summary-service.ts` | 프로필 시스템 | `updateSummary()`, `getConversationContext()` |
| `deposit-agent.ts` | 예치금 에이전트 (Assistants API) | `callDepositAgent()`, `executeDepositFunction()` |
| `deposit-agent.ts` | 예치금 함수 (코드 직접 처리) | `executeDepositFunction()` |
| `security.ts` | Webhook 보안 | `validateWebhook()`, `checkRateLimit()` |
| `commands.ts` | 봇 명령어 | `handleCommand()` |
| `telegram.ts` | Telegram API | `sendMessage()`, `sendTypingAction()` |
@@ -223,7 +223,7 @@ Telegram Webhook → Security Validation → Command/Message Router
| 문서 | `lookup_docs` | Context7 | 문서, 사용법, API |
| 도메인 | `manage_domain` | 코드 직접 처리 → Namecheap | 도메인, 네임서버, WHOIS |
| 도메인 추천 | `suggest_domains` | GPT + Namecheap | **도메인 추천, 도메인 제안, 도메인 아이디어** |
| 예치금 | `manage_deposit` | Deposit Agent → D1 | **입금, 충전, 잔액, 계좌, 송금** |
| 예치금 | `manage_deposit` | 코드 직접 처리 → D1 | **입금, 충전, 잔액, 계좌, 송금** |
**Data Layer (D1 SQLite):**
| 테이블 | 용도 | 주요 컬럼 |
@@ -373,7 +373,6 @@ curl -X POST 'https://api.openai.com/v1/assistants/asst_XMoVGU7ZwRpUPI6PHGvRNm8E
| `SUMMARY_THRESHOLD` | 20 | 프로필 업데이트 주기 (메시지 수) |
| `MAX_SUMMARIES_PER_USER` | 3 | 유지할 프로필 버전 수 |
| `DOMAIN_OWNER_ID` | - | 도메인 관리 권한 Telegram ID |
| `DEPOSIT_AGENT_ID` | - | 예치금 관리 Assistant ID |
| `DEPOSIT_ADMIN_ID` | - | 예치금 관리 권한 Telegram ID |
| `WEBHOOK_SECRET` | - | Telegram Webhook 인증 (wrangler secret, Vault: telegram-bot) |
| `BANK_API_SECRET` | - | 입금 알림 API 인증 키 (wrangler secret) |
@@ -388,7 +387,6 @@ curl -X POST 'https://api.openai.com/v1/assistants/asst_XMoVGU7ZwRpUPI6PHGvRNm8E
|--------|------|-----------|----------|
| **AI Gateway** | OpenAI 프록시 | gateway.ai.cloudflare.com | 지역 제한 우회, 로그/캐시 |
| Context7 | 문서 조회 | context7.com API | - |
| Deposit Agent | 예치금 관리 | OpenAI Assistants (직접) | `asst_XMoVGU7ZwRpUPI6PHGvRNm8E` |
| Namecheap API | 도메인 백엔드 | namecheap-api.anvil.it.com | 날짜: MM/DD/YYYY → ISO 변환 |
| WHOIS API | WHOIS 조회 | whois-api-eight.vercel.app | ccSLD 미지원 |
| wttr.in | 날씨 | wttr.in | - |
@@ -408,8 +406,9 @@ URL: gateway.ai.cloudflare.com/v1/{account_id}/telegram-bot/openai/...
```
**적용 범위:**
- ✅ Chat Completions (openai-service.ts) - AI Gateway 경유
- ❌ Assistants API (deposit-agent.ts) - 직접 호출 (Gateway 미지원)
- ✅ Chat Completions - AI Gateway 경유
- ✅ 예치금 관리 - 코드 직접 처리 (Assistants API 제거)
- ✅ 도메인 관리 - 코드 직접 처리
**대시보드:** https://dash.cloudflare.com → AI → AI Gateway → telegram-bot
@@ -463,26 +462,35 @@ Content-Type: application/json
**입금 계좌:** 하나은행 427-910018-27104 (주식회사 아이언클래드)
- Vault 경로: `secret/companies/ironclad-corp`
**Deposit Agent 핵심 규칙:**
```
1. 금액 제한 없음: 1원도 입금 가능
2. 입금 신고 시 반드시 입금자명 + 금액 확인 (빠지면 물어보기)
3. "계좌번호 주세요" → get_account_info 호출
4. 자연어 금액 인식: "만원"→10000, "5천원"→5000, "삼만오천원"→35000
5. 즉시 실행: 입금자명+금액 있으면 확인 없이 바로 request_deposit 호출
6. 간편 취소: "취소해줘" → 최근 pending 자동 선택
7. 동시 요청 허용: 기존 pending 있어도 새 입금 신고 가능
**아키텍처 변경 (2026-01):** Assistants API → 코드 직접 처리
| 구분 | 이전 (Agent) | 현재 (코드) |
|------|-------------|-------------|
| 의도 파악 | Deposit Agent | 메인 AI (action 파라미터) |
| API 호출 | Agent Function Calling | `executeDepositFunction()` |
| 응답 형식 | Agent 생성 (불안정) | 코드 고정 (100% 일관성) |
| 지역 제한 | ❌ Assistants API 403 | ✅ AI Gateway 경유 |
**manage_deposit 도구 파라미터:**
```typescript
{
action: 'balance' | 'account' | 'request' | 'history' | 'cancel' | 'pending' | 'confirm' | 'reject',
depositor_name?: string, // request용
amount?: number, // request용 (자연어→숫자 변환)
transaction_id?: number, // cancel, confirm, reject용
limit?: number // history용 (기본 10)
}
```
**Deposit Agent 응답 포맷:**
**응답 포맷 (고정):**
```
잔액 조회: "현재 잔액: 10,000원"
입금 성공: "입금 확인! 5,000원 충전. 잔액: 15,000원"
입금 대기: "입금 요청 등록! 은행 확인 후 자동 충전됩니다."
잔액 조회: "💰 현재 잔액: 10,000원"
입금 성공: "입금 확인 완료! • 입금액: 5,000원 • 현재 잔액: 15,000원"
입금 대기: "📋 입금 요청 등록 (#123) • 입금액: 5,000원"
거래 내역: "#5: 입금 10원 ✓ (01/17)" (✓확인, ⏳대기, ✗취소)
```
**Deposit Agent 도구:**
**action별 처리:**
| 함수 | 설명 | 권한 |
|------|------|------|
| `get_balance` | 잔액 조회 | 모든 사용자 |