Skip to content

Изображения и PDF

AITUNNEL поддерживает отправку изображений и PDF-файлов через API. Это руководство покажет вам, как работать с обоими типами файлов, используя наш API.

TIP

Вы можете отправить как PDF, так и изображения в одном запросе.

Входные изображения

Запросы с изображениями к мультимодальным моделям доступны через API /v1/chat/completions с параметром messages в формате multi-part. image_url может быть либо URL, либо изображением в формате base64. Обратите внимание, что несколько изображений можно отправить в отдельных элементах массива content. Количество изображений, которые вы можете отправить в одном запросе, варьируется в зависимости от провайдера и модели. Из-за того, как обрабатывается контент, мы рекомендуем сначала отправлять текстовый запрос, а затем изображения. Если изображения должны идти первыми, мы рекомендуем поместить их в системный промпт.

Использование URL изображений

Вот как отправить изображение, используя URL:

python
import requests
import json

url = "https://api.aitunnel.ru/v1/chat/completions"
headers = {
    "Authorization": "Bearer sk-aitunnel-xxx",
    "Content-Type": "application/json"
}

messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "text",
                "text": "Что изображено на этой картинке?"
            },
            {
                "type": "image_url",
                "image_url": {
                    "url": "https://img.freepik.com/free-photo/red-white-cat-i-white-studio_155003-13189.jpg"
                }
            }
        ]
    }
]

payload = {
    "model": "gpt-4o",
    "messages": messages
}

response = requests.post(url, headers=headers, json=payload)
print(response.json())
typescript
const response = await fetch("https://api.aitunnel.ru/v1/chat/completions", {
  method: "POST",
  headers: {
    Authorization: "Bearer sk-aitunnel-xxx",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "gpt-4o",
    messages: [
      {
        role: "user",
        content: [
          {
            type: "text",
            text: "Что изображено на этой картинке?",
          },
          {
            type: "image_url",
            image_url: {
              url: "https://img.freepik.com/free-photo/red-white-cat-i-white-studio_155003-13189.jpg",
            },
          },
        ],
      },
    ],
  }),
});

const data = await response.json();
console.log(data);

Использование изображений в формате Base64

Для локально хранящихся изображений вы можете отправить их, используя кодировку base64. Вот как это сделать:

python
import requests
import json
import base64
from pathlib import Path

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

url = "https://api.aitunnel.ru/v1/chat/completions"
headers = {
    "Authorization": "Bearer sk-aitunnel-xxx",
    "Content-Type": "application/json"
}

# Читаем и кодируем изображение
image_path = "path/to/your/image.jpg"
base64_image = encode_image_to_base64(image_path)
data_url = f"data:image/jpeg;base64,{base64_image}"

messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "text",
                "text": "Что изображено на этой картинке?"
            },
            {
                "type": "image_url",
                "image_url": {
                    "url": data_url
                }
            }
        ]
    }
]

payload = {
    "model": "gpt-4o",
    "messages": messages
}

response = requests.post(url, headers=headers, json=payload)
print(response.json())
typescript
async function encodeImageToBase64(imagePath: string): Promise<string> {
  const imageBuffer = await fs.promises.readFile(imagePath);
  const base64Image = imageBuffer.toString("base64");
  return `data:image/jpeg;base64,${base64Image}`;
}

// Читаем и кодируем изображение
const imagePath = "path/to/your/image.jpg";
const base64Image = await encodeImageToBase64(imagePath);

const response = await fetch("https://api.aitunnel.ru/v1/chat/completions", {
  method: "POST",
  headers: {
    Authorization: "Bearer sk-aitunnel-xxx",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "gpt-4o",
    messages: [
      {
        role: "user",
        content: [
          {
            type: "text",
            text: "Что изображено на этой картинке?",
          },
          {
            type: "image_url",
            image_url: {
              url: base64Image,
            },
          },
        ],
      },
    ],
  }),
});

const data = await response.json();
console.log(data);

Поддерживаемые типы изображений:

  • image/png
  • image/jpeg
  • image/webp

Поддержка PDF

AITUNNEL поддерживает обработку PDF через API /v1/chat/completions. PDF-файлы могут быть отправлены как URL-адреса данных в формате base64 в массиве сообщений через тип контента файла. Эта функция работает с любой моделью на AITUNNEL.

INFO

Когда модель поддерживает ввод файлов нативно, PDF передается непосредственно в модель. Когда модель не поддерживает ввод файлов нативно, AITUNNEL проанализирует файл и передаст результаты анализа запрошенной модели.

Обратите внимание, что несколько PDF-файлов можно отправить в отдельных элементах массива content. Количество PDF-файлов, которые вы можете отправить в одном запросе, варьируется в зависимости от провайдера и модели. Из-за того, как обрабатывается контент, мы рекомендуем сначала отправлять текстовый запрос, а затем PDF. Если PDF должен идти первым, мы рекомендуем поместить его в системный промпт.

Обработка PDF

Вот как отправить и обработать PDF:

python
import requests
import json
import base64
from pathlib import Path

def encode_pdf_to_base64(pdf_path):
    with open(pdf_path, "rb") as pdf_file:
        return base64.b64encode(pdf_file.read()).decode('utf-8')

url = "https://api.aitunnel.ru/v1/chat/completions"
headers = {
    "Authorization": "Bearer sk-aitunnel-xxx",
    "Content-Type": "application/json"
}

# Читаем и кодируем PDF
pdf_path = "path/to/your/document.pdf"
base64_pdf = encode_pdf_to_base64(pdf_path)
data_url = f"data:application/pdf;base64,{base64_pdf}"

messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "text",
                "text": "Какие основные моменты в этом документе?"
            },
            {
                "type": "file",
                "file": {
                    "filename": "document.pdf",
                    "file_data": data_url
                }
            },
        ]
    }
]

payload = {
    "model": "gpt-4o",
    "messages": messages,
    "plugins": plugins
}

response = requests.post(url, headers=headers, json=payload)
print(response.json())
typescript
async function encodePDFToBase64(pdfPath: string): Promise<string> {
  const pdfBuffer = await fs.promises.readFile(pdfPath);
  const base64PDF = pdfBuffer.toString("base64");
  return `data:application/pdf;base64,${base64PDF}`;
}

// Читаем и кодируем PDF
const pdfPath = "path/to/your/document.pdf";
const base64PDF = await encodePDFToBase64(pdfPath);

const response = await fetch("https://api.aitunnel.ru/v1/chat/completions", {
  method: "POST",
  headers: {
    Authorization: "Bearer sk-aitunnel-xxx",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "gpt-4o",
    messages: [
      {
        role: "user",
        content: [
          {
            type: "text",
            text: "Какие основные моменты в этом документе?",
          },
          {
            type: "file",
            file: {
              filename: "document.pdf",
              file_data: base64PDF,
            },
          },
        ],
      },
    ],
  }),
});

const data = await response.json();
console.log(data);

Формат ответа

API вернет ответ в следующем формате:

json
{
  "id": "gen-1234567890",
  "model": "gpt-4o",
  "object": "chat.completion",
  "created": 1234567890,
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": "Документ обсуждает..."
      }
    }
  ],
  "usage": {
    "prompt_tokens": 1000,
    "completion_tokens": 100,
    "total_tokens": 1100
  }
}

AITUNNEL