-
Notifications
You must be signed in to change notification settings - Fork 0
config.md
maoxiaoyue edited this page May 14, 2026
·
2 revisions
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()) }
配置主要分為三大區塊:
- Server: 設定伺服器連線、Protocol (HTTP2/3 等)、TLS,以及 Graceful Restart 等。
- Database: 定義連線驅動、DSN、連線池設定,甚至是 Redis 與多部 Data Replicas 的設定。
- 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
protocol為HTTP/1.1 - Read/Write Timeout 為
10/10 - Logger
level為info - DB MaxIdle/Open Conns 等也有內建預設參考
v0.8.5+LLMConfig與llm.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 生成 | 按量付費 |
mode: ollama ollama: url: "http://localhost:11434" # 預設值 model: "llama3" # 必填 timeout: 30 # 秒(預設 30) max_tokens: 256 # 預設 256
支援 4 種 provider:openai、anthropic、gemini、custom。
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 |
必須手動設定 |
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。
設計文件
套件
- config — 設定
- context — 請求上下文
- router — 路由器
- server — 伺服器
- middleware — 中介層
- websocket — WebSocket
- hidb — 資料庫 ORM
- hidb/cassandra — Cassandra
- logger — 日誌
- json — JSON 處理
- grpc — gRPC
AI 協作工具鏈
- schema — Schema-first 路由
- manifest — 專案 Manifest
- contract — Contract Testing
- errors — Typed Error Catalog
- migrate — Migration Diff
- scaffold — 智慧 Scaffold
- airules — AI Rules
CLI 命令
- hyp 總覽
- hyp new
- hyp api
- hyp run
- hyp restart
- hyp generate
- hyp migrate
- hyp context
- hyp ai-rules
- hyp chkcomment
- hyp impact
- hyp docker
- hyp health
- hyp version
- hyp difflog
Design Docs
Packages
- config — Configuration
- context — Request Context
- router — Router
- server — Server
- middleware — Middleware
- websocket — WebSocket
- hidb — Database ORM
- hidb/cassandra - Cassandra 5.0
- logger — Logger
- json — JSON
- grpc — gRPC
AI Collaboration Toolchain
- schema — Schema-first Routing
- manifest — Project Manifest
- contract — Contract Testing
- errors — Typed Error Catalog
- migrate — Migration Diff
- scaffold — Smart Scaffold
- airules — AI Rules
CLI Commands