Найти в Дзене

Выполняем запрос к нейросети в Интернете по локальной базе знаний с помощью OpenRouter

Подготовительными мероприятиями для данной цели являются установка ollama и модели mxbai-embed-large, а также тестового набора данных в виде текстовых файлов для создания векторной базы знаний согласно заметке
Затем создаем в каталоге ~/myrag файл openroutereq.py c исходным кодом:
import chromadb import requests import json import os # === 🔐 Вставьте ваш OpenRouter API ключ === OPENROUTER_API_KEY = "sk-..." # 👈 ЗАМЕНИТЕ НА СВОЙ КЛЮЧ # === 🧠 Выберите бесплатную модель === MODEL = "deepseek/deepseek-chat-v3.1:free" # официальный DeepSeek Chat v3 # === Шаг 1: Подключаемся к ChromaDB === persist_directory = os.path.expanduser("~/persistent/store") client = chromadb.PersistentClient(path=persist_directory) # === Шаг 2: Загружаем коллекцию "documents" === try: collection = client.get_collection(name="documents") print("✅ Коллекция 'documents' загружена") except Exception as e: print("❌ Ошибка: не удалось загрузить коллекцию 'documents'.") raise e # === Шаг 3: Задаём вопрос === query_

Подготовительными мероприятиями для данной цели являются установка ollama и модели mxbai-embed-large, а также тестового набора данных в виде текстовых файлов для создания векторной базы знаний согласно заметке

Затем создаем в каталоге
~/myrag файл openroutereq.py c исходным кодом:

import chromadb

import requests

import json

import os

# === 🔐 Вставьте ваш OpenRouter API ключ ===

OPENROUTER_API_KEY = "sk-..." # 👈 ЗАМЕНИТЕ НА СВОЙ КЛЮЧ

# === 🧠 Выберите бесплатную модель ===

MODEL = "deepseek/deepseek-chat-v3.1:free" # официальный DeepSeek Chat v3

# === Шаг 1: Подключаемся к ChromaDB ===

persist_directory = os.path.expanduser("~/persistent/store")

client = chromadb.PersistentClient(path=persist_directory)

# === Шаг 2: Загружаем коллекцию "documents" ===

try:

collection = client.get_collection(name="documents")

print("✅ Коллекция 'documents' загружена")

except Exception as e:

print("❌ Ошибка: не удалось загрузить коллекцию 'documents'.")

raise e

# === Шаг 3: Задаём вопрос ===

query_text = input("💬 Задайте вопрос: ")

# === Шаг 4: Генерируем эмбеддинг запроса той же моделью: mxbai-embed-large ===

# (оставляем как есть — это локально через Ollama)

try:

import ollama

response = ollama.embed(model="mxbai-embed-large", input=query_text)

query_embedding = response["embeddings"][0]

except Exception as e:

print("❌ Ошибка генерации эмбеддинга:", e)

print("💡 Выполните: ollama pull mxbai-embed-large")

raise e

# === Шаг 5: Запрашиваем релевантные документы ===

results = collection.query(

query_embeddings=[query_embedding],

n_results=3,

include=["documents"]

)

# === Шаг 6: Формируем контекст ===

context_list = [doc for doc_list in results['documents'] for doc in doc_list]

context = "\n\n".join(context_list)

if not context.strip():

print("⚠️ Контекст не найден.")

context = "Нет данных."

print("\n" + "="*60)

print("📄 КОНТЕКСТ:")

print("="*60)

print(context[:1500] + "..." if len(context) > 1500 else context)

print("="*60)

# === Шаг 7: Генерируем ответ через OpenRouter ===

prompt = f"""

Отвечай ТОЛЬКО на основе контекста ниже. Не добавляй ничего от себя.

Если в контексте нет ответа — скажи "Не знаю".

Контекст:

{context}

Вопрос: {query_text}

Ответ:

"""

print(f"\n🧠 Генерация ответа через OpenRouter ({MODEL})...\n")

# === Отправляем запрос в OpenRouter API ===

response = requests.post(

url="https://openrouter.ai/api/v1/chat/completions",

headers={

"Authorization": f"Bearer {OPENROUTER_API_KEY}",

"HTTP-Referer": "http://localhost:3000", # optional — ваш сайт или localhost

"X-Title": "My RAG App", # optional — название вашего приложения

"Content-Type": "application/json"

},

data=json.dumps({

"model": MODEL,

"messages": [

{"role": "user", "content": prompt}

],

"temperature": 0.1, # для точных ответов — делаем более детерминированным

})

)

if response.status_code == 200:

result = response.json()

answer = result['choices'][0]['message']['content'].strip()

print("✅ ОТВЕТ:")

print("="*60)

print(answer)

else:

print("❌ Ошибка OpenRouter API:", response.status_code, response.text)


Обратите внимание, что необходимо создать API ключ на OpenRouter, перед использованием проверьте тарификацию модели через поиск

Запускаем сценарий и убеждаемся, что был использован контекст, найденный в векторной базе для синтеза ответа

Жду команду > python openroutereq.py
✅ Коллекция 'documents' загружена

💬 Задайте вопрос: Подскажи в каком году основана компания и какое у нее название, пожалуйста



============================================================

📄 КОНТЕКСТ:

============================================================

Название компании - "Рога и копыта"

Год основания - 666 до нашей эры



============================================================



🧠 Генерация ответа через OpenRouter (deepseek/deepseek-chat-v3.1:free)...



✅ ОТВЕТ:

============================================================

Название компании - "Рога и копыта". Год основания - 666 до нашей эры.

(myrag)
Сейчас 15:16:00 Текущая дата Пн сен 08

C другой формулировкой запроса будет синтезирован иной ответ

-2