修复一些已知问题

This commit is contained in:
Kevin
2026-03-20 17:25:42 +08:00
parent 8af37e5e8e
commit 70070216c4
16 changed files with 350 additions and 74 deletions

View File

@@ -8,6 +8,7 @@ from typing import TYPE_CHECKING, List, Optional
from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.chat.agent_turn import AgentChatTurn
from app.agents.chat.helpers import save_message
from app.agents.chat.interview_agent import InterviewAgent
from app.agents.chat.profile_agent import ProfileAgent
@@ -20,6 +21,10 @@ if TYPE_CHECKING:
logger = get_logger(__name__)
_UNAUTH_TURN = AgentChatTurn(
messages=["暂时没法继续对话,请先登录后再试。"], skip_tts=True
)
class ChatOrchestrator:
"""
@@ -45,9 +50,9 @@ class ChatOrchestrator:
get_filled_profile_fields_fn,
user_message_timestamp: Optional[datetime] = None,
audio_duration_seconds: Optional[int] = None,
) -> List[str]:
) -> AgentChatTurn:
"""
处理用户消息,返回 AI 回复列表
处理用户消息,返回 AI 回复(分段 + 是否跳过 TTS
根据 missing_fields 路由到 ProfileAgent 或 InterviewAgent
统一写入 Redis。
"""
@@ -81,14 +86,14 @@ class ChatOrchestrator:
user_message_timestamp=user_message_timestamp,
audio_duration_seconds=audio_duration_seconds,
)
return responses
return AgentChatTurn(messages=responses, skip_tts=False)
except Exception as e:
logger.error(f"资料收集处理失败: {e}", exc_info=True)
# --- 正式访谈模式 ---
user_id = user.id if user else None
if not user_id:
return ["抱歉,无法识别用户。"]
return _UNAUTH_TURN
state = await get_or_create_state(user_id, db)
if conversation and conversation.conversation_stage != state.current_stage:
@@ -106,7 +111,7 @@ class ChatOrchestrator:
occupation=user.occupation,
)
responses = await self.interview_agent.generate_response_with_state(
turn = await self.interview_agent.generate_response_with_state(
conversation_id=conversation_id,
user_message=user_message,
memoir_state=state,
@@ -115,13 +120,13 @@ class ChatOrchestrator:
await self._save_messages(
conversation_id=conversation_id,
user_message=user_message,
response_text="\n\n".join(responses),
response_text="\n\n".join(turn.messages),
is_from_voice=is_from_voice,
voice_session_id=voice_session_id,
user_message_timestamp=user_message_timestamp,
audio_duration_seconds=audio_duration_seconds,
)
return responses
return turn
async def _save_messages(
self,
@@ -222,15 +227,15 @@ class ChatOrchestrator:
voice_session_id: str | None = None,
user_message_timestamp: datetime | None = None,
audio_duration_seconds: int | None = None,
) -> List[str]:
) -> AgentChatTurn:
"""委托 InterviewAgent 生成访谈回复,并写入 Redis"""
responses = await self.interview_agent.generate_response_with_state(
turn = await self.interview_agent.generate_response_with_state(
conversation_id=conversation_id,
user_message=user_message,
memoir_state=memoir_state,
user_profile_context=user_profile_context,
)
response_text = "\n\n".join(responses)
response_text = "\n\n".join(turn.messages)
await self._save_messages(
conversation_id=conversation_id,
user_message=user_message,
@@ -240,7 +245,7 @@ class ChatOrchestrator:
user_message_timestamp=user_message_timestamp,
audio_duration_seconds=audio_duration_seconds,
)
return responses
return turn
def detect_user_stage(self, user_message: str) -> str:
"""委托 InterviewAgent 检测用户阶段"""