feat: AI reply modes - full (formal email) and short (concise) - Split 'AI回复' button into 'AI完整回复' and 'AI简洁回复' - Full mode: complete email format with greeting/signature, 300 char limit - Short mode: brief text message style, 50 char limit - Style persists in conversation state for regen/hint consistency - Tests: 6/6 passing
This commit is contained in:
@@ -86,7 +86,9 @@ def expand_promo_detail(ai_cfg: AIConfig, sender: str, subject: str, body: str)
|
||||
return result.get("details", [])
|
||||
|
||||
|
||||
MORE_REPLIES_PROMPT = """你是一个邮件回复助手。根据以下邮件内容生成3个完全不同的建议回复。
|
||||
MORE_REPLIES_PROMPT_SHORT = """你是一个邮件回复助手。根据以下邮件内容生成3个完全不同的简洁回复。
|
||||
|
||||
简洁模式:直接说要点,不需要称呼、落款、邮件格式。像微信/短信一样简短。
|
||||
|
||||
以下是一些已经生成过的回复,请生成全新的回复,不要与已有回复重复。
|
||||
|
||||
@@ -101,22 +103,41 @@ MORE_REPLIES_PROMPT = """你是一个邮件回复助手。根据以下邮件内
|
||||
每条回复控制在 50 字以内。
|
||||
只返回 JSON,不要包含任何其他文字。"""
|
||||
|
||||
MORE_REPLIES_PROMPT_FULL = """你是一个邮件回复助手。根据以下邮件内容生成3个不同的正式邮件回复。
|
||||
|
||||
完整模式:生成完整的邮件格式,包括称呼、正文、落款。语气正式专业,适合商务邮件。
|
||||
|
||||
以下是一些已经生成过的回复,请生成全新的回复,不要与已有回复重复。
|
||||
|
||||
返回 JSON:
|
||||
{
|
||||
"suggestions": [
|
||||
{"text": "回复内容"},
|
||||
{"text": "回复内容"},
|
||||
{"text": "回复内容"}
|
||||
]
|
||||
}
|
||||
每条回复控制在 300 字以内。
|
||||
只返回 JSON,不要包含任何其他文字。"""
|
||||
|
||||
|
||||
@retry()
|
||||
def generate_more_replies(ai_cfg: AIConfig, sender: str, subject: str, body: str,
|
||||
previous_suggestions: list[dict], user_hint: str = "") -> list[dict]:
|
||||
logger.info("AI 换批请求: sender=%s subject=%s user_hint=%s prev=%d 条",
|
||||
sender, subject, user_hint or "(无)", len(previous_suggestions))
|
||||
previous_suggestions: list[dict], user_hint: str = "",
|
||||
style: str = "short") -> list[dict]:
|
||||
logger.info("AI 换批请求: sender=%s subject=%s user_hint=%s prev=%d 条 style=%s",
|
||||
sender, subject, user_hint or "(无)", len(previous_suggestions), style)
|
||||
content = f"发件人: {sender}\n主题: {subject}\n正文:\n{body}\n\n已生成过的回复:\n"
|
||||
for i, s in enumerate(previous_suggestions, 1):
|
||||
content += f"{i}. {s['text']}\n"
|
||||
if user_hint:
|
||||
content += f"\n用户要求: {user_hint}"
|
||||
|
||||
prompt = MORE_REPLIES_PROMPT_FULL if style == "full" else MORE_REPLIES_PROMPT_SHORT
|
||||
payload = {
|
||||
"model": ai_cfg.model,
|
||||
"messages": [
|
||||
{"role": "system", "content": MORE_REPLIES_PROMPT},
|
||||
{"role": "system", "content": prompt},
|
||||
{"role": "user", "content": content},
|
||||
],
|
||||
"response_format": {"type": "json_object"},
|
||||
|
||||
Reference in New Issue
Block a user