0Pricing
AI Agents · Урок

Агенты, работающие с изображениями и текстом: Claude Vision и GPT-4V

Передача изображений в вызовах API, визуальная привязка и использование инструментов с учётом изображений.

«Агенты, работающие с изображениями и текстом: Claude Vision и GPT-4V» — бесплатный урок AI Agents на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.

Мультимодальные агенты: изображения и текст

Мультимодальный агент умеет не только читать, но и видеть. Отправляя изображения вместе с текстом в одном вызове программного интерфейса, агент может отвечать на вопросы о фотографиях, анализировать диаграммы, читать снимки экрана и описывать схемы — всё в рамках одного цикла диалога.

Отправка изображений с помощью программного интерфейса OpenAI

Модели OpenAI для анализа изображений (GPT-4o, GPT-4V) принимают массив content вместо обычной строки. Каждый элемент — это либо объект text, либо объект image_url. Изображение может быть общедоступным URL или URL данных, закодированным по основанию 64.

from openai import OpenAI

client = OpenAI(api_key='YOUR_OPENAI_API_KEY')

# Using a public URL
response = client.chat.completions.create(
    model='gpt-4o',
    messages=[
        {
            'role': 'user',
            'content': [
                {
                    'type': 'image_url',
                    'image_url': {
                        'url': 'https://example.com/chart.png'
                    }
                },
                {
                    'type': 'text',
                    'text': 'What trend does this chart show?'
                }
            ]
        }
    ],
    max_tokens=512
)
print(response.choices[0].message.content)

Кодирование изображений по основанию 64

Изображения, недоступные публично (локальные файлы, снимки экрана, загруженные пользователями), кодируйте по основанию 64 и встраивайте непосредственно в вызов программного интерфейса, используя схему URL data:image/jpeg;base64,....

import base64
from pathlib import Path

Path('screenshot.png').write_bytes(b'\x89PNG\r\n\x1a\n' + bytes(range(40)))

def encode_image_to_base64(image_path: str) -> str:
    with open(image_path, 'rb') as f:
        return base64.b64encode(f.read()).decode('utf-8')

def build_image_message(image_path: str, question: str, mime: str = 'jpeg') -> dict:
    b64 = encode_image_to_base64(image_path)
    data_url = f'data:image/{mime};base64,{b64}'
    return {
        'role': 'user',
        'content': [
            {'type': 'image_url', 'image_url': {'url': data_url}},
            {'type': 'text', 'text': question}
        ]
    }

message = build_image_message('screenshot.png', 'What error is shown?', mime='png')
print('Message built, image size:', len(message['content'][0]['image_url']['url']))

Программный интерфейс компьютерного зрения Claude

Модели Anthropic также поддерживают анализ изображений. Блок содержимого использует поле source со значениями type: base64 и media_type. Структура немного отличается от структуры OpenAI, но обладает такой же мощью.

import anthropic
import base64

client = anthropic.Anthropic(api_key='YOUR_ANTHROPIC_API_KEY')

with open('diagram.png', 'rb') as f:
    image_data = base64.standard_b64encode(f.read()).decode('utf-8')

response = client.messages.create(
    model='claude-opus-4-5',
    max_tokens=512,
    messages=[
        {
            'role': 'user',
            'content': [
                {
                    'type': 'image',
                    'source': {
                        'type': 'base64',
                        'media_type': 'image/png',
                        'data': image_data
                    }
                },
                {
                    'type': 'text',
                    'text': 'Describe the architecture shown in this diagram.'
                }
            ]
        }
    ]
)
print(response.content[0].text)

Определение типа MIME по расширению файла

Для разных форматов изображений (JPEG, PNG, GIF, WebP) используются разные типы MIME. Автоматически определяйте тип MIME по расширению файла, чтобы никогда не задавать его вручную в коде агента.

import os
import base64

with open('photo.jpg', 'wb') as f:
    f.write(b'\xff\xd8\xff' + bytes(range(30)))

MIME_MAP = {
    '.jpg': 'image/jpeg',
    '.jpeg': 'image/jpeg',
    '.png': 'image/png',
    '.gif': 'image/gif',
    '.webp': 'image/webp'
}

def get_mime_type(image_path: str) -> str:
    ext = os.path.splitext(image_path)[1].lower()
    mime = MIME_MAP.get(ext)
    if not mime:
        raise ValueError(f'Unsupported image format: {ext}')
    return mime

