langfuse

package
v0.5.13 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: 8 Imported by: 0

Documentation

Overview

Package langfuse 提供 Langfuse 可观测平台集成

Langfuse 是开源的 LLM 可观测平台,用于追踪和监控 LLM 应用。 本包提供 Langfuse 旧版事件摄取 API 的手工客户端,支持 Trace、Span、Generation 事件与异步批量上报。新接入优先使用 observe/otel.NewLangfuseExporter,通过 OTLP 与 Hook Manager 统一采集;本包不会自动注册 Hexagon Hook。

使用示例:

client := NewClient(
    WithPublicKey("pk-xxx"),
    WithSecretKey("sk-xxx"),
    WithHost("https://cloud.langfuse.com"),
)
defer client.Close()

client.TraceStart("trace-1", "agent.run", input, []string{"demo"})
client.GenerationStart("generation-1", "trace-1", "", "llm.call", "gpt-4o", input)
client.GenerationEnd("generation-1", "trace-1", output, &UsageBody{
    Input:  100,
    Output: 50,
    Total:  150,
})

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

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

Client Langfuse 客户端 负责收集和上报追踪数据到 Langfuse 平台

func NewClient

func NewClient(opts ...ClientOption) *Client

NewClient 创建 Langfuse 客户端

func (*Client) Close

func (c *Client) Close()

Close 关闭客户端,发送剩余事件

func (*Client) Flush

func (c *Client) Flush()

Flush 发送所有缓冲的事件到 Langfuse

func (*Client) GenerationEnd

func (c *Client) GenerationEnd(id, traceID string, output any, usage *UsageBody)

GenerationEnd 结束 LLM 调用记录

func (*Client) GenerationStart

func (c *Client) GenerationStart(id, traceID, parentID, name, model string, input any)

GenerationStart 开始 LLM 调用记录

func (*Client) LLMHookFunc

func (c *Client) LLMHookFunc() (func(ctx context.Context, traceID, model string, input any), func(ctx context.Context, traceID string, output any, inputTokens, outputTokens int))

LLMHookFunc 返回可注册到 Hooks 系统的 LLM 钩子函数 返回 (onStart, onEnd) 两个函数

func (*Client) SpanEnd

func (c *Client) SpanEnd(id, traceID string, output any, level string)

SpanEnd 结束 Span

func (*Client) SpanStart

func (c *Client) SpanStart(id, traceID, parentID, name string, input any)

SpanStart 开始 Span

func (*Client) TraceStart

func (c *Client) TraceStart(id, name string, input any, tags []string)

TraceStart 开始追踪

type ClientOption

type ClientOption func(*Client)

ClientOption 客户端配置选项

func WithFlushInterval

func WithFlushInterval(interval time.Duration) ClientOption

WithFlushInterval 设置上报间隔

func WithFlushSize

func WithFlushSize(size int) ClientOption

WithFlushSize 设置批量上报大小

func WithHost

func WithHost(host string) ClientOption

WithHost 设置 Langfuse 服务地址

func WithPublicKey

func WithPublicKey(key string) ClientOption

WithPublicKey 设置公钥

func WithSecretKey

func WithSecretKey(key string) ClientOption

WithSecretKey 设置密钥

type Event

type Event struct {
	// Type 事件类型
	Type EventType `json:"type"`

	// Body 事件数据
	Body any `json:"body"`

	// ID 事件 ID
	ID string `json:"id"`

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

Event Langfuse 事件

type EventType

type EventType string

EventType 事件类型

const (
	// EventTypeTraceCreate 创建追踪
	EventTypeTraceCreate EventType = "trace-create"

	// EventTypeSpanCreate 创建 Span
	EventTypeSpanCreate EventType = "span-create"

	// EventTypeSpanUpdate 更新 Span
	EventTypeSpanUpdate EventType = "span-update"

	// EventTypeGenerationCreate 创建 LLM 调用记录
	EventTypeGenerationCreate EventType = "generation-create"

	// EventTypeGenerationUpdate 更新 LLM 调用记录
	EventTypeGenerationUpdate EventType = "generation-update"
)

type GenerationBody

type GenerationBody struct {
	ID              string         `json:"id"`
	TraceID         string         `json:"traceId"`
	ParentID        string         `json:"parentObservationId,omitempty"`
	Name            string         `json:"name"`
	StartTime       time.Time      `json:"startTime"`
	EndTime         *time.Time     `json:"endTime,omitempty"`
	Model           string         `json:"model,omitempty"`
	ModelParameters map[string]any `json:"modelParameters,omitempty"`
	Input           any            `json:"input,omitempty"`
	Output          any            `json:"output,omitempty"`
	Usage           *UsageBody     `json:"usage,omitempty"`
	Metadata        map[string]any `json:"metadata,omitempty"`
	CompletionStart *time.Time     `json:"completionStartTime,omitempty"`
	Level           string         `json:"level,omitempty"`
}

GenerationBody LLM 调用数据

type SpanBody

type SpanBody struct {
	ID        string         `json:"id"`
	TraceID   string         `json:"traceId"`
	ParentID  string         `json:"parentObservationId,omitempty"`
	Name      string         `json:"name"`
	StartTime time.Time      `json:"startTime"`
	EndTime   *time.Time     `json:"endTime,omitempty"`
	Input     any            `json:"input,omitempty"`
	Output    any            `json:"output,omitempty"`
	Metadata  map[string]any `json:"metadata,omitempty"`
	Level     string         `json:"level,omitempty"`
	StatusMsg string         `json:"statusMessage,omitempty"`
}

SpanBody Span 数据

type TraceBody

type TraceBody struct {
	ID       string         `json:"id"`
	Name     string         `json:"name,omitempty"`
	Input    any            `json:"input,omitempty"`
	Output   any            `json:"output,omitempty"`
	Metadata map[string]any `json:"metadata,omitempty"`
	Tags     []string       `json:"tags,omitempty"`
}

TraceBody 追踪数据

type UsageBody

type UsageBody struct {
	Input  int `json:"input,omitempty"`
	Output int `json:"output,omitempty"`
	Total  int `json:"total,omitempty"`
}

UsageBody Token 使用数据

Jump to

Keyboard shortcuts

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