ai_scheduler/internal/config/config.go

372 lines
12 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package config
import (
"ai_scheduler/pkg"
"fmt"
"time"
"github.com/spf13/viper"
)
// Config 应用配置
type Config struct {
Server ServerConfig `mapstructure:"server"`
Ollama OllamaConfig `mapstructure:"ollama"`
Vllm VllmConfig `mapstructure:"vllm"`
Coze CozeConfig `mapstructure:"coze"`
LSXD LSXDConfig `mapstructure:"lsxd"`
Sys SysConfig `mapstructure:"sys"`
Tools ToolsConfig `mapstructure:"tools"`
EinoTools EinoToolsConfig `mapstructure:"eino_tools"`
Logging LoggingConfig `mapstructure:"logging"`
Redis Redis `mapstructure:"redis"`
DB DB `mapstructure:"db"`
Oss Oss `mapstructure:"oss"`
DefaultPrompt SysPrompt `mapstructure:"default_prompt"`
PermissionConfig PermissionConfig `mapstructure:"permissionConfig"`
KnowledgeConfig KnowledgeConfig `mapstructure:"knowledge_config"`
LLM LLM `mapstructure:"llm"`
Dingtalk DingtalkConfig `mapstructure:"dingtalk"`
Qywx QywxConfig `mapstructure:"qywx"`
}
type ZLTX struct {
ReqUrl string `mapstructure:"req_url"`
}
type SysPrompt struct {
ImgRecognize DefaultPrompt `mapstructure:"img_recognize"`
}
type DefaultPrompt struct {
SystemPrompt string `mapstructure:"system_prompt"`
UserPrompt string `mapstructure:"user_prompt"`
}
type LLM struct {
Providers map[string]LLMProviderConfig `mapstructure:"providers"`
Capabilities map[string]LLMCapabilityConfig `mapstructure:"capabilities"`
}
type LLMProviderConfig struct {
Endpoint string `mapstructure:"endpoint"`
Timeout string `mapstructure:"timeout"`
Models []LLMModle `mapstructure:"models"`
}
type LLMModle struct {
ID string `mapstructure:"id"`
Name string `mapstructure:"name"`
Streaming bool `mapstructure:"streaming"`
Modalities []string `mapstructure:"modalities"`
MaxTokens int `mapstructure:"max_tokens"`
}
type LLMParameters struct {
Temperature float64 `mapstructure:"temperature"`
MaxTokens int `mapstructure:"max_tokens"`
Stream bool `mapstructure:"stream"`
}
type LLMCapabilityConfig struct {
Provider string `mapstructure:"provider"`
Model string `mapstructure:"model"`
Parameters LLMParameters `mapstructure:"parameters"`
}
// DingtalkConfig 钉钉配置
type DingtalkConfig struct {
ApiKey string `mapstructure:"api_key"`
ApiSecret string `mapstructure:"api_secret"`
TableDemand AITableConfig `mapstructure:"table_demand"`
BotGroupID map[string]int `mapstructure:"bot_group_id"` // 机器人群组
Card CardConfig `mapstructure:"card"` // 互动卡片
SceneGroup SceneGroupConfig `mapstructure:"scene_group"` // 场景群
}
// QywxConfig 企业微信配置
type QywxConfig struct {
CorpId string `mapstructure:"corp_id"`
DefaultConfigId int32 `mapstructure:"default_config_id"`
AppSecret string `mapstructure:"app_secret"`
InitAccount string `mapstructure:"init_account"`
Token string `mapstructure:"token"`
AES_KEY string `mapstructure:"aes_key"`
ChatIdLen int `mapstructure:"chat_id_len"`
BotGroupID map[string]int `mapstructure:"bot_group_id"` // 应用群
}
// TableDemandConfig 需求表配置
type AITableConfig struct {
Url string `mapstructure:"url"`
BaseId string `mapstructure:"base_id"`
SheetIdOrName string `mapstructure:"sheet_id_or_name"`
}
// CardConfig 互动卡片配置
type CardConfig struct {
// 卡片回调路由key
CallbackRouteKey string `mapstructure:"callback_route_key"`
// 卡片调试工具 [show展示 hide隐藏]
DebugToolEntryShow string `mapstructure:"debug_tool_entry_show"`
// 卡片模板
Template CardTemplateConfig `mapstructure:"template"`
}
// CardTemplateConfig 卡片模板配置
type CardTemplateConfig struct {
// 基础消息卡片(title + content)
BaseMsg string `mapstructure:"base_msg"`
// 内容收集卡片title + textarea + button
ContentCollect string `mapstructure:"content_collect"`
// 创建群聊申请title + content + button
CreateGroupApprove string `mapstructure:"create_group_approve"`
}
// SceneGroupConfig 场景群配置
type SceneGroupConfig struct {
// 问题处理群模板ID
GroupTemplateIDIssueHandling string `mapstructure:"group_template_id_issue_handling"`
// 问题处理群模板机器人ID
GroupTemplateRobotIDIssueHandling string `mapstructure:"group_template_robot_id_issue_handling"`
}
// SysConfig 系统配置
type SysConfig struct {
SessionLen int `mapstructure:"session_len"`
ChannelPoolLen int `mapstructure:"channel_pool_len"`
ChannelPoolSize int `mapstructure:"channel_pool_size"`
LlmPoolLen int `mapstructure:"llm_pool_len"`
HeartbeatInterval int `mapstructure:"heartbeat_interval"`
}
// ServerConfig 服务器配置
type ServerConfig struct {
Port int `mapstructure:"port"`
Host string `mapstructure:"host"`
}
// OllamaConfig Ollama配置
type OllamaConfig struct {
BaseURL string `mapstructure:"base_url"`
Model string `mapstructure:"model"`
GenerateModel string `mapstructure:"generate_model"`
MappingModel string `mapstructure:"mapping_model"`
VlModel string `mapstructure:"vl_model"`
Timeout time.Duration `mapstructure:"timeout"`
}
type VllmConfig struct {
BaseURL string `mapstructure:"base_url"`
VlModel string `mapstructure:"vl_model"`
Timeout time.Duration `mapstructure:"timeout"`
Level string `mapstructure:"level"`
}
// CozeConfig Coze配置
type CozeConfig struct {
BaseURL string `mapstructure:"base_url"`
ApiKey string `mapstructure:"api_key"`
ApiSecret string `mapstructure:"api_secret"`
}
// LSXDConfig 统一登录配置
type LSXDConfig struct {
LoginURL string `mapstructure:"login_url"`
Phone string `mapstructure:"phone"`
Password string `mapstructure:"password"`
Code string `mapstructure:"code"`
CheckTokenURL string `mapstructure:"check_token_url"`
}
type Redis struct {
Host string `mapstructure:"host"`
Type string `mapstructure:"type"`
Pass string `mapstructure:"pass"`
Key string `mapstructure:"key"`
Tls int32 `mapstructure:"tls"`
Db int32 `mapstructure:"db"`
MaxIdle int32 `mapstructure:"maxIdle"`
PoolSize int32 `mapstructure:"poolSize"`
MaxIdleTime int32 `mapstructure:"maxIdleTime"`
}
type DB struct {
Driver string `mapstructure:"driver"`
Source string `mapstructure:"source"`
MaxIdle int32 `mapstructure:"maxIdle"`
MaxOpen int32 `mapstructure:"maxOpen"`
MaxLifetime int32 `mapstructure:"maxLifetime"`
IsDebug bool `mapstructure:"isDebug"`
}
// Oss 阿里云OSS配置
type Oss struct {
AccessKey string `mapstructure:"access_key"`
SecretKey string `mapstructure:"secret_key"`
Bucket string `mapstructure:"bucket"`
Domain string `mapstructure:"domain"`
Endpoint string `mapstructure:"endpoint"`
}
// ToolsConfig 工具配置
type ToolsConfig struct {
Weather ToolConfig `mapstructure:"weather"`
Calculator ToolConfig `mapstructure:"calculator"`
ZltxOrderDetail ToolConfig `mapstructure:"zltxOrderDetail"`
ZltxOrderDirectLog ToolConfig `mapstructure:"zltxOrderDirectLog"`
Knowledge ToolConfig `mapstructure:"knowledge"`
//通过ID获取我们的商品信息
ZltxProduct ToolConfig `mapstructure:"zltxProduct"`
//通过账号获取订单统计信息
ZltxOrderStatistics ToolConfig `mapstructure:"zltxOrderStatistics"`
DingTalkBot ToolConfig `mapstructure:"dingTalkBot"`
// 上游订单售后
ZltxOrderAfterSaleSupplier ToolConfig `mapstructure:"zltxOrderAfterSaleSupplier"`
// 下游订单售后
ZltxOrderAfterSaleReseller ToolConfig `mapstructure:"zltxOrderAfterSaleReseller"`
// 下游批充订单售后
ZltxOrderAfterSaleResellerBatch ToolConfig `mapstructure:"zltxOrderAfterSaleResellerBatch"`
// Coze 快递查询工具
CozeExpress ToolConfig `mapstructure:"cozeExpress"`
// Coze 公司查询工具
CozeCompany ToolConfig `mapstructure:"cozeCompany"`
ZltxResellerAuthProductToManagerAndDefaultLossReason ToolConfig `mapstructure:"zltxResellerAuthProductToManagerAndDefaultLossReason"`
}
// ToolConfig 单个工具配置
type ToolConfig struct {
Enabled bool `mapstructure:"enabled"`
BaseURL string `mapstructure:"base_url"`
APIKey string `mapstructure:"api_key"`
APISecret string `mapstructure:"api_secret"`
//附加地址
AddURL string `mapstructure:"add_url"`
}
// EinoToolsConfig eino tool 配置
type EinoToolsConfig struct {
// 货易通商品上传
HytProductUpload ToolConfig `mapstructure:"hytProductUpload"`
// 货易通供应商查询
HytSupplierSearch ToolConfig `mapstructure:"hytSupplierSearch"`
// 货易通仓库查询
HytWarehouseSearch ToolConfig `mapstructure:"hytWarehouseSearch"`
// 货易通商品添加
HytGoodsAdd ToolConfig `mapstructure:"hytGoodsAdd"`
// 货易通商品图片添加
HytGoodsMediaAdd ToolConfig `mapstructure:"hytGoodsMediaAdd"`
// 货易通商品分类添加
HytGoodsCategoryAdd ToolConfig `mapstructure:"hytGoodsCategoryAdd"`
// 货易通商品分类查询
HytGoodsCategorySearch ToolConfig `mapstructure:"hytGoodsCategorySearch"`
// 货易通商品品牌查询
HytGoodsBrandSearch ToolConfig `mapstructure:"hytGoodsBrandSearch"`
// 负利润分析列表、 详情
DaOursProductLoss ToolConfig `mapstructure:"daOursProductLoss"`
// 利润同比排行榜
DaProfitRanking ToolConfig `mapstructure:"daProfitRanking"`
// 销售同比分析列表
DaOfficialProduct ToolConfig `mapstructure:"daOfficialProduct"`
// 销售同比下滑详情
DaOfficialProductDecline ToolConfig `mapstructure:"daOfficialProductDecline"`
// 我们的商品统计
RechargeStatisticsOursProduct ToolConfig `mapstructure:"rechargeStatisticsOursProduct"`
// Excel 转图片
Excel2Pic ToolConfig `mapstructure:"excel2Pic"`
}
// LoggingConfig 日志配置
type LoggingConfig struct {
Level string `mapstructure:"level"`
Format string `mapstructure:"format"`
}
// PermissionConfig 权限校验配置
type PermissionConfig struct {
// 获取权限的地址
PermissionURL string `mapstructure:"permission_url"`
}
// KnowledgeConfig 知识库配置
type KnowledgeConfig struct {
// 知识库地址
BaseURL string `mapstructure:"base_url"`
// 默认租户ID
TenantID string `mapstructure:"tenant_id"`
// 模式
Mode string `mapstructure:"mode"`
// 是否思考
Think bool `mapstructure:"think"`
// 是否仅RAG
OnlyRAG bool `mapstructure:"only_rag"`
}
// LoadConfig 加载配置
func LoadConfig(configPath string) (*Config, error) {
viper.SetConfigFile(configPath)
viper.SetConfigType("yaml")
// 设置默认值
//viper.SetDefault("server.port", "8080")
//viper.SetDefault("server.host", "0.0.0.0")
//viper.SetDefault("ollama.base_url", "http://localhost:11434")
//viper.SetDefault("ollama.model", "llama2")
//viper.SetDefault("ollama.timeout", "30s")
//viper.SetDefault("logging.level", "info")
//viper.SetDefault("logging.format", "json")
// 读取配置文件
if err := viper.ReadInConfig(); err != nil {
return nil, fmt.Errorf("failed to read config file: %w", err)
}
// 解析配置
var bc Config
if err := viper.Unmarshal(&bc); err != nil {
return nil, fmt.Errorf("failed to unmarshal config: %w", err)
}
return &bc, nil
}
func LoadConfigWithTest() (*Config, error) {
var bc Config
modularDir, err := pkg.GetModuleDir()
if err != nil {
return nil, err
}
viper.SetConfigFile(modularDir + "/config/config_test.yaml")
viper.SetConfigType("yaml")
// 读取配置文件
if err := viper.ReadInConfig(); err != nil {
return nil, fmt.Errorf("failed to read config file: %w", err)
}
// 解析配置
if err := viper.Unmarshal(&bc); err != nil {
return nil, fmt.Errorf("failed to unmarshal config: %w", err)
}
return &bc, nil
}
func LoadConfigWithEnv() (*Config, error) {
var bc Config
modularDir, err := pkg.GetModuleDir()
if err != nil {
return nil, err
}
viper.SetConfigFile(modularDir + "/config/config_env.yaml")
viper.SetConfigType("yaml")
// 读取配置文件
if err := viper.ReadInConfig(); err != nil {
return nil, fmt.Errorf("failed to read config file: %w", err)
}
// 解析配置
if err := viper.Unmarshal(&bc); err != nil {
return nil, fmt.Errorf("failed to unmarshal config: %w", err)
}
return &bc, nil
}