conversation

package
v0.5.10 Latest Latest
Warning

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

Go to latest
Published: Aug 13, 2026 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Overview

Package conversation 提供多轮对话管理功能

本包实现了对话历史管理、上下文窗口控制和 Token 预算管理:

  • 自动维护对话历史
  • 基于 Token 预算的上下文窗口
  • 超出预算时自动截断旧消息
  • 支持对话摘要压缩

使用示例:

mgr := conversation.New(
    conversation.WithMaxTokens(4096),
    conversation.WithSystemPrompt("你是一个助手"),
)
mgr.AddUserMessage("你好")
messages := mgr.GetMessages()

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Manager

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

Manager 多轮对话管理器

维护有序的消息列表,支持 Token 预算限制和上下文窗口控制。 线程安全,可在多 goroutine 中使用。

func New

func New(opts ...Option) *Manager

New 创建对话管理器

func (*Manager) AddAssistantMessage

func (m *Manager) AddAssistantMessage(content string)

AddAssistantMessage 添加助手回复

func (*Manager) AddSystemMessage

func (m *Manager) AddSystemMessage(content string)

AddSystemMessage 添加系统消息

func (*Manager) AddToolResult

func (m *Manager) AddToolResult(toolName string, result string)

AddToolResult 添加工具调用结果

func (*Manager) AddUserMessage

func (m *Manager) AddUserMessage(content string)

AddUserMessage 添加用户消息

func (*Manager) Clear

func (m *Manager) Clear()

Clear 清空对话历史

func (*Manager) GetContext

func (m *Manager) GetContext(maxTokens int) []llm.Message

GetContext 获取指定 Token 预算内的消息

func (*Manager) GetMessages

func (m *Manager) GetMessages() []llm.Message

GetMessages 获取消息列表(应用 Token 预算和轮次限制)

始终保留系统提示词,然后从最近的消息开始向前填充, 直到达到 Token 预算或轮次限制。

func (*Manager) History

func (m *Manager) History() []TimedMessage

History 返回对话历史的副本

func (*Manager) MessageCount

func (m *Manager) MessageCount() int

MessageCount 返回总消息数

func (*Manager) Summarize

func (m *Manager) Summarize(ctx context.Context, provider llm.Provider, keepRecent int) error

Summarize 使用 LLM 将旧消息压缩为摘要

保留最近 keepRecent 条消息,将更早的消息发给 LLM 生成摘要, 然后用摘要替换旧消息。 注意:LLM 调用在锁外进行,不会阻塞其他 goroutine。

func (*Manager) TurnCount

func (m *Manager) TurnCount() int

TurnCount 返回用户轮次数

type Option

type Option func(*Manager)

Option 配置选项

func WithMaxMessages

func WithMaxMessages(n int) Option

WithMaxMessages 设置最大存储消息数

超过此限制时,最旧的消息会被自动丢弃。 设为 0 表示不限制。默认 1000。

func WithMaxTokens

func WithMaxTokens(n int) Option

WithMaxTokens 设置 Token 预算上限

超出预算时 GetMessages 会自动截断旧消息。 设为 0 表示不限制。

func WithMaxTurns

func WithMaxTurns(n int) Option

WithMaxTurns 设置最大对话轮次

一个 "轮次" 指一对 user + assistant 消息。 设为 0 表示不限制。

func WithSystemPrompt

func WithSystemPrompt(prompt string) Option

WithSystemPrompt 设置系统提示词

type TimedMessage

type TimedMessage struct {
	// Role 消息角色(user/assistant/system/tool)
	Role string `json:"role"`

	// Content 消息内容
	Content string `json:"content"`

	// Timestamp 消息时间
	Timestamp time.Time `json:"timestamp"`
}

TimedMessage 带时间戳的消息

Jump to

Keyboard shortcuts

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