# OpenAI API 교체 가이드 ## 🎯 교체 가능한 위치 --- ## 📍 수정 필요한 위치 ### 1. Import 부분 (라인 5) ```python # 현재 from openai import OpenAI # 교체 시 from anthropic import Anthropic # 예: Claude from google.generativeai import ... # 예: Gemini from ... import ... # 다른 API ``` --- ### 2. 클라이언트 초기화 (라인 1267) ```python # 현재 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) ```python # 현재 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) ```python # 현재 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) ```python # 현재 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 #### 변경사항 ```python # 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 # 응답 파싱 변경 ``` **환경변수**: ```bash ANTHROPIC_API_KEY=your_key_here ANTHROPIC_MODEL=claude-3-haiku-20240307 ``` --- ### 옵션 2: Google Gemini #### 변경사항 ```python # 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 ``` **환경변수**: ```bash GEMINI_API_KEY=your_key_here GEMINI_MODEL=gemini-pro ``` --- ### 옵션 3: Ollama (로컬) #### 변경사항 ```python # 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 ) ``` **설치**: ```bash curl -fsSL https://ollama.com/install.sh | sh ollama pull llama2 ``` **환경변수**: ```bash OLLAMA_MODEL=llama2 ``` --- ### 옵션 4: OpenAI 호환 API #### 변경사항 ```python # 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: 백업 ```bash cp gradio_app.py gradio_app.py.backup ``` ### Step 2: Import 수정 ```python # 라인 5 from openai import OpenAI ↓ from anthropic import Anthropic # 예시 ``` ### Step 3: 클라이언트 수정 ```python # 라인 1267-1268 client = OpenAI(...) MODEL = ... ↓ client = Anthropic(...) MODEL = ... ``` ### Step 4: API 호출 수정 ```python # 3곳 수정 response = client.chat.completions.create(...) ↓ response = client.messages.create(...) ``` ### Step 5: 응답 파싱 수정 ```python # 각 호출 후 content = response.choices[0].message.content ↓ content = response.content[0].text # Claude 예시 ``` ### Step 6: 테스트 ```bash 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. 단위 테스트 ```python # detect_echo_ai 테스트 result = detect_echo_ai("아이스크림", "", "식사") print(result) # shape_echolalia 테스트 result = shape_echolalia("아이스크림", "L1", "식사") print(result) ``` ### 2. 통합 테스트 ```bash # 앱 실행 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 교체 가이드 완료*