Introduce the error retransmission mechanism to enhance robustness.

This commit is contained in:
戒酒的李白
2025-08-24 19:48:48 +08:00
parent 6244d11685
commit 04de3410af
23 changed files with 11818 additions and 6 deletions
+1 -1
View File
@@ -51,7 +51,7 @@ class DeepSearchAgent:
# 确保输出目录存在
os.makedirs(self.config.output_dir, exist_ok=True)
print(f"Deep Search Agent 已初始化")
print(f"Meida Agent已初始化")
print(f"使用LLM: {self.llm_client.get_model_info()}")
print(f"搜索工具集: BochaMultimodalSearch (支持5种多模态搜索工具)")
+18
View File
@@ -4,10 +4,27 @@ DeepSeek LLM实现
"""
import os
import sys
from typing import Optional, Dict, Any
from openai import OpenAI
from .base import BaseLLM
# 添加utils目录到Python路径并导入重试模块
try:
current_dir = os.path.dirname(os.path.abspath(__file__))
root_dir = os.path.dirname(os.path.dirname(current_dir))
utils_dir = os.path.join(root_dir, 'utils')
if utils_dir not in sys.path:
sys.path.append(utils_dir)
from retry_helper import with_retry, with_graceful_retry, LLM_RETRY_CONFIG
except ImportError:
# 如果无法导入重试模块,使用空装饰器避免报错
def with_retry(config):
def decorator(func):
return func
return decorator
LLM_RETRY_CONFIG = None
class DeepSeekLLM(BaseLLM):
"""DeepSeek LLM实现类"""
@@ -39,6 +56,7 @@ class DeepSeekLLM(BaseLLM):
"""获取默认模型名称"""
return "deepseek-chat"
@with_retry(LLM_RETRY_CONFIG)
def invoke(self, system_prompt: str, user_prompt: str, **kwargs) -> str:
"""
调用DeepSeek API生成回复
+18
View File
@@ -4,10 +4,27 @@ Gemini LLM实现
"""
import os
import sys
from typing import Optional, Dict, Any
from openai import OpenAI
from .base import BaseLLM
# 添加utils目录到Python路径并导入重试模块
try:
current_dir = os.path.dirname(os.path.abspath(__file__))
root_dir = os.path.dirname(os.path.dirname(current_dir))
utils_dir = os.path.join(root_dir, 'utils')
if utils_dir not in sys.path:
sys.path.append(utils_dir)
from retry_helper import with_retry, with_graceful_retry, LLM_RETRY_CONFIG
except ImportError:
# 如果无法导入重试模块,使用空装饰器避免报错
def with_retry(config):
def decorator(func):
return func
return decorator
LLM_RETRY_CONFIG = None
class GeminiLLM(BaseLLM):
"""Gemini LLM实现类"""
@@ -39,6 +56,7 @@ class GeminiLLM(BaseLLM):
"""获取默认模型名称"""
return "gemini-2.5-pro"
@with_retry(LLM_RETRY_CONFIG)
def invoke(self, system_prompt: str, user_prompt: str, **kwargs) -> str:
"""
调用Gemini API生成回复
+18
View File
@@ -4,10 +4,27 @@ OpenAI LLM实现
"""
import os
import sys
from typing import Optional, Dict, Any
from openai import OpenAI
from .base import BaseLLM
# 添加utils目录到Python路径并导入重试模块
try:
current_dir = os.path.dirname(os.path.abspath(__file__))
root_dir = os.path.dirname(os.path.dirname(current_dir))
utils_dir = os.path.join(root_dir, 'utils')
if utils_dir not in sys.path:
sys.path.append(utils_dir)
from retry_helper import with_retry, with_graceful_retry, LLM_RETRY_CONFIG
except ImportError:
# 如果无法导入重试模块,使用空装饰器避免报错
def with_retry(config):
def decorator(func):
return func
return decorator
LLM_RETRY_CONFIG = None
class OpenAILLM(BaseLLM):
"""OpenAI LLM实现类"""
@@ -35,6 +52,7 @@ class OpenAILLM(BaseLLM):
"""获取默认模型名称"""
return "gpt-4o-mini"
@with_retry(LLM_RETRY_CONFIG)
def invoke(self, system_prompt: str, user_prompt: str, **kwargs) -> str:
"""
调用OpenAI API生成回复
+13 -2
View File
@@ -22,6 +22,7 @@
import os
import json
import sys
from typing import List, Dict, Any, Optional, Literal
# 运行前请确保已安装 requests 库: pip install requests
@@ -30,6 +31,15 @@ try:
except ImportError:
raise ImportError("requests 库未安装,请运行 `pip install requests` 进行安装。")
# 添加utils目录到Python路径
current_dir = os.path.dirname(os.path.abspath(__file__))
root_dir = os.path.dirname(os.path.dirname(current_dir))
utils_dir = os.path.join(root_dir, 'utils')
if utils_dir not in sys.path:
sys.path.append(utils_dir)
from retry_helper import with_graceful_retry, SEARCH_API_RETRY_CONFIG
# --- 1. 数据结构定义 ---
from dataclasses import dataclass, field
@@ -158,6 +168,7 @@ class BochaMultimodalSearch:
return final_response
@with_graceful_retry(SEARCH_API_RETRY_CONFIG, default_return=BochaResponse(query="搜索失败"))
def _search_internal(self, **kwargs) -> BochaResponse:
"""内部通用的搜索执行器,所有工具最终都调用此方法"""
query = kwargs.get("query", "Unknown Query")
@@ -179,10 +190,10 @@ class BochaMultimodalSearch:
except requests.exceptions.RequestException as e:
print(f"搜索时发生网络错误: {str(e)}")
return BochaResponse(query=query)
raise e # 让重试机制捕获并处理
except Exception as e:
print(f"处理响应时发生未知错误: {str(e)}")
return BochaResponse(query=query)
raise e # 让重试机制捕获并处理
# --- Agent 可用的工具方法 ---