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 import prompts
|
||||||
from vacancies.main.models import Customer, CustomerCV, JobTitle
|
from vacancies.main.models import Customer, CustomerCV, JobTitle
|
||||||
from vacancies.main.recommendations import get_next_vacancy
|
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):
|
async def get_user_resume(user_id: int):
|
||||||
@ -84,7 +109,7 @@ async def prompt(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
|||||||
)
|
)
|
||||||
agent = create_agent(
|
agent = create_agent(
|
||||||
model=chat_model,
|
model=chat_model,
|
||||||
tools=[get_user_resume],
|
tools=[get_user_resume, get_relevant_messages],
|
||||||
system_prompt=prompts.BOT_SYSTEM_PROMPT,
|
system_prompt=prompts.BOT_SYSTEM_PROMPT,
|
||||||
checkpointer=checkpointer,
|
checkpointer=checkpointer,
|
||||||
)
|
)
|
||||||
|
|||||||
@ -9,7 +9,7 @@ BOT_SYSTEM_PROMPT = """
|
|||||||
|
|
||||||
Формат: Отвечай простым текстом, не используя форматирование Markdown (заголовки, жирный шрифт, курсив, кодблоки).
|
Формат: Отвечай простым текстом, не используя форматирование Markdown (заголовки, жирный шрифт, курсив, кодблоки).
|
||||||
|
|
||||||
Использование данных: У тебя есть дополнительный доступ к резюме пользователя (или фрагментам его карьерной истории) для персонализации ответов.
|
Использование данных: У тебя есть дополнительный доступ к резюме пользователя (или фрагментам его карьерной истории) для персонализации ответов, а также ты можешь обратиться к базе данных с релевантными сообщениями, если тебе требуются дополнительные данные, например реальные данные о зарплатах или мнения людей.
|
||||||
|
|
||||||
Завершение: После ответа обязательно предложи один-два релевантных следующих шага, чтобы продолжить карьерное планирование.
|
Завершение: После ответа обязательно предложи один-два релевантных следующих шага, чтобы продолжить карьерное планирование.
|
||||||
"""
|
"""
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user