Documentation
¶
Overview ¶
Package telemetry 是全项目统一的遥测出口:trace、指标与日志经同一条管道写出,实体身份经 ctx 下传。 本包按 OTel 属性名称记录操作、用量和内容。
Index ¶
- Constants
- func AddActiveConnections(ctx context.Context, delta int64)
- func AddActiveConversations(ctx context.Context, delta int64)
- func AgentName(name string) attribute.KeyValue
- func ConnectionID(id string) attribute.KeyValue
- func ContextWithAttrs(ctx context.Context, attrs ...attribute.KeyValue) context.Context
- func ContextWithParentSpan(ctx context.Context, parent SpanRef) context.Context
- func ContextWithTelemetry(ctx context.Context, telemetry *Telemetry) context.Context
- func ConversationID(id string) attribute.KeyValue
- func DecodeJSONContent(raw []byte) any
- func ExecutorID(id string) attribute.KeyValue
- func GetLogger(ctx context.Context) *slog.Logger
- func InputItemID(id string) attribute.KeyValue
- func NetworkPeerAddress(host string) attribute.KeyValue
- func NetworkPeerPort(port int) attribute.KeyValue
- func ParentSessionID(id string) attribute.KeyValue
- func ServerAddress(host string) attribute.KeyValue
- func ServerPort(port int) attribute.KeyValue
- func SessionID(id string) attribute.KeyValue
- func ToolCallID(id string) attribute.KeyValue
- func ToolName(name string) attribute.KeyValue
- func TurnStep(step int) attribute.KeyValue
- type ChatMessage
- type ChatRecorder
- func (r *ChatRecorder) End(err error)
- func (r *ChatRecorder) IsContentCaptured() bool
- func (r *ChatRecorder) RecordChunk()
- func (r *ChatRecorder) RecordFinishReason(reason string)
- func (r *ChatRecorder) RecordInput(systemInstructions []string, messages []ChatMessage, toolNames []string)
- func (r *ChatRecorder) RecordOutput(messages []ChatMessage)
- func (r *ChatRecorder) RecordResponseModel(model string)
- func (r *ChatRecorder) RecordUsage(usage defs.TokenUsage)
- type ChatStart
- type ExecuteToolRecorder
- type ExecuteToolStart
- type InvokeAgentEnd
- type InvokeAgentRecorder
- type InvokeAgentStart
- type MessagePart
- type RPCServerRecorder
- type SpanRef
- type Telemetry
- type TelemetryOpt
- type TurnSummary
Constants ¶
const ( FinishReasonStop = "stop" FinishReasonLength = "length" FinishReasonContentFilter = "content_filter" FinishReasonToolCall = "tool_call" // FinishReasonError 表示应收到结束原因却没有收到:调用失败、取消或流中断。 FinishReasonError = "error" )
结束原因的约定取值(schema FinishReason 枚举),业务包归一结束原因时使用。
const ( TokenModalityText = "text" TokenModalityUnknown = "unknown" )
token 计数器的 gen_ai.token.modality 取值:llmkit 不提供按模态拆分的用量,只区分纯文本调用与其他。
const ( MessageRoleUser = "user" MessageRoleAssistant = "assistant" MessageRoleTool = "tool" PartTypeText = "text" PartTypeReasoning = "reasoning" PartTypeToolCall = "tool_call" PartTypeToolCallResponse = "tool_call_response" PartTypeURI = "uri" PartTypeBlob = "blob" ModalityImage = "image" )
消息角色、part 类型与模态的约定取值,供业务包构造 ChatMessage。系统指令单独记录,没有 system 角色。
const ( ChatPurposeConversation = "conversation" ChatPurposeCompact = "compact" )
模型调用的用途:普通对话或生成上下文摘要。
const RPCMethodOther = "_OTHER"
RPCMethodOther 是未注册方法的 rpc.method 取值;此时 span 名使用 rpc.system.name,原始方法名记在 rpc.method_original。
const ScopeName = "github.com/VaalaCat/openvaala"
ScopeName 是全项目 Tracer、Meter 与 OTLP 日志桥接共用的 instrumentation scope。
Variables ¶
This section is empty.
Functions ¶
func AddActiveConnections ¶
AddActiveConnections 调整已建立的服务端连接数。
func AddActiveConversations ¶
AddActiveConversations 调整运行中的对话数。
func ConnectionID ¶
ConnectionID 生成 WebSocket 连接身份属性。
func ContextWithAttrs ¶
ContextWithAttrs 把实体身份追加到上下文。
func ContextWithParentSpan ¶
ContextWithParentSpan 将给定 span 引用设为后续 span 的父节点。
func ContextWithTelemetry ¶
ContextWithTelemetry 将遥测管道挂到上下文。
func NetworkPeerAddress ¶
NetworkPeerAddress 生成 WebSocket 连接的 TCP 对端地址属性。
func NetworkPeerPort ¶
NetworkPeerPort 生成 WebSocket 连接的 TCP 对端端口属性。
func ParentSessionID ¶
ParentSessionID 生成父 Session 身份属性。
Types ¶
type ChatMessage ¶
type ChatMessage struct {
Role string
Parts []MessagePart
}
ChatMessage 是一条 GenAI 约定格式的消息,与业务类型无关;由业务包从模型请求或 Item 转换而来。
type ChatRecorder ¶
type ChatRecorder struct {
// contains filtered or unexported fields
}
ChatRecorder 记录一次模型调用,用量、结束原因、上游模型与输出分块在流式事件中陆续交给它;由执行这次调用的 goroutine 单独使用, End 恰好调用一次,End 之后不得再使用。
func (*ChatRecorder) IsContentCaptured ¶
func (r *ChatRecorder) IsContentCaptured() bool
IsContentCaptured 本次模型调用是否采集内容?
func (*ChatRecorder) RecordFinishReason ¶
func (r *ChatRecorder) RecordFinishReason(reason string)
RecordFinishReason 记录模型结束原因。
func (*ChatRecorder) RecordInput ¶
func (r *ChatRecorder) RecordInput(systemInstructions []string, messages []ChatMessage, toolNames []string)
RecordInput 记录模型请求的系统指令、消息和工具名称。
func (*ChatRecorder) RecordOutput ¶
func (r *ChatRecorder) RecordOutput(messages []ChatMessage)
RecordOutput 记录模型调用已收到的输出消息。
func (*ChatRecorder) RecordResponseModel ¶
func (r *ChatRecorder) RecordResponseModel(model string)
RecordResponseModel 记录上游模型名。
func (*ChatRecorder) RecordUsage ¶
func (r *ChatRecorder) RecordUsage(usage defs.TokenUsage)
RecordUsage 记录模型 token 用量。
type ChatStart ¶
type ChatStart struct {
ModelCallID string
Model string
// Provider 是 gen_ai.provider.name;经网关或兼容接口访问时表示协议家族而非实际厂商。
Provider string
// Purpose 是 ChatPurposeConversation 或 ChatPurposeCompact。
Purpose string
// ServerAddress 与 ServerPort 是模型服务的主机与端口;地址为空时两者都不写。
ServerAddress string
ServerPort int
// Compacted 本次请求的上下文是否以摘要开头?是时记 gen_ai.conversation.compacted=true。
Compacted bool
// TokenModality 是 token 计数器的模态:TokenModalityText 或 TokenModalityUnknown;空值按 unknown 记录。
TokenModality string
}
ChatStart 是开始记录一次模型调用所需的事实,由 Agent 与压缩在调用模型前填写。
type ExecuteToolRecorder ¶
type ExecuteToolRecorder struct {
// contains filtered or unexported fields
}
ExecuteToolRecorder 记录一次实际执行的工具调用;由执行这次调用的 goroutine 单独使用,End 恰好调用一次,End 之后不得再使用。
func StartExecuteTool ¶
func StartExecuteTool(ctx context.Context, start ExecuteToolStart) (context.Context, *ExecuteToolRecorder)
StartExecuteTool 开始记录一次实际执行的工具调用。
func (*ExecuteToolRecorder) End ¶
func (r *ExecuteToolRecorder) End(errorCode string)
End 结束工具调用记录并写入指标和日志。
func (*ExecuteToolRecorder) IsContentCaptured ¶
func (r *ExecuteToolRecorder) IsContentCaptured() bool
IsContentCaptured 本次工具调用是否采集参数和结果?
func (*ExecuteToolRecorder) RecordArguments ¶
func (r *ExecuteToolRecorder) RecordArguments(arguments any)
RecordArguments 记录工具调用参数。
func (*ExecuteToolRecorder) RecordResult ¶
func (r *ExecuteToolRecorder) RecordResult(result any)
RecordResult 记录工具调用结果。
type ExecuteToolStart ¶
type ExecuteToolStart struct {
Name string
CallID string
// Description 是工具定义中的描述;为空时不写。
Description string
}
ExecuteToolStart 是开始记录一次工具调用所需的事实,由 ToolExecutor 在执行前填写。
type InvokeAgentEnd ¶
type InvokeAgentEnd struct {
Status string
Err error
Summary TurnSummary
}
InvokeAgentEnd 是 Turn 结束时的事实:Status 是 Turn 终态,Err 非 nil 表示失败(取消按取消记录)。
type InvokeAgentRecorder ¶
type InvokeAgentRecorder struct {
// contains filtered or unexported fields
}
InvokeAgentRecorder 记录一个 Agent Turn;由执行这个 Turn 的 goroutine 单独使用,End 恰好调用一次,End 之后不得再使用。
func StartInvokeAgent ¶
func StartInvokeAgent(ctx context.Context, start InvokeAgentStart) (context.Context, *InvokeAgentRecorder)
StartInvokeAgent 开始记录一个 Agent Turn。
func (*InvokeAgentRecorder) End ¶
func (r *InvokeAgentRecorder) End(end InvokeAgentEnd)
End 结束 Turn 记录并写入小结、指标和日志。
func (*InvokeAgentRecorder) IsContentCaptured ¶
func (r *InvokeAgentRecorder) IsContentCaptured() bool
IsContentCaptured 本轮是否采集输入和回答内容?
func (*InvokeAgentRecorder) RecordInput ¶
func (r *InvokeAgentRecorder) RecordInput(messages []ChatMessage)
RecordInput 记录开启本轮的输入消息。
type InvokeAgentStart ¶
type InvokeAgentStart struct {
AgentName string
AgentDescription string
// Model 是 Agent 配置的主模型。
Model string
TurnID string
}
InvokeAgentStart 是开始记录一个 Turn 所需的事实,由 Turn 在运行 Agent 前填写。
type MessagePart ¶
type MessagePart struct {
Type string
Content string
ID string
Name string
// Arguments 是工具调用参数,Response 是工具结果:能解析为 JSON 时为解析结果,否则为原文字符串;为 nil 时不写出。
Arguments any
Response any
Modality string
MimeType string
URI string
}
MessagePart 是消息中的一段内容;Type 决定使用哪些字段,空字段不写出。
type RPCServerRecorder ¶
type RPCServerRecorder struct {
// contains filtered or unexported fields
}
RPCServerRecorder 记录 Runtime Server 处理的一次 JSON-RPC 请求;由处理这个请求的 goroutine 单独使用,End 恰好调用一次,End 之后不得再使用。
func StartRPCServer ¶
func StartRPCServer(ctx context.Context, method, originalMethod, requestID string) (context.Context, *RPCServerRecorder)
StartRPCServer 开始记录一次 JSON-RPC 请求。
func (*RPCServerRecorder) End ¶
func (r *RPCServerRecorder) End(errorCode int, err error)
End 结束 RPC 请求记录。
type SpanRef ¶
type SpanRef struct {
// contains filtered or unexported fields
}
SpanRef 保存 span 的 trace ID 和 span ID,不携带 ctx 的取消信号和实体身份。
type Telemetry ¶
type Telemetry struct {
// contains filtered or unexported fields
}
Telemetry 是一条遥测管道的只读句柄:trace、指标、日志的出口。应用构造一次后传给各入口,可并发使用。
func NewTelemetry ¶
func NewTelemetry(opt *TelemetryOpt) (*Telemetry, error)
NewTelemetry 校验出口并创建遥测管道。
type TelemetryOpt ¶
type TelemetryOpt struct {
TracerProvider trace.TracerProvider
MeterProvider metric.MeterProvider
Logger *slog.Logger
// CaptureContent 是否把对话内容写入 span 属性?NewTelemetryOpt 默认开启,与配置默认值一致。
CaptureContent bool
}
TelemetryOpt 是管道的三个出口;嵌入方可以传入任意 OTel Provider 与 slog Logger。
func NewTelemetryOpt ¶
func NewTelemetryOpt(tracerProvider trace.TracerProvider, meterProvider metric.MeterProvider, logger *slog.Logger) *TelemetryOpt
NewTelemetryOpt 创建遥测出口配置。
func (*TelemetryOpt) WithCaptureContent ¶
func (o *TelemetryOpt) WithCaptureContent(capture bool) *TelemetryOpt
WithCaptureContent 设置内容采集开关并返回配置。
type TurnSummary ¶
type TurnSummary struct {
// Steps 是普通模型调用次数。
Steps int
// InferenceCalls 是全部模型调用次数,含压缩调用。
InferenceCalls int
// ToolCalls 是收到结果的工具调用次数,FailedToolCalls 是其中带错误的次数。
ToolCalls int
FailedToolCalls int
// Usage 是全部模型调用的 token 合计。
Usage defs.TokenUsage
// FinishReason 是最后一次普通模型调用的结束原因(已归一)。
FinishReason string
// Output 是本轮最后一条助手消息;内容采集关闭时为空。
Output []ChatMessage
}
TurnSummary 是一个 Turn 的小结,由 Agent 在自己的循环中统计、经 Turn 交给 Recorder。
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package telemetrytest 提供写入内存的遥测管道,供各包测试断言 span、指标与日志;与 net/http/httptest 同类。
|
Package telemetrytest 提供写入内存的遥测管道,供各包测试断言 span、指标与日志;与 net/http/httptest 同类。 |