Documentation
¶
Overview ¶
包 embedding 提供统一的文本嵌入(Embedding)接口与多服务商实现, 用于将文本转换为向量表示以支持语义检索、分类与聚类等场景。
概述 ¶
不同嵌入服务商在 API 格式、认证方式与输入类型语义上存在差异。 本包通过 Provider 接口屏蔽这些差异,使上层业务可以在不修改调用 代码的前提下切换底层嵌入服务。
核心接口 ¶
- Provider:统一嵌入接口,定义 Embed、EmbedQuery、EmbedDocuments 等方法。
- EmbeddingRequest / EmbeddingResponse:标准化的请求与响应模型。
- InputType:输入类型枚举,包括 query、document、classification、clustering 等。
- BaseProvider:公共基类,封装 HTTP 请求、错误映射与批量辅助方法。
主要能力 ¶
- 多服务商支持:内置 OpenAI、Voyage AI、Cohere、Jina AI、Google Gemini 五种实现。
- 输入类型映射:自动将统一 InputType 转换为各服务商特定的任务类型参数。
- 批量嵌入:各 Provider 支持批量输入,Gemini 额外支持 batchEmbedContents 端点。
- 维度控制:支持 Matryoshka 维度(Jina)与可变维度(OpenAI)。
- 安全 HTTP:通过 tlsutil.SecureHTTPClient 建立安全连接。
使用方式 ¶
cfg := embedding.DefaultOpenAIConfig()
cfg.APIKey = "sk-..."
provider := embedding.NewOpenAIProvider(cfg)
vec, err := provider.EmbedQuery(ctx, "搜索关键词")
vecs, err := provider.EmbedDocuments(ctx, []string{"文档1", "文档2"})
Index ¶
- func ChooseModel(reqModel, defaultModel, fallback string) string
- type BaseConfig
- type BaseProvider
- func (p *BaseProvider) Dimensions() int
- func (p *BaseProvider) DoRequest(ctx context.Context, method, endpoint string, body any, ...) ([]byte, error)
- func (p *BaseProvider) EmbedDocuments(ctx context.Context, documents []string, ...) ([][]float64, error)
- func (p *BaseProvider) EmbedQuery(ctx context.Context, query string, ...) ([]float64, error)
- func (p *BaseProvider) MaxBatchSize() int
- func (p *BaseProvider) Name() string
- type CohereConfig
- type CohereProvider
- type EmbeddingData
- type EmbeddingRequest
- type EmbeddingResponse
- type EmbeddingUsage
- type GeminiConfig
- type GeminiProvider
- func (p *GeminiProvider) Dimensions() int
- func (p *GeminiProvider) Embed(ctx context.Context, req *EmbeddingRequest) (*EmbeddingResponse, error)
- func (p *GeminiProvider) EmbedDocuments(ctx context.Context, documents []string) ([][]float64, error)
- func (p *GeminiProvider) EmbedQuery(ctx context.Context, query string) ([]float64, error)
- func (p *GeminiProvider) MaxBatchSize() int
- func (p *GeminiProvider) Name() string
- type HealthStatus
- type InputType
- type JinaConfig
- type JinaProvider
- type OpenAIConfig
- type OpenAIProvider
- type Provider
- type VoyageConfig
- type VoyageProvider
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type BaseConfig ¶
type BaseConfig struct {
Name string
BaseURL string
APIKey string
Model string
Dimensions int
MaxBatch int
Timeout time.Duration
}
BaseConfig持有基础提供者的共同配置.
type BaseProvider ¶
type BaseProvider struct {
// contains filtered or unexported fields
}
BaseProvider为嵌入提供者提供了共同的功能.
func NewBaseProvider ¶
func NewBaseProvider(cfg BaseConfig) *BaseProvider
NewBase Provider创建了一个新的基础提供者.
func (*BaseProvider) Dimensions ¶
func (p *BaseProvider) Dimensions() int
func (*BaseProvider) DoRequest ¶
func (p *BaseProvider) DoRequest(ctx context.Context, method, endpoint string, body any, headers map[string]string) ([]byte, error)
Dorequest 执行 HTTP 请求, 并进行常见错误处理 。
func (*BaseProvider) EmbedDocuments ¶
func (p *BaseProvider) EmbedDocuments(ctx context.Context, documents []string, embedFn func(context.Context, *EmbeddingRequest) (*EmbeddingResponse, error)) ([][]float64, error)
嵌入文件嵌入多个文档。
func (*BaseProvider) EmbedQuery ¶
func (p *BaseProvider) EmbedQuery(ctx context.Context, query string, embedFn func(context.Context, *EmbeddingRequest) (*EmbeddingResponse, error)) ([]float64, error)
嵌入查询嵌入单个查询字符串.
func (*BaseProvider) MaxBatchSize ¶
func (p *BaseProvider) MaxBatchSize() int
func (*BaseProvider) Name ¶
func (p *BaseProvider) Name() string
type CohereConfig ¶
type CohereConfig struct {
APIKey string `json:"api_key" yaml:"api_key"`
BaseURL string `json:"base_url" yaml:"base_url"`
Model string `json:"model,omitempty" yaml:"model,omitempty"` // embed-v3.5
Timeout time.Duration `json:"timeout,omitempty" yaml:"timeout,omitempty"`
}
CohereConfig 配置 Cohere 嵌入提供者 。
func DefaultCohereConfig ¶
func DefaultCohereConfig() CohereConfig
默认 Cohere Config 返回默认 Cohere 配置 。
type CohereProvider ¶
type CohereProvider struct {
*BaseProvider
// contains filtered or unexported fields
}
Cohere Provider 执行使用 Cohere API的嵌入.
func NewCohereProvider ¶
func NewCohereProvider(cfg CohereConfig) *CohereProvider
NewCohere Provider创建了一个新的Cohere嵌入提供商.
func (*CohereProvider) Embed ¶
func (p *CohereProvider) Embed(ctx context.Context, req *EmbeddingRequest) (*EmbeddingResponse, error)
嵌入会使用Cohere生成嵌入.
func (*CohereProvider) EmbedDocuments ¶
func (p *CohereProvider) EmbedDocuments(ctx context.Context, documents []string) ([][]float64, error)
嵌入文件嵌入多个文档。
func (*CohereProvider) EmbedQuery ¶
嵌入查询嵌入了单个查询.
type EmbeddingData ¶
type EmbeddingData struct {
Index int `json:"index"`
Embedding []float64 `json:"embedding"`
Object string `json:"object,omitempty"` // "embedding"
}
EmbeddingData 表示单个嵌入结果.
type EmbeddingRequest ¶
type EmbeddingRequest struct {
Input []string `json:"input"` // Text inputs to embed
Model string `json:"model,omitempty"` // Model to use
Dimensions int `json:"dimensions,omitempty"` // Output dimensions (for models that support it)
EncodingFormat string `json:"encoding_format,omitempty"` // float or base64
InputType InputType `json:"input_type,omitempty"` // query, document, etc.
Truncate bool `json:"truncate,omitempty"` // Auto-truncate long inputs
Metadata map[string]string `json:"metadata,omitempty"`
}
EmbeddingRequest 表示生成嵌入的请求.
type EmbeddingResponse ¶
type EmbeddingResponse struct {
ID string `json:"id,omitempty"`
Provider string `json:"provider"`
Model string `json:"model"`
Embeddings []EmbeddingData `json:"embeddings"`
Usage EmbeddingUsage `json:"usage"`
CreatedAt time.Time `json:"created_at,omitempty"`
}
EmbeddingResponse 表示嵌入请求的响应.
type EmbeddingUsage ¶
type EmbeddingUsage struct {
PromptTokens int `json:"prompt_tokens"`
TotalTokens int `json:"total_tokens"`
Cost float64 `json:"cost,omitempty"` // USD
}
EmbeddingUsage 表示嵌入请求的 Token 用量.
type GeminiConfig ¶
type GeminiConfig struct {
APIKey string `json:"api_key" yaml:"api_key"`
BaseURL string `json:"base_url" yaml:"base_url"`
Model string `json:"model,omitempty" yaml:"model,omitempty"` // gemini-embedding-001
Timeout time.Duration `json:"timeout,omitempty" yaml:"timeout,omitempty"`
}
GeminiConfig 配置 Gemini 嵌入提供者.
func DefaultGeminiConfig ¶
func DefaultGeminiConfig() GeminiConfig
DefaultGeminiConfig 返回默认 Gemini 嵌入配置.
type GeminiProvider ¶
type GeminiProvider struct {
// contains filtered or unexported fields
}
GeminiProvider 使用 Google Gemini API 执行嵌入. 注: Gemini 使用不同的端点格式: /models/{model}:embedContent
func NewGeminiProvider ¶
func NewGeminiProvider(cfg GeminiConfig) *GeminiProvider
NewGeminiProvider 创建新的 Gemini 嵌入提供者.
func (*GeminiProvider) Dimensions ¶
func (p *GeminiProvider) Dimensions() int
func (*GeminiProvider) Embed ¶
func (p *GeminiProvider) Embed(ctx context.Context, req *EmbeddingRequest) (*EmbeddingResponse, error)
Embed 使用 Gemini API 生成嵌入.
func (*GeminiProvider) EmbedDocuments ¶
func (p *GeminiProvider) EmbedDocuments(ctx context.Context, documents []string) ([][]float64, error)
EmbedDocuments 嵌入多个文档.
func (*GeminiProvider) EmbedQuery ¶
EmbedQuery 嵌入单个查询.
func (*GeminiProvider) MaxBatchSize ¶
func (p *GeminiProvider) MaxBatchSize() int
func (*GeminiProvider) Name ¶
func (p *GeminiProvider) Name() string
type HealthStatus ¶
type HealthStatus = llm.HealthStatus
HealthStatus 表示提供者的健康检查结果. 这是 llm.HealthStatus 的类型别名,统一 Provider 级别的健康状态定义。
type InputType ¶
type InputType string
InputType 指定嵌入优化的输入类型.
const ( InputTypeQuery InputType = "query" // For search queries InputTypeDocument InputType = "document" // For documents to be indexed InputTypeClassify InputType = "classification" InputTypeClustering InputType = "clustering" InputTypeCodeQuery InputType = "code_query" // Voyage code-specific InputTypeCodeDoc InputType = "code_document" )
type JinaConfig ¶
type JinaConfig struct {
APIKey string `json:"api_key" yaml:"api_key"`
BaseURL string `json:"base_url" yaml:"base_url"`
Model string `json:"model,omitempty" yaml:"model,omitempty"` // jina-embeddings-v3
Timeout time.Duration `json:"timeout,omitempty" yaml:"timeout,omitempty"`
}
JinaConfig配置了Jina AI嵌入提供者.
type JinaProvider ¶
type JinaProvider struct {
*BaseProvider
// contains filtered or unexported fields
}
Jina Provider 执行使用 Jina AI 的 API 嵌入.
func NewJinaProvider ¶
func NewJinaProvider(cfg JinaConfig) *JinaProvider
新JinaProvider创建了新的Jina AI嵌入服务商.
func (*JinaProvider) Embed ¶
func (p *JinaProvider) Embed(ctx context.Context, req *EmbeddingRequest) (*EmbeddingResponse, error)
嵌入会使用Jina AI生成嵌入.
func (*JinaProvider) EmbedDocuments ¶
嵌入文件嵌入多个文档。
func (*JinaProvider) EmbedQuery ¶
嵌入查询嵌入了单个查询.
type OpenAIConfig ¶
type OpenAIConfig struct {
APIKey string `json:"api_key" yaml:"api_key"`
BaseURL string `json:"base_url" yaml:"base_url"`
Model string `json:"model,omitempty" yaml:"model,omitempty"` // text-embedding-3-large
Dimensions int `json:"dimensions,omitempty" yaml:"dimensions,omitempty"` // 256, 1024, 3072
Timeout time.Duration `json:"timeout,omitempty" yaml:"timeout,omitempty"`
}
OpenAIConfig 配置 OpenAI 嵌入提供者.
func DefaultOpenAIConfig ¶
func DefaultOpenAIConfig() OpenAIConfig
默认 OpenAIConfig 返回默认 OpenAI 嵌入配置 。
type OpenAIProvider ¶
type OpenAIProvider struct {
*BaseProvider
// contains filtered or unexported fields
}
OpenAIProvider 执行使用 OpenAI 的 API 嵌入.
func NewOpenAIProvider ¶
func NewOpenAIProvider(cfg OpenAIConfig) *OpenAIProvider
NewOpenAIProvider创建了新的OpenAI嵌入提供商.
func (*OpenAIProvider) Embed ¶
func (p *OpenAIProvider) Embed(ctx context.Context, req *EmbeddingRequest) (*EmbeddingResponse, error)
嵌入为给定输入生成嵌入.
func (*OpenAIProvider) EmbedDocuments ¶
func (p *OpenAIProvider) EmbedDocuments(ctx context.Context, documents []string) ([][]float64, error)
嵌入文件嵌入多个文档。
func (*OpenAIProvider) EmbedQuery ¶
嵌入查询嵌入了单个查询.
type Provider ¶
type Provider interface {
// Embed 为给定输入生成嵌入.
Embed(ctx context.Context, req *EmbeddingRequest) (*EmbeddingResponse, error)
// EmbedQuery 是嵌入单个查询的便捷方法.
EmbedQuery(ctx context.Context, query string) ([]float64, error)
// EmbedDocuments 是嵌入多个文档的便捷方法.
EmbedDocuments(ctx context.Context, documents []string) ([][]float64, error)
// Name 返回提供者名称.
Name() string
// Dimensions 返回默认嵌入维度.
Dimensions() int
// MaxBatchSize 返回支持的最大批量大小.
MaxBatchSize() int
}
Provider 定义统一的嵌入提供者接口.
type VoyageConfig ¶
type VoyageConfig struct {
APIKey string `json:"api_key" yaml:"api_key"`
BaseURL string `json:"base_url" yaml:"base_url"`
Model string `json:"model,omitempty" yaml:"model,omitempty"` // voyage-3-large, voyage-code-3
Timeout time.Duration `json:"timeout,omitempty" yaml:"timeout,omitempty"`
}
VoyageConfig 配置 Voyage AI 嵌入提供者 。
func DefaultVoyageConfig ¶
func DefaultVoyageConfig() VoyageConfig
默认 VoyageConfig 返回默认 Voyage AI 配置 。
type VoyageProvider ¶
type VoyageProvider struct {
*BaseProvider
// contains filtered or unexported fields
}
Voyage Provider 执行使用 Voyage AI 的 API 嵌入.
func NewVoyageProvider ¶
func NewVoyageProvider(cfg VoyageConfig) *VoyageProvider
NewVoyage Provider创建了一个新的Voyage AI嵌入提供商.
func (*VoyageProvider) Embed ¶
func (p *VoyageProvider) Embed(ctx context.Context, req *EmbeddingRequest) (*EmbeddingResponse, error)
Embed使用Voyage AI生成嵌入.
func (*VoyageProvider) EmbedDocuments ¶
func (p *VoyageProvider) EmbedDocuments(ctx context.Context, documents []string) ([][]float64, error)
嵌入文件嵌入多个文档。
func (*VoyageProvider) EmbedQuery ¶
嵌入查询嵌入了单个查询.