evaluate

package
v0.5.11 Latest Latest
Warning

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

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

Documentation

Overview

Package evaluate 提供 AI Agent 系统的评估框架

Evaluate 用于评估 Agent、RAG、LLM 等系统的质量:

  • Evaluator: 评估器接口
  • Dataset: 评估数据集
  • Runner: 评估运行器
  • Reporter: 评估报告生成器

内置评估指标:

  • Relevance: 检索相关性
  • Faithfulness: 回答忠实度
  • Correctness: 回答正确性
  • Latency: 延迟指标
  • Cost: 成本指标

Package evaluate 提供 AI Agent 系统的评估框架

Package evaluate 提供 AI Agent 系统的评估框架

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GenerateReport

func GenerateReport(report *EvalReport, format string, w io.Writer) error

GenerateReport 生成报告的便捷函数

func QuickEval

func QuickEval(ctx context.Context, evaluators []Evaluator, input EvalInput) (map[string]*EvalResult, error)

QuickEval 快速评估(使用所有评估器评估单个输入)

Types

type ConsoleReporter

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

ConsoleReporter 控制台格式报告生成器

func NewConsoleReporter

func NewConsoleReporter(colored bool) *ConsoleReporter

NewConsoleReporter 创建控制台报告生成器

func (*ConsoleReporter) Format

func (r *ConsoleReporter) Format() string

Format 返回报告格式

func (*ConsoleReporter) Generate

func (r *ConsoleReporter) Generate(report *EvalReport, w io.Writer) error

Generate 生成控制台报告

type CostInfo

type CostInfo struct {
	InputTokens  int     `json:"input_tokens"`
	OutputTokens int     `json:"output_tokens"`
	TotalTokens  int     `json:"total_tokens"`
	Cost         float64 `json:"cost"` // 美元
}

CostInfo 成本信息

type CustomEvaluator

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

CustomEvaluator 自定义评估器

允许用户通过函数创建评估器,无需实现完整接口。 适用于快速原型验证或简单的评估逻辑。

使用示例:

eval := NewCustomEvaluator("length_check", "检查响应长度",
    func(ctx context.Context, input EvalInput) (*EvalResult, error) {
        score := float64(len(input.Response)) / 1000.0
        if score > 1.0 {
            score = 1.0
        }
        return &EvalResult{
            Name:  "length_check",
            Score: score,
        }, nil
    },
)

func NewCustomEvaluator

func NewCustomEvaluator(name, description string, fn func(ctx context.Context, input EvalInput) (*EvalResult, error), opts ...CustomOption) *CustomEvaluator

NewCustomEvaluator 创建自定义评估器

参数:

  • name: 评估器名称,用于标识和报告
  • description: 评估器描述
  • fn: 评估函数,接收 EvalInput 返回 EvalResult
  • opts: 可选配置项

如果 name 为空或 fn 为 nil,将会 panic。

func (*CustomEvaluator) Description

func (c *CustomEvaluator) Description() string

Description 返回评估器描述

func (*CustomEvaluator) Evaluate

func (c *CustomEvaluator) Evaluate(ctx context.Context, input EvalInput) (*EvalResult, error)

Evaluate 执行自定义评估

委托给用户提供的评估函数执行。 如果评估函数返回的结果中 Name 为空,会自动填充为评估器名称。

func (*CustomEvaluator) Name

func (c *CustomEvaluator) Name() string

Name 返回评估器名称

func (*CustomEvaluator) RequiresLLM

func (c *CustomEvaluator) RequiresLLM() bool

RequiresLLM 返回是否需要 LLM

type CustomOption

type CustomOption func(*CustomEvaluator)

CustomOption 自定义评估器选项

func WithRequiresLLM

func WithRequiresLLM(requires bool) CustomOption

WithRequiresLLM 设置是否需要 LLM

type Dataset

type Dataset struct {
	// Name 数据集名称
	Name string `json:"name"`

	// Description 数据集描述
	Description string `json:"description,omitempty"`

	// Samples 样本列表
	Samples []Sample `json:"samples"`

	// Metadata 元数据
	Metadata map[string]any `json:"metadata,omitempty"`

	// CreatedAt 创建时间
	CreatedAt time.Time `json:"created_at"`
}

