Claude vs OpenAI и что дальше
Итоговый урок: чем отличаются два главных API, как писать переносимый код и куда двигаться дальше.
Anthropic и OpenAI концептуально близки (сообщения, роли, tool use, стриминг), но отличаются именами полей и формой ответа. Понимая модель «запрос-ответ», вы легко переносите код.
Карта отличий
| Аспект | Anthropic (Claude) | OpenAI (GPT) |
| Метод | messages.create | chat.completions.create |
| Системная инструкция | параметр system | сообщение role=system |
max_tokens | обязателен | необязателен |
| Текст ответа | блоки content[].text | choices[0].message.content |
| Причина остановки | stop_reason | finish_reason |
| Токены | usage.input/output_tokens | usage.prompt/completion_tokens |
| Инструменты | блоки tool_use/tool_result | tool_calls в сообщении |
Как писать переносимый код
Спрячьте провайдера за своим интерфейсом (адаптером). Бизнес-логика работает с вашими типами «сообщение/ответ», а адаптер переводит их в формат конкретного API и обратно. Тогда смена провайдера — это новый адаптер, а не переписывание приложения.
class LLMClient:
def complete(self, system, messages) -> str: ...
class AnthropicClient(LLMClient):
def complete(self, system, messages):
r = anthropic_sdk.messages.create(model=..., system=system,
max_tokens=512, messages=messages)
return "".join(b.text for b in r.content if b.type == "text")
class OpenAIClient(LLMClient):
def complete(self, system, messages):
msgs = [{"role": "system", "content": system}] + messages
r = openai_sdk.chat.completions.create(model=..., messages=msgs)
return r.choices[0].message.content
Куда двигаться дальше
- Фреймворки (например, для оркестрации цепочек и RAG) экономят шаблонный код, но сначала важно понимать, что под капотом — этому был посвящён курс.
- Агенты: циклы, где модель сама планирует и вызывает инструменты много раз подряд для решения задачи. Tool use из раздела 4 — их основа.
- RAG: углубиться в векторные БД, чанкинг, ранжирование (мост — урок про эмбеддинги).
- Структурированные пайплайны: комбинируйте детерминированный код и LLM-шаги, оценивайте качество evals.
Главное, что стоит унести из курса
- LLM API — это «запрос-ответ» без состояния; история, инструменты, стриминг — надстройки.
- Надёжность — это код вокруг модели: ретраи, фолбэки, валидация, наблюдаемость, тесты.
- Контролируйте стоимость и безопасность с самого начала, а не «потом».
Итог
- Claude и OpenAI близки концептуально; отличия — в именах полей и форме ответа.
- Адаптер за единым интерфейсом делает код переносимым между провайдерами.
- Дальше — агенты, RAG и фреймворки, но фундамент один: цикл «запрос-ответ» и инженерия вокруг него.
Проверьте себя
1. Где находится текст ответа у OpenAI и у Anthropic соответственно?
AВ обоих — в content[].text
BOpenAI: choices[0].message.content; Anthropic: блоки content[].text
COpenAI: response.text; Anthropic: choices[0]
DВ обоих — в usage
2. Как сделать код переносимым между Claude и OpenAI?
AИспользовать только один провайдер навсегда
BСпрятать провайдера за единым интерфейсом-адаптером; бизнес-логика работает с вашими типами
CКопировать код для каждого провайдера по всему проекту
DХранить ответы обоих провайдеров в кэше
3. Что лежит в основе LLM-агентов?
AКэширование промптов
BЦикл tool use: модель планирует и многократно вызывает инструменты для решения задачи
CТолько стриминг
DBatch-обработка