feat: 增强审核智能体页顶部上下文与提问模板
This commit is contained in:
@@ -85,6 +85,8 @@ def detail(request, conversation_id: str):
|
|||||||
active_node = "risk"
|
active_node = "risk"
|
||||||
conversation.refresh_from_db()
|
conversation.refresh_from_db()
|
||||||
workspace_summary = _build_workspace_summary(conversation, batch)
|
workspace_summary = _build_workspace_summary(conversation, batch)
|
||||||
|
conversation_context = _build_conversation_context(conversation, batch, workspace_summary)
|
||||||
|
prompt_templates = _build_prompt_templates()
|
||||||
export_card = _build_export_card(result, conversation)
|
export_card = _build_export_card(result, conversation)
|
||||||
risk_card = _build_risk_card(result, conversation)
|
risk_card = _build_risk_card(result, conversation)
|
||||||
notify_card = _build_notify_card(result, conversation)
|
notify_card = _build_notify_card(result, conversation)
|
||||||
@@ -105,6 +107,8 @@ def detail(request, conversation_id: str):
|
|||||||
"node_results": conversation.node_results,
|
"node_results": conversation.node_results,
|
||||||
"active_node": active_node,
|
"active_node": active_node,
|
||||||
"workspace_summary": workspace_summary,
|
"workspace_summary": workspace_summary,
|
||||||
|
"conversation_context": conversation_context,
|
||||||
|
"prompt_templates": prompt_templates,
|
||||||
"upload_form": upload_form,
|
"upload_form": upload_form,
|
||||||
"export_card": export_card,
|
"export_card": export_card,
|
||||||
"risk_card": risk_card,
|
"risk_card": risk_card,
|
||||||
@@ -246,6 +250,30 @@ def _build_workspace_summary(conversation: Conversation, batch: SubmissionBatch
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _build_conversation_context(
|
||||||
|
conversation: Conversation,
|
||||||
|
batch: SubmissionBatch | None,
|
||||||
|
workspace_summary: dict,
|
||||||
|
) -> dict:
|
||||||
|
return {
|
||||||
|
"batch_id": conversation.batch_id,
|
||||||
|
"product_name": conversation.product_name,
|
||||||
|
"workflow_type": batch.workflow_type if batch else "registration",
|
||||||
|
"task_status": conversation.task_status,
|
||||||
|
"highest_risk_level": workspace_summary.get("highest_risk_level", "-"),
|
||||||
|
"export_allowed": workspace_summary.get("export_allowed", "-"),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _build_prompt_templates() -> list[str]:
|
||||||
|
return [
|
||||||
|
"请汇总当前资料包的章节点、页数和目录覆盖情况",
|
||||||
|
"请检查当前资料包缺失了哪些必交项和错放项",
|
||||||
|
"请抽取当前资料包的核心字段并标记低置信度项",
|
||||||
|
"请给出当前资料包的高风险项、责任人和整改建议",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
def _build_export_card(result: AgentResult | None, conversation: Conversation) -> dict:
|
def _build_export_card(result: AgentResult | None, conversation: Conversation) -> dict:
|
||||||
"""
|
"""
|
||||||
统一组装 Word 导出能力卡上下文。
|
统一组装 Word 导出能力卡上下文。
|
||||||
|
|||||||
@@ -16,6 +16,33 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
{% if conversation %}
|
||||||
|
<section class="grid-2">
|
||||||
|
<article class="panel">
|
||||||
|
<h2 class="section-title">顶部对话上下文</h2>
|
||||||
|
<p class="section-copy">进入会话后,先用当前批次、产品和风险状态快速建立审核上下文。</p>
|
||||||
|
<ul class="detail-list">
|
||||||
|
<li class="detail-item"><strong>批次编号</strong><div>{{ conversation_context.batch_id }}</div></li>
|
||||||
|
<li class="detail-item"><strong>产品名称</strong><div>{{ conversation_context.product_name|default:"未识别产品名称" }}</div></li>
|
||||||
|
<li class="detail-item"><strong>当前流程类型</strong><div>{{ conversation_context.workflow_type }}</div></li>
|
||||||
|
<li class="detail-item"><strong>当前审核阶段</strong><div>{{ conversation_context.task_status }}</div></li>
|
||||||
|
<li class="detail-item"><strong>当前最高风险等级</strong><div>{{ conversation_context.highest_risk_level }}</div></li>
|
||||||
|
<li class="detail-item"><strong>是否允许正式导出</strong><div>{{ conversation_context.export_allowed }}</div></li>
|
||||||
|
</ul>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<article class="panel">
|
||||||
|
<h2 class="section-title">推荐提问模板</h2>
|
||||||
|
<p class="section-copy">用这些提问模板快速进入目录汇总、完整性检查、字段抽取和风险分析。</p>
|
||||||
|
<div class="button-row">
|
||||||
|
{% for item in prompt_templates %}
|
||||||
|
<span class="pill pill-accent">{{ item }}</span>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<section class="workspace-grid" style="grid-template-columns: 320px minmax(0, 1fr) 360px;">
|
<section class="workspace-grid" style="grid-template-columns: 320px minmax(0, 1fr) 360px;">
|
||||||
<div class="stack">
|
<div class="stack">
|
||||||
<article class="panel">
|
<article class="panel">
|
||||||
|
|||||||
@@ -376,6 +376,36 @@ def test_chat_page_shows_upload_entry_and_dynamic_context_cards(client, db):
|
|||||||
assert "飞书通知 / 待处理" in content
|
assert "飞书通知 / 待处理" in content
|
||||||
|
|
||||||
|
|
||||||
|
def test_chat_page_shows_top_context_and_recommended_prompts(client, db):
|
||||||
|
batch, conversation = _create_conversation_with_batch()
|
||||||
|
conversation.task_status = "processing"
|
||||||
|
conversation.node_results = [
|
||||||
|
{"label": "资料包导入", "status": "已完成"},
|
||||||
|
{"label": "目录汇总", "status": "已完成"},
|
||||||
|
{"label": "法规完整性检查", "status": "已完成"},
|
||||||
|
{"label": "字段抽取", "status": "已完成"},
|
||||||
|
{"label": "一致性核查", "status": "待复核"},
|
||||||
|
{"label": "风险预警", "status": "已阻断"},
|
||||||
|
{"label": "Word 回填导出", "status": "待复核"},
|
||||||
|
{"label": "飞书通知", "status": "待处理"},
|
||||||
|
]
|
||||||
|
conversation.save(update_fields=["task_status", "node_results", "updated_at"])
|
||||||
|
|
||||||
|
response = client.get(reverse("chat:detail", args=[conversation.conversation_id]))
|
||||||
|
|
||||||
|
content = response.content.decode("utf-8")
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert "顶部对话上下文" in content
|
||||||
|
assert "当前流程类型" in content
|
||||||
|
assert "registration" in content
|
||||||
|
assert "当前审核阶段" in content
|
||||||
|
assert "processing" in content
|
||||||
|
assert "当前最高风险等级" in content
|
||||||
|
assert "推荐提问模板" in content
|
||||||
|
assert "请汇总当前资料包的章节点、页数和目录覆盖情况" in content
|
||||||
|
assert "请给出当前资料包的高风险项、责任人和整改建议" in content
|
||||||
|
|
||||||
|
|
||||||
def test_chat_page_blocks_formal_export_when_word_export_node_is_blocked(client, db):
|
def test_chat_page_blocks_formal_export_when_word_export_node_is_blocked(client, db):
|
||||||
batch, conversation = _create_conversation_with_batch()
|
batch, conversation = _create_conversation_with_batch()
|
||||||
conversation.node_results = [
|
conversation.node_results = [
|
||||||
|
|||||||
Reference in New Issue
Block a user