新增中间件控制拦截工具调用 判断use_report是否开启
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
# """
|
||||
|
||||
|
||||
def build_system_prompt(use_report):
|
||||
def build_system_prompt():
|
||||
system_prompt = f"""
|
||||
你是主调度 Agent(Supervisor),负责理解用户意图并选择合适的子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 开头的图片链接(除非系统明确要求)
|
||||
所有图片展示均由系统统一处理,你只需负责正确调用工具。
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user