client

package
v0.2.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 12, 2026 License: MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
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 NewClient

func NewClient(registry *Registry, opts Options) *Client

NewClient 创建 Client。

func (*Client) InvokeRuntime

func (c *Client) InvokeRuntime(ctx context.Context, req Request, rt Runtime) (*Result, error)

InvokeRuntime 使用调用方提供的 Runtime 执行一次性任务(供 AgentService 任务模式使用)。

func (*Client) StreamRuntime

func (c *Client) StreamRuntime(ctx context.Context, req Request, rt Runtime) (*Result, error)

StreamRuntime 使用调用方提供的 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)。

type Registry

type Registry struct {
	// contains filtered or unexported fields
}

Registry 负责注册与解析 Provider。 容器启动时把全部 Provider 注册进来,运行时按名称解析。

func NewRegistry

func NewRegistry(providers ...Provider) *Registry

NewRegistry 创建 Registry 并注册传入的 Provider。

func (*Registry) Has

func (r *Registry) Has(name string) bool

Has 报告指定名称的 Provider 是否已注册。

func (*Registry) Names

func (r *Registry) Names() []string

Names 返回已注册的 Provider 名称列表(升序,便于调试与校验)。

func (*Registry) Register

func (r *Registry) Register(p Provider)

Register 注册 Provider;同名覆盖。

func (*Registry) Resolve

func (r *Registry) Resolve(name string, opts Options) (Agent, error)

Resolve 按名称解析并构建 Agent 实例。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL