본문 바로가기
C.W.K.
Stream
Lesson 05 of 05 · published

비교 매트릭스

~20 min · comparison, matrix, decision, portability

Level 0호기심 많은 독자
0 XP0/48 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

Provider 셋의 봉투를 나란히 깔아놓으면 표가 짧아져. 차이는 대부분 겉모습이고, 진짜는 몇 개 안 돼.

ConceptOpenAIAnthropicGemini
Tool 리스트 필드toolstoolstools (config 안)
Schema 필드parametersinput_schemaparameters (Schema object)
인자 타입JSON 문자열dictdict
Tool choice"auto"|"required"|지목type: "auto"|"any"|"tool"FunctionCallingMode enum
종료 신호response.completed + output[].typestop_reasonfunction_call part 유무
Tool 인자 streaming조각으로조각으로 (content block 단위)통째로 한 번에
기본 제공 native toolweb_search, code_interpreter, file_searchcomputer_use, text_editor, bashcode_execution, google_search
MCP 연동Apps SDK 를 거쳐Messages API 의 mcp_servers 로Vertex AI tool config 로

겉모습이 아니라 진짜 차이인 칸은 넷이야. 인자 타입 (parse 해야 하느냐 그냥 쓰느냐), streaming 동작 (조각으로 오느냐 한 번에 오느냐), 기본 제공 tool (provider 마다 자기만의 무기가 있어), 그리고 MCP 연동 방식. 겉모습 차이는 얇은 번역층으로 덮고, 진짜 차이 앞에서는 provider 별 코드가 갈리는 걸 그냥 받아들여.

유혹은 셋이 다 같은 척 거대한 추상을 짓는 거야. 버틸 수 있는 데까지 버텨. '메시지랑 tool 을 보내고, tool call 을 받고, 결과를 돌려준다' 는 모양 자체가 이미 충분히 작은 추상이거든. 여기서 더 덮으면 진짜 차이를 가리게 되고, 결국 아무도 관리하지 않는 SDK 짝퉁 하나가 남아.

Code

작은 이식용 shim — 꼭 필요한 것만·python
def normalize_tool_calls(provider, response):
    if provider == "openai":
        return [(item.name, json.loads(item.arguments)) for item in response.output if item.type == "function_call"]
    if provider == "anthropic":
        return [(b.name, b.input) for b in response.content if b.type == "tool_use"]
    if provider == "gemini":
        return [(p.function_call.name, dict(p.function_call.args))
                for p in response.candidates[0].content.parts
                if p.function_call]
    raise ValueError(f"Unknown provider {provider!r}")

External links

Exercise

위 표를 '진짜 차이' 네 줄로 줄여. 그 네 줄을 에디터 위에 (또는 loop module 맨 위 주석에) 박아둬. 이식용 hack 을 짤 때마다 그게 이 넷 중 하나인지 확인해. 맞으면 분기를 받아들이고, 아니면 shim 이 너무 새고 있다는 뜻이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.