agent

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: May 23, 2026 License: Apache-2.0 Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const DefaultMaxToolRounds int = 20

DefaultMaxToolRounds 默认最大工具调用轮次

Variables

View Source
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 (ag *Agent) AddMessages(ctx context.Context, msgs []*schema.Message) error

func (*Agent) AddSystemMessage

func (ag *Agent) AddSystemMessage(content string)

func (*Agent) ChangeModel

func (ag *Agent) ChangeModel(model chatmodel.BaseModel)

func (*Agent) ClearAgentHistory

func (ag *Agent) ClearAgentHistory(ctx context.Context) error

func (*Agent) GetHistory

func (ag *Agent) GetHistory(ctx context.Context) ([]*schema.Message, error)

func (*Agent) GetRawMessages

func (ag *Agent) GetRawMessages() []*schema.Message

func (*Agent) GetUsageTracker

func (ag *Agent) GetUsageTracker() *UsageTracker

func (*Agent) Send

func (ag *Agent) Send(ctx context.Context, userContent string) (*schema.Message, error)

Send 非流式

func (*Agent) SendMessage

func (ag *Agent) SendMessage(ctx context.Context, msg *schema.Message) (*schema.Message, error)

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 流式发送完整消息(支持多模态内容)

func (*Agent) SendStream

func (ag *Agent) SendStream(ctx context.Context, userContent string, onChunk func(msg *schema.Message, isToolCall bool) bool) (*schema.Message, error)

SendStream 流式

func (*Agent) SetMessages

func (ag *Agent) SetMessages(ctx context.Context, msgs []*schema.Message) error

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 NewMockAgent

func NewMockAgent() *MockAgent

NewMockAgent 创建 MockAgent

func (*MockAgent) CallCount

func (m *MockAgent) CallCount() int

CallCount 返回总调用次数

func (*MockAgent) Calls

func (m *MockAgent) Calls() []MockCall

Calls 返回所有调用记录的副本 Calls 返回所有调用记录的副本

func (*MockAgent) HasCallWith

func (m *MockAgent) HasCallWith(text string) bool

HasCallWith 检查是否有某次调用的内容包含指定文本

func (*MockAgent) LastCall

func (m *MockAgent) LastCall() *schema.Message

LastCall 返回最后一次调用的消息(没有调用则返回 nil)

func (*MockAgent) LastCallContent

func (m *MockAgent) LastCallContent() string

LastCallContent 返回最后一次调用的纯文本内容

func (*MockAgent) Reset

func (m *MockAgent) Reset()

Reset 重置所有状态(调用记录、响应规则等)

func (*MockAgent) SendMessage

func (m *MockAgent) SendMessage(ctx context.Context, msg *schema.Message) (*schema.Message, error)

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) WithDelay

func (m *MockAgent) WithDelay(d time.Duration) *MockAgent

WithDelay 配置模拟延迟(模拟真实 API 调用耗时)

func (*MockAgent) WithError

func (m *MockAgent) WithError(err error) *MockAgent

WithError 配置所有调用直接返回错误

func (*MockAgent) WithFallback

func (m *MockAgent) WithFallback(content string) *MockAgent

WithFallback 设置无匹配时的默认响应

func (*MockAgent) WithFallbackMsg

func (m *MockAgent) WithFallbackMsg(msg *schema.Message) *MockAgent

WithFallbackMsg 设置无匹配时的默认响应(完整 Message)

func (*MockAgent) WithOnSend

func (m *MockAgent) WithOnSend(fn func(*schema.Message)) *MockAgent

WithOnSend 配置发送时的回调钩子(用于断言或副作用)

func (*MockAgent) WithResponse

func (m *MockAgent) WithResponse(key string, content string) *MockAgent

WithResponse 注册精确匹配响应:当用户消息的纯文本内容包含 key 时返回

func (*MockAgent) WithResponseMsg

func (m *MockAgent) WithResponseMsg(key string, msg *schema.Message) *MockAgent

WithResponseMsg 注册精确匹配响应(完整 Message)

func (*MockAgent) WithToolResponse

func (m *MockAgent) WithToolResponse(key string, rounds ...*schema.Message) *MockAgent

WithToolResponse 注册带工具调用的响应(模拟一轮工具调用后返回结果)

mock.WithToolResponse("搜索",
    // 第一轮:模型要求调用工具
    &schema.Message{
        Role: schema.AssistantRole,
        ToolCalls: []schema.ToolCall{{ID: "call_1", ...}},
    },
    // 第二轮:工具执行后模型返回最终回答
    &schema.Message{
        Role:    schema.AssistantRole,
        Content: "搜索结果是...",
    },
)

type MockCall

type MockCall struct {
	Msg       *schema.Message `json:"msg"`
	Timestamp time.Time       `json:"timestamp"`
}

MockCall 单次调用记录

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 NewUsageTracker

func NewUsageTracker() *UsageTracker

NewUsageTracker 创建 UsageTracker

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) GetStats

func (ut *UsageTracker) GetStats() UsageStats

GetStats 获取累计统计

func (*UsageTracker) IsOverBudget

func (ut *UsageTracker) IsOverBudget() bool

IsOverBudget 检查是否超出预算

func (*UsageTracker) Record

func (ut *UsageTracker) Record(usage schema.Usage, model string, duration time.Duration)

Record 记录一次模型调用

func (*UsageTracker) Reset

func (ut *UsageTracker) Reset()

Reset 重置所有记录

func (*UsageTracker) SetBudget

func (ut *UsageTracker) SetBudget(budget float64)

SetBudget 设置预算限制(美元)

Jump to

Keyboard shortcuts

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