[fix] error with tools ,agent no response
This commit is contained in:
@@ -300,6 +300,9 @@ class DraftRunService:
|
|||||||
if hasattr(agent_config, 'tools') and agent_config.tools and isinstance(agent_config.tools, list):
|
if hasattr(agent_config, 'tools') and agent_config.tools and isinstance(agent_config.tools, list):
|
||||||
if hasattr(agent_config, 'tools') and agent_config.tools:
|
if hasattr(agent_config, 'tools') and agent_config.tools:
|
||||||
for tool_config in agent_config.tools:
|
for tool_config in agent_config.tools:
|
||||||
|
print("+"*50)
|
||||||
|
print(f"agent_config:{agent_config}")
|
||||||
|
print(f"tool_config:{tool_config}")
|
||||||
if tool_config.get("enabled", False):
|
if tool_config.get("enabled", False):
|
||||||
# 根据工具名称查找工具实例
|
# 根据工具名称查找工具实例
|
||||||
tool_instance = tool_service._get_tool_instance(tool_config.get("tool_id", ""),
|
tool_instance = tool_service._get_tool_instance(tool_config.get("tool_id", ""),
|
||||||
@@ -523,8 +526,11 @@ class DraftRunService:
|
|||||||
tool_service = ToolService(self.db)
|
tool_service = ToolService(self.db)
|
||||||
|
|
||||||
# 从配置中获取启用的工具
|
# 从配置中获取启用的工具
|
||||||
if hasattr(agent_config, 'tools') and agent_config.tools and isinstance(agent_config.tools, dict):
|
if hasattr(agent_config, 'tools') and agent_config.tools and isinstance(agent_config.tools, list):
|
||||||
for tool_config in agent_config.tools:
|
for tool_config in agent_config.tools:
|
||||||
|
print("+"*50)
|
||||||
|
print(f"agent_config:{agent_config}")
|
||||||
|
print(f"tool_config:{tool_config}")
|
||||||
if tool_config.get("enabled", False):
|
if tool_config.get("enabled", False):
|
||||||
# 根据工具名称查找工具实例
|
# 根据工具名称查找工具实例
|
||||||
tool_instance = tool_service._get_tool_instance(tool_config.get("tool_id", ""),
|
tool_instance = tool_service._get_tool_instance(tool_config.get("tool_id", ""),
|
||||||
@@ -677,7 +683,7 @@ class DraftRunService:
|
|||||||
)
|
)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("流式 Agent 调用失败", extra={"error": str(e)})
|
logger.error("流式 Agent 调用失败", extra={"error": str(e)}, exc_info=True)
|
||||||
# 发送错误事件
|
# 发送错误事件
|
||||||
yield self._format_sse_event("error", {
|
yield self._format_sse_event("error", {
|
||||||
"error": str(e),
|
"error": str(e),
|
||||||
|
|||||||
@@ -860,17 +860,27 @@ class MultiAgentOrchestrator:
|
|||||||
|
|
||||||
# 3. 智能整合结果
|
# 3. 智能整合结果
|
||||||
merge_mode = self.config.execution_config.get("result_merge_mode", "smart")
|
merge_mode = self.config.execution_config.get("result_merge_mode", "smart")
|
||||||
|
# merge_mode = "master"
|
||||||
# 智能判断是否需要整合
|
# 智能判断是否需要整合
|
||||||
need_merge = self._should_merge_results(results, collaboration_strategy)
|
need_merge = self._should_merge_results(results, collaboration_strategy)
|
||||||
|
|
||||||
if not need_merge:
|
if not need_merge:
|
||||||
# 不需要整合:用户已经看到所有内容了
|
# 不需要整合:用户已经看到所有内容了
|
||||||
logger.info("跳过整合阶段(用户已看到所有 Agent 输出)")
|
logger.info("跳过整合阶段(用户已看到所有 Agent 输出)")
|
||||||
# 不发送额外的 message 事件,避免重复
|
# 输出 message 事件,将 sub_agent_message 的内容汇总输出
|
||||||
|
if results:
|
||||||
|
all_content = ""
|
||||||
|
for result in results:
|
||||||
|
msg = result.get("result", {}).get("message", "")
|
||||||
|
if msg:
|
||||||
|
all_content += msg + "\n\n"
|
||||||
|
if all_content:
|
||||||
|
yield self._format_sse_event("message", {
|
||||||
|
"content": all_content.strip()
|
||||||
|
})
|
||||||
elif merge_mode == "master" and len(results) > 1:
|
elif merge_mode == "master" and len(results) > 1:
|
||||||
# Master Agent 整合(非流式,避免等待时间)
|
# Master Agent 流式整合
|
||||||
logger.info("开始 Master Agent 整合")
|
logger.info("开始 Master Agent 流式整合")
|
||||||
|
|
||||||
# 发送整合开始提示
|
# 发送整合开始提示
|
||||||
yield self._format_sse_event("merge_start", {
|
yield self._format_sse_event("merge_start", {
|
||||||
@@ -879,20 +889,16 @@ class MultiAgentOrchestrator:
|
|||||||
"message": "正在整合多个专家的回答..."
|
"message": "正在整合多个专家的回答..."
|
||||||
})
|
})
|
||||||
|
|
||||||
# 非流式整合(更快)
|
# 流式整合
|
||||||
try:
|
try:
|
||||||
final_response = await self._master_merge_results(
|
async for event in self._master_merge_results_stream(
|
||||||
results,
|
results,
|
||||||
collaboration_strategy,
|
collaboration_strategy,
|
||||||
message
|
message
|
||||||
)
|
):
|
||||||
|
yield event
|
||||||
# 发送整合后的结果
|
|
||||||
yield self._format_sse_event("message", {
|
|
||||||
"content": final_response
|
|
||||||
})
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Master Agent 整合失败,降级到 smart 模式: {str(e)}")
|
logger.error(f"Master Agent 流式整合失败,降级到 smart 模式: {str(e)}")
|
||||||
final_response = self._smart_merge_results(results, collaboration_strategy)
|
final_response = self._smart_merge_results(results, collaboration_strategy)
|
||||||
yield self._format_sse_event("message", {
|
yield self._format_sse_event("message", {
|
||||||
"content": final_response
|
"content": final_response
|
||||||
@@ -2332,8 +2338,23 @@ class MultiAgentOrchestrator:
|
|||||||
|
|
||||||
# 多个结果:根据策略智能整合
|
# 多个结果:根据策略智能整合
|
||||||
if strategy == "decomposition":
|
if strategy == "decomposition":
|
||||||
# 问题拆分:用户已经看到所有子问题的答案了
|
# 问题拆分:将所有子问题的答案合并
|
||||||
# 返回空字符串,表示不需要额外的整合输出
|
# 按顺序组合各个 Agent 的回答
|
||||||
|
merged_parts = []
|
||||||
|
for result in results:
|
||||||
|
if "error" in result:
|
||||||
|
continue
|
||||||
|
agent_name = result.get("agent_name", "")
|
||||||
|
sub_question = result.get("sub_question", "")
|
||||||
|
message = result.get("result", {}).get("message", "")
|
||||||
|
if message:
|
||||||
|
if sub_question:
|
||||||
|
merged_parts.append(f"**{sub_question}**\n{message}")
|
||||||
|
else:
|
||||||
|
merged_parts.append(message)
|
||||||
|
|
||||||
|
if merged_parts:
|
||||||
|
return "\n\n".join(merged_parts)
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
elif strategy == "sequential":
|
elif strategy == "sequential":
|
||||||
@@ -2515,14 +2536,14 @@ class MultiAgentOrchestrator:
|
|||||||
from app.models import ModelApiKey, ModelType
|
from app.models import ModelApiKey, ModelType
|
||||||
|
|
||||||
# 获取 Master Agent 的模型配置
|
# 获取 Master Agent 的模型配置
|
||||||
master_agent_release = self.config.master_agent_release
|
default_model_config_id = self.config.default_model_config_id
|
||||||
if not master_agent_release:
|
if not default_model_config_id:
|
||||||
logger.warning("没有配置 Master Agent,使用简单整合")
|
logger.warning("没有配置 Master Agent,使用简单整合")
|
||||||
return self._smart_merge_results(results, strategy)
|
return self._smart_merge_results(results, strategy)
|
||||||
|
|
||||||
# 获取 API Key 配置
|
# 获取 API Key 配置
|
||||||
api_key_config = self.db.query(ModelApiKey).filter(
|
api_key_config = self.db.query(ModelApiKey).filter(
|
||||||
ModelApiKey.model_config_id == master_agent_release.default_model_config_id,
|
ModelApiKey.model_config_id == default_model_config_id,
|
||||||
ModelApiKey.is_active == True
|
ModelApiKey.is_active == True
|
||||||
).first()
|
).first()
|
||||||
|
|
||||||
@@ -2670,8 +2691,8 @@ class MultiAgentOrchestrator:
|
|||||||
from app.models import ModelApiKey, ModelType
|
from app.models import ModelApiKey, ModelType
|
||||||
|
|
||||||
# 获取 Master Agent 的模型配置
|
# 获取 Master Agent 的模型配置
|
||||||
master_agent_release = self.config.master_agent_release
|
default_model_config_id = self.config.default_model_config_id
|
||||||
if not master_agent_release:
|
if not default_model_config_id:
|
||||||
logger.warning("没有配置 Master Agent,使用简单整合")
|
logger.warning("没有配置 Master Agent,使用简单整合")
|
||||||
final_response = self._smart_merge_results(results, strategy)
|
final_response = self._smart_merge_results(results, strategy)
|
||||||
yield self._format_sse_event("message", {"content": final_response})
|
yield self._format_sse_event("message", {"content": final_response})
|
||||||
@@ -2679,7 +2700,7 @@ class MultiAgentOrchestrator:
|
|||||||
|
|
||||||
# 获取 API Key 配置
|
# 获取 API Key 配置
|
||||||
api_key_config = self.db.query(ModelApiKey).filter(
|
api_key_config = self.db.query(ModelApiKey).filter(
|
||||||
ModelApiKey.model_config_id == master_agent_release.default_model_config_id,
|
ModelApiKey.model_config_id == default_model_config_id,
|
||||||
ModelApiKey.is_active == True
|
ModelApiKey.is_active == True
|
||||||
).first()
|
).first()
|
||||||
|
|
||||||
@@ -2779,7 +2800,7 @@ class MultiAgentOrchestrator:
|
|||||||
if strategy == "decomposition":
|
if strategy == "decomposition":
|
||||||
# 问题拆分:每个子问题独立,用户已经看到所有答案
|
# 问题拆分:每个子问题独立,用户已经看到所有答案
|
||||||
# 通常不需要整合(除非配置要求)
|
# 通常不需要整合(除非配置要求)
|
||||||
return self.config.execution_config.get("force_merge_decomposition", False)
|
return self.config.execution_config.get("force_merge_decomposition", True)
|
||||||
|
|
||||||
if strategy == "hierarchical":
|
if strategy == "hierarchical":
|
||||||
# 层级协作:主 Agent 已经整合了,不需要再整合
|
# 层级协作:主 Agent 已经整合了,不需要再整合
|
||||||
|
|||||||
Reference in New Issue
Block a user