def load_image_as_base64(image_path: str) -> tuple:
    """Returns (base64_string, mime_type)"""
    mime = get_mime_type(image_path)
    with open(image_path, 'rb') as f:
        b64 = base64.b64encode(f.read()).decode('utf-8')
    return b64, mime

b64, mime = load_image_as_base64('photo.jpg')
print(f'MIME: {mime}, Size: {len(b64)} bytes base64')

Анализ изображений в цикле агента

В цикле агента анализ изображений — это инструмент. Агент решает, когда его вызвать, так же как любой другой инструмент. Определите его в схеме инструмента и возвращайте структурированные данные (JSON), чтобы агент мог программно рассуждать на их основе.

def analyze_image_tool(image_path: str, query: str) -> dict:
    """
    Agent tool: analyse an image and return structured findings.
    """
    import anthropic, base64
    client = anthropic.Anthropic(api_key='YOUR_API_KEY')
    b64, mime = load_image_as_base64(image_path)

    structured_query = (
        query + '\n\nRespond with JSON only: '
        '{"description": str, "objects": [str], "text_found": str, "confidence": float}'
    )
    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{
            'role': 'user',
            'content': [
                {'type': 'image', 'source': {'type': 'base64',
                  'media_type': mime, 'data': b64}},
                {'type': 'text', 'text': structured_query}
            ]
        }]
    )
    import json
    return json.loads(response.content[0].text)

Управление уровнем детализации изображений (OpenAI)

Программный интерфейс компьютерного зрения OpenAI принимает параметр detail: low (быстро, дёшево, 85 токенов), high (подробно, изображение разбивается на фрагменты, до 1105 токенов) или auto (решение принимает модель). Используйте low для простых вопросов с ответом «да» или «нет», а high — для детального анализа, например чтения мелкого текста.

def query_image_openai(
    image_path: str,
    question: str,
    detail: str = 'auto'  # 'low', 'high', or 'auto'
) -> str:
    import base64
    from openai import OpenAI
    client = OpenAI(api_key='YOUR_OPENAI_API_KEY')
    b64, mime = load_image_as_base64(image_path)
    data_url = f'data:{mime};base64,{b64}'

    response = client.chat.completions.create(
        model='gpt-4o',
        max_tokens=512,
        messages=[{
            'role': 'user',
            'content': [
                {
                    'type': 'image_url',
                    'image_url': {'url': data_url, 'detail': detail}
                },
                {'type': 'text', 'text': question}
            ]
        }]
    )
    return response.choices[0].message.content

Диалоги с несколькими изображениями

Можно отправить несколько изображений в одном сообщении или в разных ходах диалога. Это позволяет выполнять задачи сравнения: «Сравните эти два снимка экрана и опишите, что изменилось».

def compare_two_images(
    image_path_1: str,
    image_path_2: str,
    comparison_question: str
) -> str:
    import anthropic, base64
    client = anthropic.Anthropic(api_key='YOUR_API_KEY')
    b64_1, mime_1 = load_image_as_base64(image_path_1)
    b64_2, mime_2 = load_image_as_base64(image_path_2)

    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{
            'role': 'user',
            'content': [
                {'type': 'image', 'source': {'type': 'base64',
                  'media_type': mime_1, 'data': b64_1}},
                {'type': 'image', 'source': {'type': 'base64',
                  'media_type': mime_2, 'data': b64_2}},
                {'type': 'text', 'text': comparison_question}
            ]
        }]
    )
    return response.content[0].text

Агент для работы с изображениями: чтение снимков экрана

Практический пример: агент, который читает снимки экрана приложений и извлекает значения полей форм, сообщения об ошибках или состояние интерфейса. Это полезно для автоматизации тестирования и мониторинга конвейеров.

SCREENSHOT_READER_PROMPT = (
    'You are a UI analyser. Given this application screenshot, extract:\n'
    '1. The current page/screen name\n'
    '2. Any error messages\n'
    '3. Key UI elements visible (buttons, form fields, text)\n'
    '4. The overall app state\n\n'
    'Return JSON: {"screen": str, "errors": [str], '
    '"elements": [str], "state": str}'
)

def read_screenshot(screenshot_path: str) -> dict:
    import anthropic, base64, json
    client = anthropic.Anthropic(api_key='YOUR_API_KEY')
    b64, mime = load_image_as_base64(screenshot_path)
    response = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=512,
        messages=[{
            'role': 'user',
            'content': [
                {'type': 'image', 'source': {'type': 'base64',
                  'media_type': mime, 'data': b64}},
                {'type': 'text', 'text': SCREENSHOT_READER_PROMPT}
            ]
        }]
    )
    return json.loads(response.content[0].text)

