Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrRuntimeRequired = errors.New("agent/client: runtime is required")
ErrRuntimeRequired 表示调用方没有提供 Runtime。
Client 不再内置「无任务的独立 Runtime」:Agent 调用必须由上层(AgentService 的 taskRuntime)注入,保证事件落库、权限、提问都有明确的任务归属。
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client 是 Agent 调用的统一门面(Facade)。
上层业务(AISummaryWorker 等)只依赖 Client,不直接感知具体 Provider。 Client 负责:按请求中的 Provider(或默认 Provider)解析 Agent 实例,并转发 Invoke / Stream。
func (*Client) InvokeRuntime ¶
InvokeRuntime 使用调用方提供的 Runtime 执行一次性任务(供 AgentService 任务模式使用)。
type ModelProviderConfig ¶
type ModelProviderConfig struct {
// ModelID 是模型标识(配置表的 key),与 API 模型名分离。
ModelID string `json:"model_id"`
BaseURL string `json:"base_url"`
APIKey string `json:"api_key"`
// Provider 是模型厂商类型(openai / anthropic / deepseek / gemini …)。
Provider string `json:"provider"`
// APIModel 是发给厂商的真实模型名;为空时回退 ModelID。
APIModel string `json:"api_model"`
// Name 是模型展示名;为空时回退 ModelID。
Name string `json:"name"`
// ContextWindow 模型上下文窗口(token);0 表示未知。
ContextWindow int64 `json:"context_window"`
// DefaultMaxTokens 模型默认最大输出 token;0 表示未知。
DefaultMaxTokens int64 `json:"default_max_tokens"`
// CanReason 表示模型支持推理 / 思考过程。
CanReason bool `json:"can_reason"`
// SupportsAttachments 表示模型支持图片等附件。
SupportsAttachments bool `json:"supports_attachments"`
// CostPer1MIn / CostPer1MOut 每百万输入 / 输出 token 价格(美元)。
CostPer1MIn float64 `json:"cost_per_1m_in"`
CostPer1MOut float64 `json:"cost_per_1m_out"`
// CostPer1MInCached / CostPer1MOutCached 命中缓存的输入 / 输出价格。
CostPer1MInCached float64 `json:"cost_per_1m_in_cached"`
CostPer1MOutCached float64 `json:"cost_per_1m_out_cached"`
// ReasoningEffort 推理强度(openai 系 low / medium / high),空表示不指定。
ReasoningEffort string `json:"reasoning_effort"`
Extra map[string]string `json:"extra"`
}
ModelProviderConfig 描述一个「模型提供商」的连接配置(base_url / api_key / 类型等)。
与 config.ModelProviderConfig 一一对应,由容器启动时从配置映射而来。Provider 在每次 调用时按 Profile 指定的模型名(req.ModelID)从此表解析出本次调用所需的 LLM 配置。
Provider 是模型厂商类型(openai / anthropic / deepseek / gemini …),决定 Agent 类库 走哪条 SDK 客户端;APIModel 是发给厂商的真实模型名;其余为模型能力元信息。
type Options ¶
type Options struct {
WorkingDir string `json:"working_dir"`
Extra map[string]string `json:"extra"`
// ProviderSource 是模型提供商配置表的来源(可为 nil)。
//
// Provider 在每次调用时通过 ResolveProvider 按模型名从这里实时查询;
// 由调用方(通常是 container 层)按当前生效的配置生成快照,
// 使可视化配置页保存的 agent 段无需重启即可在下一次请求生效。
ProviderSource func() map[string]ModelProviderConfig `json:"-"`
// Tools 是本次调用可用的工具注册表。
//
// Provider 据此向模型暴露工具定义(tool.List()),并通过 ToolRunner /
// tool.Executor 执行模型发起的工具调用。为 nil 表示本次调用不启用工具。
//
// 内置 / coder 工具的进程级静态依赖(分析节点执行器、脚本与报告浏览器、技能解析等)
// 在 container 构建注册表时通过构造注入完成(见 builtin.Deps / coder.Deps),
// Options 不再承载这些服务对象,Provider 也无需逐项注入工具 ctx。
Tools *tool.Registry `json:"-"`
// Sessions / Messages 是会话与消息的持久化服务(可为 nil)。
//
// custom Provider 用它们为子 Agent 创建子会话(ParentSessionID = 父会话)并写入
// 子 Agent 的 reasoning / tool_call / tool_result / 最终回答;任一为 nil 时子 Agent
// 不落库,只把最终结果回填给父 Agent(旧行为)。
Sessions SessionService `json:"-"`
Messages MessageService `json:"-"`
}
Options 是构建 Agent 实例所需的通用配置;具体 Provider 按需读取。
模型相关的连接配置(base_url / api_key / 类型等)不再作为单值字段存在,而是由 Providers(模型名 → 配置)承载:一次请求使用的模型由 Profile.Model 决定,Provider 据此按模型名解析出本次调用所需的 LLM 配置。
func (Options) ResolveProvider ¶
func (o Options) ResolveProvider(modelKey string) *ModelProviderConfig
ResolveProvider 按模型名从 ProviderSource 解析本次调用的模型提供商配置。
未配置 ProviderSource 或未命中模型名时返回 nil(走官方 API / 默认配置)。
type Provider ¶
type Provider interface {
// Name 返回 Provider 唯一标识(小写,如 claude_code / codex / copilot / custom)。
Name() string
// New 基于 Options 构建 Agent 实例。
New(opts Options) (Agent, error)
}
Provider 是 Agent 的工厂接口:根据 Options 构建一个 Agent 实例。 这样同一 Provider 可以有不同的配置(不同模型 / 不同 endpoint)。