Add context from vector search to RAG pipeline
All checks were successful
release / docker (push) Successful in 23s

This commit is contained in:
estromenko 2025-12-02 23:38:08 +03:00
parent 3d9e1f2239
commit d3d4766abb
2 changed files with 27 additions and 2 deletions

View File

@ -29,6 +29,31 @@ from vacancies.conf.settings import DB_URI
from vacancies.main import prompts
from vacancies.main.models import Customer, CustomerCV, JobTitle
from vacancies.main.recommendations import get_next_vacancy
from django.conf import settings
from qdrant_client import AsyncQdrantClient
from openai import AsyncOpenAI
qdrant_client = AsyncQdrantClient(url=settings.QDRANT_URL)
openai_client = AsyncOpenAI(base_url="https://openrouter.ai/api/v1")
async def get_relevant_messages(query: str):
"""Получает релевантные сообщения по запросу пользователя."""
embedding = await openai_client.embeddings.create(
model="qwen/qwen3-embedding-8b",
input=query,
encoding_format="float",
)
response = await qdrant_client.query_points(
collection_name="messages",
query=embedding.data[0].embedding,
limit=20,
)
messages = [hit.payload["message"] for hit in response.points]
return "\n\n".join(messages)
async def get_user_resume(user_id: int):
@ -84,7 +109,7 @@ async def prompt(update: Update, context: ContextTypes.DEFAULT_TYPE):
)
agent = create_agent(
model=chat_model,
tools=[get_user_resume],
tools=[get_user_resume, get_relevant_messages],
system_prompt=prompts.BOT_SYSTEM_PROMPT,
checkpointer=checkpointer,
)

View File

@ -9,7 +9,7 @@ BOT_SYSTEM_PROMPT = """
Формат: Отвечай простым текстом, не используя форматирование Markdown (заголовки, жирный шрифт, курсив, кодблоки).
Использование данных: У тебя есть дополнительный доступ к резюме пользователя (или фрагментам его карьерной истории) для персонализации ответов.
Использование данных: У тебя есть дополнительный доступ к резюме пользователя (или фрагментам его карьерной истории) для персонализации ответов, а также ты можешь обратиться к базе данных с релевантными сообщениями, если тебе требуются дополнительные данные, например реальные данные о зарплатах или мнения людей.
Завершение: После ответа обязательно предложи один-два релевантных следующих шага, чтобы продолжить карьерное планирование.
"""