65 lines
2.4 KiB
Python
65 lines
2.4 KiB
Python
import json
|
|
from datetime import UTC, datetime
|
|
|
|
from app.models.entities import Conversation, ConversationMessage
|
|
from app.services.conversations import ConversationService
|
|
|
|
|
|
def test_summary_request_is_marked_without_becoming_a_new_risk_request() -> None:
|
|
text = "上边的内容你能帮我总结一下嘛"
|
|
|
|
assert ConversationService._is_summary_request(text) is True
|
|
semantics = ConversationService._normalize_semantics(
|
|
text,
|
|
{"intent": "general", "risk_requested": False},
|
|
)
|
|
assert semantics["summary_requested"] is True
|
|
assert semantics["risk_requested"] is False
|
|
|
|
|
|
def test_llm_context_includes_persisted_card_for_follow_up_summary() -> None:
|
|
conversation = Conversation(
|
|
id=1,
|
|
user_id=1,
|
|
title="洗发水风险",
|
|
created_at=datetime.now(UTC),
|
|
updated_at=datetime.now(UTC),
|
|
messages=[
|
|
ConversationMessage(
|
|
id=1,
|
|
conversation_id=1,
|
|
role="user",
|
|
content="评估洗发水瓶子",
|
|
created_at=datetime.now(UTC),
|
|
),
|
|
ConversationMessage(
|
|
id=2,
|
|
conversation_id=1,
|
|
role="assistant",
|
|
content="已完成分析。",
|
|
structured_data={
|
|
"semantic": {"intent": "assessment"},
|
|
"riskResult": {"score": 72, "level": "medium"},
|
|
"responseCard": {
|
|
"type": "solution",
|
|
"title": "AI 案例推理生成",
|
|
"suggestions": ["完成密封性测试"],
|
|
},
|
|
},
|
|
created_at=datetime.now(UTC),
|
|
),
|
|
],
|
|
)
|
|
semantics = {"prompt_key": "product_manager", "summary_requested": True}
|
|
|
|
messages = ConversationService._llm_messages(conversation, "上边的内容你能帮我总结一下嘛", semantics)
|
|
context = "\n".join(item["content"] for item in messages if item["role"] == "system")
|
|
|
|
assert "responseCard" in context
|
|
assert "完成密封性测试" in context
|
|
assert "【当前任务:总结已有结果】" in context
|
|
assert "不要输出“请补充以下信息”的问题清单" in context
|
|
assert "评估洗发水瓶子" in context
|
|
assert "已完成分析。" in context
|
|
assert json.dumps({"score": 72, "level": "medium"}, ensure_ascii=False, separators=(",", ":")) in context
|