API
Конвенции
Названия моделей
Названия моделей соответствуют формату тегов model:, где model может иметь необязательное пространство имен, например example/model. Вот несколько примеров: orca-mini:3b-q4_1 и llama3:70b. Этот тег необязателен, и, если он не указан, по умолчанию будет установлена последняя версия. Тег используется для идентификации конкретной версии.
Продолжительность
Все значения длительности возвращаются в наносекундах.
Потоковая передача ответов
Некоторые конечные точки передают ответы в виде объектов JSON. Потоковую передачу можно отключить, указав {"stream": false} для этих конечных точек.
Создать выполнение
POST /api/generate
Сгенерируйте ответ на заданное приглашение с помощью предоставленной модели. Это конечная точка потоковой передачи, поэтому будет несколько ответов. Конечный объект ответа будет включать статистику и дополнительные данные из запроса.
Параметры
- model: (обязательно) название модели
- prompt: приглашение сгенерировать ответ на
- suffix: текст после ответа модели
- images: (необязательно) список изображений в кодировке Base64 (для мультимодальных моделей, таких как llava)
- think: (для мыслящих моделей) должна ли модель думать, прежде чем отвечать?
Расширенные параметры (необязательно):
- format: формат возврата ответа. Форматом может быть json или схема JSON
- options: дополнительные параметры модели, перечисленные в документации к Modelfile, такие как температура
- system: системное сообщение (переопределяет то, что определено в файле модели)
- template: используемый шаблон приглашения (переопределяет то, что определено в Modelfile)
- stream: если false, ответ будет возвращен как один объект ответа, а не как поток объектов
- raw: если true, к приглашению не будет применено форматирование. Вы можете использовать необработанный параметр, если в своем запросе к API указываете полное шаблонное приглашение.
- keep_alive: контролирует, как долго модель будет оставаться загруженной в память после запроса (по умолчанию: 5 м)
- context (устарело): параметр контекста, возвращаемый из предыдущего запроса к /generate, его можно использовать для сохранения короткой разговорной памяти.
Структурированные результаты
Структурированные выходы поддерживаются путем предоставления схемы JSON в параметре формата. Модель будет генерировать ответ, соответствующий схеме. Смотрите пример структурированных выходов ниже.
JSON-режим
Включите режим JSON, установив для параметра формата значение json. Это структурирует ответ как действительный объект JSON. См. пример режима JSON ниже.
Важно
Важно указать модели использовать JSON в приглашении. В противном случае модель может генерировать большое количество пробелов.
Примеры
Создать запрос (потоковая передача)
Запрос
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Почему небо голубое?"
}'
Ответ
Возвращается поток объектов JSON:
{
"model": "llama3.2",
"created_at": "2023-08-04T08:52:19.385406455-07:00",
"response": "The",
"done": false
}
Итоговый ответ в потоке также включает дополнительные данные о генерации:
- total_duration: время, потраченное на генерацию ответа
- load_duration: время, потраченное в наносекундах на загрузку модели
- prompt_eval_count: количество токенов в запросе
- prompt_eval_duration: время, потраченное в наносекундах на оценку подсказки
- eval_count: количество токенов в ответе
- eval_duration: время в наносекундах, потраченное на генерацию ответа
- context: кодировка разговора, использованная в этом ответе, может быть отправлена в следующем запросе для сохранения разговора в памяти.
- response: пустое поле, если ответ был передан в потоковом режиме, если не был передан в потоковом режиме, оно будет содержать полный ответ
Чтобы рассчитать, с какой скоростью генерируется ответ в токенах в секунду (токен/с), разделите eval_count / eval_duration * 10^9.
{
"model": "llama3.2",
"created_at": "2023-08-04T19:22:45.499127Z",
"response": "",
"done": true,
"context": [1, 2, 3],
"total_duration": 10706818083,
"load_duration": 6338219291,
"prompt_eval_count": 26,
"prompt_eval_duration": 130079000,
"eval_count": 259,
"eval_duration": 4232710000
}
Запрос (без потоковой передачи)
Запрос
При отключенной потоковой передаче ответ может быть получен в одном ответе.
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Why is the sky blue?",
"stream": false
}'
Ответ
Если для параметра stream установлено значение false, ответом будет один объект JSON:
{
"model": "llama3.2",
"created_at": "2023-08-04T19:22:45.499127Z",
"response": "The sky is blue because it is the color of the sky.",
"done": true,
"context": [1, 2, 3],
"total_duration": 5043500667,
"load_duration": 5025959,
"prompt_eval_count": 26,
"prompt_eval_duration": 325953000,
"eval_count": 290,
"eval_duration": 4709213000
}
Запрос (с суффиксом)
Запрос
curl http://localhost:11434/api/generate -d '{
"model": "codellama:code",
"prompt": "def compute_gcd(a, b):",
"suffix": " return result",
"options": {
"temperature": 0
},
"stream": false
}'
Ответ
{
"model": "codellama:code",
"created_at": "2024-07-22T20:47:51.147561Z",
"response": "\n if a == 0:\n return b\n else:\n return compute_gcd(b % a, a)\n\ndef compute_lcm(a, b):\n result = (a * b) / compute_gcd(a, b)\n",
"done": true,
"done_reason": "stop",
"context": [...],
"total_duration": 1162761250,
"load_duration": 6683708,
"prompt_eval_count": 17,
"prompt_eval_duration": 201222000,
"eval_count": 63,
"eval_duration": 953997000
}
Запрос (структурированные выходные данные)
Запрос
curl -X POST http://localhost:11434/api/generate -H "Content-Type: application/json" -d '{
"model": "llama3.1:8b",
"prompt": "Ollama is 22 years old and is busy saving the world. Respond using JSON",
"stream": false,
"format": {
"type": "object",
"properties": {
"age": {
"type": "integer"
},
"available": {
"type": "boolean"
}
},
"required": [
"age",
"available"
]
}
}'
Response
{
"model": "llama3.1:8b",
"created_at": "2024-12-06T00:48:09.983619Z",
"response": "{\n \"age\": 22,\n \"available\": true\n}",
"done": true,
"done_reason": "stop",
"context": [1, 2, 3],
"total_duration": 1075509083,
"load_duration": 567678166,
"prompt_eval_count": 28,
"prompt_eval_duration": 236000000,
"eval_count": 16,
"eval_duration": 269000000
}
Запрос (режим JSON)
Важно
Если для формата задано значение json, на выходе всегда будет хорошо сформированный объект в формате JSON. Важно также указать модели, что она должна отвечать в формате JSON.
Запрос
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "What color is the sky at different times of the day? Respond using JSON",
"format": "json",
"stream": false
}'
Ответ
{
"model": "llama3.2",
"created_at": "2023-11-09T21:07:55.186497Z",
"response": "{\n\"morning\": {\n\"color\": \"blue\"\n},\n\"noon\": {\n\"color\": \"blue-gray\"\n},\n\"afternoon\": {\n\"color\": \"warm gray\"\n},\n\"evening\": {\n\"color\": \"orange\"\n}\n}\n",
"done": true,
"context": [1, 2, 3],
"total_duration": 4648158584,
"load_duration": 4071084,
"prompt_eval_count": 36,
"prompt_eval_duration": 439038000,
"eval_count": 180,
"eval_duration": 4196918000
}
Значением ответа будет строка, содержащая JSON, похожая на:
{
"morning": {
"color": "blue"
},
"noon": {
"color": "blue-gray"
},
"afternoon": {
"color": "warm gray"
},
"evening": {
"color": "orange"
}
}
Запрос (с изображениями)
Чтобы отправить изображения в мультимодальные модели, такие как llava или bakllava, предоставьте список изображений в кодировке Base64:
Запрос
curl http://localhost:11434/api/generate -d '{
"model": "llava",
"prompt":"What is in this picture?",
"stream": false,
"images": ["iVBORw0KGgoAAAANSUhEUgAAAG0A....goAbYkAAAAAElFTkSuQmCC"]
}'
Ответ
{
"model": "llava",
"created_at": "2023-11-03T15:36:02.583064Z",
"response": "A happy cartoon character, which is cute and cheerful.",
"done": true,
"context": [1, 2, 3],
"total_duration": 2938432250,
"load_duration": 2559292,
"prompt_eval_count": 1,
"prompt_eval_duration": 2195557000,
"eval_count": 44,
"eval_duration": 736432000
}
Запрос (режим Raw)
В некоторых случаях вы можете обойти систему шаблонов и предоставить полное приглашение. В этом случае вы можете использовать параметр raw, чтобы отключить шаблонизацию. Также обратите внимание, что необработанный режим не возвращает контекст.
Запрос
curl http://localhost:11434/api/generate -d '{
"model": "mistral",
"prompt": "[INST] why is the sky blue? [/INST]",
"raw": true,
"stream": false
}'
Запрос (воспроизводимые выходы)
Для получения воспроизводимых выходных данных установите начальное значение в seed:
Запрос
curl http://localhost:11434/api/generate -d '{
"model": "mistral",
"prompt": "Why is the sky blue?",
"options": {
"seed": 123
}
}'
Ответ
{
"model": "mistral",
"created_at": "2023-11-03T15:36:02.583064Z",
"response": " The sky appears blue because of a phenomenon called Rayleigh scattering.",
"done": true,
"total_duration": 8493852375,
"load_duration": 6589624375,
"prompt_eval_count": 14,
"prompt_eval_duration": 119039000,
"eval_count": 110,
"eval_duration": 1779061000
}
Сгенерировать запрос (с опциями)
Если вы хотите задать пользовательские параметры для модели во время выполнения, а не в файле модели, вы можете сделать это с помощью параметра options. В этом примере задаются все доступные параметры, но вы можете задать любой из них по отдельности и опустить те, которые вы не хотите переопределять.
Запрос
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Why is the sky blue?",
"stream": false,
"options": {
"num_keep": 5,
"seed": 42,
"num_predict": 100,
"top_k": 20,
"top_p": 0.9,
"min_p": 0.0,
"tfs_z": 0.5,
"typical_p": 0.7,
"repeat_last_n": 33,
"temperature": 0.8,
"repeat_penalty": 1.2,
"presence_penalty": 1.5,
"frequency_penalty": 1.0,
"mirostat": 1,
"mirostat_tau": 0.8,
"mirostat_eta": 0.6,
"penalize_newline": true,
"stop": ["\n", "user:"],
"numa": false,
"num_ctx": 1024,
"num_batch": 2,
"num_gpu": 1,
"main_gpu": 0,
"low_vram": false,
"vocab_only": false,
"use_mmap": true,
"use_mlock": false,
"num_thread": 8
}
}'
Ответ
{
"model": "llama3.2",
"created_at": "2023-08-04T19:22:45.499127Z",
"response": "The sky is blue because it is the color of the sky.",
"done": true,
"context": [1, 2, 3],
"total_duration": 4935886791,
"load_duration": 534986708,
"prompt_eval_count": 26,
"prompt_eval_duration": 107345000,
"eval_count": 237,
"eval_duration": 4289432000
}
Загрузить модель
Если будет выдано пустое приглашение, модель будет загружена в память.
Запрос
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2"
}'
Ответ
Возвращается один объект JSON:
{
"model": "llama3.2",
"created_at": "2023-12-18T19:52:07.071755Z",
"response": "",
"done": true
}
Выгрузка модели
Если выдано пустое приглашение и параметру keep_alive присвоено значение 0, модель будет выгружена из памяти.
Запрос
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"keep_alive": 0
}'
Ответ
Возвращается один объект JSON:
{
"model": "llama3.2",
"created_at": "2024-09-12T03:54:03.516566Z",
"response": "",
"done": true,
"done_reason": "unload"
}
Создать исполнение чата
POST /api/chat
Сгенерирует следующее сообщение в чате с предоставленной моделью. Это конечная точка потоковой передачи, поэтому будет серия ответов. Потоковую передачу можно отключить с помощью параметра «stream»: false. Конечный объект ответа будет включать статистику и дополнительные данные из запроса.
Параметры
- model: (обязательно) название модели
- messages: сообщения чата, это может быть использовано для сохранения чата в памяти
- tools: инструменты для использования в модели, если они поддерживаются. Требуется, чтобы для параметра stream было установлено значение false
- think: (для мыслящих моделей) должна ли модель подумать, прежде чем ответить?
Объект message содержит следующие поля:
- role: роль сообщения, будь то system, user, assistant или tool
- content: содержание сообщения
- thinking: (для мыслящих моделей) мыслительный процесс модели
- images (необязательно): список изображений для включения в сообщение (для мультимодальных моделей, таких как llava).
- tool_calls (необязательно): список инструментов, которые модель хочет использовать
- tool_name (необязательно): добавьте название инструмента, который был выполнен, чтобы сообщить модели о результате
Дополнительные параметры (необязательно):
- format: формат, в котором будет возвращен ответ. В настоящее время единственным допустимым значением является json
- options: дополнительные параметры модели, перечисленные в документации к Modelfile, такие как температура
- stream: если значение равно false, то ответ будет возвращен в виде одного объекта response, а не потока объектов
- keep_alive: определяет, как долго модель будет оставаться загруженной в память после запроса (по умолчанию: 5 месяцев).
Вызов инструмента
Вызов инструментов поддерживается путем указания списка инструментов в параметре tools. Модель сгенерирует ответ, содержащий список вызовов инструментов. Смотрите пример запроса чата (потоковая передача с помощью инструментов) example below.
Модели также могут объяснить результат вызова инструмента в ответе. Смотрите пример запроса в чат (с историей, с инструментами) ниже.
Смотрите модели с возможностями вызова инструментов.
Структурированные результаты
Структурированные выходные данные поддерживаются путем предоставления схемы JSON в format параметр. Модель сгенерирует ответ, соответствующий схеме. Смотрите Запрос в чат (структурированные выходные данные) пример ниже.
Примеры
Запрос в чат (потоковая передача)
Запрос
Отправить сообщение в чате с потоковым ответом.
curl http://localhost:11434/api/chat -d '{
"model": "llama3.2",
"messages": [
{
"role": "user",
"content": "why is the sky blue?"
}
]
}'
Ответ
Возвращается поток объектов JSON:
{
"model": "llama3.2",
"created_at": "2023-08-04T08:52:19.385406455-07:00",
"message": {
"role": "assistant",
"content": "The",
"images": null
},
"done": false
}
Окончательный ответ:
{
"model": "llama3.2",
"created_at": "2023-08-04T19:22:45.499127Z",
"message": {
"role": "assistant",
"content": ""
},
"done": true,
"total_duration": 4883583458,
"load_duration": 1334875,
"prompt_eval_count": 26,
"prompt_eval_duration": 342546000,
"eval_count": 282,
"eval_duration": 4535599000
}
Запрос в чат (потоковая передача с помощью инструментов)
Запрос
curl http://localhost:11434/api/chat -d '{
"model": "llama3.2",
"messages": [
{
"role": "user",
"content": "what is the weather in tokyo?"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the weather in a given city",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city to get the weather for"
}
},
"required": ["city"]
}
}
}
],
"stream": true
}'
Ответ
Возвращается поток объектов JSON:
{
"model": "llama3.2",
"created_at": "2025-07-07T20:22:19.184789Z",
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"function": {
"name": "get_weather",
"arguments": {
"city": "Tokyo"
}
},
}
]
},
"done": false
}
Окончательный ответ:
{
"model":"llama3.2",
"created_at":"2025-07-07T20:22:19.19314Z",
"message": {
"role": "assistant",
"content": ""
},
"done_reason": "stop",
"done": true,
"total_duration": 182242375,
"load_duration": 41295167,
"prompt_eval_count": 169,
"prompt_eval_duration": 24573166,
"eval_count": 15,
"eval_duration": 115959084
}
Запрос в чат (без потоковой передачи)
Запрос
curl http://localhost:11434/api/chat -d '{
"model": "llama3.2",
"messages": [
{
"role": "user",
"content": "why is the sky blue?"
}
],
"stream": false
}'
Ответ
{
"model": "llama3.2",
"created_at": "2023-12-12T14:13:43.416799Z",
"message": {
"role": "assistant",
"content": "Hello! How are you today?"
},
"done": true,
"total_duration": 5191566416,
"load_duration": 2154458,
"prompt_eval_count": 26,
"prompt_eval_duration": 383809000,
"eval_count": 298,
"eval_duration": 4799921000
}
Запрос в чат (без потоковой передачи, с инструментами)
Запрос
curl http://localhost:11434/api/chat -d '{
"model": "llama3.2",
"messages": [
{
"role": "user",
"content": "what is the weather in tokyo?"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the weather in a given city",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city to get the weather for"
}
},
"required": ["city"]
}
}
}
],
"stream": false
}'
Ответ
{
"model": "llama3.2",
"created_at": "2025-07-07T20:32:53.844124Z",
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"function": {
"name": "get_weather",
"arguments": {
"city": "Tokyo"
}
},
}
]
},
"done_reason": "stop",
"done": true,
"total_duration": 3244883583,
"load_duration": 2969184542,
"prompt_eval_count": 169,
"prompt_eval_duration": 141656333,
"eval_count": 18,
"eval_duration": 133293625
}
Запрос в чат (структурированные выходные данные)
Запрос
curl -X POST http://localhost:11434/api/chat -H "Content-Type: application/json" -d '{
"model": "llama3.1",
"messages": [{"role": "user", "content": "Ollama is 22 years old and busy saving the world. Return a JSON object with the age and availability."}],
"stream": false,
"format": {
"type": "object",
"properties": {
"age": {
"type": "integer"
},
"available": {
"type": "boolean"
}
},
"required": [
"age",
"available"
]
},
"options": {
"temperature": 0
}
}'
Ответ
{
"model": "llama3.1",
"created_at": "2024-12-06T00:46:58.265747Z",
"message": { "role": "assistant", "content": "{\"age\": 22, \"available\": false}" },
"done_reason": "stop",
"done": true,
"total_duration": 2254970291,
"load_duration": 574751416,
"prompt_eval_count": 34,
"prompt_eval_duration": 1502000000,
"eval_count": 12,
"eval_duration": 175000000
}
Запрос в чат (с историей)
Отправьте сообщение в чате с историей разговора. Вы можете использовать этот же подход для начала разговора, используя многократные подсказки или логическую цепочку.
Запрос
curl http://localhost:11434/api/chat -d '{
"model": "llama3.2",
"messages": [
{
"role": "user",
"content": "why is the sky blue?"
},
{
"role": "assistant",
"content": "due to rayleigh scattering."
},
{
"role": "user",
"content": "how is that different than mie scattering?"
}
]
}'
Ответ
Возвращается поток объектов JSON:
{
"model": "llama3.2",
"created_at": "2023-08-04T08:52:19.385406455-07:00",
"message": {
"role": "assistant",
"content": "The"
},
"done": false
}
Окончательный ответ:
{
"model": "llama3.2",
"created_at": "2023-08-04T19:22:45.499127Z",
"done": true,
"total_duration": 8113331500,
"load_duration": 6396458,
"prompt_eval_count": 61,
"prompt_eval_duration": 398801000,
"eval_count": 468,
"eval_duration": 7701267000
}
Запрос в чат (с историей, с инструментами)
Запрос
curl http://localhost:11434/api/chat -d '{
"model": "llama3.2",
"messages": [
{
"role": "user",
"content": "what is the weather in Toronto?"
},
// the message from the model appended to history
{
"role": "assistant",
"content": "",
"tool_calls": [
{
"function": {
"name": "get_temperature",
"arguments": {
"city": "Toronto"
}
},
}
]
},
// the tool call result appended to history
{
"role": "tool",
"content": "11 degrees celsius",
"tool_name": "get_temperature",
}
],
"stream": false,
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the weather in a given city",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city to get the weather for"
}
},
"required": ["city"]
}
}
}
]
}'
Ответ
{
"model": "llama3.2",
"created_at": "2025-07-07T20:43:37.688511Z",
"message": {
"role": "assistant",
"content": "The current temperature in Toronto is 11°C."
},
"done_reason": "stop",
"done": true,
"total_duration": 890771750,
"load_duration": 707634750,
"prompt_eval_count": 94,
"prompt_eval_duration": 91703208,
"eval_count": 11,
"eval_duration": 90282125
}
Запрос в чат (с изображениями)
Запрос
Отправьте сообщение в чате с изображениями. Изображения должны быть представлены в виде массива, причем отдельные изображения должны быть закодированы в Base64.
curl http://localhost:11434/api/chat -d '{
"model": "llava",
"messages": [
{
"role": "user",
"content": "what is in this image?",
"images": ["iVBORw0KGgoAAAANSUhEUg.....z/f7mgoAbYkAAAAAElFTkSuQmCC"]
}
]
}'
Ответ
{
"model": "llava",
"created_at": "2023-12-13T22:42:50.203334Z",
"message": {
"role": "assistant",
"content": " The image features a cute, little pig with an angry facial expression. It's wearing a heart on its shirt and is waving in the air. This scene appears to be part of a drawing or sketching project.",
"images": null
},
"done": true,
"total_duration": 1668506709,
"load_duration": 1986209,
"prompt_eval_count": 26,
"prompt_eval_duration": 359682000,
"eval_count": 83,
"eval_duration": 1303285000
}
Запрос в чат (воспроизводимые выходные данные)
Запрос
curl http://localhost:11434/api/chat -d '{
"model": "llama3.2",
"messages": [
{
"role": "user",
"content": "Hello!"
}
],
"options": {
"seed": 101,
"temperature": 0
}
}'
Ответ
{
"model": "llama3.2",
"created_at": "2023-12-12T14:13:43.416799Z",
"message": {
"role": "assistant",
"content": "Hello! How are you today?"
},
"done": true,
"total_duration": 5191566416,
"load_duration": 2154458,
"prompt_eval_count": 26,
"prompt_eval_duration": 383809000,
"eval_count": 298,
"eval_duration": 4799921000
}
Запрос в чат (с инструментами)
Запрос
curl http://localhost:11434/api/chat -d '{
"model": "llama3.2",
"messages": [
{
"role": "user",
"content": "What is the weather today in Paris?"
}
],
"stream": false,
"tools": [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Get the current weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The location to get the weather for, e.g. San Francisco, CA"
},
"format": {
"type": "string",
"description": "The format to return the weather in, e.g. 'celsius' or 'fahrenheit'",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location", "format"]
}
}
}
]
}'
Ответ
{
"model": "llama3.2",
"created_at": "2024-07-22T20:33:28.123648Z",
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"function": {
"name": "get_current_weather",
"arguments": {
"format": "celsius",
"location": "Paris, FR"
}
}
}
]
},
"done_reason": "stop",
"done": true,
"total_duration": 885095291,
"load_duration": 3753500,
"prompt_eval_count": 122,
"prompt_eval_duration": 328493000,
"eval_count": 33,
"eval_duration": 552222000
}
Загрузить модель
Если массив сообщений пуст, то модель будет загружена в память.
Запрос
curl http://localhost:11434/api/chat -d '{
"model": "llama3.2",
"messages": []
}'
Ответ
{
"model": "llama3.2",
"created_at":"2024-09-12T21:17:29.110811Z",
"message": {
"role": "assistant",
"content": ""
},
"done_reason": "load",
"done": true
}
Выгрузка модели
Если массив сообщений пуст, а параметру keep_alive присвоено значение 0, модель будет выгружена из памяти.
Запрос
curl http://localhost:11434/api/chat -d '{
"model": "llama3.2",
"messages": [],
"keep_alive": 0
}'
Ответ
Возвращается один объект JSON:
{
"model": "llama3.2",
"created_at":"2024-09-12T21:33:17.547535Z",
"message": {
"role": "assistant",
"content": ""
},
"done_reason": "unload",
"done": true
}
Создание модели
POST /api/create
Создание модели из:
- друой модели;
- каталога Safetensors; или
- файла GGUF.
Если вы создаете модель из каталога safetensors или из файла GGUF, вы должны создать большой двоичный объект (blob) для каждого из файлов, а затем использовать имя файла и дайджест SHA256, связанные с каждым большим двоичным объектом, в поле files.
Parameters
- model: название создаваемой модели
- from: (необязательно) название существующей модели, на основе которой будет создана новая модель.
- files: (необязательно) словарь имен файлов для дайджестов больших двоичных объектов SHA256 для создания модели на основе
- adapters: (необязательно) словарь имен файлов для дайджестов больших двоичных объектов SHA256 для адаптеров LORA
- template: (необязательно) шаблон запроса для модели
- license: (необязательно) строка или список строк, содержащих лицензию или несколько лицензий на модель
- system: (необязательно) строка, содержащая системный запрос для модели
- parameters: (необязательно) словарь параметров для модели (см. Modelfile для списка параметров)
- messages: (необязательно) список объектов сообщения, используемых для создания разговора
- stream: (необязательно) при ложном ответе ответ будет возвращен как единый объект ответа, а не как поток объектов
- quantize (необязательно): квантовать неквантованную модель (например, float16).
Типы квантования
| Type | Recommended |
|---|---|
| q2_K | |
| q3_K_L | |
| q3_K_M | |
| q3_K_S | |
| q4_0 | |
| q4_1 | |
| q4_K_M | * |
| q4_K_S | |
| q5_0 | |
| q5_1 | |
| q5_K_M | |
| q5_K_S | |
| q6_K | |
| q8_0 | * |
Примеры
Создать новую модель
Создайте новую модель на основе существующей модели.
Запрос
curl http://localhost:11434/api/create -d '{
"model": "mario",
"from": "llama3.2",
"system": "You are Mario from Super Mario Bros."
}'
Ответ
Возвращается поток объектов JSON:
{"status":"reading model metadata"}
{"status":"creating system layer"}
{"status":"using already created layer sha256:22f7f8ef5f4c791c1b03d7eb414399294764d7cc82c7e94aa81a1feb80a983a2"}
{"status":"using already created layer sha256:8c17c2ebb0ea011be9981cc3922db8ca8fa61e828c5d3f44cb6ae342bf80460b"}
{"status":"using already created layer sha256:7c23fb36d80141c4ab8cdbb61ee4790102ebd2bf7aeff414453177d4f2110e5d"}
{"status":"using already created layer sha256:2e0493f67d0c8c9c68a8aeacdf6a38a2151cb3c4c1d42accf296e19810527988"}
{"status":"using already created layer sha256:2759286baa875dc22de5394b4a925701b1896a7e3f8e53275c36f75a877a82c9"}
{"status":"writing layer sha256:df30045fe90f0d750db82a058109cecd6d4de9c90a3d75b19c09e5f64580bb42"}
{"status":"writing layer sha256:f18a68eb09bf925bb1b669490407c1b1251c5db98dc4d3d81f3088498ea55690"}
{"status":"writing manifest"}
{"status":"success"}
Квантовать модель
Квантовать неквантованную модель.
Запрос
curl http://localhost:11434/api/create -d '{
"model": "llama3.2:quantized",
"from": "llama3.2:3b-instruct-fp16",
"quantize": "q4_K_M"
}'
Ответ
Возвращается поток объектов JSON:
{"status":"quantizing F16 model to Q4_K_M","digest":"0","total":6433687776,"completed":12302}
{"status":"quantizing F16 model to Q4_K_M","digest":"0","total":6433687776,"completed":6433687552}
{"status":"verifying conversion"}
{"status":"creating new layer sha256:fb7f4f211b89c6c4928ff4ddb73db9f9c0cfca3e000c3e40d6cf27ddc6ca72eb"}
{"status":"using existing layer sha256:966de95ca8a62200913e3f8bfbf84c8494536f1b94b49166851e76644e966396"}
{"status":"using existing layer sha256:fcc5a6bec9daf9b561a68827b67ab6088e1dba9d1fa2a50d7bbcc8384e0a265d"}
{"status":"using existing layer sha256:a70ff7e570d97baaf4e62ac6e6ad9975e04caa6d900d3742d37698494479e0cd"}
{"status":"using existing layer sha256:56bb8bd477a519ffa694fc449c2413c6f0e1d3b1c88fa7e3c9d88d3ae49d4dcb"}
{"status":"writing manifest"}
{"status":"success"}
Создать модель из GGUF
Создайте модель из файла GGUF. В параметре files следует указать имя файла и SHA256-дайджест файла GGUF, который вы хотите использовать. Используйте /api/blobs/:digest, чтобы отправить файл GGUF на сервер перед вызовом этого API.
Запрос
curl http://localhost:11434/api/create -d '{
"model": "my-gguf-model",
"files": {
"test.gguf": "sha256:432f310a77f4650a88d0fd59ecdd7cebed8d684bafea53cbff0473542964f0c3"
}
}'
Ответ
Возвращается поток объектов JSON:
{"status":"parsing GGUF"}
{"status":"using existing layer sha256:432f310a77f4650a88d0fd59ecdd7cebed8d684bafea53cbff0473542964f0c3"}
{"status":"writing manifest"}
{"status":"success"}
Создать модель из каталога Safetensors
Параметр files должен содержать словарь файлов для модели safetensors, который включает имена файлов и SHA256-дайджест каждого файла. Используйте /api/blobs/:digest, чтобы сначала отправить каждый из файлов на сервер перед вызовом этого API. Файлы будут храниться в кэше до тех пор, пока сервер Ollama не будет перезапущен.
Запрос
curl http://localhost:11434/api/create -d '{
"model": "fred",
"files": {
"config.json": "sha256:dd3443e529fb2290423a0c65c2d633e67b419d273f170259e27297219828e389",
"generation_config.json": "sha256:88effbb63300dbbc7390143fbbdd9d9fa50587b37e8bfd16c8c90d4970a74a36",
"special_tokens_map.json": "sha256:b7455f0e8f00539108837bfa586c4fbf424e31f8717819a6798be74bef813d05",
"tokenizer.json": "sha256:bbc1904d35169c542dffbe1f7589a5994ec7426d9e5b609d07bab876f32e97ab",
"tokenizer_config.json": "sha256:24e8a6dc2547164b7002e3125f10b415105644fcf02bf9ad8b674c87b1eaaed6",
"model.safetensors": "sha256:1ff795ff6a07e6a68085d206fb84417da2f083f68391c2843cd2b8ac6df8538f"
}
}'
Ответ
Возвращается поток объектов JSON:
{"status":"converting model"}
{"status":"creating new layer sha256:05ca5b813af4a53d2c2922933936e398958855c44ee534858fcfd830940618b6"}
{"status":"using autodetected template llama3-instruct"}
{"status":"using existing layer sha256:56bb8bd477a519ffa694fc449c2413c6f0e1d3b1c88fa7e3c9d88d3ae49d4dcb"}
{"status":"writing manifest"}
{"status":"success"}
Проверить, существует ли Blob (большой двоичный объект)
HEAD /api/blobs/:digest
Гарантирует, что файл blob (большой двоичный объект), используемый при создании модели, существует на сервере. При этом проверяется ваш сервер Ollama, а не ollama.com.
Параметры запроса
- digest: SHA256-дайджест blob
Примеры
Запрос
curl -I http://localhost:11434/api/blobs/sha256:29fdb92e57cf0827ded04ae6461b5931d01fa595843f55d36f5b275a52087dd2
Ответ
Возврат 200 OK, если blob существует, 404 Not Found, если нет.
Создать Blob
POST /api/blobs/:digest
Создать blob из файла на сервере. Возвращает путь файла сервера.
Параметры запроса
- digest: ожидаемый дайджест SHA256 файла
Примеры
Запрос
curl -T model.bin -X POST http://localhost:11434/api/blobs/sha256:29fdb92e57cf0827ded04ae6461b5931d01fa595843f55d36f5b275a52087dd2
Ответ
Возврат 201 Created, если blob был успешно создан, 400 Bad Request, если используемый дайджест не ожидается.
Список локальных моделей
GET /api/tags
Список моделей, доступных на местном уровне.
Примеры
Запрос
curl http://localhost:11434/api/tags
Ответ
Будет возвращен один объект JSON.
{
"models": [
{
"name": "deepseek-r1:latest",
"model": "deepseek-r1:latest",
"modified_at": "2025-05-10T08:06:48.639712648-07:00",
"size": 4683075271,
"digest": "0a8c266910232fd3291e71e5ba1e058cc5af9d411192cf88b6d30e92b6e73163",
"details": {
"parent_model": "",
"format": "gguf",
"family": "qwen2",
"families": [
"qwen2"
],
"parameter_size": "7.6B",
"quantization_level": "Q4_K_M"
}
},
{
"name": "llama3.2:latest",
"model": "llama3.2:latest",
"modified_at": "2025-05-04T17:37:44.706015396-07:00",
"size": 2019393189,
"digest": "a80c4f17acd55265feec403c7aef86be0c25983ab279d83f3bcd3abbcb5b8b72",
"details": {
"parent_model": "",
"format": "gguf",
"family": "llama",
"families": [
"llama"
],
"parameter_size": "3.2B",
"quantization_level": "Q4_K_M"
}
}
]
}
Показать информацию о модели
POST /api/show
Отображение информации о модели, включая сведения, файл модели, шаблон, параметры, лицензию и системное приглашение.
Параметры
- model: название модели, которую нужно показать
- verbose: (необязательно), если установлено значение true, возвращает полные данные для полей подробного ответа.
Примеры
Запрос
curl http://localhost:11434/api/show -d '{
"model": "llama3.2"
}'
Ответ
{
"modelfile": "# Modelfile generated by \"ollama show\"\n# To build a new Modelfile based on this one, replace the FROM line with:\n# FROM llava:latest\n\nFROM /Users/matt/.ollama/models/blobs/sha256:200765e1283640ffbd013184bf496e261032fa75b99498a9613be4e94d63ad52\nTEMPLATE \"\"\"{{ .System }}\nUSER: {{ .Prompt }}\nASSISTANT: \"\"\"\nPARAMETER num_ctx 4096\nPARAMETER stop \"\u003c/s\u003e\"\nPARAMETER stop \"USER:\"\nPARAMETER stop \"ASSISTANT:\"",
"parameters": "num_keep 24\nstop \"<|start_header_id|>\"\nstop \"<|end_header_id|>\"\nstop \"<|eot_id|>\"",
"template": "{{ if .System }}<|start_header_id|>system<|end_header_id|>\n\n{{ .System }}<|eot_id|>{{ end }}{{ if .Prompt }}<|start_header_id|>user<|end_header_id|>\n\n{{ .Prompt }}<|eot_id|>{{ end }}<|start_header_id|>assistant<|end_header_id|>\n\n{{ .Response }}<|eot_id|>",
"details": {
"parent_model": "",
"format": "gguf",
"family": "llama",
"families": [
"llama"
],
"parameter_size": "8.0B",
"quantization_level": "Q4_0"
},
"model_info": {
"general.architecture": "llama",
"general.file_type": 2,
"general.parameter_count": 8030261248,
"general.quantization_version": 2,
"llama.attention.head_count": 32,
"llama.attention.head_count_kv": 8,
"llama.attention.layer_norm_rms_epsilon": 0.00001,
"llama.block_count": 32,
"llama.context_length": 8192,
"llama.embedding_length": 4096,
"llama.feed_forward_length": 14336,
"llama.rope.dimension_count": 128,
"llama.rope.freq_base": 500000,
"llama.vocab_size": 128256,
"tokenizer.ggml.bos_token_id": 128000,
"tokenizer.ggml.eos_token_id": 128009,
"tokenizer.ggml.merges": [], // populates if `verbose=true`
"tokenizer.ggml.model": "gpt2",
"tokenizer.ggml.pre": "llama-bpe",
"tokenizer.ggml.token_type": [], // populates if `verbose=true`
"tokenizer.ggml.tokens": [] // populates if `verbose=true`
}
}
Копирование модели
POST /api/copy
Скопировать модель. Создает модель с другим именем из существующей модели.
Примеры
Запрос
curl http://localhost:11434/api/copy -d '{
"source": "llama3.2",
"destination": "llama3-backup"
}'
Ответ
Возвращает 200 OK в случае успеха или 404 Not Found, если исходная модель не существует.
Удалить модель
DELETE /api/delete
Удалить модель и ее данные.
Параметры
- model: название модели, которую нужно удалить
Примеры
Запрос
curl -X DELETE http://localhost:11434/api/delete -d '{
"model": "llama3:13b"
}'
Ответ
Возвращает 200 OK в случае успеха и 404 Not Found, если удаляемая модель не существует.
Загрузить модель
POST /api/pull
Загрузить модель из библиотеки ollama. Отмененные запросы возобновляются с того места, где они были остановлены, и при нескольких вызовах будет использоваться один и тот же прогресс загрузки.
Параметры
- model: название модели, которую нужно вытащить
- insecure: (необязательно) разрешить небезопасные подключения к библиотеке. Используйте это только в том случае, если вы извлекаете данные из своей собственной библиотеки во время разработки.
- stream: (необязательно) если false, ответ будет возвращен как один объект ответа, а не как поток объектов
Примеры
Запрос
curl http://localhost:11434/api/pull -d '{
"model": "llama3.2"
}'
Ответ
Если stream не указан или для него установлено значение true, возвращается поток объектов JSON:
Первый объект — это манифест:
{
"status": "pulling manifest"
}
Затем следует серия ответов на загрузку. До тех пор, пока загрузка не будет завершена, готовый ключ не может быть включен. Количество загружаемых файлов зависит от количества слоев, указанных в манифесте.
{
"status": "downloading digestname",
"digest": "digestname",
"total": 2142590208,
"completed": 241970
}
После того, как все файлы загружены, окончательные ответы:
{
"status": "verifying sha256 digest"
}
{
"status": "writing manifest"
}
{
"status": "removing any unused layers"
}
{
"status": "success"
}
если для параметра stream задано значение false, то ответом будет один объект JSON:
{
"status": "success"
}
Выложить модель
POST /api/push
Загрузить модель в библиотеку моделей. Для этого необходимо зарегистрироваться на сайте ollama.ai и сначала добавить открытый ключ.
Параметры
- model: название модели, которую нужно вставить, в виде <пространство имен>/<модель>:<тег>
- insecure: (необязательно) разрешить небезопасные подключения к библиотеке. Используйте это только в том случае, если вы подключаетесь к своей библиотеке во время разработки.
- stream: (необязательно) если значение равно false, то ответ будет возвращен в виде одного объекта ответа, а не потока объектов
Примеры
Запрос
curl http://localhost:11434/api/push -d '{
"model": "mattw/pygmalion:latest"
}'
Ответ
Если параметр stream не указан или установлено значение true, возвращается поток объектов JSON:
{ "status": "retrieving manifest" }
и затем:
{
"status": "starting upload",
"digest": "sha256:bc07c81de745696fdf5afca05e065818a8149fb0c77266fb584d9b2cba3711ab",
"total": 1928429856
}
Затем следует серия ответов на загрузку:
{
"status": "starting upload",
"digest": "sha256:bc07c81de745696fdf5afca05e065818a8149fb0c77266fb584d9b2cba3711ab",
"total": 1928429856
}
Наконец, когда загрузка будет завершена:
{"status":"pushing manifest"}
{"status":"success"}
Если для параметра stream задано значение false, то ответом будет один объект JSON:
{ "status": "success" }
Генерировать встраивания
POST /api/embed
Создание встраиваний на основе модели
Параметры
- model: название модели, из которой будут создаваться встраивание
- input: текст или список текстов для создания встраиваний для
Расширенные параметры:
- truncate: обрезает конец каждого входного сигнала, чтобы он соответствовал длине контекста. Возвращает ошибку, если значение false и длина контекста превышены. По умолчанию используется значение true
- options: дополнительные параметры модели, перечисленные в документации к Modelfile, такие как температура
- keep_alive: определяет, как долго модель будет оставаться загруженной в память после запроса (по умолчанию: 5 минут).
Примеры
Запрос
curl http://localhost:11434/api/embed -d '{
"model": "all-minilm",
"input": "Why is the sky blue?"
}'
Ответ
{
"model": "all-minilm",
"embeddings": [[
0.010071029, -0.0017594862, 0.05007221, 0.04692972, 0.054916814,
0.008599704, 0.105441414, -0.025878139, 0.12958129, 0.031952348
]],
"total_duration": 14143917,
"load_duration": 1019500,
"prompt_eval_count": 8
}
Запрос (множественный ввод)
curl http://localhost:11434/api/embed -d '{
"model": "all-minilm",
"input": ["Why is the sky blue?", "Why is the grass green?"]
}'
Ответ
{
"model": "all-minilm",
"embeddings": [[
0.010071029, -0.0017594862, 0.05007221, 0.04692972, 0.054916814,
0.008599704, 0.105441414, -0.025878139, 0.12958129, 0.031952348
],[
-0.0098027075, 0.06042469, 0.025257962, -0.006364387, 0.07272725,
0.017194884, 0.09032035, -0.051705178, 0.09951512, 0.09072481
]]
}
Список запущенных моделей
GET /api/ps
Список моделей, которые в данный момент загружены в память.
Примеры
Запрос
curl http://localhost:11434/api/ps
Ответ
Будет возвращен один объект JSON.
{
"models": [
{
"name": "mistral:latest",
"model": "mistral:latest",
"size": 5137025024,
"digest": "2ae6f6dd7a3dd734790bbbf58b8909a606e0e7e97e94b7604e0aa7ae4490e6d8",
"details": {
"parent_model": "",
"format": "gguf",
"family": "llama",
"families": [
"llama"
],
"parameter_size": "7.2B",
"quantization_level": "Q4_0"
},
"expires_at": "2024-06-04T14:38:31.83753-07:00",
"size_vram": 5137025024
}
]
}
Создать встраивание
Примечание. Эта конечная точка заменена на /api/embed
POST /api/embeddings
Создание встраиваний к модели
Параметры
- model: имя модели для создания встраиваний из
- prompt: текст для создания встраивания для
Расширенные параметры:
- options: дополнительные параметры модели, перечисленные в документации к Modelfile, такие как температура
- Keep_alive: контролирует, как долго модель будет оставаться загруженной в память после запроса (по умолчанию: 5 м)
Примеры
Запрос
curl http://localhost:11434/api/embeddings -d '{
"model": "all-minilm",
"prompt": "Here is an article about llamas..."
}'
Ответ
{
"embedding": [
0.5670403838157654, 0.009260174818336964, 0.23178744316101074, -0.2916173040866852, -0.8924556970596313,
0.8785552978515625, -0.34576427936553955, 0.5742510557174683, -0.04222835972905159, -0.137906014919281
]
}
Версия
GET /api/version
Получить версию Ollama
Примеры
Запрос
curl http://localhost:11434/api/version
Ответ
{
"version": "0.5.1"
}