Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

config.md

maoxiaoyue edited this page May 14, 2026 · 2 revisions

Config Package (pkg/config)

config 套件提供一套靈活、強大且結構化的配置管理方案,專為 HypGo 打造。支援讀取 YAML 設定檔、環境變數擴充、參數驗證,以及物件預設值的處理。

主要功能

  • 支援 YAML 與反序列化: 透過 mapstructure 以及 yaml 標籤,可輕鬆地將設定檔映射到結構體。
  • 靈活配置來源: LoadConfig 方法允許從給定路徑讀取設定檔並載入到應用程式中;如果該路徑沒找到配置,將拋出錯誤。
  • 介面隔離設計: 定義了一系列介面(如 ConfigInterface, ServerConfigInterface, DatabaseConfigInterface, RedisConfigInterface, LoggerConfigInterface),讓配置物件的使用能有明確的約束並提高可測試性。
  • 支援讀寫分離配置: 提供 ReplicaConfigProvider 以及 DatabaseConfig.Replicas 配置,輕鬆設定多部讀取副本(Read Replicas),也可輕易退回主庫(Primary)。
  • 進階驗證支援: 整合 @maoxiaoyue/hypgo/pkg/json 內的校驗工具或其他校驗策略,驗證設定檔配置是否必填或符合規定格式。

基礎使用

以下範例會示範如何載入一個名為 config.yaml 的配置檔案:

package main
import (
	"log"
	"github.com/maoxiaoyue/hypgo/pkg/config"
)
func main() {
	// 假設有 config.yaml
	cfg, err := config.LoadConfig("config.yaml")
	if err != nil {
		log.Fatalf("無法讀取配置: %v", err)
	}
	// 確保設定的數值都有預設值墊底
	cfg.ApplyDefaults()
	log.Printf("Server 將啟動於 %s", cfg.GetServerConfig().GetAddr())
}

配置結構

配置主要分為三大區塊:

  1. Server: 設定伺服器連線、Protocol (HTTP2/3 等)、TLS,以及 Graceful Restart 等。
  2. Database: 定義連線驅動、DSN、連線池設定,甚至是 Redis 與多部 Data Replicas 的設定。
  3. Logger: 管理輸出的日誌層級、格式、輸出目的地等等。

例如 config.yaml:

server:
 addr: ":8080"
 protocol: "HTTP/1.1"
database:
 driver: "mysql"
 dsn: "user:pass@tcp(127.0.0.1:3306)/dbname"
logger:
 level: "info"
 format: "json"

預設值參考

如果沒有提供某些參數,呼叫 cfg.ApplyDefaults() 時預設:

  • Server addr:8080
  • Server protocolHTTP/1.1
  • Read/Write Timeout 為 10 / 10
  • Logger levelinfo
  • DB MaxIdle/Open Conns 等也有內建預設參考

LLM 配置 (llm.yaml)

v0.8.5+ LLMConfigllm.yaml 為 v0.8.5 新增功能,v0.8.1 版本不包含。

HypGo 提供獨立的 LLM 配置檔,用於控制 Manifest 智慧增強功能。放置於 config/llm.yaml.hyp/llm.yaml

配置結構

type LLMConfig struct {
 Mode string `yaml:"mode"` // "none", "rag", "ollama", "api"
 RAG RAGConfig `yaml:"rag"` // mode=rag 時使用
 Ollama OllamaConfig `yaml:"ollama"` // mode=ollama 時使用
 API APIConfig `yaml:"api"` // mode=api 時使用
}

四種模式

模式 說明 成本
none 不使用 LLM,只做純 Go 推斷(預設)
ollama 連接本地 Ollama 伺服器 零(本地運算)
api 連接遠端 API(OpenAI / Anthropic / Gemini) 按量付費
rag 向量資料庫 + embedding + LLM 生成 按量付費

Ollama 配置

mode: ollama
ollama:
 url: "http://localhost:11434" # 預設值
 model: "llama3" # 必填
 timeout: 30 # 秒(預設 30)
 max_tokens: 256 # 預設 256

API 配置

支援 4 種 provider:openaianthropicgeminicustom

mode: api
api:
 provider: "openai" # 必填
 model: "gpt-4o-mini" # 必填
 api_key: "${OPENAI_API_KEY}" # 必填(支援 ${ENV_VAR})
 base_url: "" # 各 provider 有預設值
 timeout: 30 # 秒(預設 30)
 max_tokens: 256 # 預設 256

Provider 預設 BaseURL:

Provider 預設 BaseURL
openai https://api.openai.com/v1
anthropic https://api.anthropic.com/v1
gemini https://generativelanguage.googleapis.com/v1beta
custom 必須手動設定

RAG 配置

mode: rag
rag:
 embedding_model: "nomic-embed-text" # 必填
 embedding_url: "http://localhost:11434" # 預設 Ollama
 vector_store: "chroma" # 必填:chroma/qdrant/milvus/faiss
 vector_store_url: "http://localhost:8000" # 必填
 collection: "my_codebase" # 集合名稱
 top_k: 5 # 檢索數量(預設 5)
 generator_model: "llama3" # 必填
 generator_url: "http://localhost:11434" # 預設 Ollama

載入方式

// 從指定路徑載入(檔案不存在時回傳 mode=none 預設值)
cfg, err := config.LoadLLMConfig("config/llm.yaml")
// 空路徑 → mode=none
cfg, err := config.LoadLLMConfig("")
// 檢查是否啟用
if cfg.IsEnabled() {
 // mode != "none"
}

安全設計

  • API Key 環境變數:api_key 支援 ${ENV_VAR} 語法,避免明文存入 YAML
  • Manifest 安全:LLM 配置不會出現在 Manifest 輸出中
  • 回應 Sanitize:LLM 回覆經過清理,移除潛在 HTML/script 標籤,限制長度 500 字元
  • 本地優先:Ollama 預設只連 localhost

範例配置檔

完整範例見 pkg/config/llm_example.yaml

HypGo

繁體中文 | English


中文文件

設計文件

套件

AI 協作工具鏈

CLI 命令


English Docs

Design Docs

Packages

AI Collaboration Toolchain

CLI Commands

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /