GLM 5.3 Uncensored: Messages и Chat Completions
Подключение обеих GLM 5.3 через LLMsRelay: ключи, денежный баланс, cURL, Python, TypeScript, стриминг, веб-поиск и вызов инструментов.
LLMsRelay - независимо управляемый API-шлюз, не связанный с Anthropic, PBC и не одобренный ею. Названия продуктов и моделей используются только для описания совместимости.
1. Аккаунт, баланс и ключ
- Войдите в LLMsRelay. Если аккаунта нет, зарегистрируйтесь, затем вернитесь в раздел оплаты Uncensored.
- Пополните отдельный денежный баланс GLM на $45, $100, $500 или $1 000. Зачисление 1:1 в USD, без регистрационных, реферальных и промобонусов. Стандартные пакеты API-эквивалента этот баланс не пополняют.
- В API Keys создайте ключ группы GLM 5.3. Скопируйте секрет при создании и храните локально. Используйте полный sk- ключ из нашего кабинета, а не ключ другого сервиса.
- Проверьте денежный баланс и оставшийся лимит ключа. Положительного стандартного баланса недостаточно. У ключа одна группа; для одновременной работы с Claude, GPT и GLM создайте отдельные ключи.
2. Выбор публичного model ID
| Публичный model ID | Контекст, токены | Вход |
|---|---|---|
| glm-5-3-uncensored | 262,144 | Текст и изображения |
| glm-5-3-uncensored-1m | 1,000,000 | Только текст |
curl https://api.llmsrelay.com/v1/models \
-H "Authorization: Bearer $LLMSRELAY_API_KEY"3. Безопасное хранение ключа
Задайте LLMSRELAY_API_KEY в локальной оболочке или менеджере секретов. В примерах заглушка: заменяйте её локально, никогда в общем чате, URL, клиентском коде браузера или репозитории. В base URL Anthropic SDK не добавляйте /v1, а OpenAI SDK требует /v1 ровно один раз.
export LLMSRELAY_API_KEY="YOUR_LLMSRELAY_KEY"4. Messages в формате Anthropic
Messages использует x-api-key и anthropic-version. Поле max_tokens обязательно. Читайте текстовые блоки response.content, а не choices. Системная инструкция передаётся в поле system верхнего уровня. Для модели 1M замените только model на glm-5-3-uncensored-1m.
curl https://api.llmsrelay.com/v1/messages \
-H "x-api-key: $LLMSRELAY_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5-3-uncensored",
"max_tokens": 512,
"system": "You are a concise assistant.",
"messages": [
{
"role": "user",
"content": "Explain what an API gateway does."
}
]
}'5. Chat Completions в формате OpenAI
Chat Completions использует Authorization: Bearer. Системную инструкцию передавайте сообщением system, текст ответа читайте в choices[0].message.content. Указывайте точный публичный model ID. GET /v1/models показывает модели действительного оплаченного ключа; при нулевом доступном остатке возможен 402.
curl https://api.llmsrelay.com/v1/chat/completions \
-H "Authorization: Bearer $LLMSRELAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5-3-uncensored",
"max_tokens": 512,
"messages": [
{
"role": "system",
"content": "You are a concise assistant."
},
{
"role": "user",
"content": "Explain what an API gateway does."
}
]
}'6. SDK для Python и TypeScript
Установите только нужный SDK. Ключ храните в серверном окружении. Anthropic SDK возвращает блоки content, OpenAI SDK возвращает choices. Для 1M в этих примерах достаточно изменить публичный model ID.
pip install anthropic openaiimport os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ["LLMSRELAY_API_KEY"],
base_url="https://api.llmsrelay.com",
)
response = client.messages.create(
model="glm-5-3-uncensored",
max_tokens=512,
messages=[{"role": "user", "content": "Hello!"}],
)
print("".join(block.text for block in response.content if block.type == "text"))import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["LLMSRELAY_API_KEY"],
base_url="https://api.llmsrelay.com/v1",
)
response = client.chat.completions.create(
model="glm-5-3-uncensored",
max_tokens=512,
messages=[{"role": "user", "content": "Hello!"}],
)
print(response.choices[0].message.content)npm install @anthropic-ai/sdk openaiimport Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: process.env.LLMSRELAY_API_KEY,
baseURL: "https://api.llmsrelay.com",
});
const response = await client.messages.create({
model: "glm-5-3-uncensored",
max_tokens: 512,
messages: [{ role: "user", content: "Hello!" }],
});
for (const block of response.content) {
if (block.type === "text") console.log(block.text);
}import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.LLMSRELAY_API_KEY,
baseURL: "https://api.llmsrelay.com/v1",
});
const response = await client.chat.completions.create({
model: "glm-5-3-uncensored",
max_tokens: 512,
messages: [{ role: "user", content: "Hello!" }],
});
console.log(response.choices[0].message.content);7. Claude Code и совместимые IDE
Для Claude Code используйте отдельный GLM-профиль или оболочку с переменными ниже. Не перезаписывайте чужие профили без проверки. В этом профиле уберите конфликтующий ANTHROPIC_AUTH_TOKEN. Задайте GLM для основных и быстрых моделей, чтобы клиент не запрашивал Claude с GLM-ключом. В Cline, Roo Code или Continue выберите OpenAI Compatible, base URL https://api.llmsrelay.com/v1, GLM-ключ и один из публичных ID. Совместимость инструментов зависит от клиента; перед длинной сессией проверьте короткий запрос.
export ANTHROPIC_BASE_URL="https://api.llmsrelay.com"
export ANTHROPIC_API_KEY="$LLMSRELAY_API_KEY"
export ANTHROPIC_MODEL="glm-5-3-uncensored"
export ANTHROPIC_DEFAULT_OPUS_MODEL="glm-5-3-uncensored"
export ANTHROPIC_DEFAULT_SONNET_MODEL="glm-5-3-uncensored"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="glm-5-3-uncensored"
export ANTHROPIC_SMALL_FAST_MODEL="glm-5-3-uncensored"
# Only in this dedicated GLM shell/profile:
unset ANTHROPIC_AUTH_TOKEN
claude8. Стриминг (SSE)
Добавьте stream:true и используйте curl -N. В Chat Completions накапливайте choices[].delta.content и фрагменты аргументов tool_calls до [DONE]. stream_options.include_usage:true запрашивает итоговый блок usage; в нём choices может быть пустым.
Messages отправляет именованные события message_start, content_block_delta, message_delta и message_stop. Отдельно обрабатывайте текст, thinking и JSON инструментов. Проверяйте события error даже при HTTP 200: открытый поток ещё не означает успешное завершение. Не склеивайте сырой SSE как обычный JSON.
curl -N https://api.llmsrelay.com/v1/chat/completions \
-H "Authorization: Bearer $LLMSRELAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5-3-uncensored",
"max_tokens": 512,
"messages": [
{
"role": "system",
"content": "You are a concise assistant."
},
{
"role": "user",
"content": "Explain what an API gateway does."
}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'curl -N https://api.llmsrelay.com/v1/messages \
-H "x-api-key: $LLMSRELAY_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5-3-uncensored",
"max_tokens": 512,
"system": "You are a concise assistant.",
"messages": [
{
"role": "user",
"content": "Explain what an API gateway does."
}
],
"stream": true
}'9. Встроенный веб-поиск
Встроенный поиск выполняется удалённо, локальная функция web_search не нужна. В Chat Completions добавьте web_search_options:{}, в Messages используйте версионированный инструмент ниже. Обе модели поддерживают эти форматы, в том числе SSE.
Сохраняйте метаданные цитат, URL и блоки результатов серверных инструментов. До ответа может прийти несколько событий поиска. Проверяйте, что поиск действительно выполнен, и изучайте источники: уверенный текст сам по себе не подтверждает обращение к интернету.
Собственные функции и встроенный Chat-поиск вызывайте отдельными запросами, пока совместная работа не проверена для вашего клиента. Принятие обоих параметров не доказывает выполнение обоих инструментов.
curl https://api.llmsrelay.com/v1/chat/completions \
-H "Authorization: Bearer $LLMSRELAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5-3-uncensored",
"max_tokens": 2048,
"messages": [
{
"role": "user",
"content": "Search the web for recent Python releases. Cite your sources."
}
],
"web_search_options": {}
}'curl https://api.llmsrelay.com/v1/messages \
-H "x-api-key: $LLMSRELAY_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5-3-uncensored",
"max_tokens": 2048,
"system": "You are a concise assistant.",
"messages": [
{
"role": "user",
"content": "Search the web for recent Python releases. Cite your sources."
}
],
"tools": [
{
"type": "web_search_2025_03_05",
"name": "web_search",
"max_uses": 3
}
]
}'10. Собственные функции и инструменты
Опишите функцию через JSON Schema и дождитесь её вызова моделью. Ваш сервер проверяет аргументы, выполняет разрешённое действие и передаёт результат обратно. Не исполняйте произвольные shell-команды и непроверенные аргументы модели.
Chat: добавьте сообщение assistant с tool_calls, затем role:tool для каждого tool_call_id. Messages: добавьте полный content ответа assistant, затем user с блоками tool_result и соответствующими tool_use_id. Сохраняйте thinking и подписи, если они присутствуют. Продолжайте до текстового ответа, поддерживайте несколько вызовов и ограничьте число итераций.
Примеры ниже показывают форму продолжения, а не рабочий сервис погоды. Подставьте реальные ID вызовов, полный ответ assistant и проверенный результат локальной функции. При SSE сначала соберите все фрагменты аргументов и только потом разбирайте JSON.
curl https://api.llmsrelay.com/v1/chat/completions \
-H "Authorization: Bearer $LLMSRELAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5-3-uncensored",
"max_tokens": 512,
"messages": [
{
"role": "user",
"content": "What is the weather in Paris?"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather for a city",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
]
}
}
}
]
}'# messages for the next Chat request; use the ACTUAL assistant message and call ID:
[
{"role":"user","content":"What is the weather in Paris?"},
{"role":"assistant","content":null,"tool_calls":[
{"id":"ACTUAL_CALL_ID","type":"function","function":{"name":"get_weather","arguments":"{\"city\":\"Paris\"}"}}
]},
{"role":"tool","tool_call_id":"ACTUAL_CALL_ID","content":"{\"temperature_c\":18}"}
]curl https://api.llmsrelay.com/v1/messages \
-H "x-api-key: $LLMSRELAY_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5-3-uncensored",
"max_tokens": 512,
"system": "You are a concise assistant.",
"messages": [
{
"role": "user",
"content": "What is the weather in Paris?"
}
],
"tools": [
{
"name": "get_weather",
"description": "Get current weather for a city",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
]
}
}
]
}'# messages for the next Messages request; preserve the ACTUAL full assistant content:
[
{"role":"user","content":"What is the weather in Paris?"},
{"role":"assistant","content":[
{"type":"tool_use","id":"ACTUAL_TOOL_USE_ID","name":"get_weather","input":{"city":"Paris"}}
]},
{"role":"user","content":[
{"type":"tool_result","tool_use_id":"ACTUAL_TOOL_USE_ID","content":"{\"temperature_c\":18}"}
]}
]11. Рассуждения и структурированный ответ
В Chat используйте reasoning_effort, например high; в Messages: output_config.effort или thinking.budget_tokens. include_reasoning:false скрывает рассуждения, но не отменяет их стоимость. Выделяйте выходные токены и на рассуждения, и на ответ. Ниже показан JSON Schema для Chat; проверяйте полученный JSON в приложении. Для нестандартных полей используйте extra_body в Python или прямой HTTP-запрос.
curl https://api.llmsrelay.com/v1/chat/completions \
-H "Authorization: Bearer $LLMSRELAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5-3-uncensored",
"max_tokens": 2048,
"messages": [
{
"role": "user",
"content": "Return a short greeting as JSON."
}
],
"reasoning_effort": "high",
"include_reasoning": false,
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "greeting",
"strict": true,
"schema": {
"type": "object",
"properties": {
"greeting": {
"type": "string"
}
},
"required": [
"greeting"
],
"additionalProperties": false
}
}
}
}'12. Подсчёт токенов, кеш и изображения
Перед длинным запросом вызовите POST /v1/messages/count_tokens с той же моделью и входом. Это оценка входных токенов, а не будущего ответа или итоговой цены. Общий вход и выход должны укладываться в контекст модели.
Стабильные инструкции и схемы инструментов размещайте в начале. Попадание в кеш не гарантировано при каждом повторе. Проверяйте чтение кеша в usage. Запись кеша тарифицируется как вход, рассуждения входят в стоимость выхода.
Изображения принимает только glm-5-3-uncensored. В Chat используйте image_url, в Messages блок image с поддерживаемым URL или base64. Модель 1M работает только с текстом и отклоняет изображения с HTTP 400.
curl https://api.llmsrelay.com/v1/messages/count_tokens \
-H "x-api-key: $LLMSRELAY_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5-3-uncensored",
"messages": [
{
"role": "user",
"content": "Explain what an API gateway does."
}
]
}'13. Диагностика ошибок
| Статус / симптом | Что проверить |
|---|---|
| 401 | Полный ключ LLMsRelay, заголовок и переменную окружения. Раскрытый ключ замените. |
| 403 / модель недоступна | Выберите группу GLM 5.3 и проверьте разрешённые модели ключа. Ключи Basic и Codex не дают доступ к GLM. |
| 402 / insufficient_credits | Денежный баланс GLM И лимит ключа. Средств должно хватить на предварительный резерв, включая max_tokens. Уменьшите выходной бюджет или пополните баланс. |
| 400 | Model ID, JSON, max_tokens и схему инструмента. Для 1M уберите изображения. |
| 404 / неверный путь | Messages: /v1/messages. Chat: /v1/chat/completions. Уберите дублирующий /v1. |
| 429 | Учитывайте Retry-After, ограничьте параллельность и повторы с экспоненциальной задержкой. |
| 5xx / ошибка SSE | Сохраните request ID, проверьте завершающее событие потока. При повторении обратитесь в поддержку. Повторный запрос может оплачиваться отдельно. |
| Баланс недоступен | Не повторяйте оплату и не считайте баланс нулевым. Дождитесь проверки или обратитесь в поддержку. |
14. Особенности Responses
Для этого гайда предпочтительны Messages и Chat Completions. Нативный Codex использует Responses; настройка OpenAI-совместимой IDE не равна настройке Codex CLI.
GLM Responses не хранит состояние: previous_response_id не поддерживается. Передавайте предыдущие input/output и function_call_output явно.
При проверках 9 октября 2026 года Responses веб-поиск базовой модели в SSE завершался ошибкой, а без стриминга работал. Для поиска предпочтительны Chat и Messages. У 1M Responses возвращались URL источников, но отсутствовали итоговые аннотации цитат.
Это наблюдения о совместимости, а не гарантия каждого будущего запроса. Обрабатывайте ошибки и проверяйте конкретный клиент. Нагрузочные проверки полного контекста и всех сторонних клиентов не проводились.
15. Конечные тарифы в USD
USD за 1 миллион токенов, конечные цены для клиента. Дополнительный множитель к таблице не применяется. Фактические входные, выходные и кешированные токены списываются с отдельного денежного баланса GLM. Бонусов в этом флоу нет.
| Модель | Вход | Выход | Чтение кеша | Запись кеша |
|---|---|---|---|---|
| glm-5-3-uncensored | $4.00 | $12.00 | $0.40 | $4.00 |
| glm-5-3-uncensored-1m | $12.00 | $20.00 | $1.20 | $12.00 |
Пополнить баланс GLM
Пополните отдельный денежный баланс GLM на $45, $100, $500 или $1 000. Зачисление 1:1 в USD, без регистрационных, реферальных и промобонусов. Стандартные пакеты API-эквивалента этот баланс не пополняют.
Пополнить баланс GLM