refactor: 简化 AgentScope 运行时模块与 prompt 系统

This commit is contained in:
zl-q
2026-03-15 17:14:15 +08:00
parent 61997f3613
commit 072c09d99d
32 changed files with 750 additions and 1863 deletions
+48 -40
View File
@@ -17,6 +17,10 @@ from core.auth.models import CurrentUser
from core.agentscope.schemas.agui_input import extract_latest_user_payload
from core.config.settings import config
from core.logging import get_logger
from schemas.messages.chat_message import (
AgentChatMessageMetadata,
UserMessageAttachments,
)
logger = get_logger(__name__)
_ALLOWED_ATTACHMENT_MIME_TYPES = {"image/png", "image/jpeg", "image/webp"}
@@ -53,9 +57,8 @@ class AgentRepositoryLike(Protocol):
self,
*,
session_id: str,
run_id: str,
content_text: str,
metadata: dict[str, object] | None,
content: str,
metadata: AgentChatMessageMetadata | None,
) -> None: ...
@@ -157,8 +160,7 @@ class AgentService:
)
await self._repository.persist_user_message(
session_id=thread_id,
run_id=run_id,
content_text=user_message_text,
content=user_message_text,
metadata=user_message_metadata,
)
await self._repository.commit()
@@ -167,7 +169,12 @@ class AgentService:
command={
"command": "run",
"owner_id": str(current_user.id),
"run_input": run_input.model_dump(mode="json", by_alias=True),
"run_input": {
"messages": [
msg.model_dump(mode="json", exclude_none=True)
for msg in run_input.messages
],
},
},
dedup_key=None,
)
@@ -178,14 +185,41 @@ class AgentService:
created=created,
)
async def load_agent_input_messages(
self,
*,
thread_id: str,
) -> dict[str, object] | None:
"""Load recent messages for runtime agent input.
Returns messages from today and yesterday (if exists).
"""
today = await self._repository.get_history_day(
session_id=thread_id,
before=None,
)
if not today:
return None
yesterday = await self._repository.get_history_day(
session_id=thread_id,
before=today.get("day"), # type: ignore
)
messages: list[dict[str, object]] = []
if yesterday and yesterday.get("messages"):
messages.extend(yesterday["messages"]) # type: ignore
if today.get("messages"):
messages.extend(today["messages"]) # type: ignore
return {"messages": messages}
async def _prepare_user_message(
self,
*,
run_input: RunAgentInput,
current_user: CurrentUser,
) -> tuple[str, dict[str, object] | None]:
from schemas.messages.chat_message import UserMessageAttachments
) -> tuple[str, AgentChatMessageMetadata | None]:
text, content_blocks = extract_latest_user_payload(run_input)
user_attachments: UserMessageAttachments | None = None
@@ -227,11 +261,12 @@ class AgentService:
logger.warning("Failed to parse signed URL", url=url, error=str(exc))
raise HTTPException(status_code=422, detail="Invalid signed image url")
metadata: dict[str, object] | None = None
metadata: AgentChatMessageMetadata | None = None
if user_attachments is not None:
metadata = {
"user_message_attachments": user_attachments.model_dump(by_alias=True),
}
metadata = AgentChatMessageMetadata(
run_id=run_input.run_id,
user_message_attachments=user_attachments,
)
return text, metadata
@@ -361,33 +396,6 @@ class AgentService:
"url": signed_url,
}
async def enqueue_resume(
self,
*,
thread_id: str,
run_input: RunAgentInput,
current_user: CurrentUser,
) -> TaskAccepted:
owner = await self._repository.get_session_owner(session_id=thread_id)
ensure_session_owner(owner_id=owner, current_user=current_user)
dedup_key = f"resume:{thread_id}:{run_input.run_id}"
task_id = await self._queue.enqueue(
command={
"command": "resume",
"owner_id": str(current_user.id),
"run_input": run_input.model_dump(mode="json", by_alias=True),
},
dedup_key=dedup_key,
)
return TaskAccepted(
task_id=task_id,
thread_id=thread_id,
run_id=run_input.run_id,
created=False,
)
async def stream_events(
self,
*,