From 91efc5308a14ace544610169d0a467936b2d11fa Mon Sep 17 00:00:00 2001 From: Color2333 <1552429809@qq.com> Date: Sat, 18 Jul 2026 22:54:33 +0800 Subject: [PATCH] =?UTF-8?q?fix(agent):=20/agent/chat=20=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E4=BD=93=E6=97=A0=E6=B3=95=E7=BB=91=E5=AE=9A=EF=BC=88TYPE=5FCH?= =?UTF-8?q?ECKING=20=E5=AF=BC=E8=87=B4=20422=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Critical 回归:apps/api/routers/agent.py 把 AgentChatRequest 放在 if TYPE_CHECKING: 块里导入,配合 `from __future__ import annotations` (PEP 563) 使所有注解变为字符串。FastAPI 用 get_type_hints 解析路由签名时 模块命名空间没有 AgentChatRequest,无法把 JSON body 绑定到 req 参数, 错误地当成 query 参数 → 任何 POST /agent/chat 都返回 422 {"detail":[{"loc":["query","req"],...}]}。 实测确认:部署后所有 /agent/chat 请求 422(包括前端),agent 对话功能 完全不可用。此 bug 在 PR #21 (3403bfa) 引入,一直存在至今。 修复:把 AgentChatRequest 和 Callable 移出 TYPE_CHECKING 块作运行时导入, 加 noqa 抑制 ruff TC001/TC003(FastAPI 确需运行时可见)。 验证:本地 FastAPI 路由 introspect 显示 body_params=[('req', AgentChatRequest)], 之前为空(当 query)。 --- apps/api/routers/agent.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/apps/api/routers/agent.py b/apps/api/routers/agent.py index 4892e0f..40a0b70 100644 --- a/apps/api/routers/agent.py +++ b/apps/api/routers/agent.py @@ -6,17 +6,15 @@ import json import re -from typing import TYPE_CHECKING +from collections.abc import Callable # noqa: TC003 FastAPI 需运行时可见以解析 body 注解 from fastapi import APIRouter, HTTPException, Query from fastapi.responses import StreamingResponse from packages.ai.agent_service import confirm_action, reject_action, stream_chat - -if TYPE_CHECKING: - from collections.abc import Callable - - from packages.domain.schemas import AgentChatRequest +from packages.domain.schemas import ( + AgentChatRequest, # noqa: TC001 FastAPI 需运行时可见以解析 body 注解 +) router = APIRouter()