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

sysprompt

package
v0.8.3 Latest Latest
Warning

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

Go to latest
Published: Oct 21, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Overview

Package sysprompt system prompt 分段组装:Section 化收集 → stable/dynamic 边界分块 → 计量。对标 ZCode context/builder.ts。

为什么分段:provider 的前缀缓存按「消息前缀相同」命中——身份/行为约束等 **stable** 段放前且内容不变,缓存持续命中;环境信息/git 快照/日期等 **dynamic** 段隔离在后,变化时不击穿前面的缓存。字符串拼接式组装没有 边界概念,每次注入都全量失效。

边界约定:块内内容组装后即冻结(Build 产物只读);dynamic 段内容每次会话 重建时可以变,stable 段必须字节级不变(含空行)——调用方纪律,本包保证 排序与计量确定性。

用法:

b := &sysprompt.Builder{}
b.Add(sysprompt.IdentitySection("你是审查助手…"))            // stable
b.Add(sysprompt.EnvSection(env))                             // dynamic
b.Add(sysprompt.DateSection(time.Now()))                     // user_context
res := b.Build()
// res.System[0] = stable 块(缓存断点),res.System[1] = dynamic 块
// res.UserContext = 用户消息前缀的附加上下文(含「未必相关」免责句)

Index

Constants

View Source
const DefaultUserContextDisclaimer = "重要:这些上下文未必与当前任务相关,除非高度相关,否则不要针对它们作答。"

DefaultUserContextDisclaimer 附加上下文的免责句(对齐 ZCode:明示材料未必 相关,防止模型对参考材料过度反应)。

View Source
const DefaultUserContextIntro = "回答用户问题时可参考以下上下文:"

DefaultUserContextIntro 附加上下文的引导句缺省。

Variables

This section is empty.

Functions

func DetectEnv

func DetectEnv(ctx context.Context, dir string) (EnvInfo, *GitInfo, error)

DetectEnv 采集环境快照与 git 仓信息(git 子命令经 procx 纪律执行:argv 直传、 超时 5s、限容采集)。dir 非 git 仓时 GitInfo 返回 nil 不报错;git 不可用同。 OSVersion 经 uname -s -r 采集(非 unix 平台留空)。 采集彼此独立,git/uname 并行跑(原先串行 6 次子进程,冷启动白等)。

Types

type Block

type Block struct {
	Boundary Boundary
	Content  string
}

Block 一个 system 消息块(调用方映射为 provider 消息 + 缓存断点标注)。

type Boundary

type Boundary string

Boundary 缓存边界。

const (
	// Stable 稳定段:会话期间字节级不变(身份/行为约束),排前保缓存命中。
	Stable Boundary = "stable"
	// Dynamic 易变段:环境快照/git 状态/日期等,隔离在后避免击穿前缀缓存。
	Dynamic Boundary = "dynamic"
)

type Builder

type Builder struct {

	// UserContextIntro / UserContextDisclaimer 附加上下文引导/免责句覆写
	// (空 = 缺省常量)。
	UserContextIntro      string
	UserContextDisclaimer string
	// contains filtered or unexported fields
}

Builder 分段收集器。零值可用。

func (*Builder) Add

func (b *Builder) Add(s Section) *Builder

Add 收集一段(重复调用按插入序追加;段名仅观测用,不查重)。

func (*Builder) Build

func (b *Builder) Build() Result

Build 组装:排序(stable 先于 dynamic,system 先于 user_context)→ 分块 → 计量。产物不引用入参切片(Build 后再 Add 不影响已产出的 Result)。 单遍分桶:原 8 次 pick 全量扫,现一次归桶后复用。

type EnvInfo

type EnvInfo struct {
	Cwd       string
	IsGitRepo bool
	Platform  string // runtime.GOOS
	Shell     string // $SHELL
	OSVersion string // 采集可得则填(uname),缺省留空
	ModelID   string // "provider/model" 展示(可空)
}

EnvInfo 运行环境快照。

type GitInfo

type GitInfo struct {
	Branch        string
	MainBranch    string // PR 通常基准的分支(可空)
	User          string
	StatusLines   []string // git status --porcelain -b 输出(空+非 unknown = clean)
	StatusUnknown bool
	RecentCommits []string
}

GitInfo git 仓快照。

type Result

type Result struct {
	// Sections 排序后的全量段(system-stable → system-dynamic →
	// user_context-stable → user_context-dynamic;组内保持插入序——确定性)。
	Sections []Section
	// System system 块序列:stable 块在前、dynamic 块在后(空块跳过)。
	System []Block
	// UserContext 用户消息前缀附加文本(无 user_context 段时为空串)。
	UserContext string
	// TotalChars / TotalTokens 全段计量。
	TotalChars  int
	TotalTokens int
}

Result 组装产物。

type Section

type Section struct {
	Name     string
	Target   Target
	Boundary Boundary
	Content  string
	Chars    int
	Tokens   int
}

Section 一段提示词内容(自计量:Chars/Tokens 组装即算,供预算观测)。

func DateSection

func DateSection(now time.Time) Section

DateSection 当前日期段(user_context——日期是参考信息,不进 system)。

func EnvSection

func EnvSection(info EnvInfo) Section

EnvSection 环境信息段(dynamic——工作目录/模型都可能换)。

func GitSection

func GitSection(g GitInfo) Section

GitSection git 快照段(dynamic)。必须带「会话开始时的快照」免责——模型对 过期状态自信是真实事故面(对标 ZCode 同款措辞)。

func IdentitySection

func IdentitySection(body string) Section

IdentitySection 身份/行为约束段(stable——本包唯一约定为 stable 的内置段, 其余内置段全 dynamic;调用方自定义段自行声明)。

func NewSection

func NewSection(name string, target Target, boundary Boundary, content string) Section

NewSection 段构造:target 空落 TargetSystem,boundary 空落 Dynamic(缺省 保守——没想清楚稳定性就别进缓存前缀)。

type Target

type Target string

Target 注入位置。

const (
	// TargetSystem system 消息块。
	TargetSystem Target = "system"
	// TargetUserContext 用户消息前缀的附加上下文(对齐 ZCode meta_user:
	// 「可能相关也可能无关」的参考材料不占 system 预算)。
	TargetUserContext Target = "user_context"
)

Jump to

Keyboard shortcuts

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