feat: 新增风险图谱算法与系统仪表盘及操作反馈体系
后端新增风险图谱算法模块、风险观察与反馈服务、规则 DSL 校验器和可解释性引擎,完善系统仪表盘和财务仪表盘统计, 优化 agent 运行和编排执行链路,清理旧开发文档,前端新增 系统趋势、负载热力图等多种仪表盘图表组件,完善操作反馈 对话框和工作台日期选择器,优化报销创建和审批详情交互, 补充单元测试覆盖。
This commit is contained in:
80
server/tests/test_agent_feedback_service.py
Normal file
80
server/tests/test_agent_feedback_service.py
Normal file
@@ -0,0 +1,80 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import Session, sessionmaker
|
||||
from sqlalchemy.pool import StaticPool
|
||||
|
||||
from app.db.base import Base
|
||||
from app.schemas.agent_feedback import AgentFeedbackCreate
|
||||
from app.services.agent_feedback import AgentFeedbackService
|
||||
|
||||
|
||||
def build_session() -> Session:
|
||||
engine = create_engine(
|
||||
"sqlite+pysqlite:///:memory:",
|
||||
connect_args={"check_same_thread": False},
|
||||
poolclass=StaticPool,
|
||||
)
|
||||
Base.metadata.create_all(bind=engine)
|
||||
session_factory = sessionmaker(bind=engine, autoflush=False, autocommit=False)
|
||||
return session_factory()
|
||||
|
||||
|
||||
def test_agent_feedback_service_records_rating_and_low_reason() -> None:
|
||||
with build_session() as db:
|
||||
service = AgentFeedbackService(db)
|
||||
|
||||
feedback = service.create_feedback(
|
||||
AgentFeedbackCreate(
|
||||
run_id="run-feedback-001",
|
||||
conversation_id="conv-feedback-001",
|
||||
user_id="wenjing.li",
|
||||
agent="user_agent",
|
||||
source="user_message",
|
||||
session_type="application",
|
||||
operation_type="submit_application",
|
||||
operation_status="succeeded",
|
||||
rating=2,
|
||||
reason="意图识别不准",
|
||||
context_json={"route_reason": "model_route"},
|
||||
)
|
||||
)
|
||||
summary = service.summarize_feedback(agent="user_agent", session_type="application")
|
||||
|
||||
assert feedback.feedback_id.startswith("fb_")
|
||||
assert feedback.rating == 2
|
||||
assert feedback.reason == "意图识别不准"
|
||||
assert summary.total_feedback == 1
|
||||
assert summary.average_rating == 2.0
|
||||
assert summary.low_rating_count == 1
|
||||
assert summary.rating_distribution["2"] == 1
|
||||
assert summary.recent_low_feedback[0]["run_id"] == "run-feedback-001"
|
||||
|
||||
|
||||
def test_agent_feedback_summary_keeps_five_star_distribution() -> None:
|
||||
with build_session() as db:
|
||||
service = AgentFeedbackService(db)
|
||||
for rating in (5, 4, 5):
|
||||
service.create_feedback(
|
||||
AgentFeedbackCreate(
|
||||
run_id=f"run-rating-{rating}",
|
||||
user_id="wenjing.li",
|
||||
agent="user_agent",
|
||||
session_type="expense",
|
||||
operation_status="succeeded",
|
||||
rating=rating,
|
||||
)
|
||||
)
|
||||
|
||||
summary = service.summarize_feedback(session_type="expense")
|
||||
|
||||
assert summary.total_feedback == 3
|
||||
assert summary.average_rating == 4.67
|
||||
assert summary.low_rating_count == 0
|
||||
assert summary.rating_distribution == {
|
||||
"1": 0,
|
||||
"2": 0,
|
||||
"3": 0,
|
||||
"4": 1,
|
||||
"5": 2,
|
||||
}
|
||||
Reference in New Issue
Block a user