feat(agent): 新增AI_AGENT_VERBOSE开关,控制工具调用过程回复及提示词输出

This commit is contained in:
jxxghp
2026-03-27 20:12:01 +08:00
parent c3e96ae73f
commit 8d7ff2bd1d
4 changed files with 18 additions and 4 deletions

View File

@@ -81,19 +81,21 @@ class MoviePilotAgent:
""" """
if not content: if not content:
return "" return ""
if isinstance(content, str): # 跳过思考/推理类型的内容块
return content
if isinstance(content, list): if isinstance(content, list):
text_parts = [] text_parts = []
for block in content: for block in content:
if isinstance(block, str): if isinstance(block, str):
text_parts.append(block) text_parts.append(block)
elif isinstance(block, dict): elif isinstance(block, dict):
# 跳过思考/推理类型的内容块 # 优先检查 thought 标志LangChain Google GenAI 方案)
if block.get("thought"):
continue
if block.get("type") in ( if block.get("type") in (
"thinking", "thinking",
"reasoning_content", "reasoning_content",
"reasoning", "reasoning",
"thought",
): ):
continue continue
if block.get("type") == "text": if block.get("type") == "text":

View File

@@ -3,6 +3,7 @@
from pathlib import Path from pathlib import Path
from typing import Dict from typing import Dict
from app.core.config import settings
from app.log import logger from app.log import logger
from app.schemas import ( from app.schemas import (
ChannelCapability, ChannelCapability,
@@ -73,6 +74,14 @@ class PromptManager:
# 始终替换占位符,避免后续 .format() 时因残留花括号报 KeyError # 始终替换占位符,避免后续 .format() 时因残留花括号报 KeyError
base_prompt = base_prompt.replace("{markdown_spec}", markdown_spec) base_prompt = base_prompt.replace("{markdown_spec}", markdown_spec)
# 据 VERBOSE 开关动态调整提示词:关闭时要求避免工具调用前的废话
if not settings.AI_AGENT_VERBOSE:
base_prompt += (
"\n\n[Important Instruction] If you need to call a tool, DO NOT output any conversational "
"text or explanations before calling the tool. Call the tool directly without transitional "
"phrases like 'Let me check', 'I will look this up', etc."
)
return base_prompt return base_prompt
@staticmethod @staticmethod

View File

@@ -7,6 +7,7 @@ from pydantic import PrivateAttr
from app.agent import StreamingHandler from app.agent import StreamingHandler
from app.chain import ChainBase from app.chain import ChainBase
from app.core.config import settings
from app.log import logger from app.log import logger
from app.schemas import Notification from app.schemas import Notification
@@ -53,7 +54,7 @@ class MoviePilotTool(BaseTool, metaclass=ABCMeta):
if explanation: if explanation:
tool_message = explanation tool_message = explanation
if not is_background: if not is_background and settings.AI_AGENT_VERBOSE:
# 非后台模式:发送工具执行过程消息 # 非后台模式:发送工具执行过程消息
if self._stream_handler and self._stream_handler.is_streaming: if self._stream_handler and self._stream_handler.is_streaming:
# 流式渠道:工具消息直接追加到 buffer 中,与 Agent 文字合并为同一条流式消息 # 流式渠道:工具消息直接追加到 buffer 中,与 Agent 文字合并为同一条流式消息

View File

@@ -531,6 +531,8 @@ class ConfigModel(BaseModel):
LLM_MAX_TOOLS: int = 0 LLM_MAX_TOOLS: int = 0
# AI智能体定时任务检查间隔小时0为不启用默认24小时 # AI智能体定时任务检查间隔小时0为不启用默认24小时
AI_AGENT_JOB_INTERVAL: int = 0 AI_AGENT_JOB_INTERVAL: int = 0
# AI智能体啰嗦模式开启后会回复工具调用过程
AI_AGENT_VERBOSE: bool = False
class Settings(BaseSettings, ConfigModel, LogConfigModel): class Settings(BaseSettings, ConfigModel, LogConfigModel):