Опенсорс примеры



Как сделать сервис «Вопросы по файлу»


Варианта 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)

RAG – набор методов, направленных на то, чтобы
– а) выбирать из больших серий документов куски текста, соответствующих запросу пользователя
– б) добавлять эти релевантные куски в запрос к нейросети – чтобы нейросеть отвечала, исходя из реальной информации из документов.

Применяется в случае, когда у вас есть МНОГО документов, не влезающих в контекст и когда надо по ним отвечать на запросы пользователя.

Ниже приведен пример реализации с помощью векторной базы данных FAISS (работает на CPU, т.е. везде) и API VseGPT:
https://github.com/janvarev/demo_rag_vsegpt

Демо: телеграм-бот, отвечающий на вопросы


https://github.com/janvarev/Telegram-bot-vsegpt

Опенсорс: телеграм-бот Киберникто


Готовый к работе сложный телеграм-бот с множеством разных приемов для обработки входных сообщений.
Не демонстрационный
Поддерживается сторонним разработчиком, не VseGPT

https://github.com/solovieff/kibernikto