feat(agent): 为 SqlReporterAgent 添加文件上传和附件保存功能

- 引入 FilesystemMiddleware 和 StateBackend 支持文件存储
- 添加 save_attachments_to_fs 中间件保存附件到文件系统
- 配置 agent 的 capabilities 支持 file_upload 和 files
This commit is contained in:
Wenjie Zhang 2026-02-15 21:58:24 +08:00
parent ed849a2e5c
commit e6ad5dfa1d

View File

@ -1,16 +1,24 @@
from dataclasses import dataclass, field from dataclasses import dataclass, field
from typing import Annotated from typing import Annotated
from deepagents.backends import StateBackend
from deepagents.middleware.filesystem import FilesystemMiddleware
from langchain.agents import create_agent from langchain.agents import create_agent
from src.agents.common import BaseAgent, BaseContext, load_chat_model from src.agents.common import BaseAgent, BaseContext, load_chat_model
from src.agents.common.middlewares import ( from src.agents.common.middlewares import (
RuntimeConfigMiddleware, RuntimeConfigMiddleware,
save_attachments_to_fs,
) )
from src.agents.common.toolkits.mysql import get_mysql_tools from src.agents.common.toolkits.mysql import get_mysql_tools
from src.services.mcp_service import get_mcp_server_names, get_tools_from_all_servers from src.services.mcp_service import get_mcp_server_names, get_tools_from_all_servers
from src.utils import logger from src.utils import logger
def _create_fs_backend(rt):
"""创建文件存储后端"""
return StateBackend(rt)
PROMPT = """你的任务是根据用户的指令,使用数据库工具和图表绘制工具,构建 SQL 查询报告。 PROMPT = """你的任务是根据用户的指令,使用数据库工具和图表绘制工具,构建 SQL 查询报告。
你需要根据用户的指令生成相应的 SQL 查询并将查询结果以报表的形式返回给用户 你需要根据用户的指令生成相应的 SQL 查询并将查询结果以报表的形式返回给用户
在生成报表时你可以调用工具生成图表以更直观地展示数据 在生成报表时你可以调用工具生成图表以更直观地展示数据
@ -52,6 +60,10 @@ class SqlReporterAgent(BaseAgent):
"MySQL 工具默认启用无法选择mcp 默认启用 Charts MCPs。" "MySQL 工具默认启用无法选择mcp 默认启用 Charts MCPs。"
) )
context_schema = ReporterContext context_schema = ReporterContext
capabilities = [
"file_upload",
"files",
]
def __init__(self, **kwargs): def __init__(self, **kwargs):
super().__init__(**kwargs) super().__init__(**kwargs)
@ -66,7 +78,9 @@ class SqlReporterAgent(BaseAgent):
system_prompt=context.system_prompt, system_prompt=context.system_prompt,
tools=get_mysql_tools(), # MySQL 工具默认启用,这里添加的 tools不会在工具选择框中出现 tools=get_mysql_tools(), # MySQL 工具默认启用,这里添加的 tools不会在工具选择框中出现
middleware=[ middleware=[
FilesystemMiddleware(backend=_create_fs_backend), # 文件系统后端
RuntimeConfigMiddleware(extra_tools=all_mcp_tools), RuntimeConfigMiddleware(extra_tools=all_mcp_tools),
save_attachments_to_fs, # 附件保存到文件系统
], ],
checkpointer=await self._get_checkpointer(), checkpointer=await self._get_checkpointer(),
) )