Опенсорс примеры
Как сделать сервис «Вопросы по файлу»
Варианта 2:
1. Текстовая часть вашего файла помещается в контекст нейросети (например, gpt-4o-mini имеет контекст 128000 токенов).
В таком случае мы рекомендуем (следуя рекомендациям Antropic, создателей Claude) добавлять всю текстовую часть вашего файла в запрос к нейросети
Условно код выглядит так (в article подставьте текстовую часть вашего DOCX или PDF файла):
context_prompt = f"""Here's an article:\n\n<article>
{article}\n\n</article>\n\n"""
context_message = {"role": "system", "content": context_prompt}
question_message = {"role": "user", "content": "Напиши краткое содержание данной статьи"}Таким же образом работает и наш сервис «Вопросы по файлу» – см. готовый пример ниже
Чтобы получить текстовое содержимое вашего файла, вы можете использовать локальную конвертацию или воспользоваться нашей моделью utils/extract-text.
2. Файл (и база знаний) слишком большие и не помещаются в контекст.
Тогда обратитесь к разделу Демо: RAG – там есть пример, основанный на embedding, который показывает, как добавлять потенциально релевантные части вашего файла в контекст запроса к нейросети.
Демо: аналог сервиса «Вопросы по файлу»
import time
import requests
import base64
VSEGPT_KEY = "sk-or-..."
# ---------------- Получаем текст файла ----------------
# Кодируем файл в base64
with open("example.pdf", "rb") as file:
encoded_file = base64.b64encode(file.read()).decode('utf-8')
# Отправляем запрос
response = requests.post(
"https://api.vsegpt.ru/v1/extract_text",
headers = {
"Authorization": f"Bearer {VSEGPT_KEY}",
"X-Title": "File analysis demo"
},
json={
"encoded_base64_file": encoded_file,
"filename": "example.pdf",
"model": "utils/extract-text-1.0" # вариант - utils/pdf-ocr-1.0 для оптического распознавания OCR PDF-документов
}
)
if response.status_code != 200:
print("Ошибка вызова: ", response.status_code, response.text)
raise ValueError("")
# Получаем результат
article = response.json()["text"]
print("Текст файла:", article)
# ---------------- Задаем вопрос по файлу ----------------
# Ждем 1 секунду - VseGPT не позволяет посылать запросы чаще (чаще можно только на тарифе FAST)
print("Ждем 1 секунду...")
time.sleep(1.0)
# Формируем сообщения
question = "Напиши вкратце, о чем эта статья"
print("Вопрос:", question)
context_prompt = f"""Here's an article:\n\n<article>
{article}\n\n</article>\n\n"""
context_message = {"role": "system", "content": context_prompt}
question_message = {"role": "user", "content": question}
# Подготовка данных для запроса
headers = {
"X-Title": "File analysis demo",
"Authorization": f"Bearer {VSEGPT_KEY}",
"Content-Type": "application/json"
}
data = {
"model": "openai/gpt-4o-mini",
"messages": [context_message, question_message]
}
# Выполнение POST запроса
response = requests.post(
"https://api.vsegpt.ru/v1/chat/completions",
headers=headers,
json=data
)
# Обработка ответа
response_data = response.json()
msg = response_data["choices"][0]["message"]["content"]
print("Ответ:", msg)Демо: RAG (поиск по базе знаний / серии документов с помощью эмбеддингов и векторной базы данных)
Вопрос: «Расстояние от Земли до Солнца?»
Ответ: «Расстояние от Земли до Солнца составляет приблизительно 149,6 миллионов километров, что примерно равно астрономической единице.» (на основе данных файла Sun.txt)
Ответ: «Расстояние от Земли до Солнца составляет приблизительно 149,6 миллионов километров, что примерно равно астрономической единице.» (на основе данных файла Sun.txt)
RAG – набор методов, направленных на то, чтобы
– а) выбирать из больших серий документов куски текста, соответствующих запросу пользователя
– б) добавлять эти релевантные куски в запрос к нейросети – чтобы нейросеть отвечала, исходя из реальной информации из документов.
Применяется в случае, когда у вас есть МНОГО документов, не влезающих в контекст и когда надо по ним отвечать на запросы пользователя.
Ниже приведен пример реализации с помощью векторной базы данных FAISS (работает на CPU, т.е. везде) и API VseGPT:
Демо: телеграм-бот, отвечающий на вопросы
Опенсорс: телеграм-бот Киберникто
Готовый к работе сложный телеграм-бот с множеством разных приемов для обработки входных сообщений.
Не демонстрационный
Поддерживается сторонним разработчиком, не VseGPT