Загрузка файлов
OSMI-AI позволяет загружать изображения, аудио и другие файлы прямо из чата. В этом разделе вы узнаете, как включить и использовать эти функции.
Изображения
Некоторые модели для чата позволяют подавать изображения на вход. Всегда обращайтесь к официальной документации LLM, чтобы подтвердить, поддерживает ли модель ввод изображений.
Поддерживаемые модели:
- ChatOpenAI
- AzureChatOpenAI
- ChatAnthropic
- AWSChatBedrock
- ChatGoogleGenerativeAI
- ChatOllama
- Google Vertex AI
⚠️ Обработка изображений работает только с определенными цепочками/агентами в агенте. LLMChain, Conversation Chain, ReAct Agent, Conversational Agent, Tool Agent
Если вы включите опцию "Разрешить загрузку изображений", вы сможете загружать изображения через интерфейс чата.
Загрузка изображений через API
import requests
API_URL = "http://localhost:3000/api/v1/prediction/<agentsid>"
def query(payload):
response = requests.post(API_URL, json=payload)
return response.json()
output = query({
"question": "Can you describe the image?",
"uploads": [
{
"data": "data:image/png;base64,iVBORw0KGgdM2uN0", # base64 string or url
"type": "file", # file | url
"name": "osmi_ai.png",
"mime": "image/png"
}
]
})
async function query(data) {
const response = await fetch(
"http://localhost:3000/api/v1/prediction/<agentsid>",
{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(data)
}
);
const result = await response.json();
return result;
}
query({
"question": "Can you describe the image?",
"uploads": [
{
"data": "data:image/png;base64,iVBORw0KGgdM2uN0", //base64 string or url
"type": "file", // file | url
"name": "osmi_ai.png",
"mime": "image/png"
}
]
}).then((response) => {
console.log(response);
});
Преобразования речи в текст
В настройках агента вы можете выбрать модуль преобразования речи в текст. Поддерживаются следующие интеграции:
- OpenAI
- AssemblyAI
- LocalAI
Когда эта функция активирована, пользователи могут говорить прямо в микрофон. Их речь будет расшифрована в текст.
Загрузка аудио через API
import requests
API_URL = "http://localhost:3000/api/v1/prediction/<agentsid>"
def query(payload):
response = requests.post(API_URL, json=payload)
return response.json()
output = query({
"uploads": [
{
"data": "data:audio/webm;codecs=opus;base64,GkXf", # base64 string
"type": "audio",
"name": "audio.wav",
"mime": "audio/webm"
}
]
})
async function query(data) {
const response = await fetch(
"http://localhost:3000/api/v1/prediction/<agentsid>",
{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(data)
}
);
const result = await response.json();
return result;
}
query({
"uploads": [
{
"data": "data:audio/webm;codecs=opus;base64,GkXf", // base64 string
"type": "audio",
"name": "audio.wav",
"mime": "audio/webm"
}
]
}).then((response) => {
console.log(response);
});
Файлы
Загружать файлы можно двумя способами:
- RAG-загрузка
- Полная загрузка
Если включены обе опции, приоритет имеет полная загрузка.
Загрузки файлов RAG
Вы можете быстро обновлять или добавлять файлы в БД вектора по мере необходимости. Чтобы включить загрузку файлов, убедитесь, что выполнены следующие условия:
В агенте должен быть добавлен БД вектор, поддерживающее загрузку файлов. Поддерживаемые системы:
- Pinecone
- Milvus
- Postgres
- Qdrant
- Upstash
Если в агенте используется несколько БД векторов, загрузка файла возможна только для одного из них одновременно. Необходимо подключить хотя бы один узел загрузчика документов к входу документов этого БД вектора. Поддерживаемые загрузчики документов:
- CSV файл
- DOCX файл
- JSON файл
- Файл JSON Lines
- PDF файл
- Текстовый файл
- Неструктурированный файл
Вы можете загрузить один или несколько файлов в чат:
Как это работает:
- Метаданные для загруженных файлов обновляются с помощью chatId.
- Это связывает файл с идентификатором чата.
- При выполнении запроса применяется фильтр OR:
- Метаданные содержат
osmi_ai_chatId, и значение равно текущему идентификатору сессии чата. - Метаданные не содержат
osmi_ai_chatId.
Пример вставки в векторное хранилище на Pinecone (обновление или добавление векторных данных):
Чтобы сделать это через API, выполните два шага:
Шаг 1. Используйте API Vector Upsert с formData и chatId.
import requests
API_URL = "http://localhost:3000/api/v1/vector/upsert/<agentsid>"
# Use form data to upload files
form_data = {
"files": ("state_of_the_union.txt", open("state_of_the_union.txt", "rb"))
}
body_data = {
"chatId": "some-session-id"
}
def query(form_data):
response = requests.post(API_URL, files=form_data, data=body_data)
print(response)
return response.json()
output = query(form_data)
print(output)
// Use FormData to upload files
let formData = new FormData();
formData.append("files", input.files[0]);
formData.append("chatId", "some-session-id");
async function query(formData) {
const response = await fetch(
"http://localhost:3000/api/v1/vector/upsert/<agentsid>",
{
method: "POST",
body: formData
}
);
const result = await response.json();
return result;
}
query(formData).then((response) => {
console.log(response);
});
Шаг 2. Используйте Prediction API, передав uploads и тот же chatId:
import requests
API_URL = "http://localhost:3000/api/v1/prediction/<agentsid>"
def query(payload):
response = requests.post(API_URL, json=payload)
return response.json()
output = query({
"question": "What is the speech about?",
"chatId": "same-session-id-from-step-1",
"uploads": [
{
"data": "data:text/plain;base64,TWFkYWwcy4=",
"type": "file:rag",
"name": "state_of_the_union.txt",
"mime": "text/plain"
}
]
})
async function query(data) {
const response = await fetch(
"http://localhost:3000/api/v1/prediction/<agentsid>",
{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(data)
}
);
const result = await response.json();
return result;
}
query({
"question": "What is the speech about?",
"chatId": "same-session-id-from-step-1",
"uploads": [
{
"data": "data:text/plain;base64,TWFkYWwcy4=",
"type": "file:rag",
"name": "state_of_the_union.txt",
"mime": "text/plain"
}
]
}).then((response) => {
console.log(response);
});
Полная загрузка файлов
При загрузке файлов через RAG невозможно работать со структурированными данными, такими как таблицы или электронные таблицы, а также нельзя делать полное суммирование из-за отсутствия полного контекста. В некоторых случаях может понадобиться включить всё содержимое файла непосредственно в запрос для большой языковой модели (LLM), особенно для моделей с большим контекстным окном, таких как Gemini и Claude. Эта научная статья (ссылка) — одна из многих, сравнивающих RAG с моделями с более длинным контекстом.
Чтобы включить полную загрузку файлов, перейдите в настройки агента, откройте вкладку «File Upload» и активируйте переключатель.
В чате появится кнопка «Прикрепить файл», с помощью которой можно загрузить один или несколько файлов. Загрузчик файлов преобразует каждый файл в текст.
Обратите внимание: если в вашем агенте используется узел шаблона запроса (Chat Prompt Template), необходимо создать входные данные из «Format Prompt Values», чтобы передать данные файла. Указанное имя входа (например, {file}) должно быть включено в поле «Human Message».
Для загрузки файлов через API:
import requests
API_URL = "http://localhost:3000/api/v1/prediction/<agentsid>"
def query(payload):
response = requests.post(API_URL, json=payload)
return response.json()
output = query({
"question": "What is the data about?",
"chatId": "some-session-id",
"uploads": [
{
"data": "data:text/plain;base64,TWFkYWwcy4=",
"type": "file:full",
"name": "state_of_the_union.txt",
"mime": "text/plain"
}
]
})
async function query(data) {
const response = await fetch(
"http://localhost:3000/api/v1/prediction/<agentsid>",
{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(data)
}
);
const result = await response.json();
return result;
}
query({
"question": "What is the data about?",
"chatId": "some-session-id",
"uploads": [
{
"data": "data:text/plain;base64,TWFkYWwcy4=",
"type": "file:full",
"name": "state_of_the_union.txt",
"mime": "text/plain"
}
]
}).then((response) => {
console.log(response);
});
Как видно из примеров, загрузка требует строки в формате base64. Чтобы получить строку base64 для файла, используйте API «Вложения».
Разница между полной загрузкой и загрузкой RAG
Оба способа загрузки файлов — Полная загрузка и RAG (Retrieval-Augmented Generation) — служат разным целям.
- Полная загрузка файла: Этот метод преобразует весь файл в строку и отправляет её в большую языковую модель (LLM). Он полезен для суммирования документа или извлечения ключевой информации. Однако при очень больших файлах модель может выдавать неточные результаты или «галлюцинации» из-за ограничения по количеству токенов.
- Загрузка RAG: Рекомендуется, если вы хотите снизить затраты на токены, не отправляя весь текст в LLM. Этот подход подходит для задач вопрос-ответ по документам, но не подходит для суммирования, так как отсутствует полный контекст документа. Кроме того, этот процесс может занимать больше времени из-за операции обновления (upsert).