Dataset 评估数据集

type DatasetBuilder

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

DatasetBuilder 数据集构建器

func NewDatasetBuilder

func NewDatasetBuilder(name string) *DatasetBuilder

NewDatasetBuilder 创建数据集构建器

func (*DatasetBuilder) AddSample

func (b *DatasetBuilder) AddSample(sample Sample) *DatasetBuilder

AddSample 添加样本

func (*DatasetBuilder) AddSamples

func (b *DatasetBuilder) AddSamples(samples []Sample) *DatasetBuilder

AddSamples 批量添加样本

func (*DatasetBuilder) Build

func (b *DatasetBuilder) Build() *Dataset

Build 构建数据集

func (*DatasetBuilder) WithDescription

func (b *DatasetBuilder) WithDescription(desc string) *DatasetBuilder

WithDescription 设置描述

func (*DatasetBuilder) WithMetadata

func (b *DatasetBuilder) WithMetadata(metadata map[string]any) *DatasetBuilder

WithMetadata 设置元数据

type EvalConfig

type EvalConfig struct {
	// Evaluators 要使用的评估器列表
	Evaluators []Evaluator

	// Concurrency 并发数
	Concurrency int

	// Timeout 单次评估超时
	Timeout time.Duration

	// StopOnError 遇到错误是否停止
	StopOnError bool

	// Verbose 是否输出详细日志
	Verbose bool
}

EvalConfig 评估配置

func DefaultEvalConfig

func DefaultEvalConfig() *EvalConfig

DefaultEvalConfig 默认评估配置

type EvalInput

type EvalInput struct {
	// Query 用户查询
	Query string `json:"query"`

	// Response 系统响应
	Response string `json:"response"`

	// Context 检索上下文(RAG 场景)
	Context []string `json:"context,omitempty"`

	// Reference 参考答案(用于正确性评估)
	Reference string `json:"reference,omitempty"`

	// Metadata 额外元数据
	Metadata map[string]any `json:"metadata,omitempty"`

	// Timing 时间信息
	Timing *TimingInfo `json:"timing,omitempty"`

	// Cost 成本信息
	Cost *CostInfo `json:"cost,omitempty"`
}

EvalInput 评估输入

type EvalReport

type EvalReport struct {
	// Name 报告名称
	Name string `json:"name"`

	// Dataset 数据集名称
	Dataset string `json:"dataset"`

	// StartTime 开始时间
	StartTime time.Time `json:"start_time"`

	// EndTime 结束时间
	EndTime time.Time `json:"end_time"`

	// Duration 总耗时
	Duration time.Duration `json:"duration"`

	// TotalSamples 样本总数
	TotalSamples int `json:"total_samples"`

	// SuccessSamples 成功样本数
	SuccessSamples int `json:"success_samples"`

	// FailedSamples 失败样本数
	FailedSamples int `json:"failed_samples"`

	// Summary 汇总统计
	Summary map[string]*MetricSummary `json:"summary"`

	// Results 详细结果
	Results []SampleResult `json:"results,omitempty"`

	// Metadata 元数据
	Metadata map[string]any `json:"metadata,omitempty"`
}

EvalReport 评估报告

func (*EvalReport) ToJSON

func (r *EvalReport) ToJSON() ([]byte, error)

ToJSON 转换为 JSON

type EvalResult

type EvalResult struct {
	// Name 评估器名称
	Name string `json:"name"`

	// Score 评分(0-1)
	Score float64 `json:"score"`

	// Passed 是否通过(可选)
	Passed *bool `json:"passed,omitempty"`

	// Reason 评分理由
	Reason string `json:"reason,omitempty"`

	// Details 详细信息
	Details map[string]any `json:"details,omitempty"`

	// SubScores 子分数(用于复合指标)
	SubScores map[string]float64 `json:"sub_scores,omitempty"`

	// Error 错误信息
	Error string `json:"error,omitempty"`

	// Duration 评估耗时
	Duration time.Duration `json:"duration"`
}

