76 lines
1.9 KiB
Go
76 lines
1.9 KiB
Go
// Package ai AI 供应商适配层,定义统一的 LLM 调用接口
|
||
// 支持通义千问、DeepSeek、豆包、讯飞星火等多家大模型
|
||
package ai
|
||
|
||
import (
|
||
"context"
|
||
"resume-platform/pkg/config"
|
||
)
|
||
|
||
// Provider AI 服务提供者接口,所有大模型供应商需实现此接口
|
||
type Provider interface {
|
||
// Generate 调用大模型生成文本
|
||
Generate(ctx context.Context, prompt string, opts ...Option) (string, error)
|
||
// GetName 获取供应商名称
|
||
GetName() string
|
||
}
|
||
|
||
// Option 调用选项函数类型,用于可选参数配置
|
||
type Option func(*Options)
|
||
|
||
// Options AI 调用可选参数
|
||
type Options struct {
|
||
MaxTokens int // 最大生成token数
|
||
Temperature float64 // 温度(随机性)
|
||
TopP float64 // 核采样参数
|
||
}
|
||
|
||
// WithMaxTokens 设置最大生成 token 数
|
||
// @param maxTokens 最大token数
|
||
// @return Option 选项函数
|
||
// @author sunct
|
||
func WithMaxTokens(maxTokens int) Option {
|
||
return func(o *Options) {
|
||
o.MaxTokens = maxTokens
|
||
}
|
||
}
|
||
|
||
// WithTemperature 设置生成温度
|
||
// @param temp 温度值(0~1)
|
||
// @return Option 选项函数
|
||
// @author sunct
|
||
func WithTemperature(temp float64) Option {
|
||
return func(o *Options) {
|
||
o.Temperature = temp
|
||
}
|
||
}
|
||
|
||
// WithTopP 设置核采样参数
|
||
// @param topP 核采样值
|
||
// @return Option 选项函数
|
||
// @author sunct
|
||
func WithTopP(topP float64) Option {
|
||
return func(o *Options) {
|
||
o.TopP = topP
|
||
}
|
||
}
|
||
|
||
// NewProvider AI 供应商工厂函数,根据配置创建对应供应商实例
|
||
// @param cfg AI 配置
|
||
// @return Provider 供应商实例
|
||
// @return error 创建错误
|
||
// @author sunct
|
||
func NewProvider(cfg *config.AIConfig) (Provider, error) {
|
||
switch cfg.Provider {
|
||
case "spark":
|
||
return NewSparkProvider(&cfg.Spark), nil
|
||
case "tongyi":
|
||
return NewTongyiProvider(&cfg.Tongyi), nil
|
||
case "doubao":
|
||
return NewDoubaoProvider(&cfg.Doubao), nil
|
||
case "deepseek":
|
||
return NewDeepSeekProvider(&cfg.DeepSeek), nil
|
||
default:
|
||
return NewSparkProvider(&cfg.Spark), nil
|
||
}
|
||
} |