coconut / API_REPLACEMENT_GUIDE.md
alohaboy
feat: Add LLM-based chat mode and integrate YJ pipeline
caf53ab

A newer version of the Gradio SDK is available: 6.5.1

Upgrade

OpenAI API 교체 가이드

🎯 교체 가능한 위치


📍 수정 필요한 위치

1. Import 부분 (라인 5)

# 현재
from openai import OpenAI

# 교체 시
from anthropic import Anthropic  # 예: Claude
from google.generativeai import ...  # 예: Gemini
from ... import ...  # 다른 API

2. 클라이언트 초기화 (라인 1267)

# 현재
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
MODEL = os.getenv("OPENAI_MODEL", "gpt-4o-mini")

# 예시 1: Claude로 교체
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
MODEL = os.getenv("ANTHROPIC_MODEL", "claude-3-haiku-20240307")

# 예시 2: Gemini로 교체
import google.generativeai as genai
genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
MODEL = os.getenv("GEMINI_MODEL", "gemini-pro")

# 예시 3: Ollama (로컬)로 교체
client = OpenAI(
    api_key="ollama",  # 사용 안 함
    base_url="http://localhost:11434/v1"
)
MODEL = os.getenv("OLLAMA_MODEL", "llama2")

3. API 호출 부분 (3곳)

위치 A: detect_echo_ai (라인 1565)

# 현재
response = client.chat.completions.create(
    model=MODEL,
    messages=[
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": user_prompt}
    ],
    max_tokens=200,
    temperature=0.3
)

# Claude로 교체 시
response = client.messages.create(
    model=MODEL,
    max_tokens=200,
    system=system_prompt,
    messages=[
        {"role": "user", "content": user_prompt}
    ],
    temperature=0.3
)
content = response.content[0].text  # 응답 파싱도 변경

위치 B: shape_echolalia (라인 1669)

# 현재
response = client.chat.completions.create(
    model=MODEL,
    messages=[
        {"role": "system", "content": prompt},
        {"role": "user", "content": user_input}
    ],
    max_tokens=200,
    temperature=0.7
)

# Claude로 교체 시
response = client.messages.create(
    model=MODEL,
    max_tokens=200,
    system=prompt,
    messages=[
        {"role": "user", "content": user_input}
    ],
    temperature=0.7
)
content = response.content[0].text

위치 C: generate_context_analysis (라인 2276)

# 현재
response = client.chat.completions.create(
    model=MODEL,
    messages=[
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": user_prompt}
    ],
    max_tokens=300,
    temperature=0.3
)

# Claude로 교체 시
response = client.messages.create(
    model=MODEL,
    max_tokens=300,
    system=system_prompt,
    messages=[
        {"role": "user", "content": user_prompt}
    ],
    temperature=0.3
)
content = response.content[0].text

🔧 대체 API별 가이드

옵션 1: Anthropic Claude

변경사항

# 1. Import
from anthropic import Anthropic

# 2. 클라이언트
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
MODEL = "claude-3-haiku-20240307"

# 3. API 호출
response = client.messages.create(
    model=MODEL,
    max_tokens=200,
    system=system_prompt,  # system 파라미터로 전달
    messages=[
        {"role": "user", "content": user_prompt}
    ],
    temperature=0.3
)
content = response.content[0].text  # 응답 파싱 변경

환경변수:

ANTHROPIC_API_KEY=your_key_here
ANTHROPIC_MODEL=claude-3-haiku-20240307

옵션 2: Google Gemini

변경사항

# 1. Import
import google.generativeai as genai

# 2. 클라이언트
genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
MODEL = genai.GenerativeModel("gemini-pro")

# 3. API 호출
prompt = f"{system_prompt}\n\n{user_prompt}"
response = MODEL.generate_content(
    prompt,
    generation_config={
        "max_output_tokens": 200,
        "temperature": 0.3
    }
)
content = response.text

환경변수:

GEMINI_API_KEY=your_key_here
GEMINI_MODEL=gemini-pro

옵션 3: Ollama (로컬)

변경사항

# 1. Import (OpenAI 호환 방식 유지)
from openai import OpenAI

# 2. 클라이언트
client = OpenAI(
    api_key="ollama",
    base_url="http://localhost:11434/v1"
)
MODEL = "llama2"

