filter

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: 6 Imported by: 0

Documentation

Overview

Package filter 提供 Hexagon AI Agent 框架的内容过滤

支持敏感词过滤、有害内容检测、成人内容过滤等功能。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NormalizeText

func NormalizeText(text string) string

NormalizeText 规范化文本(用于预处理)

Types

type ACTrie

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

ACTrie Aho-Corasick 自动机

func NewACTrie

func NewACTrie(words []string) *ACTrie

NewACTrie 创建 AC 自动机

func (*ACTrie) Match

func (t *ACTrie) Match(text string) []TrieMatch

Match 匹配

type ChainMode

type ChainMode int

ChainMode 链模式

const (
	// ChainModeAll 所有过滤器都通过
	ChainModeAll ChainMode = iota

	// ChainModeAny 任一过滤器不通过
	ChainModeAny

	// ChainModeFirst 第一个不通过就停止
	ChainModeFirst
)

type ContentCategory

type ContentCategory string

ContentCategory 内容类别

const (
	CategorySafe      ContentCategory = "safe"
	CategorySensitive ContentCategory = "sensitive"
	CategoryHarmful   ContentCategory = "harmful"
	CategoryAdult     ContentCategory = "adult"
	CategoryViolence  ContentCategory = "violence"
	CategoryHate      ContentCategory = "hate"
	CategorySpam      ContentCategory = "spam"
	CategoryScam      ContentCategory = "scam"
	CategoryIllegal   ContentCategory = "illegal"
)

type ContentFilter

type ContentFilter interface {
	// Name 过滤器名称
	Name() string

	// Filter 过滤内容
	Filter(ctx context.Context, content string) (*FilterResult, error)

	// FilterBatch 批量过滤
	FilterBatch(ctx context.Context, contents []string) ([]*FilterResult, error)
}

ContentFilter 内容过滤器接口

type FilterAction

type FilterAction string

FilterAction 过滤动作

const (
	ActionAllow  FilterAction = "allow"
	ActionWarn   FilterAction = "warn"
	ActionRedact FilterAction = "redact"
	ActionBlock  FilterAction = "block"
	ActionReview FilterAction = "review"
)

type FilterChain

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

FilterChain 过滤器链

func NewFilterChain

func NewFilterChain(mode ChainMode, filters ...ContentFilter) *FilterChain

NewFilterChain 创建过滤器链

func (*FilterChain) AddFilter

func (c *FilterChain) AddFilter(filter ContentFilter)

AddFilter 添加过滤器

func (*FilterChain) Filter

func (c *FilterChain) Filter(ctx context.Context, content string) (*FilterResult, error)

Filter 过滤

func (*FilterChain) FilterBatch

func (c *FilterChain) FilterBatch(ctx context.Context, contents []string) ([]*FilterResult, error)

FilterBatch 批量过滤

func (*FilterChain) Name

func (c *FilterChain) Name() string

Name 返回名称

type FilterConfig

type FilterConfig struct {
	// Enabled 是否启用
	Enabled bool

	// Threshold 阈值
	Threshold float64

	// Action 默认动作
	Action FilterAction

	// Categories 要检测的类别
	Categories []ContentCategory

	// Allowlist 白名单
	Allowlist []string

	// CustomPatterns 自定义模式
	CustomPatterns []string
}

FilterConfig 过滤器配置

func DefaultFilterConfig

func DefaultFilterConfig() FilterConfig

DefaultFilterConfig 默认配置

type FilterOption

type FilterOption func(*FilterConfig)

FilterOption 过滤选项

func WithFilterAction

func WithFilterAction(action FilterAction) FilterOption

WithFilterAction 设置默认动作

func WithFilterCategories

func WithFilterCategories(categories ...ContentCategory) FilterOption

WithFilterCategories 设置检测类别

func WithFilterThreshold

func WithFilterThreshold(threshold float64) FilterOption

WithFilterThreshold 设置阈值

type FilterResult

