Files
DEMO-AGENT/tests/test_chat.py

108 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from django.urls import reverse
from agent_core.results import AgentResult
from apps.audit.models import AgentAuditLog
from apps.documents.models import UploadedDocument
def test_chat_post_returns_agent_result_and_audit_log(client, db):
response = client.post(
reverse("chat:index", args=["knowledge_qa"]),
{"message": "如何处理异常?"},
)
assert response.status_code == 200
content = response.content.decode("utf-8")
assert "mock-model" in content
assert "模拟回答" in content
assert AgentAuditLog.objects.count() == 1
def test_chat_rejects_empty_message(client, db):
response = client.post(reverse("chat:index", args=["knowledge_qa"]), {"message": ""})
assert response.status_code == 200
assert AgentAuditLog.objects.count() == 0
assert "请输入要咨询的问题" in response.content.decode("utf-8")
def test_chat_passes_selected_document_ids_to_agent_core(client, db, monkeypatch):
selected = UploadedDocument.objects.create(
scenario_id="knowledge_qa",
original_name="selected.md",
file_type="md",
size=1,
status=UploadedDocument.STATUS_INDEXED,
)
other = UploadedDocument.objects.create(
scenario_id="knowledge_qa",
original_name="other.md",
file_type="md",
size=1,
status=UploadedDocument.STATUS_INDEXED,
)
captured = {}
def fake_run_agent(scenario_config, user_input, options=None):
captured["options"] = options or {}
from agent_core.results import AgentResult
return AgentResult(answer="ok", status="success")
monkeypatch.setattr("apps.chat.views.run_agent", fake_run_agent)
response = client.post(
reverse("chat:index", args=["knowledge_qa"]),
{"message": "只查选中文档", "document_ids": [str(selected.id)]},
)
assert response.status_code == 200
assert captured["options"]["document_ids"] == [selected.id]
assert other.id not in captured["options"]["document_ids"]
def test_chat_renders_structured_output_references_and_tool_calls(client, db, monkeypatch):
def fake_run_agent(scenario_config, user_input, options=None):
return AgentResult(
answer="建议先隔离现场。",
structured_output={
"output_type": "quality_report",
"summary": "发现异常批次需要立即处置。",
"risk_level": "high",
"suggested_actions": ["隔离现场", "通知负责人"],
},
references=[
{
"source": "sop.md",
"content": "异常处理 SOP先隔离现场再通知负责人。",
}
],
tool_calls=[
{
"tool_name": "query_demo_records",
"success": True,
"result": {"records": [{"title": "A线缺陷"}]},
"error": "",
}
],
model_name="mock-model",
status="success",
)
monkeypatch.setattr("apps.chat.views.run_agent", fake_run_agent)
response = client.post(
reverse("chat:index", args=["quality_analysis"]),
{"message": "分析 A 线异常"},
)
content = response.content.decode("utf-8")
assert response.status_code == 200
assert "结构化结果" in content
assert "发现异常批次需要立即处置" in content
assert "引用片段" in content
assert "sop.md" in content
assert "工具调用" in content
assert "query_demo_records" in content
assert "查看本次审计日志" in content