Documentation
¶
Index ¶
- Constants
- Variables
- type Agent
- func (ag *Agent) AddMessages(ctx context.Context, msgs []*schema.Message) error
- func (ag *Agent) AddSystemMessage(content string)
- func (ag *Agent) ChangeModel(model chatmodel.BaseModel)
- func (ag *Agent) ClearAgentHistory(ctx context.Context) error
- func (ag *Agent) GetHistory(ctx context.Context) ([]*schema.Message, error)
- func (ag *Agent) GetRawMessages() []*schema.Message
- func (ag *Agent) GetUsageTracker() *UsageTracker
- func (ag *Agent) Send(ctx context.Context, userContent string) (*schema.Message, error)
- func (ag *Agent) SendMessage(ctx context.Context, msg *schema.Message) (*schema.Message, error)
- func (ag *Agent) SendMessageStream(ctx context.Context, msg *schema.Message, ...) (*schema.Message, error)
- func (ag *Agent) SendStream(ctx context.Context, userContent string, ...) (*schema.Message, error)
- func (ag *Agent) SetMessages(ctx context.Context, msgs []*schema.Message) error
- type AgentInterface
- type AgentOption
- type MockAgent
- func (m *MockAgent) CallCount() int
- func (m *MockAgent) Calls() []MockCall
- func (m *MockAgent) HasCallWith(text string) bool
- func (m *MockAgent) LastCall() *schema.Message
- func (m *MockAgent) LastCallContent() string
- func (m *MockAgent) Reset()
- func (m *MockAgent) SendMessage(ctx context.Context, msg *schema.Message) (*schema.Message, error)
- func (m *MockAgent) SendMessageStream(ctx context.Context, msg *schema.Message, ...) (*schema.Message, error)
- func (m *MockAgent) WithDelay(d time.Duration) *MockAgent
- func (m *MockAgent) WithError(err error) *MockAgent
- func (m *MockAgent) WithFallback(content string) *MockAgent
- func (m *MockAgent) WithFallbackMsg(msg *schema.Message) *MockAgent
- func (m *MockAgent) WithOnSend(fn func(*schema.Message)) *MockAgent
- func (m *MockAgent) WithResponse(key string, content string) *MockAgent
- func (m *MockAgent) WithResponseMsg(key string, msg *schema.Message) *MockAgent
- func (m *MockAgent) WithToolResponse(key string, rounds ...*schema.Message) *MockAgent
- type MockCall
- type ModelPricing
- type UsageRecord
- type UsageStats
- type UsageTracker
- func (ut *UsageTracker) ExportJSON() ([]byte, error)
- func (ut *UsageTracker) ExportRecordsJSON() ([]byte, error)
- func (ut *UsageTracker) FormatStats() string
- func (ut *UsageTracker) GetAllRecords() []UsageRecord
- func (ut *UsageTracker) GetModelStats(model string) UsageStats
- func (ut *UsageTracker) GetRecentRecords(n int) []UsageRecord
- func (ut *UsageTracker) GetRemainingBudget() float64
- func (ut *UsageTracker) GetStats() UsageStats
- func (ut *UsageTracker) IsOverBudget() bool
- func (ut *UsageTracker) Record(usage schema.Usage, model string, duration time.Duration)
- func (ut *UsageTracker) Reset()
- func (ut *UsageTracker) SetBudget(budget float64)
Constants ¶
const DefaultMaxToolRounds int = 20
DefaultMaxToolRounds 默认最大工具调用轮次
Variables ¶
var DefaultPricingTable = map[string]ModelPricing{
"deepseek-v4-flash": {InputPrice: 0.001, OutputPrice: 0.002},
"deepseek-v4-pro": {InputPrice: 0.012, OutputPrice: 0.024},
"kimi-k2.6": {InputPrice: 0.0065, OutputPrice: 0.027},
"gpt-4": {InputPrice: 0.03, OutputPrice: 0.06},
"gpt-3.5-turbo": {InputPrice: 0.0005, OutputPrice: 0.0015},
}
DefaultPricingTable 内置价格表 价格单位:元 / 1k tokens
Functions ¶
This section is empty.
Types ¶
type Agent ¶
type Agent struct {
// contains filtered or unexported fields
}
Agent 封装多轮对话(支持 Generate 和 Stream)
func NewAgent ¶
func NewAgent(model chatmodel.BaseModel, registry *tools.ToolRegistry, opts ...AgentOption) *Agent
func (*Agent) AddMessages ¶
func (*Agent) AddSystemMessage ¶
func (*Agent) ChangeModel ¶
func (*Agent) GetHistory ¶
func (*Agent) GetRawMessages ¶
func (*Agent) GetUsageTracker ¶
func (ag *Agent) GetUsageTracker() *UsageTracker
func (*Agent) SendMessage ¶
SendMessage 发送完整消息(支持多模态内容)
func (*Agent) SendMessageStream ¶
func (ag *Agent) SendMessageStream(ctx context.Context, msg *schema.Message, onChunk func(msg *schema.Message, isToolCall bool) bool) (*schema.Message, error)
SendMessageStream 流式发送完整消息(支持多模态内容)
type AgentInterface ¶
type AgentInterface interface {
SendMessage(ctx context.Context, msg *schema.Message) (*schema.Message, error)
SendMessageStream(ctx context.Context, msg *schema.Message, onChunk func(msg *schema.Message, isToolCall bool) bool) (*schema.Message, error)
}
AgentInterface 统一接口
type AgentOption ¶
type AgentOption func(*Agent)
AgentOption Agent 配置选项
func WithMaxToolRounds ¶
func WithMaxToolRounds(n int) AgentOption
func WithMemoryController ¶
func WithMemoryController(mc *memory.Controller) AgentOption
func WithSessionID ¶
func WithSessionID(id string) AgentOption
func WithUsageTracker ¶
func WithUsageTracker(tracker *UsageTracker) AgentOption
type MockAgent ¶
type MockAgent struct {
// contains filtered or unexported fields
}
MockAgent 可配置的模拟 Agent,用于测试调用方逻辑
用法:
mock := NewMockAgent().
WithResponse("你好", "你好!我是助手").
WithResponse("天气", "今天晴天").
WithFallback("我不确定,请重试")
resp, err := mock.Send(ctx, "你好") // → "你好!我是助手"
resp, err := mock.Send(ctx, "天气") // → "今天晴天"
resp, err := mock.Send(ctx, "随便") // → "我不确定,请重试"
func (*MockAgent) HasCallWith ¶
HasCallWith 检查是否有某次调用的内容包含指定文本
func (*MockAgent) LastCallContent ¶
LastCallContent 返回最后一次调用的纯文本内容
func (*MockAgent) SendMessage ¶
SendMessage 非流式发送
func (*MockAgent) SendMessageStream ¶
func (m *MockAgent) SendMessageStream(ctx context.Context, msg *schema.Message, onChunk func(msg *schema.Message, isToolCall bool) bool) (*schema.Message, error)
SendMessageStream 流式发送(将响应拆成逐字符 chunk 发送)
func (*MockAgent) WithFallback ¶
WithFallback 设置无匹配时的默认响应
func (*MockAgent) WithFallbackMsg ¶
WithFallbackMsg 设置无匹配时的默认响应(完整 Message)
func (*MockAgent) WithOnSend ¶
WithOnSend 配置发送时的回调钩子(用于断言或副作用)
func (*MockAgent) WithResponse ¶
WithResponse 注册精确匹配响应:当用户消息的纯文本内容包含 key 时返回
func (*MockAgent) WithResponseMsg ¶
WithResponseMsg 注册精确匹配响应(完整 Message)
func (*MockAgent) WithToolResponse ¶
WithToolResponse 注册带工具调用的响应(模拟一轮工具调用后返回结果)
mock.WithToolResponse("搜索",
// 第一轮:模型要求调用工具
&schema.Message{
Role: schema.AssistantRole,
ToolCalls: []schema.ToolCall{{ID: "call_1", ...}},
},
// 第二轮:工具执行后模型返回最终回答
&schema.Message{
Role: schema.AssistantRole,
Content: "搜索结果是...",
},
)
type ModelPricing ¶
type ModelPricing struct {
InputPrice float64 // 输入价格
OutputPrice float64 // 输出价格
CachedPrice float64 // 缓存价格(可选)
}
ModelPricing 模型定价(每 1K Token 的美元价格)
type UsageRecord ¶
type UsageRecord struct {
// PromptTokens 输入 Token 数
PromptTokens uint64 `json:"prompt_tokens"`
// CompletionTokens 输出 Token 数(对应 schema.Usage.Completion)
CompletionTokens uint64 `json:"completion_tokens"`
TotalTokens uint64 `json:"total_tokens"`
CachedTokens uint64 `json:"cached_tokens,omitempty"`
Model string `json:"model"`
Timestamp time.Time `json:"timestamp"`
Duration time.Duration `json:"duration_ms"`
}
UsageRecord 单次模型调用的使用记录
type UsageStats ¶
type UsageStats struct {
TotalCalls int `json:"total_calls"`
TotalPrompt uint64 `json:"total_prompt_tokens"`
TotalCompletion uint64 `json:"total_completion_tokens"`
TotalTokens uint64 `json:"total_tokens"`
TotalCached uint64 `json:"total_cached_tokens"`
TotalCost float64 `json:"total_cost_usd"`
AverageLatency time.Duration `json:"average_latency_ms"`
Records []UsageRecord `json:"records,omitempty"`
}
UsageStats 累计统计信息
type UsageTracker ¶
type UsageTracker struct {
// contains filtered or unexported fields
}
UsageTracker Token 使用追踪器
func NewUsageTrackerWithPricing ¶
func NewUsageTrackerWithPricing(pricing map[string]ModelPricing) *UsageTracker
NewUsageTrackerWithPricing 创建带自定义定价的 UsageTracker
func (*UsageTracker) ExportJSON ¶
func (ut *UsageTracker) ExportJSON() ([]byte, error)
ExportJSON 导出为 JSON
func (*UsageTracker) ExportRecordsJSON ¶
func (ut *UsageTracker) ExportRecordsJSON() ([]byte, error)
ExportRecordsJSON 导出所有记录为 JSON
func (*UsageTracker) FormatStats ¶
func (ut *UsageTracker) FormatStats() string
FormatStats 格式化统计信息为可读字符串
func (*UsageTracker) GetAllRecords ¶
func (ut *UsageTracker) GetAllRecords() []UsageRecord
GetAllRecords 获取所有记录副本
func (*UsageTracker) GetModelStats ¶
func (ut *UsageTracker) GetModelStats(model string) UsageStats
GetModelStats 获取指定模型的统计
func (*UsageTracker) GetRecentRecords ¶
func (ut *UsageTracker) GetRecentRecords(n int) []UsageRecord
GetRecentRecords 获取最近 N 条记录
func (*UsageTracker) GetRemainingBudget ¶
func (ut *UsageTracker) GetRemainingBudget() float64
GetRemainingBudget 获取剩余预算
func (*UsageTracker) IsOverBudget ¶
func (ut *UsageTracker) IsOverBudget() bool
IsOverBudget 检查是否超出预算
func (*UsageTracker) SetBudget ¶
func (ut *UsageTracker) SetBudget(budget float64)
SetBudget 设置预算限制(美元)