type FilterResult struct {
	// Original 原始内容
	Original string `json:"original"`

	// Filtered 过滤后的内容
	Filtered string `json:"filtered"`

	// Passed 是否通过
	Passed bool `json:"passed"`

	// Score 风险分数(0-1)
	Score float64 `json:"score"`

	// Category 内容分类
	Category ContentCategory `json:"category"`

	// Findings 发现的问题
	Findings []Finding `json:"findings,omitempty"`

	// Action 建议的处理动作
	Action FilterAction `json:"action"`

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

FilterResult 过滤结果

type Finding

type Finding struct {
	// Type 问题类型
	Type FindingType `json:"type"`

	// Content 问题内容
	Content string `json:"content"`

	// Position 位置
	Position int `json:"position"`

	// Length 长度
	Length int `json:"length"`

	// Severity 严重程度
	Severity Severity `json:"severity"`

	// Category 类别
	Category string `json:"category"`
}

Finding 发现的问题

type FindingType

type FindingType string

FindingType 发现类型

const (
	FindingSensitiveWord FindingType = "sensitive_word"
	FindingToxicity      FindingType = "toxicity"
	FindingAdultContent  FindingType = "adult_content"
	FindingViolence      FindingType = "violence"
	FindingHateSpeech    FindingType = "hate_speech"
	FindingSpam          FindingType = "spam"
	FindingScam          FindingType = "scam"
	FindingPersonalInfo  FindingType = "personal_info"
	FindingMalware       FindingType = "malware"
)

type RuleBasedClassifier

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

RuleBasedClassifier 基于规则的分类器

func NewRuleBasedClassifier

func NewRuleBasedClassifier() *RuleBasedClassifier

NewRuleBasedClassifier 创建规则分类器

func (*RuleBasedClassifier) Classify

func (c *RuleBasedClassifier) Classify(ctx context.Context, content string) (*ToxicityScore, error)

Classify 分类

type SensitiveWord

type SensitiveWord struct {
	Word     string       `json:"word"`
	Category string       `json:"category"`
	Severity Severity     `json:"severity"`
	Action   FilterAction `json:"action"`
}

SensitiveWord 敏感词

type SensitiveWordFilter

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

SensitiveWordFilter 敏感词过滤器

func NewSensitiveWordFilter

func NewSensitiveWordFilter(opts ...FilterOption) *SensitiveWordFilter

NewSensitiveWordFilter 创建敏感词过滤器

func (*SensitiveWordFilter) AddWord

func (f *SensitiveWordFilter) AddWord(word, category string, severity Severity)

AddWord 添加敏感词

注意:此方法与 Filter 共享同一把锁(f.mu),确保添加敏感词时不会与过滤操作并发冲突。

func (*SensitiveWordFilter) AddWords

func (f *SensitiveWordFilter) AddWords(words []string, category string, severity Severity)

AddWords 批量添加敏感词

在同一把锁内完成所有词的添加和 trie 重建,避免: 1. 循环中多次加解锁导致的中间状态对并发 Filter 可见 2. buildTrie 调用时 words map 与 trie 不一致

func (*SensitiveWordFilter) Filter

func (f *SensitiveWordFilter) Filter(ctx context.Context, content string) (*FilterResult, error)

Filter 过滤内容

func (*SensitiveWordFilter) FilterBatch

func (f *SensitiveWordFilter) FilterBatch(ctx context.Context, contents []string) ([]*FilterResult, error)

FilterBatch 批量过滤

func (*SensitiveWordFilter) Name

func (f *SensitiveWordFilter) Name() string

Name 返回过滤器名称

func (*SensitiveWordFilter) RemoveWord

func (f *SensitiveWordFilter) RemoveWord(word string)

RemoveWord 移除敏感词

type Severity

type Severity string

Severity 严重程度

const (
	SeverityLow      Severity = "low"
	SeverityMedium   Severity = "medium"
	SeverityHigh     Severity = "high"
	SeverityCritical Severity = "critical"
)

type ToxicityClassifier

type ToxicityClassifier interface {
	Classify(ctx context.Context, content string) (*ToxicityScore, error)
}

ToxicityClassifier 有害内容分类器接口

type ToxicityFilter

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

ToxicityFilter 有害内容过滤器

func NewToxicityFilter

func NewToxicityFilter(opts ...FilterOption) *ToxicityFilter

NewToxicityFilter 创建有害内容过滤器

func (*ToxicityFilter) Filter

func (f *ToxicityFilter) Filter(ctx context.Context, content string) (*FilterResult, error)

Filter 过滤内容

func (*ToxicityFilter) FilterBatch

func (f *ToxicityFilter) FilterBatch(ctx context.Context, contents []string) ([]*FilterResult, error)

FilterBatch 批量过滤

func (*ToxicityFilter) Name

func (f *ToxicityFilter) Name() string

Name 返回过滤器名称

func (*ToxicityFilter) SetClassifier

func (f *ToxicityFilter) SetClassifier(classifier ToxicityClassifier)

SetClassifier 设置分类器

type ToxicityScore

type ToxicityScore struct {
	Overall     float64 `json:"overall"`
	Hate        float64 `json:"hate"`
	Violence    float64 `json:"violence"`
	Sexual      float64 `json:"sexual"`
	SelfHarm    float64 `json:"self_harm"`
	Harassment  float64 `json:"harassment"`
	Threatening float64 `json:"threatening"`
}

ToxicityScore 有害分数

type TrieMatch

type TrieMatch struct {
	Word     string
	Position int
}

TrieMatch 匹配结果

Jump to

Keyboard shortcuts

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