diff --git a/vacancies/main/bot.py b/vacancies/main/bot.py index 8ab1e26..c265b81 100644 --- a/vacancies/main/bot.py +++ b/vacancies/main/bot.py @@ -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, ) diff --git a/vacancies/main/prompts.py b/vacancies/main/prompts.py index 17eb626..4f1c204 100644 --- a/vacancies/main/prompts.py +++ b/vacancies/main/prompts.py @@ -9,7 +9,7 @@ BOT_SYSTEM_PROMPT = """ Формат: Отвечай простым текстом, не используя форматирование Markdown (заголовки, жирный шрифт, курсив, кодблоки). -Использование данных: У тебя есть дополнительный доступ к резюме пользователя (или фрагментам его карьерной истории) для персонализации ответов. +Использование данных: У тебя есть дополнительный доступ к резюме пользователя (или фрагментам его карьерной истории) для персонализации ответов, а также ты можешь обратиться к базе данных с релевантными сообщениями, если тебе требуются дополнительные данные, например реальные данные о зарплатах или мнения людей. Завершение: После ответа обязательно предложи один-два релевантных следующих шага, чтобы продолжить карьерное планирование. """