From 7282a18116d3b3e882dd95e15b654dff1f2805c8 Mon Sep 17 00:00:00 2001 From: wuyang6 Date: Wed, 13 May 2026 14:29:06 +0800 Subject: [PATCH] Hide admin memory details and fix memory config --- backend/api/server.py | 51 +++----- frontend/app/app/admin/page.tsx | 202 +++++++------------------------- 2 files changed, 57 insertions(+), 196 deletions(-) diff --git a/backend/api/server.py b/backend/api/server.py index f47c30d..0986451 100644 --- a/backend/api/server.py +++ b/backend/api/server.py @@ -522,7 +522,7 @@ class AgentState: ) self.memory_manager = PersonalMemoryManager( self.session_directory.parent / 'accounts', - self.config_for, + self.model_config_for, ) self.memory_manager.start() @@ -571,6 +571,20 @@ class AgentState: with self._lock: return self._config_for(account_id) + def model_config_for(self, account_id: str | None) -> ModelConfig: + """给后台辅助任务使用的模型配置。 + + AgentInstanceConfig 还包含 cwd、权限等运行态字段;调用模型时需要的是 + OpenAICompatClient 支持的 ModelConfig,否则后台记忆整理会缺少 temperature 等字段。 + """ + config = self.config_for(account_id) + return ModelConfig( + model=config.model, + base_url=config.base_url, + api_key=config.api_key, + timeout_seconds=config.timeout_seconds, + ) + def _set_config_for(self, account_id: str | None, config: AgentInstanceConfig) -> None: if not account_id: self._default_config = config @@ -980,7 +994,6 @@ class AdminAccountCreateRequest(BaseModel): class MemoryUpdateRequest(BaseModel): account_id: str = Field(min_length=1) content: str - skill: str | None = None def _append_runtime_context(current: str | None, addition: str) -> str: @@ -1309,40 +1322,6 @@ def create_app(state: AgentState) -> FastAPI: ), } - @app.get('/api/admin/memory/user') - async def admin_user_memory(token: str, account_id: str) -> dict[str, Any]: - _require_admin_token(token) - return state.memory_manager.list_user_memory(_safe_account_id(account_id)) - - @app.put('/api/admin/memory/user') - async def admin_update_user_memory( - token: str, - payload: MemoryUpdateRequest, - ) -> dict[str, Any]: - _require_admin_token(token) - return state.memory_manager.update_user_memory( - _safe_account_id(payload.account_id), - payload.content, - ) - - @app.get('/api/admin/memory/skills') - async def admin_skill_memories(token: str, account_id: str) -> list[dict[str, Any]]: - _require_admin_token(token) - return state.memory_manager.list_skill_memories(_safe_account_id(account_id)) - - @app.put('/api/admin/memory/skills/{skill_name}') - async def admin_update_skill_memory( - skill_name: str, - token: str, - payload: MemoryUpdateRequest, - ) -> dict[str, Any]: - _require_admin_token(token) - return state.memory_manager.update_skill_memory( - _safe_account_id(payload.account_id), - skill_name, - payload.content, - ) - @app.get('/api/models') async def list_models_get(account_id: str | None = None) -> dict[str, Any]: config = state.config_for(account_id) diff --git a/frontend/app/app/admin/page.tsx b/frontend/app/app/admin/page.tsx index f772f9a..6f6a598 100644 --- a/frontend/app/app/admin/page.tsx +++ b/frontend/app/app/admin/page.tsx @@ -4,7 +4,6 @@ import { ActivityIcon, DatabaseIcon, RefreshCwIcon, - SaveIcon, Trash2Icon, UserPlusIcon, UsersIcon, @@ -68,19 +67,6 @@ type MemoryEvent = { updated_at: string; }; -type UserMemory = { - content: string; - line_count: number; - updated_at?: string | null; -}; - -type SkillMemory = { - skill: string; - content: string; - line_count: number; - updated_at?: string | null; -}; - const TOKEN_KEY = "zk-admin-token"; export default function AdminPage() { @@ -168,10 +154,6 @@ function AdminDashboard({ const [accounts, setAccounts] = useState([]); const [selectedAccountId, setSelectedAccountId] = useState(""); const [events, setEvents] = useState([]); - const [userMemory, setUserMemory] = useState(null); - const [skillMemories, setSkillMemories] = useState([]); - const [selectedSkill, setSelectedSkill] = useState(""); - const [memoryDraft, setMemoryDraft] = useState(""); const [newAccountId, setNewAccountId] = useState(""); const [notice, setNotice] = useState(""); @@ -179,10 +161,6 @@ function AdminDashboard({ () => accounts.find((item) => item.account_id === selectedAccountId), [accounts, selectedAccountId], ); - const selectedSkillMemory = useMemo( - () => skillMemories.find((item) => item.skill === selectedSkill), - [skillMemories, selectedSkill], - ); // biome-ignore lint/correctness/useExhaustiveDependencies: 首次进入后台时加载一次即可,后续由刷新按钮触发。 useEffect(() => { @@ -195,14 +173,6 @@ function AdminDashboard({ loadAccountMemory(selectedAccountId); }, [selectedAccountId]); - useEffect(() => { - if (selectedSkillMemory) { - setMemoryDraft(selectedSkillMemory.content); - } else if (userMemory) { - setMemoryDraft(userMemory.content); - } - }, [selectedSkillMemory, userMemory]); - async function refresh() { const [summaryPayload, accountPayload] = await Promise.all([ adminFetch(token, "/summary"), @@ -217,25 +187,11 @@ function AdminDashboard({ } async function loadAccountMemory(accountId: string) { - const [memoryPayload, userPayload, skillPayload] = await Promise.all([ - adminFetch<{ events: MemoryEvent[] }>( - token, - `/memory?account_id=${encodeURIComponent(accountId)}`, - ), - adminFetch( - token, - `/memory/user?account_id=${encodeURIComponent(accountId)}`, - ), - adminFetch( - token, - `/memory/skills?account_id=${encodeURIComponent(accountId)}`, - ), - ]); + const memoryPayload = await adminFetch<{ events: MemoryEvent[] }>( + token, + `/memory?account_id=${encodeURIComponent(accountId)}`, + ); setEvents(memoryPayload.events ?? []); - setUserMemory(userPayload); - setSkillMemories(skillPayload); - setSelectedSkill(""); - setMemoryDraft(userPayload.content); } async function createAccount() { @@ -264,34 +220,6 @@ function AdminDashboard({ await refresh(); } - async function saveMemory() { - if (!selectedAccountId) return; - if (selectedSkill) { - await adminFetch( - token, - `/memory/skills/${encodeURIComponent(selectedSkill)}`, - { - method: "PUT", - body: JSON.stringify({ - account_id: selectedAccountId, - content: memoryDraft, - }), - }, - ); - setNotice(`已保存 ${selectedSkill} 记忆`); - } else { - await adminFetch(token, "/memory/user", { - method: "PUT", - body: JSON.stringify({ - account_id: selectedAccountId, - content: memoryDraft, - }), - }); - setNotice("已保存用户记忆"); - } - await loadAccountMemory(selectedAccountId); - } - function logout() { localStorage.removeItem(TOKEN_KEY); onLogout(); @@ -403,54 +331,8 @@ function AdminDashboard({ /> -
-
-
-
-
记忆编辑
-
- 默认编辑用户记忆;选择 Skill 后编辑该 Skill 记忆。 -
-
- -
-
- -
- {skillMemories.map((item) => ( - - ))} -
-
-