feat: align agent preview user context

This commit is contained in:
2026-07-31 15:48:40 +08:00
parent 3e60a6da42
commit 79094d0832
6 changed files with 168 additions and 3 deletions

View File

@@ -6,14 +6,18 @@ from types import SimpleNamespace
from sqlalchemy.orm import Session
from app.models.user import User
from app.models.admin import Admin
from app.models.ai_config import ModelConfig
from app.schemas.admin import AgentDebugRequest
from app.services.admin_service import OperationLogService
from app.services.entitlement_service import EntitlementService, entitlement_dict
from app.services.growth_profile_service import GrowthProfileService
from app.services.knowledge_agent_service import KnowledgeAgentService
from app.services.model_stream_service import ModelStreamService
from app.services.reasoning_policy_service import ReasoningPolicyService
from app.services.rag_service import RagResult
from app.services.topic_session_service import TopicSessionService
class AgentDebugService:
@@ -25,14 +29,18 @@ class AgentDebugService:
]
preview_knowledge_ids = payload.knowledgeIds or None
version_overrides = payload.knowledgeVersions or None
debug_context = AgentDebugService._debug_user_context(db, payload.userId)
rag_result = await KnowledgeAgentService.build_result(
db,
question=payload.question,
history=history,
version_overrides=version_overrides,
preview_knowledge_ids=preview_knowledge_ids,
user_id=payload.userId,
context_trace=debug_context["trace"],
prompt_override=payload.promptContent,
response_depth=payload.responseDepth,
growth_context=debug_context["growth_context"],
)
return RagResult(
question=rag_result.question,
@@ -45,6 +53,51 @@ class AgentDebugService:
messages=rag_result.messages,
)
@staticmethod
def _debug_user_context(db: Session, user_id: int | None) -> dict:
if user_id is None:
return {"growth_context": None, "trace": []}
user = db.get(User, user_id)
if user is None or user.is_deleted:
return {
"growth_context": None,
"trace": [
{
"tool": "load_debug_user_context",
"order": 1,
"request": {"userId": user_id},
"status": "failed",
"durationMs": 0,
"response": None,
"error": "模拟学员不存在或已删除",
}
],
}
entitlement = EntitlementService.active_entitlement(
db,
user,
monthly_topic_used=TopicSessionService.monthly_used_count(db, user.id),
)
growth_context = GrowthProfileService.prompt_context(db, user) if entitlement.enable_growth_profile else None
return {
"growth_context": growth_context,
"trace": [
{
"tool": "load_debug_user_context",
"order": 1,
"request": {"userId": user.id},
"status": "success",
"durationMs": 0,
"response": {
"userId": user.id,
"userName": user.name,
"entitlement": entitlement_dict(entitlement),
"growthProfileUsed": bool(growth_context),
},
}
],
}
@staticmethod
def overrides(payload: AgentDebugRequest) -> dict:
return {