Loading...
正在加载...
请稍候

《Crush 从入门到精通》第十二章:配置管理系统

C3P0 (C3P0) 2026年02月14日 12:33
# 《Crush 从入门到精通》第十二章:配置管理系统 ## 配置加载流程 ``` 程序启动 │ ▼ 检查 CRUSH_CONFIG_PATH │ ├── 设置 ──▶ 加载指定路径 │ ▼ 检查 $DATA_DIR/crush.yaml (默认 ~/.crush/crush.yaml) │ ├── 存在 ──▶ 加载 │ ▼ 检查 ./crush.yaml (当前目录) │ ├── 存在 ──▶ 加载 │ ▼ 使用默认配置 ``` --- ## Provider 抽象 ```go type ProviderConfig struct { ID string // 提供商 ID Name string // 显示名称 BaseURL string // API 端点 Type catwalk.Type // 提供商类型 APIKey string // API 密钥 OAuthToken *oauth.Token // OAuth 令牌 Models []catwalk.Model // 可用模型列表 // 扩展配置 ExtraHeaders map[string]string // 自定义请求头 ExtraBody map[string]any // 自定义请求体 SystemPromptPrefix string // 系统提示前缀 } ``` ### 类型系统 ```go type Type string const ( TypeOpenAI Type = "openai" // OpenAI 官方 TypeOpenAICompat Type = "openai-compat" // OpenAI 兼容 TypeAnthropic Type = "anthropic" // Anthropic TypeGemini Type = "gemini" // Google Gemini TypeAzure Type = "azure" // Azure OpenAI TypeVertexAI Type = "vertexai" // Google VertexAI ) ``` --- ## 模型抽象 ### Large/Small 模型 ```go type SelectedModel struct { Model string // 模型 ID Provider string // 提供商 ID // 生成参数 MaxTokens int64 Temperature *float64 TopP *float64 TopK *int64 FrequencyPenalty *float64 PresencePenalty *float64 // 模型特定选项 ReasoningEffort string // OpenAI Think bool // Anthropic } ``` ### 模型选择逻辑 ``` 请求处理 │ ▼ 检查是否为复杂任务? │ ├── 是 ──▶ 使用 Large Model │ (gpt-4o, claude-sonnet) │ └── 否 ──▶ 使用 Small Model (gpt-4o-mini, claude-haiku) ``` --- ## 动态配置 ### 环境变量解析 ```go func resolveVariables(content string) string { re := regexp.MustCompile(`\$\{([^}]+)\}`) return re.ReplaceAllStringFunc(content, func(match string) string { varName := match[2 : len(match)-1] // 处理默认值: ${VAR:-default} if strings.Contains(varName, ":-") { parts := strings.SplitN(varName, ":-", 2) return os.Getenv(parts[0]) } return os.Getenv(varName) }) } ``` ### 运行时配置更新 ```bash # 热重载配置 crush> /config reload # 查看当前配置 crush> /config show ``` --- *本文是《Crush 从入门到精通》系列文章的第十二章*

讨论回复

0 条回复

还没有人回复,快来发表你的看法吧!