新增中间件控制拦截工具调用 判断use_report是否开启

This commit is contained in:
zcr
2026-04-02 09:59:54 +08:00
parent 108fa0fb8c
commit 34cf3456cd
5 changed files with 341 additions and 336 deletions

View File

@@ -104,7 +104,7 @@ async def chat_stream(request: DeepAgentChatRequest):
# 构建主agent
workspace_dir = os.path.join(PROJECT_ROOT, f"agent_workspace/{target_thread_id}")
logger.info(f"chat request data: {request} | target_thread_id : workspace_dir: {workspace_dir}")
main_agent = build_main_agent(request.use_report, workspace_dir, request.enable_thinking)
main_agent = build_main_agent(workspace_dir, request.enable_thinking)
# 2. 配置參數
temp = request.config_params.temperature if request.config_params else 0.7
@@ -387,7 +387,7 @@ async def get_chat_history(thread_id: str):
history_data = []
workspace_dir = os.path.join(PROJECT_ROOT, f"agent_workspace/{thread_id}")
main_agent = build_main_agent(False, workspace_dir, enable_thinking=False)
main_agent = build_main_agent(workspace_dir, enable_thinking=False)
async for state in main_agent.aget_state_history(config):
msg_content = "Initial"
if state.values and "messages" in state.values:

View File

@@ -1,12 +1,14 @@
import logging
from typing import Callable
from typing import Callable, TypedDict, Annotated
from deepagents import create_deep_agent, SubAgentMiddleware
from deepagents.backends import FilesystemBackend
from langchain.agents.middleware import SummarizationMiddleware, ToolRetryMiddleware, wrap_model_call, ModelRequest, ModelResponse, wrap_tool_call
from langchain_core.messages import ToolMessage
from langchain_core.messages import ToolMessage, BaseMessage
from langgraph.checkpoint.mongodb import MongoDBSaver
from langgraph.checkpoint.serde.jsonplus import JsonPlusSerializer
from langgraph.constants import END
from langgraph.graph import MessagesState, add_messages
from langgraph.prebuilt.tool_node import ToolCallRequest
from langgraph.store.memory import InMemoryStore
from langgraph.types import Command
@@ -55,9 +57,15 @@ async def report_control(
if not use_report:
error_msg = "Reporting is currently not enabled. If you want to use the reporting function, please enable trending report first."
logger.info("⚠️ 已拦截 research_subagent 调用")
return ToolMessage(
content=error_msg,
tool_call_id=request.tool_call.get("id")
# return ToolMessage(
# content=error_msg,
# tool_call_id=request.tool_call.get("id")
# )
return Command(
update={
"messages": [ToolMessage(content=error_msg, tool_call_id=request.tool_call.get("id"))]
},
goto=END # 关键:强制结束整个 Agent 执行
)
else:
logger.info("✅ use_report=True允许调用 research_subagent")
@@ -73,7 +81,7 @@ async def report_control(
)
def build_main_agent(use_report, workspace_dir, enable_thinking):
def build_main_agent(workspace_dir, enable_thinking):
research_subagent = build_researcher_subagent(workspace_dir)
# painter_subagent = build_painter_subagent(workspace_dir)
subagents = [
@@ -83,7 +91,7 @@ def build_main_agent(use_report, workspace_dir, enable_thinking):
]
main_agent = create_deep_agent(
model=build_main_llm(enable_thinking=enable_thinking),
system_prompt=build_system_prompt(use_report=use_report),
system_prompt=build_system_prompt(),
store=InMemoryStore(),
subagents=subagents,
checkpointer=checkpointer,
@@ -107,3 +115,6 @@ def build_main_agent(use_report, workspace_dir, enable_thinking):
],
)
return main_agent
agent = build_main_agent(workspace_dir="./workspace", enable_thinking=False)

View File

@@ -77,7 +77,7 @@
# """
def build_system_prompt(use_report):
def build_system_prompt():
system_prompt = f"""
你是主调度 AgentSupervisor负责理解用户意图并选择合适的子Agent。
系统中存在两个相关子Agent
@@ -132,7 +132,14 @@ def build_system_prompt(use_report):
- ❌ 工具成功后不要描述“生成了哪些路径的图片”。
【3】当用户请求报告 / 调研 / 分析 / 总结时:
先判断是否已经具备足够的用户画像信息。
先判断是否开启了trending report功能,
如果未开启:
→ **立即停止所有思考和行动**,不要调用任何 subagent包括 user_profile_subagent
→ **不要询问用户任何问题**,不要收集任何信息,不要引导用户提供偏好。
→ **必须直接、完整地回复以下固定内容**(不允许修改、添加或省略):
"报告功能当前未开启。\n\n如需使用报告生成功能,请在界面上**开启 trending report 开关** 后,我将立即为您生成专业报告。"
再判断是否已经具备足够的用户画像信息。
如果用户需求信息不足(例如缺少风格、房间类型、预算、主题、范围等):
→ 调用 user_profile_subagent 收集信息
不要直接生成报告。
@@ -157,7 +164,7 @@ def build_system_prompt(use_report):
重要提醒(最高优先级):
在整个对话过程中,你**绝对禁止**输出任何包含以下内容的文字:
- 以 "uploads/""furniture/""projects/""sketches/" 开头的路径
- 任何 .png、.jpg 结尾的路径
- 任何 .png、.jpg 结尾的路径l
- 任何 http 开头的图片链接(除非系统明确要求)
所有图片展示均由系统统一处理,你只需负责正确调用工具。
"""