Add context from vector search to RAG pipeline
All checks were successful
release / docker (push) Successful in 23s
All checks were successful
release / docker (push) Successful in 23s
This commit is contained in:
parent
3d9e1f2239
commit
d3d4766abb
@ -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,
|
||||
)
|
||||
|
||||
@ -9,7 +9,7 @@ BOT_SYSTEM_PROMPT = """
|
||||
|
||||
Формат: Отвечай простым текстом, не используя форматирование Markdown (заголовки, жирный шрифт, курсив, кодблоки).
|
||||
|
||||
Использование данных: У тебя есть дополнительный доступ к резюме пользователя (или фрагментам его карьерной истории) для персонализации ответов.
|
||||
Использование данных: У тебя есть дополнительный доступ к резюме пользователя (или фрагментам его карьерной истории) для персонализации ответов, а также ты можешь обратиться к базе данных с релевантными сообщениями, если тебе требуются дополнительные данные, например реальные данные о зарплатах или мнения людей.
|
||||
|
||||
Завершение: После ответа обязательно предложи один-два релевантных следующих шага, чтобы продолжить карьерное планирование.
|
||||
"""
|
||||
|
||||
Loading…
Reference in New Issue
Block a user