Генерация текста
Полный список моделей можно посмотреть тут или получить динамически через API эндпоинты: https://openai.bothub.chat/v1/models и https://bothub.chat/api/v2/replicate/v1/models
Для работы с текстом, визуальным анализом и многим другим в BotHub используется шлюз OpenAI. Вы можете выполнять запросы через два разных эндпоинта в зависимости от архитектуры вашего проекта: классический Chat Completions API или современный Responses API.
Chat Completions API vs Responses API
- Chat Completions API — классический эндпоинт, построенный вокруг привычной системы ролей (
system,user,assistant). Он полностью совместим с официальными SDK OpenAI. Отличный выбор для быстрой интеграции и стандартных чат-интерфейсов. - Responses API — новый мультимодальный эндпоинт. Он не требует официальных SDK, поддерживает как простой строковый ввод, так и сложные массивы данных, а также позволяет гибко управлять структурой ответа (JSON-схемы) и инструментами.
1. Chat Completions API (Классический шлюз)
Этот эндпоинт полностью совместим с синтаксисом OpenAI. Вы можете использовать официальные библиотеки, просто переопределив baseURL на https://openai.bothub.chat/v1.
Синхронная генерация
- JS
- Python
- Go
- cURL
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: 'ВАШ_API_КЛЮЧ_BOTHUB',
baseURL: 'https://openai.bothub.chat/v1'
});
async function main() {
const completion = await openai.chat.completions.create({
model: 'claude-opus-5',
messages: [{ role: 'user', content: 'Привет! Расскажи о себе в трех словах.' }],
});
console.log(completion.choices[0].message.content);
}
main();
from openai import OpenAI
client = OpenAI(
api_key='ВАШ_API_КЛЮЧ_BOTHUB',
base_url='https://openai.bothub.chat/v1'
)
completion = client.chat.completions.create(
model='claude-opus-5',
messages=[{'role': 'user', 'content': 'Привет! Расскажи о себе в трех словах.'}]
)
print(completion.choices[0].message.content)
package main
import (
"context"
"fmt"
"github.com/openai/openai-go"
"github.com/openai/openai-go/option"
)
func main() {
client := openai.NewClient(
option.WithAPIKey("ВАШ_API_КЛЮЧ_BOTHUB"),
option.WithBaseURL("https://openai.bothub.chat/v1"),
)
completion, err := client.Chat.Completions.New(context.Background(), openai.ChatCompletionNewParams{
Model: openai.ChatModel("claude-opus-5"),
Messages: []openai.ChatCompletionMessageParamUnion{
openai.UserMessage("Привет! Расскажи о себе в трех словах."),
},
})
if err != nil {
panic(err)
}
fmt.Println(completion.Choices[0].Message.Content)
}
curl https://openai.bothub.chat/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ВАШ_API_КЛЮЧ_BOTHUB" \
-d '{
"model": "claude-opus-5",
"messages": [{"role": "user", "content": "Привет! Расскажи о себе в трех словах."}]
}'
Потоковая генерация (Streaming)
- JS
- Python
- Go
- cURL
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: 'ВАШ_API_КЛЮЧ_BOTHUB',
baseURL: 'https://openai.bothub.chat/v1'
});
async function main() {
const stream = await openai.chat.completions.create({
model: 'claude-opus-5',
messages: [{ role: 'user', content: 'Напиши короткую историю об ИИ.' }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || '');
}
}
main();
from openai import OpenAI
client = OpenAI(
api_key='ВАШ_API_КЛЮЧ_BOTHUB',
base_url='https://openai.bothub.chat/v1'
)
stream = client.chat.completions.create(
model='claude-opus-5',
messages=[{'role': 'user', 'content': 'Напиши короткую историю об ИИ.'}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")
package main
import (
"context"
"fmt"
"github.com/openai/openai-go"
"github.com/openai/openai-go/option"
)
func main() {
client := openai.NewClient(
option.WithAPIKey("ВАШ_API_КЛЮЧ_BOTHUB"),
option.WithBaseURL("https://openai.bothub.chat/v1"),
)
stream := client.Chat.Completions.NewStreaming(context.Background(), openai.ChatCompletionNewParams{
Model: openai.ChatModel("claude-opus-5"),
Messages: []openai.ChatCompletionMessageParamUnion{
openai.UserMessage("Напиши короткую историю об ИИ."),
},
})
for stream.Next() {
chunk := stream.Current()
if len(chunk.Choices) > 0 {
fmt.Print(chunk.Choices[0].Delta.Content)
}
}
if err := stream.Err(); err != nil {
panic(err)
}
}
curl https://openai.bothub.chat/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ВАШ_API_КЛЮЧ_BOTHUB" \
-d '{
"model": "claude-opus-5",
"messages": [{"role": "user", "content": "Напиши короткую историю об ИИ."}],
"stream": true
}'
Пример ответа шлюза OpenAI:
{
"id": "gen-1779989130-XaEliNRQ9QbSu4dyJgr3",
"object": "chat.completion",
"created": 1779989130,
"model": "anthropic/claude-4.7-opus-fast-20260512",
"provider": "Anthropic",
"system_fingerprint": null,
"service_tier": "default",
"choices": [
{
"index": 0,
"logprobs": null,
"finish_reason": "stop",
"native_finish_reason": "end_turn",
"message": {
"role": "assistant",
"content": "ИИ-помощник от Anthropic.",
"refusal": null,
"reasoning": null
}
}
],
"usage": {
"prompt_tokens": 29,
"completion_tokens": 19,
"total_tokens": 48,
"cost": 0.00372,
"is_byok": false,
"prompt_tokens_details": {
"cached_tokens": 0,
"cache_write_tokens": 0,
"audio_tokens": 0,
"video_tokens": 0
},
"cost_details": {
"upstream_inference_cost": 0.00372,
"upstream_inference_prompt_cost": 0.00087,
"upstream_inference_completions_cost": 0.00285
},
"completion_tokens_details": {
"reasoning_tokens": 0,
"image_tokens": 0,
"audio_tokens": 0
},
"speed": "fast"
}
}
2. Responses API (Новый унифицированный шлюз)
Этот эндпоинт принимает запросы по адресу https://openai.bothub.chat/v1/responses напрямую через стандартные HTTP-методы. Он предлагает упрощенную структуру для простого текста и продвинутый контроль для многоходовых диалогов.
Responses API Alpha не хранит историю переписки на сервере. Для поддержания контекста клиентская сторона должна передавать массив всех предыдущих сообщений в свойстве input при каждом новом запросе.
Вариант 1: Простой текстовый ввод (Строка)
- JS
- Python
- Go
- cURL
async function sendRequest() {
const response = await fetch('https://openai.bothub.chat/v1/responses', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ВАШ_API_КЛЮЧ_BOTHUB'
},
body: JSON.stringify({
model: 'claude-opus-5',
input: 'В чем смысл жизни?',
max_output_tokens: 4000
})
});
const result = await response.json();
console.log(result.output[0].content[0].text);
}
sendRequest();
import requests
url = "https://openai.bothub.chat/v1/responses"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer ВАШ_API_КЛЮЧ_BOTHUB"
}
data = {
"model": "claude-opus-5",
"input": "В чем смысл жизни?",
"max_output_tokens": 4000
}
response = requests.post(url, json=data, headers=headers)
result = response.json()
print(result['output'][0]['content'][0]['text'])
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
)
func main() {
payload := map[string]any{
"model": "claude-opus-5",
"input": "В чем смысл жизни?",
"max_output_tokens": 4000,
}
body, err := json.Marshal(payload)
if err != nil {
panic(err)
}
req, err := http.NewRequest("POST", "https://openai.bothub.chat/v1/responses", bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer ВАШ_API_КЛЮЧ_BOTHUB")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
data, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
var result map[string]any
if err := json.Unmarshal(data, &result); err != nil {
panic(err)
}
output := result["output"].([]any)
first := output[0].(map[string]any)
content := first["content"].([]any)
text := content[0].(map[string]any)["text"]
fmt.Println(text)
}
curl https://openai.bothub.chat/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ВАШ_API_КЛЮЧ_BOTHUB" \
-d '{
"model": "claude-opus-5",
"input": "В чем смысл жизни?",
"max_output_tokens": 4000
}'