Оптимизация стоимости вызовов компьютерного зрения

Вызовы программного интерфейса компьютерного зрения значительно дороже вызовов только текстового интерфейса. Оптимизируйте расходы: изменяйте размер изображений перед кодированием (большинство моделей принимает изображения размером от 512×512 до 2048×2048), используйте detail=low для простых задач, кэшируйте результаты анализа неизменившихся изображений и объединяйте несколько вопросов в один вызов.

from PIL import Image
import io, base64

def resize_and_encode(
    image_path: str,
    max_dim: int = 1024
) -> tuple:
    img = Image.open(image_path)
    # Resize maintaining aspect ratio
    ratio = min(max_dim / img.width, max_dim / img.height)
    if ratio < 1.0:
        new_w = int(img.width * ratio)
        new_h = int(img.height * ratio)
        img = img.resize((new_w, new_h), Image.LANCZOS)
        print(f'Resized to {new_w}x{new_h} (from {img.width}x{img.height})')

    # Convert to JPEG for smaller size
    buf = io.BytesIO()
    img.save(buf, format='JPEG', quality=85)
    b64 = base64.b64encode(buf.getvalue()).decode('utf-8')
    return b64, 'image/jpeg'

Ограничения компьютерного зрения и резервные варианты

У моделей компьютерного зрения есть ограничения: они не могут надёжно читать очень мелкий текст, испытывают трудности с сильно сжатыми изображениями и могут выдумывать детали. Всегда проверяйте критически важные извлечённые данные (например, числа на диаграммах) с помощью резервного промпта, запрашивающего оценки уверенности.

def analyze_with_confidence(
    image_path: str,
    question: str,
    confidence_threshold: float = 0.7
) -> dict:
    import anthropic, json
    client = anthropic.Anthropic(api_key='YOUR_API_KEY')
    b64, mime = load_image_as_base64(image_path)

    prompt = (
        question + '\n\nAlso rate your confidence (0.0-1.0) in the answer.\n'
        'Return JSON: {"answer": str, "confidence": float, '
        '"uncertainty_reason": str}'
    )
    response = client.messages.create(
        model='claude-opus-4-5', max_tokens=256,
        messages=[{'role': 'user', 'content': [
            {'type': 'image', 'source': {'type': 'base64',
              'media_type': mime, 'data': b64}},
            {'type': 'text', 'text': prompt}
        ]}]
    )
    result = json.loads(response.content[0].text)
    if result['confidence'] < confidence_threshold:
        result['action'] = 'human_review_needed'
    return result

Проверка знаний

Какой параметр управляет уровнем детализации анализа изображений и стоимостью в программном интерфейсе компьютерного зрения OpenAI?

Итоги: агенты для работы с изображениями и текстом

Отличная работа! Вы изучили следующее:

  • Компьютерное зрение OpenAI: массив content с объектами image_url и text; поддерживаются URL и кодирование по основанию 64
  • Компьютерное зрение Claude: source.type: base64 с полем media_type
  • Кодирование по основанию 64: прочитать файл → закодировать по основанию 64 → встроить как URL данных
  • Уровень детализации: используйте low для быстрого и недорогого анализа, а high — для детального анализа
  • Оптимизация стоимости: изменяйте размер изображений, объединяйте вопросы и кэшируйте результаты

Далее: рабочие процессы агентов для аудио и текста с транскрибированием Whisper и ответами TTS.

Часто задаваемые вопросы

Урок «Агенты, работающие с изображениями и текстом: Claude Vision и GPT-4V» бесплатный?

Да — полный текст урока «Агенты, работающие с изображениями и текстом: Claude Vision и GPT-4V» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.

Чему я научусь в уроке «Агенты, работающие с изображениями и текстом: Claude Vision и GPT-4V»?

Передача изображений в вызовах API, визуальная привязка и использование инструментов с учётом изображений. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Agents?

Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Агенты, работающие с изображениями и текстом: Claude Vision и GPT-4V»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Agents?

Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Агенты, работающие с изображениями и текстом: Claude Vision и GPT-4V
  2. Рабочие процессы агентов с аудио и текстом
  3. Понимание видео агентами
  4. Шаблоны кросс-модального рассуждения
← Назад к AI Agents