51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import TYPE_CHECKING, List
|
|
|
|
if TYPE_CHECKING:
|
|
from core.pydantic_ai_agent import AgentDeps, ConversationState, CustomerMessage, CustomerServiceAgent
|
|
|
|
|
|
@dataclass
|
|
class PromptBundle:
|
|
user_prompt: str
|
|
deps: "AgentDeps"
|
|
history: List
|
|
|
|
|
|
def build_prompt_bundle(
|
|
agent: "CustomerServiceAgent",
|
|
*,
|
|
message: "CustomerMessage",
|
|
state: "ConversationState",
|
|
) -> PromptBundle:
|
|
from core.pydantic_ai_agent import AgentDeps
|
|
|
|
user_prompt = agent._build_prompt(message, state)
|
|
|
|
profile_context = agent._get_customer_profile_context(message.from_id)
|
|
if profile_context:
|
|
user_prompt = profile_context + "\n\n" + user_prompt
|
|
|
|
refusal_hint = agent._get_refusal_context_hint(message.from_id, message.msg, profile_context or "")
|
|
if refusal_hint:
|
|
user_prompt = refusal_hint + "\n\n" + user_prompt
|
|
|
|
conv_context = agent._get_conversation_context(message.from_id, acc_id=message.acc_id or "")
|
|
if conv_context:
|
|
user_prompt = conv_context + user_prompt
|
|
|
|
intent_hint = agent._get_intent_emotion_hint(message.msg)
|
|
if intent_hint:
|
|
user_prompt = intent_hint + "\n\n" + user_prompt
|
|
|
|
deps = AgentDeps(
|
|
msg_id=message.msg_id,
|
|
acc_id=message.acc_id,
|
|
from_id=message.from_id,
|
|
platform=message.acc_type,
|
|
)
|
|
history = agent.message_histories.get(message.from_id, [])
|
|
return PromptBundle(user_prompt=user_prompt, deps=deps, history=history)
|