# 3. API 호출 (기존 코드 그대로)
response = client.chat.completions.create(
    model=MODEL,
    messages=[
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": user_prompt}
    ],
    max_tokens=200,
    temperature=0.3
)

설치:

curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama2

환경변수:

OLLAMA_MODEL=llama2

옵션 4: OpenAI 호환 API

변경사항

# 1. Import
from openai import OpenAI

# 2. 클라이언트 (base_url만 변경)
client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url="https://api.example.com/v1"  # 호환 API URL
)
MODEL = os.getenv("OPENAI_MODEL", "custom-model")

# 3. API 호출 (기존 코드 그대로)
response = client.chat.completions.create(...)

예시 서비스:

  • Together AI
  • Groq
  • Replicate
  • MindsDB

📋 체크리스트

필수 변경사항

  • Import 문
  • 클라이언트 초기화
  • API 호출 파라미터
  • 응답 파싱 로직

선택 변경사항

  • 환경변수 이름
  • 프롬프트 포맷
  • 에러 처리
  • 토큰 추정 로직

🔄 단계별 교체 가이드

Step 1: 백업

cp gradio_app.py gradio_app.py.backup

Step 2: Import 수정

# 라인 5
from openai import OpenAI
↓
from anthropic import Anthropic  # 예시

Step 3: 클라이언트 수정

# 라인 1267-1268
client = OpenAI(...)
MODEL = ...
↓
client = Anthropic(...)
MODEL = ...

Step 4: API 호출 수정

# 3곳 수정
response = client.chat.completions.create(...)
↓
response = client.messages.create(...)

Step 5: 응답 파싱 수정

# 각 호출 후
content = response.choices[0].message.content
↓
content = response.content[0].text  # Claude 예시

Step 6: 테스트

python gradio_app.py

⚠️ 주의사항

1. 응답 포맷 차이

OpenAI: response.choices[0].message.content
Claude: response.content[0].text
Gemini: response.text
Ollama: response.choices[0].message.content (호환)

2. System Prompt 처리

OpenAI: messages에 system 포함
Claude: system 파라미터로 분리
Gemini: system + user 합쳐서 prompt
Ollama: messages에 system 포함 (호환)

3. 파라미터 차이

max_tokens vs max_output_tokens
temperature: 대부분 동일

🎯 추천 교체 순서

1순위: Ollama (로컬)

장점:
- OpenAI 호환 API
- 코드 변경 최소화
- 비용 무료
- 프라이버시

단점:
- 로컬 리소스 필요
- 성능 제한적

2순위: OpenAI 호환 서비스

장점:
- 코드 변경 최소화
- 더 낮은 비용 가능
- 빠른 반응

예시:
- Groq (매우 빠름)
- Together AI (저렴)

3순위: Claude

장점:
- 성능 우수
- 긴 컨텍스트

단점:
- 코드 변경 필요
- 비용 비슷

📊 API 비교표

API 코드 변경 비용 속도 성능
OpenAI - $$$ 중간 ⭐⭐⭐⭐⭐
Claude 중간 $$$ 빠름 ⭐⭐⭐⭐⭐
Gemini 많음 $$ 빠름 ⭐⭐⭐⭐
Ollama 최소 무료 느림 ⭐⭐⭐
Groq 최소 $ 매우 빠름 ⭐⭐⭐⭐

✅ 테스트 방법

1. 단위 테스트

# detect_echo_ai 테스트
result = detect_echo_ai("아이스크림", "", "식사")
print(result)

# shape_echolalia 테스트
result = shape_echolalia("아이스크림", "L1", "식사")
print(result)

2. 통합 테스트

# 앱 실행
python gradio_app.py

# UI에서 직접 테스트
# - 텍스트 입력
# - 분석 버튼 클릭
# - 결과 확인

📄 파일 변경 목록

gradio_app.py 수정:
- 라인 5: Import
- 라인 1267-1268: 클라이언트 초기화
- 라인 1565-1573: detect_echo_ai 호출
- 라인 1669-1677: shape_echolalia 호출
- 라인 2276-2284: generate_context_analysis 호출
- 각 응답 파싱 부분

환경변수 (.env):
- OPENAI_API_KEY → 새 API 키
- OPENAI_MODEL → 새 모델 이름

API 교체 가이드 완료