EvalResult 评估结果

type Evaluator

type Evaluator interface {
	// Name 返回评估器名称
	Name() string

	// Description 返回评估器描述
	Description() string

	// Evaluate 执行评估
	Evaluate(ctx context.Context, input EvalInput) (*EvalResult, error)

	// RequiresLLM 返回是否需要 LLM 进行评估
	RequiresLLM() bool
}

Evaluator 是评估器接口

type HTMLReporter

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

HTMLReporter HTML 格式报告生成器

func NewHTMLReporter

func NewHTMLReporter(includeDetails bool) *HTMLReporter

NewHTMLReporter 创建 HTML 报告生成器

func (*HTMLReporter) Format

func (r *HTMLReporter) Format() string

Format 返回报告格式

func (*HTMLReporter) Generate

func (r *HTMLReporter) Generate(report *EvalReport, w io.Writer) error

Generate 生成 HTML 报告

type JSONReporter

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

JSONReporter JSON 格式报告生成器

func NewJSONReporter

func NewJSONReporter(pretty bool) *JSONReporter

NewJSONReporter 创建 JSON 报告生成器

func (*JSONReporter) Format

func (r *JSONReporter) Format() string

Format 返回报告格式

func (*JSONReporter) Generate

func (r *JSONReporter) Generate(report *EvalReport, w io.Writer) error

Generate 生成 JSON 报告

type LLMJudge

type LLMJudge interface {
	// Judge 使用 LLM 进行评判
	Judge(ctx context.Context, prompt string) (string, error)
}

LLMJudge LLM 评判接口 用于需要 LLM 进行评估的场景

type LLMJudgeFunc

type LLMJudgeFunc func(ctx context.Context, prompt string) (string, error)

LLMJudgeFunc 函数式 LLM 评判

func (LLMJudgeFunc) Judge

func (f LLMJudgeFunc) Judge(ctx context.Context, prompt string) (string, error)

Judge 实现 LLMJudge 接口

type MarkdownReporter

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

MarkdownReporter Markdown 格式报告生成器

func NewMarkdownReporter

func NewMarkdownReporter(includeDetails bool) *MarkdownReporter

NewMarkdownReporter 创建 Markdown 报告生成器

func (*MarkdownReporter) Format

func (r *MarkdownReporter) Format() string

Format 返回报告格式

func (*MarkdownReporter) Generate

func (r *MarkdownReporter) Generate(report *EvalReport, w io.Writer) error

Generate 生成 Markdown 报告

type MetricSummary

type MetricSummary struct {
	// Name 指标名称
	Name string `json:"name"`

	// Mean 平均分
	Mean float64 `json:"mean"`

	// Min 最小分
	Min float64 `json:"min"`

	// Max 最大分
	Max float64 `json:"max"`

	// Median 中位数
	Median float64 `json:"median"`

	// StdDev 标准差
	StdDev float64 `json:"std_dev"`

	// PassRate 通过率(如适用)
	PassRate *float64 `json:"pass_rate,omitempty"`

	// Distribution 分数分布
	Distribution map[string]int `json:"distribution,omitempty"`

	// Count 样本数
	Count int `json:"count"`
}

MetricSummary 指标汇总

type Reporter

type Reporter interface {
	// Generate 生成报告
	Generate(report *EvalReport, w io.Writer) error

	// Format 返回报告格式
	Format() string
}

Reporter 报告生成器接口

type Runner

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

Runner 评估运行器

func NewRunner

func NewRunner(config *EvalConfig) *Runner

NewRunner 创建评估运行器

func (*Runner) AddEvaluator

func (r *Runner) AddEvaluator(evaluator Evaluator) *Runner

AddEvaluator 添加评估器

func (*Runner) AddEvaluators

func (r *Runner) AddEvaluators(evaluators ...Evaluator) *Runner

AddEvaluators 批量添加评估器

func (*Runner) EvaluateBatch

func (r *Runner) EvaluateBatch(ctx context.Context, inputs []EvalInput) ([]map[string]*EvalResult, error)

