Help us shape the future of Go! Take the 2026 Go Developer Survey

compactors

package
v1.1.5 Latest Latest
Warning

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

Go to latest
Published: Sep 4, 2026 License: Apache-2.0 Imports: 5 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CountMessagePairs

func CountMessagePairs(messages []Message) int

CountMessagePairs 计算对话轮次(用户+助手对)

func ExtractToolNames

func ExtractToolNames(messages []Message) []string

ExtractToolNames 提取消息中所有的工具名称

func FormatMessagesForSummary

func FormatMessagesForSummary(messages []Message) string

FormatMessagesForSummary 将消息格式化为摘要输入 使用结构化格式:Goal, Progress, Decisions, Files, Next Steps

func IsToolMessage

func IsToolMessage(msg *Message) bool

IsToolMessage 检查消息是否为工具调用或工具结果

func ProtectHeadMessages

func ProtectHeadMessages(messages []Message, protectCount int) ([]Message, []Message)

ProtectHeadMessages 保护头部消息(系统消息 + 前几个对话轮次) 这些消息不被压缩,保持原样

func ProtectTailMessages

func ProtectTailMessages(messages []Message, tokenizer Tokenizer, maxTailTokens int) ([]Message, []Message)

ProtectTailMessages 保护尾部消息(最近的消息,保留足够的 token budget) 只保留足够的最近消息来填满 token budget

func ShouldCompactMicro

func ShouldCompactMicro(messages []Message, tokenizer Tokenizer, threshold int) bool

ShouldCompactMicro 判断是否应该进行微压缩

func TruncateText

func TruncateText(text string, maxLen int) string

TruncateText 截断文本到指定长度

Types

type ChatModel

type ChatModel interface {
	Generate(ctx context.Context, messages []Message) (string, error)
}

ChatModel Chat 模型接口

type CompactMetadata

type CompactMetadata struct {
	CompactType          string
	PreCompactTokenCount int
	LastMessageID        string
}

CompactMetadata 压缩元数据

type CompactionResult

type CompactionResult struct {
	BoundaryMarker    *SystemMessage
	SummaryMessages   []Message
	MessagesToKeep    []Message
	PreCompactTokens  int
	PostCompactTokens int
}

CompactionResult 压缩结果

type Config

type Config struct {
	Model               string
	MaxOutputTokens     int
	CompactBufferTokens int
	CustomThreshold     int
	CustomInstructions  string
	SuppressFollowUp    bool
}

Config 压缩配置

type ContentBlock

type ContentBlock struct {
	Type       string
	Text       string
	ToolUse    *ToolUseBlock
	ToolResult *ToolResultBlock
}

ContentBlock 内容块

type FullCompacter

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

FullCompacter 总结整个对话

func NewFullCompacter

func NewFullCompacter(chatModel ChatModel, tokenizer Tokenizer, config *Config) *FullCompacter

NewFullCompacter 创建完整压缩器

func (*FullCompacter) Compact

func (c *FullCompacter) Compact(ctx context.Context, messages []Message, opts ...func(*Config)) (*CompactionResult, error)

Compact 实现压缩 - 总结整个对话

type Message

type Message struct {
	ID      string
	Type    string // "user", "assistant", "system", "tool"
	Role    string
	Content []ContentBlock
}

Message 消息结构

func NewSystemMessage

func NewSystemMessage(content string) *Message

NewSystemMessage 创建系统消息

func NewTextMessage

func NewTextMessage(msgType, text string) *Message

NewTextMessage 创建文本消息

func PruneToolResults

func PruneToolResults(messages []Message, maxResultLen int) []Message

PruneToolResults 裁剪旧的工具结果,替换为占位符 压缩的第一步:删除旧工具调用的详细结果 参考: agent/context_compressor.py

func StripImagesFromMessages

func StripImagesFromMessages(messages []Message) []Message

StripImagesFromMessages 剥离图片和文档,替换为标记 参考: src/services/compact/compact.ts:145-200

func (*Message) GetLastText

func (m *Message) GetLastText() string

GetLastText 获取消息的最后一条文本

type MicroCompacter

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

MicroCompacter 微压缩器 - 工具结果压缩

func NewMicroCompacter

func NewMicroCompacter(tokenizer Tokenizer, config *Config) *MicroCompacter

NewMicroCompacter 创建微压缩器

func (*MicroCompacter) Compact

func (c *MicroCompacter) Compact(ctx context.Context, messages []Message, opts ...func(*Config)) (*CompactionResult, error)

Compact 压缩工具结果

type PartialCompacter

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

PartialCompacter 只总结最近的消息

func NewPartialCompacter

func NewPartialCompacter(chatModel ChatModel, tokenizer Tokenizer, config *Config) *PartialCompacter

NewPartialCompacter 创建部分压缩器

func (*PartialCompacter) Compact

func (c *PartialCompacter) Compact(ctx context.Context, messages []Message, opts ...func(*Config)) (*CompactionResult, error)

Compact 总结最近消息,保留早期上下文

type SystemMessage

type SystemMessage struct {
	Message
	CompactMetadata *CompactMetadata
}

SystemMessage 系统消息

func CreateCompactBoundaryMessage

func CreateCompactBoundaryMessage(compactType string, preTokens int, lastMsgID string) *SystemMessage

CreateCompactBoundaryMessage 创建压缩边界标记

type Tokenizer

type Tokenizer interface {
	Estimate(text string) int
	EstimateMessages(messages []Message) int
}

Tokenizer Token 估算器接口

type ToolResultBlock

type ToolResultBlock struct {
	ToolUseID string
	Content   any
}

ToolResultBlock 工具结果块

type ToolUseBlock

type ToolUseBlock struct {
	ID    string
	Name  string
	Input map[string]any
}

ToolUseBlock 工具调用块

Jump to

Keyboard shortcuts

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