GLM Cookbook (Zhipu): путеводитель
Что внутри открытого сборника примеров GLM API от Zhipu (Z.ai): базовые вызовы через HTTP, собственный SDK и OpenAI SDK, подсчёт токенов, вызов функций, эмбеддинги, Batch API, зрение и видео, дообучение, агентные демо — с переводом ключевых примеров и упражнением «один код — разные API».
Что это и зачем
Заголовок раздела «Что это и зачем»Zhipu AI (по-русски «Чжипу»; международный бренд — Z.ai) — создатели семейства GLM и ChatGLM. GLM Cookbook сам себя называет «открытым учебником с кодом для начала работы с GLM API». Это не курс, а сборник рабочих ноутбуков: каждый показывает одну возможность API.
Для нашего курса он полезен в уроке 8.1.1: GLM — ещё один OpenAI-совместимыйOpenAI-совместимый APIEN OpenAI-compatible APIHTTP-интерфейс в формате OpenAI Chat Completions (/v1/chat/completions). Его отдают Ollama, llama-server, vLLM, SGLang, а также DeepSeek и Qwen в облаке — код клиента не меняется. провайдер. Тот же клиентский код, что для DeepSeek, Qwen или локального vLLM, работает и с GLM — меняются только адрес, ключ и имя модели.
Карта репозитория
Заголовок раздела «Карта репозитория»| Папка | Что внутри | Наш урок | Важность |
|---|---|---|---|
basic/ | 1) вызов через HTTP; 2) через собственный SDK Zhipu; 3) через OpenAI SDK; 4) как API считает токены; 5) вызов функций на примере погоды; 6) эмбеддинги; 7) встроенная база знаний для поиска; 8) Batch API (дешевле для пакетной обработки); 9) «очень человечная» ролевая модель CharacterGLM; 10) CodeGeeX для кода; 11) GLM-4.5 в Claude Code; плюс LangChain | 8.1.1, 8.3.2 | главное |
vision/ | GLM-4V: картинки, короткие видео, анализ графиков; генерация картинок CogView, видео CogVideoX (в том числе пакетная) | 9.1.1 | по теме |
finetune/ | дообучение LoRA через облачный API Zhipu | 6.2.1 | по желанию |
vibecoding/ | подключение GLM-4.5 к Claude Code и Kode через «Anthropic-совместимый» адрес | — | по желанию |
demo/ | анализ CSV, мультиролевой агент-консультант, агент TaskWeaver (Microsoft) на GLM-4, поиск с ответами, OCR, синтетические данные (SDG), извлечение информации, длинные тексты, GraphRAG, оценка суммаризации, датасет для дообучения агента ReAct, рассылка разборов статей с Hugging Face | 8.2.2, 8.3.1 | идеи для проектов |
Ключевой пример 1: GLM через OpenAI SDK (перевод glm_openai_sdk.ipynb, сокращённо)
Заголовок раздела «Ключевой пример 1: GLM через OpenAI SDK (перевод glm_openai_sdk.ipynb, сокращённо)»Ноутбук показывает, как вызывать GLM-4.5 через OpenAI SDK и экосистему вокруг него.
Шаг 1. Импортируйте OpenAI и замените base_url на https://open.bigmodel.cn/api/paas/v4/ — после этого,
указав ключ, можно пользоваться моделями GLM.
from openai import OpenAI
client = OpenAI( api_key="your api key of z.ai", # ваш ключ Z.ai / bigmodel.cn base_url="https://open.bigmodel.cn/api/paas/v4/")Шаг 2. Простой вызов GLM-4.5. Остальные возможности (например, вызов инструментов) вызываются так же, как у OpenAI.
response = client.chat.completions.create( model="glm-4.5", messages=[{"role": "user", "content": "tell me a joke"}], top_p=0.7, temperature=0.9, stream=False, max_tokens=2000,)response.choices[0].message.contentДальше в ноутбуке: тот же клиент внутри LangChain (ChatOpenAI с openai_api_base), агент LangChain с поиском Tavily,
генерация картинок client.images.generate(model="cogview-4", ...) и эмбеддинги
client.embeddings.create(model="embedding-3", input="hello"). Оговорка авторов: на вход эмбеддингов пока можно
подать только строку, не список; у генерации картинок через OpenAI-интерфейс часть параметров не поддерживается.
Ключевой пример 2: вызов функций (перевод glm_function_call.ipynb, сокращённо)
Заголовок раздела «Ключевой пример 2: вызов функций (перевод glm_function_call.ipynb, сокращённо)»Ноутбук двуязычный (китайский и английский); строки на китайском в коде ниже переведены. Цель — на инструменте «погода» показать, как модель вызывает инструменты.
Описание инструмента. Инструмент не обязан существовать на самом деле, но описание должно содержать: имя name
(его модель вернёт при вызове), описание description, параметры parameters и список обязательных required
(здесь обязателен только location).
tools = [{ "type": "function", "function": { "name": "get_current_weather", "description": "Получить погоду в указанном городе", "parameters": { "type": "object", "properties": { "location": {"type": "string", "description": "Город, например: Пекин"}, "unit": {"type": "string", "enum": ["c", "f"]}, }, "required": ["location"], }, },}]Запрос. Вопрос «Какая сегодня погода в Пекине?» (в оригинале — по-китайски) вместе с tools и tool_choice="auto".
Авторы обращают внимание: полезная часть ответа — параметры вызова (город «Пекин» и единицы) и имя функции; сам по себе
ответ ещё не даёт погоды. Функцию нужно выполнить программно и вернуть результат модели.
Выполнение и ответ. В ноутбуке get_current_weather реализована через API сервиса погоды Seniverse, затем
результат добавляется в messages с ролью tool, и модель вызывается второй раз. Итоговая последовательность, как её
формулируют авторы:
запрос пользователя (и инструменты) → модель выдаёт имя инструмента и параметры → инструмент выполняется → результат возвращается модели → модель обобщает и отвечает пользователю.
Вторая часть ноутбука — встроенный веб-поиск GLM-4 API: он включён по умолчанию и отключается, если передать
{"type": "web_search", "web_search": {"enable": False}} или любой другой инструмент. Авторы честно предупреждают:
на тот момент поиск GLM-4 API «не очень силён», и для реальных задач советуют профессиональный поисковый API.
Упражнение: один код — разные API
Заголовок раздела «Упражнение: один код — разные API»Главный практический вывод кукбука для нас — переключение провайдера одной строкой конфигурации:
from openai import OpenAIimport os
PROVIDERS = { # адрес и пример имени модели — сверяйте актуальные имена в документации каждого провайдера "glm": ("https://open.bigmodel.cn/api/paas/v4/", os.getenv("ZHIPU_API_KEY"), "glm-4.5"), "local": ("http://localhost:8000/v1", "EMPTY", "Qwen/Qwen3-8B"), "ollama": ("http://localhost:11434/v1", "EMPTY", "qwen3:8b"),}
def ask(provider: str, question: str) -> str: base_url, key, model = PROVIDERS[provider] client = OpenAI(base_url=base_url, api_key=key) r = client.chat.completions.create(model=model, messages=[{"role": "user", "content": question}]) return r.choices[0].message.content
for p in ["local", "ollama"]: # добавьте "glm", когда получите ключ print(p, "→", ask(p, "Назови три китайские языковые модели одной строкой.")[:200])Добавьте в словарь DeepSeek и Qwen из облака (адреса — в уроке 8.1.1)
и сравните на одном вопросе скорость, длину ответа и стоимость (поле usage).
Где ещё полезен кукбук
Заголовок раздела «Где ещё полезен кукбук»demo/glm_sdg_example_*.ipynb— генерация синтетических данных большой моделью: тот же приём, что «дистилляция» в курсе Alibaba ACP и в уроке 6.4.4.demo/graphrag/— GraphRAG от Microsoft на GLM: строит граф знаний по тексту и отвечает по нему (урок 8.2.2).demo/generate_agent_dataset/— как собрать датасет траекторий ReAct для дообучения агента (урок 8.3.4).basic/glm_batch_api.ipynb— Batch API: отправить тысячу запросов файлом JSONL и забрать результаты позже, дешевле обычных вызовов.
Словарик
Заголовок раздела «Словарик»| English | Русский |
|---|---|
| Zhipu | Zhipu (Чжипу) |
| function call / tool call | вызов функций / инструментов |
| web search | поиск в интернете |
| batch API | пакетная обработка |
| synthetic data generation (SDG) | синтетические данные |
| knowledge base | база знаний |