Интерфейс LLM в Ultralytics#
LLM — это небольшой интерфейс для вызова языковых и визуальных моделей через API, совместимый с OpenAI. Он подготавливает текстовый или визуальный ввод, передает аргументы запроса в официальный Python SDK от OpenAI и возвращает нативный объект ответа SDK. Это позволяет легко добавить языковые или визуальные рассуждения рядом с пайплайном YOLO без необходимости оборачивать типы ответов конкретного провайдера.
API по умолчанию — responses; используй api="chat.completions" для провайдеров, которые реализуют только Chat Completions.
Установка#
Установи Ultralytics с дополнительной зависимостью для LLM:
pip install "ultralytics[llm]"Для OpenAI задай ключ API в переменной окружения:
export OPENAI_API_KEY="your-api-key"Responses API#
Responses API используется по умолчанию. Передай промпт и прочитай output_text:
from ultralytics import LLM
llm = LLM("gpt-5.6-luna")
response = llm("What is YOLO?")
print(response.output_text)Мультимодальный ввод#
Передай путь, HTTP URL, data URI, массив NumPy или изображение PIL через image:
from ultralytics import LLM
llm = LLM("gpt-5.6-luna")
response = llm("What is happening in this image?", image="https://ultralytics.com/images/bus.jpg")
print(response.output_text)Локальные файлы и объекты изображений кодируются в виде data URI в формате JPEG. Массивы NumPy используют порядок каналов BGR в OpenCV. Строка, переданная как source, например llm("bus.jpg"), обрабатывается как текст; используй аргумент image для отправки изображения.
Используй prompt для инструкции, общей для каждого запроса:
llm = LLM("gpt-5.6-luna", prompt="Answer in one sentence.")
response = llm("Describe this image.", image="bus.jpg")Chat Completions#
Выбирай Chat Completions, когда это требуется эндпоинтом, и читай структуру его нативного ответа:
from ultralytics import LLM
llm = LLM("gpt-5.6-luna", api="chat.completions")
response = llm("What is non-maximum suppression?")
print(response.choices[0].message.content)Тот же интерфейс принимает мультимодальный ввод:
response = llm("Describe this image.", image="bus.jpg")
print(response.choices[0].message.content)Передавай нативные объекты сообщений, когда тебе нужна история диалога. Они пересылаются без изменений.
Потоковая передача и асинхронные вызовы#
Аргументы запросов SDK передаются без изменений, включая stream=True:
llm = LLM("gpt-5.6-luna")
for event in llm("Explain object detection.", stream=True):
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)Используй async_call для параллельных запросов:
import asyncio
from ultralytics import LLM
llm = LLM("gpt-5.6-luna")
async def main():
response = await llm.async_call("What is YOLO?")
print(response.output_text)
asyncio.run(main())Провайдеры, совместимые с OpenAI#
LLM работает с провайдерами, которые предоставляют Responses API или Chat Completions API, совместимые с OpenAI, включая DeepSeek, Kimi, Z.AI GLM и OpenRouter. Задай base_url провайдера, имя модели и ключ API:
from ultralytics import LLM
llm = LLM(
"provider-model",
api="chat.completions",
base_url="https://provider.example/v1",
api_key="your-api-key",
)
response = llm("What tasks does YOLO support?")
print(response.choices[0].message.content)Такая же конфигурация работает с совместимыми локальными серверами. Имена моделей, поддержка изображений, аргументы запросов и поддерживаемые API различаются у разных провайдеров, поэтому проверяй их связанную документацию.
Объединение YOLO и LLM#
Сначала запусти YOLO, а затем вызывай LLM только тогда, когда обнаружен человек:
from ultralytics import LLM, YOLO
yolo = YOLO("yolo26n.pt")
llm = LLM("gpt-5.6-luna")
image = "https://ultralytics.com/images/bus.jpg"
result = yolo(image)[0]
# Call the LLM only when YOLO detects a person.
if any(result.names[int(cls)] == "person" for cls in result.boxes.cls):
response = llm("Describe the scene.", image=image)
print(response.output_text)Справочник по API#
| Аргумент | По умолчанию | Описание |
|---|---|---|
model | "gpt-5.6-luna" | Идентификатор модели, отправляемый на выбранный эндпоинт |
api | "responses" | Формат API: "responses" или "chat.completions" |
base_url | None | Необязательный эндпоинт, совместимый с OpenAI |
api_key | None | Ключ API; в противном случае SDK считывает OPENAI_API_KEY |
prompt | None | Инструкция, добавляемая в начало запросов с обычным текстом и изображениями |
**kwargs | Аргументы запросов SDK по умолчанию; аргументы для конкретного вызова переопределяют соответствующие значения конструктора |
source принимает текст, нативный список сообщений или объект изображения. image принимает URL изображения, data URI, путь, массив NumPy или изображение PIL. Вызов model() с настроенным prompt отправляет только сам промпт.
LLM предназначен только для инференса и недоступен через CLI yolo. Он не реализует train, val, export, track или benchmark.
FAQ#
LLMпо умолчанию использует Responses API. Установиapi="chat.completions"для эндпоинтов Chat Completions.Ты можешь использовать OpenAI или другого провайдера с совместимым API, такого как DeepSeek, Kimi, Z.AI GLM или OpenRouter. Используй имя модели, базовый URL и ключ API провайдера.
Передай промпт в качестве первого аргумента, а локальный путь, URL, data URI, массив NumPy или изображение PIL — через
image. Поддержка изображений зависит от выбранной модели и провайдера.Нет.
LLMобеспечивает только синхронный и асинхронный инференс. ИспользуйYOLOот Ultralytics для обучения, валидации, предсказания, экспорта, трекинга и бенчмаркинга в компьютерном зрении.