-
REODE: 멀티 LLM 프로바이더 SDK 호환성 점검Harness/research 2026. 3. 18. 16:32
Date: 2026-03-18
Status: In Progress
Goal: GLM-5, MiniMax, DeepSeek을 REODE LLM 인프라에 통합하기 위한 호환성 조사
1. 프로바이더별 SDK 현황
프로바이더 SDK 패키지 버전 자체 SDK OpenAI 호환 Anthropic (Claude) anthropic기존 사용 O X (독자 API) OpenAI openai>=2.0.02.21.0 설치 / 2.28.0 최신 O — Zhipu (GLM-5) zhipuai2.1.5.20250825 O O (base_url 스왑도 가능) MiniMax 없음 (openai 권장) — X O (base_url 스왑 공식 권장) DeepSeek 없음 (openai 권장) — X O (base_url 스왑)
2. REODE OpenAI Adapter 5개 메서드 호환성
REODE
OpenAIAdapter가 사용하는 5개 메서드별 호환 여부:메서드 SDK 기능 OpenAI GLM-5 MiniMax DeepSeek generate()chat.completions.create()OK OK OK OK generate_structured()수동 JSON 파싱 OK OK OK OK generate_parsed()beta.chat.completions.parse()+ PydanticOK BROKEN BROKEN BROKEN generate_stream()stream=TrueOK OK OK OK generate_with_tools()tools+tool_choiceOK OK OK OK (chat only) generate_parsed()실패 원인beta.chat.completions.parse(response_format=PydanticModel)은 OpenAI의json_schema응답 형식에 의존.
GLM/MiniMax/DeepSeek 모두json_schema미지원 →generate_parsed()호출 시 에러.- GLM-5:
json_object만 지원 (openai-agents issue #1595 확인) - MiniMax: 문서 미확인 (미지원 추정)
- DeepSeek: beta 엔드포인트에서만 제한적 지원 (standard 미지원)
3. 프로바이더별 비호환 상세
GLM-5 (Zhipu)
항목 OpenAI GLM-5 영향 json_schemaresponse_formatO X ( json_object만)generate_parsed()실패temperature 범위 (0, 2) (0, 1) 값 클램핑 필요 max_completion_tokensO 미확인 ( max_tokens사용)파라미터명 분기 stream_optionsO 미문서화 usage 추적 불가 가능 모델 ID gpt-5.4 등 glm-5, glm-5-turbo 모델명 매핑 필요 MiniMax
항목 OpenAI MiniMax 영향 json_schemaresponse_formatO 미문서화 generate_parsed()실패 추정temperature 범위 (0, 2) (0, 1] 값 클램핑 필요 presence_penaltyO 무시됨 사일런트 무시 frequency_penaltyO 무시됨 사일런트 무시 n파라미터1+ 1만 지원 복수 응답 불가 이미지/오디오 입력 O X 멀티모달 불가 function_call(deprecated)O X tools필수모델 ID gpt-5.4 등 MiniMax-M2.5 등 모델명 매핑 필요 DeepSeek
항목 OpenAI DeepSeek 영향 json_schemaresponse_formatO beta 전용 (standard X) generate_parsed()실패json_objectmodeO O (단, 프롬프트에 "json" 키워드 필수) 프롬프트 조작 필요 tool calling O deepseek-chat만 (deepseek-reasoner불가)모델별 분기 reasoning_contentX O (reasoner 모델) 응답 파싱 분기 temperature (reasoner) O 비활성 무시됨 stream_optionsO 미문서화 usage 추적 불가 가능 parallel_tool_callsO 미문서화 미지원 가능 모델 ID gpt-5.4 등 deepseek-chat, deepseek-reasoner 모델명 매핑
4. 아키텍처 결정
결정: 혼합 전략
LLMClientPort (Protocol) — 5 methods ├── ClaudeAdapter anthropic SDK (기존) ├── OpenAIAdapter openai SDK (기존) │ ├── MiniMax base_url 스왑 (자체 SDK 없음) │ └── DeepSeek base_url 스왑 + reasoner 분기 └── GlmAdapter zhipuai SDK (자체 SDK 존재)근거
- GLM: 자체 SDK(
zhipuai)가 있고, OpenAI와 다른 고유 기능(assistant, video, character)이 있으므로 별도 Adapter - MiniMax: 자체 SDK 없음, 공식적으로 OpenAI SDK 사용 권장 → OpenAI Adapter 확장
- DeepSeek: 자체 SDK 없음, OpenAI SDK 사용 권장 → OpenAI Adapter 확장 (reasoner 분기 추가)
변경 필요 파일
파일 변경 우선순위 openai_adapter.pybase_url/api_key파라미터 + 인스턴스 클라이언트 +json_schemafallbackP1 config.pyzhipu/minimax/deepseek API key + base_url 설정 P1 token_tracker.pyMODEL_PRICING/CONTEXT_WINDOW 추가 P2 runtime.py설정 기반 adapter 와이어링 P2 신규 glm_adapter.pyzhipuai SDK 기반 LLMClientPort 구현 P2
5. 핵심 해결 과제
과제 1:
generate_parsed()fallback3사 모두
json_schema미지원 → fallback 전략 필요:방안 설명 장점 단점 A: json_object+ Pydantic 수동 파싱response_format={"type": "json_object"}+model_validate_json()범용, 간단 스키마 강제 불가 B: instructor라이브러리프로바이더별 structured output 자동 처리 프로바이더 추상화 외부 의존성 C: 프롬프트 기반 JSON 추출 JSON 블록을 프롬프트로 요청 + regex 추출 의존성 없음 불안정 과제 2: 파라미터 정규화
프로바이더별로 temperature 범위, 파라미터명, 지원 여부가 다름 → Adapter 레벨에서 정규화 필요.
과제 3: 모델 ID 매핑
통일된 모델 참조 체계 필요 (예:
provider:model형식 또는 config에서 매핑).
6. 모델 정보
GLM-5
모델 파라미터 Context Input $/M Output $/M glm-5 744B MoE (44B active) 200K $0.72 $2.30 glm-5-turbo agent 최적화 200K $1.20 $4.00 MiniMax
모델 Context Input $/M Output $/M MiniMax-M2.5 205K $0.30 $1.20 MiniMax-M2.5-Lightning 205K $0.30 $2.40 MiniMax-M2.1 196K $0.27 $0.95 DeepSeek
모델 Context Input $/M Output $/M Tool Calling deepseek-chat 128K ~$0.14 ~$0.28 O deepseek-reasoner 128K ~$0.55 ~$2.19 X
7. OpenAI Agents SDK 참고
- 별도 패키지:
pip install openai-agents(v0.12.3, 2026-03-16) openai>=2.x위에서 동작하는 멀티 에이전트 오케스트레이션- 비 OpenAI 프로바이더: LiteLLM 연동 필요
- 알려진 이슈:
json_schema강제 → GLM/MiniMax 깨짐 (issue #1595) - REODE와의 관계: REODE는 자체 AgenticLoop + SubAgentManager를 가지므로 직접 사용하지 않음
8. Anthropic/OpenAI 대비 누락 기능 정밀 비교
REODE의
LLMClientPort5개 메서드 + 인프라 기능을 Anthropic/OpenAI 기준으로 비교.8.1 LLMClientPort 5개 메서드
메서드 Anthropic SDK OpenAI SDK zhipuai SDK MiniMax (via openai) DeepSeek (via openai) generate()messages.create()chat.completions.create()chat.completions.create()chat.completions.create()chat.completions.create()generate_structured()JSON 프롬프트 + 수동 파싱 JSON 프롬프트 + 수동 파싱 동일 동일 동일 (단, "json" 키워드 필수) generate_parsed()messages.parse()beta.chat.completions.parse()미지원 (json_schema X) 미지원 (json_schema X) 미지원 (standard X, beta 제한적) generate_stream()messages.stream()stream=Truestream=Truestream=Truestream=Truegenerate_with_tools()tool_usecontent blocktools+tool_callstools+tool_callstools+tool_callstools+tool_calls(chat only)8.2 인프라 기능 비교
기능 Anthropic OpenAI GLM-5 MiniMax DeepSeek Retry + Backoff REODE call_llm내장REODE OpenAIAdapter내장자체 구현 필요 openai SDK 재사용 openai SDK 재사용 Circuit Breaker REODE CircuitBreakerREODE CircuitBreaker재사용 가능 재사용 가능 재사용 가능 Fallback Chain config.FALLBACK_CHAIN config.OPENAI_FALLBACK_CHAIN 별도 체인 필요 별도 체인 필요 별도 체인 필요 Token Tracking response.usage파싱response.usage파싱response.usage파싱 (동일 형태)미확인 (usage 필드 여부) response.usage파싱Usage Pricing MODEL_PRICING dict MODEL_PRICING dict 추가 필요 추가 필요 추가 필요 Context Window MODEL_CONTEXT_WINDOW MODEL_CONTEXT_WINDOW 추가 필요 (200K) 추가 필요 (205K) 추가 필요 (128K) stream_options N/A (다른 방식) include_usage: True미문서화 미문서화 미문서화 max_completion_tokens max_tokensmax_completion_tokens미확인 ( max_tokens?)미확인 OK 8.3 핵심 누락 사항 요약
공통 누락 (3사 모두)
# 누락 영향 대응 방안 N1 generate_parsed()(json_schema)Pydantic 구조적 출력 불가 json_object+model_validate_json()fallbackN2 stream_options미문서화스트리밍 중 usage 추적 불가 가능 스트리밍 후 별도 usage 요청 또는 무시 N3 Fallback chain 미설정 모델 장애 시 자동 전환 불가 config에 프로바이더별 fallback chain 추가 N4 MODEL_PRICING/CONTEXT_WINDOW 미등록 토큰 비용 추적 + 컨텍스트 관리 불가 token_tracker.py에 모델 추가 GLM-5 고유 누락
# 누락 영향 대응 방안 G1 temperature 범위 (0,1) vs OpenAI (0,2) temperature 1.0 이상 전달 시 에러 Adapter에서 min(temp, 0.99)클램핑G2 max_completion_tokens미확인파라미터 무시 가능 max_tokens로 전환 분기G3 자체 SDK( zhipuai)의 tool_calls 응답 형태OpenAI SDK와 미묘한 차이 가능 zhipuai SDK 직접 테스트 필요 G4 assistant/video 등 고유 API REODE에서 사용 안 함 무시 MiniMax 고유 누락
# 누락 영향 대응 방안 M1 presence_penalty/frequency_penalty무시됨반복 제어 불가 문서화 + 경고 M2 n > 1미지원복수 응답 생성 불가 현재 REODE에서 미사용, 무시 M3 멀티모달 입력 미지원 이미지 분석 불가 현재 REODE에서 미사용, 무시 M4 usage 필드 반환 여부 미확인 토큰 추적 불가 가능 실제 호출 테스트 필요 DeepSeek 고유 누락
# 누락 영향 대응 방안 D1 deepseek-reasonertool calling 미지원reasoner 모델로 도구 사용 불가 deepseek-chat강제 또는 모델 분기D2 reasoning_content필드응답 파싱 시 추가 처리 필요 reasoner 응답에서 reasoning_content 분리 D3 reasoner에서 temp/top_p 비활성 파라미터 무시됨 모델별 파라미터 필터링 D4 json_object모드에서 빈 content 반환 버그JSON 파싱 실패 가능 retry + 빈 응답 체크 8.4 구현 우선순위
우선순위 작업 영향도 난이도 P1 N1: generate_parsed()fallback3사 모두 깨짐 중 P1 N4: token_tracker 모델 등록 비용 추적 저 P2 N3: 프로바이더별 fallback chain 안정성 저 P2 G1: temperature 클램핑 GLM 에러 방지 저 P3 D1: reasoner 모델 분기 DeepSeek 한정 중 P3 N2: stream usage tracking 정확한 비용 추적 중
9. 추가 조사 필요 사항
# 항목 이유 R1 zhipuai SDK의 tool_calls 응답 형태 실제 테스트 OpenAI format과 미묘한 차이 가능 R2 MiniMax usage 필드 반환 여부 실제 테스트 문서에 없음 R3 GLM-5 max_tokensvsmax_completion_tokens실제 테스트문서 불명확 R4 3사 모두 streaming tool_calls 지원 여부 실시간 도구 사용 시 중요 R5 GLM-5-turbo의 agent 최적화 구체적 차이 Zhipu 2026-03-16 출시, 상세 미공개 R6 instructor라이브러리 호환성프로바이더 추상화 대안
10. 추가 조사 결과
instructor 라이브러리 (핵심 발견)
instructor는json_schema에 의존하지 않고Mode.Tools(tool calling)로 structured output을 구현.
이 방식은 GLM/MiniMax/DeepSeek 모두 tool calling을 지원하므로 3사 모두 동작 가능.항목 값 패키지 pip install instructor지원 프로바이더 OpenAI, Anthropic, Google, DeepSeek, Mistral, Cohere + 15개 GLM/MiniMax 직접 지원 X — 공식 목록에 없음 임의 base_url from_provider("deepseek/deepseek-chat", base_url="...")형태로 가능structured output 방식 Mode.Tools(기본) — tool calling으로 JSON 추출reasoning 모델 Mode.MD_JSON— Markdown JSON 추출스트리밍 create_partial(),create_iterable()지원핵심:
generate_parsed()문제의 해결 방안으로 instructor의Mode.Tools전략을 차용 가능.
tool calling은 3사 모두 지원하므로,json_schema없이도 Pydantic 구조적 출력이 가능.MiniMax 추가 확인
- Anthropic SDK도 지원 (OpenAI SDK뿐 아니라)
- tool calling: "trigger tool calls based on provided context" — 확인됨
- usage 필드: 문서에 명시 안 됨 — 실제 테스트 필요
- streaming: 지원 (SSE)
generate_parsed()대안 전략 (수정)기존 방안에 instructor 발견을 반영:
방안 설명 장점 단점 추천 A: json_object+ Pydantic 수동 파싱response_format=json_object + model_validate_json() 간단 GLM만 지원, MiniMax 미확인 △ B: instructor라이브러리Mode.Tools로 tool calling 기반 구조적 출력 3사 모두 동작, 검증됨 외부 의존성 추가 △ C: Tool-based structured output (자체 구현) instructor의 Mode.Tools 패턴을 직접 구현 의존성 없음, 완전 제어 구현 필요 추천 D: 프롬프트 기반 JSON 추출 JSON 블록 요청 + regex 추출 의존성 없음 불안정 X 방안 C 구현 원리:
- Pydantic 모델에서 JSON Schema 추출
- 해당 스키마를
tool정의로 변환 (가짜 tool) generate_with_tools()로 호출 → LLM이 tool_call로 JSON 반환- tool_call arguments를 Pydantic으로 검증
이 패턴은 instructor가 내부적으로 하는 것과 동일하며, REODE의
generate_with_tools()가 3사 모두 동작하므로 확실함.
Sources
'Harness > research' 카테고리의 다른 글
Context Hub (chub): 코딩 에이전트의 실시간 API 문서 (0) 2026.03.23 cmux: AI 코딩 에이전트 네이티브 터미널 (0) 2026.03.23 LLM 주요 모델 가격 지도 (2026년 3월 기준) (0) 2026.03.18 Karpathy's AgentHub: 에이전트 네이티브 인프라는 DAG다 (1) 2026.03.12 Karpathy's autoresearch: MD 3개로 ML 실험 자율 수행 루프 구축 (0) 2026.03.12 - GLM-5: