提供商抽象层、工具编排与 LLM 路由引擎
Agent Runner 是 Hermes Agent 的核心执行层,负责提供商抽象、会话循环管理、工具编排以及请求路由到相应的大语言模型后端。该层设计为提供商无关的架构,可在不同 LLM 服务之间无缝切换。
Runner 采用"消息输入、函数调用输出"的模型,用户消息触发持续的推理、工具调用和响应生成循环,直至任务完成。
所有 LLM 提供商均实现统一的 BaseAdapter 接口,确保不同后端之间的行为一致性。每个适配器处理提供商特定的 API 格式、响应解析和错误处理。
每个提供商在 astrbot/core/model_providers/ 目录下都有对应的适配器文件:
class BaseAdapter(ABC):
async def chat(messages, tools, model):
"""Send chat request to provider"""
pass
async def vision(image_url, prompt):
"""Handle image understanding"""
pass
async def count_tokens(text, model):
"""Count tokens for context management"""
pass
def parse_response(response):
"""Parse provider-specific response"""
pass
# Tool execution flow
user_message
↓
LLM generates function_call
↓
ToolRegistry.find_tool(name)
↓
Tool.execute(arguments)
↓
Result fed back to LLM
↓
Final response
ProviderManager 根据以下条件选择合适的适配器:
provider:model 格式路由到对应提供商config.yaml 中定义的偏好设置def route_request(model_name, task_type):
if model_name.startswith("gpt"):
return OpenAIAdapter()
elif model_name.startswith("claude"):
return AnthropicAdapter()
elif model_name.startswith("gemini"):
return GeminiAdapter()
# ... other providers