EvaluateBatch 批量评估

func (*Runner) EvaluateDataset

func (r *Runner) EvaluateDataset(ctx context.Context, dataset *Dataset, system SystemUnderTest) (*EvalReport, error)

EvaluateDataset 评估整个数据集

func (*Runner) EvaluateSingle

func (r *Runner) EvaluateSingle(ctx context.Context, input EvalInput) (map[string]*EvalResult, error)

EvaluateSingle 评估单个输入

type Sample

type Sample struct {
	// ID 样本 ID
	ID string `json:"id"`

	// Query 查询
	Query string `json:"query"`

	// Reference 参考答案(可选)
	Reference string `json:"reference,omitempty"`

	// Context 参考上下文(可选)
	Context []string `json:"context,omitempty"`

	// Metadata 元数据
	Metadata map[string]any `json:"metadata,omitempty"`

	// Tags 标签
	Tags []string `json:"tags,omitempty"`
}

Sample 评估样本

type SampleResult

type SampleResult struct {
	// SampleID 样本 ID
	SampleID string `json:"sample_id"`

	// Query 查询
	Query string `json:"query"`

	// Response 响应
	Response string `json:"response,omitempty"`

	// Results 各评估器的结果
	Results map[string]*EvalResult `json:"results"`

	// Error 错误信息
	Error string `json:"error,omitempty"`

	// Duration 耗时
	Duration time.Duration `json:"duration"`
}

SampleResult 样本评估结果

type ScoreLevel

type ScoreLevel string

ScoreLevel 分数等级

const (
	ScoreLevelExcellent ScoreLevel = "excellent" // 0.8-1.0
	ScoreLevelGood      ScoreLevel = "good"      // 0.6-0.8
	ScoreLevelFair      ScoreLevel = "fair"      // 0.4-0.6
	ScoreLevelPoor      ScoreLevel = "poor"      // 0.2-0.4
	ScoreLevelBad       ScoreLevel = "bad"       // 0.0-0.2
)

func GetScoreLevel

func GetScoreLevel(score float64) ScoreLevel

GetScoreLevel 获取分数等级

type SystemFunc

type SystemFunc func(ctx context.Context, query string) (*SystemResponse, error)

SystemFunc 函数式被测系统

func (SystemFunc) Run

func (f SystemFunc) Run(ctx context.Context, query string) (*SystemResponse, error)

Run 实现 SystemUnderTest 接口

type SystemResponse

type SystemResponse struct {
	Response string
	Context  []string
	Timing   *TimingInfo
	Cost     *CostInfo
	Metadata map[string]any
}

SystemResponse 系统响应

type SystemUnderTest

type SystemUnderTest interface {
	// Run 运行系统并返回响应
	Run(ctx context.Context, query string) (*SystemResponse, error)
}

SystemUnderTest 被测系统接口

type Thresholds

type Thresholds struct {
	Relevance    float64 `json:"relevance"`
	Faithfulness float64 `json:"faithfulness"`
	Correctness  float64 `json:"correctness"`
	Latency      float64 `json:"latency"` // 毫秒
	Cost         float64 `json:"cost"`    // 美元
}

Thresholds 评估阈值

func DefaultThresholds

func DefaultThresholds() *Thresholds

DefaultThresholds 默认阈值

type TimingInfo

type TimingInfo struct {
	StartTime    time.Time     `json:"start_time"`
	EndTime      time.Time     `json:"end_time"`
	Duration     time.Duration `json:"duration"`
	TTFBDuration time.Duration `json:"ttfb_duration,omitempty"` // Time To First Byte
}

TimingInfo 时间信息

Directories

Path Synopsis
Package agenteval 提供 Agent 的质量评估基线(非性能基准)。
Package agenteval 提供 Agent 的质量评估基线(非性能基准)。
Package metrics 提供高级评估指标
Package metrics 提供高级评估指标
Package rag 提供 RAG 系统评估指标
Package rag 提供 RAG 系统评估指标

Jump to

Keyboard shortcuts

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