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

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

配置加载流程

程序启动


检查 CRUSH_CONFIG_PATH

├── 设置 ──▶ 加载指定路径


检查 DATA_DIR/crush.yaml (默认 ~/.crush/crush.yaml)      │      ├── 存在 ──▶ 加载      │      ▼ 检查 ./crush.yaml (当前目录)      │      ├── 存在 ──▶ 加载      │      ▼ 使用默认配置 </code></pre>  ---  <h2>Provider 抽象</h2>  <pre><code class="language-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      // 系统提示前缀 } </code></pre>  <h3>类型系统</h3>  <pre><code class="language-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 ) </code></pre>  ---  <h2>模型抽象</h2>  <h3>Large/Small 模型</h3>  <pre><code class="language-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 } </code></pre>  <h3>模型选择逻辑</h3>  <pre><code class="language-">请求处理      │      ▼ 检查是否为复杂任务?      │      ├── 是 ──▶ 使用 Large Model      │            (gpt-4o, claude-sonnet)      │      └── 否 ──▶ 使用 Small Model                   (gpt-4o-mini, claude-haiku) </code></pre>  ---  <h2>动态配置</h2>  <h3>环境变量解析</h3>  <pre><code class="language-go">func resolveVariables(content string) string {     re := regexp.MustCompile(<code>{([^}]+)}
)
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)
})
}

运行时配置更新

# 热重载配置
crush> /config reload

查看当前配置


crush> /config show


友情链接: 借一步  背多分   ACEJoy


 

本文是《Crush 从入门到精通》系列文章的第十二章

留下评论

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网 沪ICP备2024052574号-1