標籤: 模型部署

  • Qwen3.8-Max 長任務實戰與部署攻略

    Qwen3.8-Max 長任務實戰與部署攻略

    📌 本文重點

    • 長任務要以任務級 state 而非單次 context 設計
    • 混合雲端超大模型與本地 27B 降本增效
    • 透過分層記憶、快照與觀察性實現可恢復長任務

    阿里把 Qwen3.8-Max (2.4T) 拉到開源權重,加上 Qwen3.8-27B 這種「中杯」模型,對工程團隊最大意義是:第一次可以在自己掌控的環境裡,穩定做「跑幾天、不斷線、能恢復」的長任務——重現論文、長鏈路 refactor、甚至晶片設計流程,而不是被單次 context 長度與單次 API call 綁死。

    💡 關鍵: 開源 2.4T 級模型 + 27B 中杯,使「跨天長任務」首次在自控環境中變得可行且可恢復。

    這篇從工程視角拆三件事:長任務架構設計、部署選型與多模型搭配、企業級觀察性與成本防護欄,最後用一個「重現論文實驗 / 多階段 refactor」的管線當具體範例。


    重點說明:長任務超大模型的工程切面

    1. 長任務/長上下文的核心設計要點

    Qwen3.8-Max、Kimi K3、DeepSeek V4 Flash 這類模型都強調能處理「多階段、跨天」任務。工程上關鍵不是單次 context 有多長,而是:

    1. Checkpoint 分段
    2. 對長任務維持 任務級 state,而非完全依賴模型的上下文。
    3. 每一階段輸出轉成 結構化快照(JSON、向量庫),用來恢復 /續跑,而不是重餵全部原始對話。

    4. 任務分解 + 多階段推理管線

    5. 超大模型負責:規劃 + 難推理 + 棘手 code review。
    6. 中型模型(例如 Qwen3.8-27B)負責:常規 summarization、log 解讀、重複模式生成。
    7. Pipeline 以「任務節點 (TaskNode)」為最小單位,每個節點可重跑,可掛 cache。

    8. 長鏈路記憶:分層設計

    9. 熱記憶:當前階段所需的 1–2k 關鍵 tokens,直接進 context。
    10. 冷記憶:向量索引(RAG)、中間結果快照。
    11. 超大模型變成「查詢 +推理」引擎,而不是所有歷史都塞進它的 prompt。

    2. 部署選項:雲 API vs 自架 GPU / 集群

    現在 Qwen3.8-Max 提供 付費 API,權重預計開源;Qwen3.8-27B 已確認可在 約 17GB VRAM 上跑(Daniel Han 的實測)。工程決策可以粗略這樣切:

    💡 關鍵: 約 17GB VRAM 即可跑 27B,使中小團隊能低成本自架中型模型配合雲端超大模型。

    雲 API(Max / Kimi / DeepSeek)適合:

    • 須最高模型能力、推理品質優先。
    • 任務量不大但單次任務超長、需要穩定長鏈路追蹤。
    • 不想維護推理集群、只做應用層(產品團隊常見)。

    自架 GPU / 集群(27B / 7B)適合:

    • 高吞吐、預算敏感,能接受稍弱能力換大量併發。
    • 有 On-prem 合規需求(金融、醫療資料不能出域)。
    • 想做定制微調、系統 prompt、工具集成深度控制。

    典型架構是 混合多模型

    • 雲端 Qwen3.8-Max / DeepSeek V4 Flash:只用在「規劃 /關鍵判斷 /難度最高的 code reasoning」節點。
    • 本地 Qwen3.8-27B:跑 routine summarization、日常 RAG query、內部工具代理。

    3. 與 DeepSeek / Kimi 的差異與 Trade-off

    從現有 benchmark 和社群評價來看:

    • 能力:Qwen3.8-Max 在 coding /軟體任務上略優,整體接近 Kimi K3 / DeepSeek V4 Flash。
    • 推理延遲:超大模型延遲本來就高,雲 API 通常會有 長任務模式(寬限 timeout + 狀態追蹤)。自架時則要自己處理超長推理的 timeout /重試。
    • 記憶管理:Kimi / DeepSeek 已內建較成熟的長記憶機制(server 端 RAG + 任務追蹤);Qwen 開源權重的優勢是:你可以自己決定 記憶層級與格式,不被封閉系統限制。
    • 成本模式
    • Qwen3.8-Max API 標價示例:Input \$2 /M tokens、Output \$6 /M tokens(依 Reddit 貼文),長任務要小心爆成本。
    • 自架 27B:一次性硬體 + 電費,長期大量任務通常更便宜,但需要 DevOps 能力。

    💡 關鍵: Input \$2 /M、Output \$6 /M tokens 的定價,逼迫架構上用「Max 做關鍵推理 + 27B 處理日常」來控制長任務成本。


    實作範例:以「重現一篇論文實驗 / 多階段 codebase refactor」為例

    以下是一個簡化的長任務管線,支援:

    • 論文解析 → 實驗設計 → Code 生成 → 結果分析
    • 隨時 resume,有 觀察性 (logging)成本防護欄

    1. 任務管線與分層記憶設計

    先定義任務節點與狀態儲存:

    # pseudo-code: 任務節點 / pipeline 定義
    class TaskNode:
        def __init__(self, name, model_role, handler):
            self.name = name              # e.g. "paper_analysis"
            self.model_role = model_role  # "max" or "27b"
            self.handler = handler        # 可重跑的邏輯
    
    class LongTaskState:
        def __init__(self, task_id):
            self.task_id = task_id
            self.snapshots = {}   # {node_name: snapshot_json}
            self.logs = []        # for observability
    
        def save_snapshot(self, node_name, data):
            self.snapshots[node_name] = data
            # 實際上會寫入 DB 或 object storage
    
        def load_snapshot(self, node_name):
            return self.snapshots.get(node_name)
    
        def log(self, level, msg, meta=None):
            self.logs.append({"level": level, "msg": msg, "meta": meta})
    

    接著建立「分層記憶」:把論文內容、codebase 索引到向量庫,用 RAG 控制熱 /冷記憶:

    # pseudo-code: 分層記憶 (RAG + 快照)
    class MemoryLayer:
        def __init__(self, vector_store, snapshot_store):
            self.vector_store = vector_store
            self.snapshot_store = snapshot_store
    
        def query_paper(self, question, top_k=5):
            return self.vector_store.search("paper", question, top_k)
    
        def query_codebase(self, question, top_k=10):
            return self.vector_store.search("code", question, top_k)
    
        def load_intermediate(self, task_id, node_name):
            return self.snapshot_store.get(task_id, node_name)
    
        def save_intermediate(self, task_id, node_name, data):
            self.snapshot_store.put(task_id, node_name, data)
    

    2. 多模型推理管線:Qwen3.8-Max + Qwen3.8-27B

    假設你有:

    • max_client:雲端 Qwen3.8-Max API 客戶端。
    • local27_client:本地部署 Qwen3.8-27B 客戶端(例如 vLLM / llama.cpp)。
    # pseudo-code: 選模型 + 成本防護欄
    MAX_INPUT_LIMIT = 200_000   # 依你的預算與 API 限制調整
    
    def call_model(model_role, prompt, max_output_tokens=4096):
        if model_role == "max":
            if len(prompt) > MAX_INPUT_LIMIT:
                raise ValueError("input tokens exceed MAX_INPUT_LIMIT")
            return max_client.generate(
                model="qwen-3.8-max",
                input=prompt,
                max_output_tokens=max_output_tokens,
                # 可以加上 temperature, top_p 等
            )
        else:
            return local27_client.generate(
                model="qwen-3.8-27b",
                input=prompt,
                max_output_tokens=max_output_tokens,
            )
    

    以下是三個節點示意:

    1. 論文解析(Max):任務規劃 + 實驗拆解。
    2. codebase 分析(27B + RAG):找出需 refactor 的模組。
    3. 關鍵 refactor 方案(Max):高階設計 + 風險分析。
    # 節點 1:論文解析
    
    def handle_paper_analysis(state: LongTaskState, memory: MemoryLayer, paper_text: str):
        ctx = state.load_snapshot("paper_analysis")
        if ctx:  # 支援 resume
            return ctx
    
        prompt = f"""
    你是一名資深研究工程師,請從以下論文中抽取:
    1. 實驗設定 (dataset, metrics, hyperparams)
    2. 關鍵貢獻
    3. 可能的工程落地風險
    
    輸出 JSON,schema:
    {{
      "experiments": [{{"name": str, "config": dict}}],
      "contributions": [str],
      "risks": [str]
    }}
    
    論文內容:
    {paper_text}
    """
        resp = call_model("max", prompt, max_output_tokens=8192)
        result = json.loads(resp["output_text"])  # 需加 error handling
        state.save_snapshot("paper_analysis", result)
        return result
    
    # 節點 2:codebase 分析 (RAG + 27B)
    
    def handle_code_analysis(state: LongTaskState, memory: MemoryLayer, question: str):
        cached = state.load_snapshot("code_analysis")
        if cached:
            return cached
    
        docs = memory.query_codebase(question, top_k=20)
        context = "\n\n".join(d["content"] for d in docs)
    
        prompt = f"""
    你是資深後端工程師,根據以下 code 片段,找出需要改動的模組與檔案路徑,並說明原因。
    
    [相關程式碼摘錄]
    {context}
    
    問題:{question}
    
    請輸出為 JSON,schema:
    {{
      "modules": [{{"path": str, "reason": str}}]
    }}
    """
        resp = call_model("27b", prompt, max_output_tokens=4096)
        result = json.loads(resp["output_text"])  # 需加 error handling
        state.save_snapshot("code_analysis", result)
        return result
    
    # 節點 3:關鍵 refactor 方案 (Max)
    
    def handle_refactor_plan(state: LongTaskState, memory: MemoryLayer):
        plan = state.load_snapshot("refactor_plan")
        if plan:
            return plan
    
        paper_info = state.load_snapshot("paper_analysis")
        code_info = state.load_snapshot("code_analysis")
    
        prompt = f"""
    你是一名首席軟體架構師。根據以下資訊設計一個分階段 refactor 方案,要求:
    - 每階段可獨立部署
    - 每階段都有 rollback 計畫
    - 清楚列出對實驗結果重現的影響
    
    [論文實驗摘要]
    {json.dumps(paper_info, ensure_ascii=False)}
    
    [需要改動的模組]
    {json.dumps(code_info, ensure_ascii=False)}
    
    請輸出為 JSON,schema:
    {{
      "phases": [{{"id": int, "description": str, "files": [str], "risk": [str], "rollback": [str]}}]
    }}
    """
        resp = call_model("max", prompt, max_output_tokens=8192)
        result = json.loads(resp["output_text"])  # 需加 error handling
        state.save_snapshot("refactor_plan", result)
        return result
    

    3. 企業環境下的觀察性、任務恢復與成本控制

    在企業環境跑長任務,以下三件事必做:

    1. 觀察性 (logging & metrics)

    2. 每個 TaskNode 紀錄:開始 /結束時間、使用模型、input_tokens / output_tokens 數、錯誤碼。

    3. 放進集中式 log (如 ELKClickHouse),可追蹤某次 pipeline 的 token 成本。

    4. 任務恢復 (resume)

    5. 每個節點輸出都用 state.save_snapshot,並寫入 DB / object storage。

    6. entrypoint 支援 resume_from=node_name,方便從中間節點重跑,而不是從頭吞全部 context。

    7. 成本防護欄

    8. 全局 quota:一天內對 Qwen3.8-Maxinput /output tokens 上限,超過就 fallback 到 27B 或排隊。

    9. batch 策略:大量相似小任務(例如 log summary)批次送給 27B,本地處理;只把「需要人決策」的部分交給 Max

    建議與注意事項:常見坑與最佳實踐

    1. context 爆炸

    2. 不要把整篇論文 + 整個 codebase 都塞進 prompt,即使模型支持 1M tokens。

    3. RAG +中間結果快照:先用 27B 做初步萃取,再用 Max 做重推理,context 控制在幾千 tokens 內。

    4. token 成本失控

    5. Qwen3.8-Max 這種 \$2/\$6 per M tokens 的模型:

      • 所有節點都要紀錄 input_tokens / output_tokens,計算 pipeline 單價。
      • 高頻任務優先跑本地 27B,只在需要「deep reasoning」時升級到 Max
    6. 長鏈路 state 不一致

    7. 不要把「模型上次說的東西」當唯一真相。所有關鍵中間結果都要轉成 明確 schema (JSON)

    8. 上游節點輸出要做 schema validation(可以用 Pydantic)與版本控管,避免後續節點因格式變動直接崩壞。

    9. 多模型切換的延遲 /錯誤處理

    10. 對雲端 Max:加 重試與退避機制,長任務時避免整個 pipeline 因一個 500 error 失敗。

    11. 設計好 fallback 策略Max 超時時,先用 27B 生成較粗的答案,讓任務不中斷,事後再補。

    12. 自架 27B 的 VRAM 預算

    13. Qwen3.8-27B 在約 17GB VRAM 可跑是利好,但那是經過量化 /優化後的情境。

    14. 生產環境請預留額外 VRAM 給:並發請求、KV cache、RAG embedding 模型;單張 24GB 以上 GPU 會比較安全。

    結論:如果你手上有需要「跨天、跨多階段、多次嘗試」的長任務(論文重現、超大型 refactor、風控模組設計),現在可以用 Qwen3.8-Max + Qwen3.8-27B + 分層記憶 (RAG+快照) 搭起一個真正工程化可恢復的管線,把超大模型從「一次性助手」變成「可監控、可控成本的長程代理」。

    🚀 你現在可以做的事

    • 在自家 codebase 中實作文中的 TaskNodeLongTaskState,搭起最小可用長任務管線
    • 部署一個本地 Qwen3.8-27B(如用 vLLMllama.cpp),並接上雲端 Qwen3.8-Max 做多模型實驗
    • 為現有 LLM 任務加入 token 計費 log 與 MAX_INPUT_LIMIT 檢查,建立成本防護欄與 resume_from 能力
  • LLM × sktime craft 打造 AutoForecast

    LLM × sktime craft 打造 AutoForecast

    📌 本文重點

    • sktime + craft() 讓 LLM 設計可訓練的預測 pipeline
    • 以 LLM 當 search policy,降低傳統 AutoML 搜尋成本
    • 把業務限制寫進 prompt,兼顧準確度、延遲與維運

    傳統做時間序列 AutoML,多半靠 grid search / Bayesian search 把模型和超參數「全掃一輪」,成本高、速度慢,而且一換業務場景就得重調。這篇要介紹的是:用 sktime 的 pipeline + craft() 介面,讓 LLM 充當預測藍圖設計師,自動組裝可訓練、可回測的 forecasting pipeline,實際解決:

    • 算力被 AutoML 搜尋吃光的問題
    • 每個產品線都要單獨手調模型的維護地獄
    • 新資料來時,預測流程很難「可重現、自動化演進」的痛點

    重點說明

    1. sktime pipeline + craft():把「模型設計」變成文字介面

    sktime 提供了時間序列專用的 pipeline / composer 抽象,可以把:

    • 前處理(差分、假日特徵、滯後特徵)
    • 模型本體(ARIMA、Gradient Boosting、機器樹、深度模型包裝器)
    • 聚合、多變量等

    組成一個可訓練的 forecaster 物件

    craft() 的角色:

    • 接收一段以文字描述的「藍圖」或結構化 blueprint
    • 解析成真正的 sktime pipeline 物件
    • 後續你可以直接 .fit() / .predict() / 做交叉驗證

    💡 關鍵: craft() 讓「文字藍圖」直接變成可訓練的 sktime pipeline,是把 LLM 接到 AutoForecast 流程的關鍵樞紐。

    這讓 LLM 可以只負責「寫藍圖」,而不是直接產生一大段 Python 亂碼。


    2. 為什麼用 LLM 當 search policy,而不是再做一個 AutoML

    傳統 AutoML:

    • 先定義 search space(例如 10 種模型 × 10 個超參數 × 若干取值)
    • Grid/Bayesian 搜尋會盲目探索大量組合

    LLM 驅動 AutoForecast 的思路:

    • 你提供:資料描述、目標、限制條件、白名單元件
    • LLM 輸出:一個「專家風格」的 pipeline blueprint
    • sktime craft():把 blueprint 變成真正的 estimator
    • 之後用交叉驗證 + 回測,打分這個藍圖好不好

    好處:

    • 搜尋空間更有結構:LLM 預先排除很多不合理組合
    • 成本可控:每次只訓練少數幾個「有合理解釋」的藍圖
    • 你可以 固化得分高的藍圖,變成穩定的產線預測器

    💡 關鍵: 相較於暴力掃描大量組合,讓 LLM 先縮小「合理藍圖集合」,能在相同算力下探索更有價值的模型設計。


    3. 把業務限制寫進 prompt:準確度只是其中一個目標

    在實務專案中,像房地產、銷售預測一樣,除了誤差小,你還會在乎:

    • 推理時間(每天要跑上千條 SKU / 房源)
    • 部署複雜度(不要依賴罕見套件或 GPU)
    • 解釋性(要能向業務說明為什麼預測變化)

    這些都可以在 prompt 中顯式告訴 LLM,例如:

    • 限定只能用某些 estimator:NaiveForecaster, ExponentialSmoothing, ElasticEnsemble, LightGBM-based forecaster...
    • 給出目標指標:sMAPEMAE,並設計多目標(準確度 + latency)

    實作範例:銷售時間序列 LLM AutoForecast

    以下示範一個簡化版流程:

    • 場景:預測未來 3 個月每月團隊銷售額
    • 資料:月度歷史 revenue、房源數量、成交率、利率、季節 dummy 等

    假設你已經載入 sktime 與一個 LLM SDK(例如 Anthropic、OpenAI 等)。以下程式碼偏 pseudo,但結構可直接套入專案。

    1. 描述資料與目標,建立 LLM prompt

    schema_description = {
        "frequency": "M",  # 月度資料
        "target": "team_gci",  # 團隊佣金收入
        "horizon": 3,  # 預測 3 個月
        "exogenous_features": [
            "active_listings",     # 有效掛牌數
            "pending_transactions", # 待成交案件
            "mortgage_rate",      # 抵押貸款利率
            "seasonality_flags"   # 季節性特徵
        ],
        "constraints": {
            "max_pipeline_depth": 4,
            "allowed_estimators": [
                "NaiveForecaster",
                "ExponentialSmoothing",
                "ThetaForecaster",
                "LightGBMForecaster"
            ],
            "allowed_transformers": [
                "Detrender",
                "STLTransformer",
                "Lag",
                "DateTimeFeatures"
            ],
            "primary_metric": "sMAPE",
            "secondary_metric": "latency_ms",
            "max_fit_time_minutes": 15
        }
    }
    
    system_prompt = """
    你是一位時間序列預測專家,負責設計 sktime 預測 pipeline。
    
    要求:
    1. 只使用以下白名單中的 estimator 和 transformer。
    2. 避免過度複雜的 pipeline,深度不超過 4 層。
    3. 避免使用不存在的類別和參數,嚴格遵守 sktime API。
    4. 針對月度房地產團隊銷售數據,考慮趨勢與季節性。
    5. primary metric 是 sMAPE,次要考慮推理延遲,盡量用輕量模型。
    
    輸出格式:只輸出 JSON,欄位為 `pipeline_spec`,不可包含其他文字。
    `pipeline_spec` 要能被 sktime.craft() 解析。
    """
    
    user_prompt = f"資料與限制如下:\n{schema_description}\n請產生 pipeline_spec。"
    

    2. 呼叫 LLM,取得 pipeline blueprint

    from some_llm_client import LLM
    
    llm = LLM(api_key="...")
    
    response = llm.chat(
        system=system_prompt,
        user=user_prompt
    )
    
    blueprint = response["pipeline_spec"]  # 假設已解析 JSON
    print(blueprint)
    

    例:LLM 可能輸出類似(簡化)

    {
      "type": "TransformedTargetForecaster",
      "steps": [
        {"name": "detrend", "class": "Detrender", "params": {"forecaster": "NaiveForecaster"}},
        {"name": "stl", "class": "STLTransformer", "params": {"seasonal": 7}},
        {"name": "lag", "class": "Lag", "params": {"lags": [1, 2, 3, 6, 12]}},
        {"name": "model", "class": "LightGBMForecaster", "params": {"num_leaves": 31, "learning_rate": 0.05}}
      ]
    }
    

    💡 關鍵: 藉由 max_pipeline_depth = 4、白名單與 max_fit_time_minutes = 15 等約束,LLM 被強迫產出既合理又可在時限內完成訓練的藍圖。

    3. 用 craft() 轉成可執行 pipeline

    from sktime.craft import craft
    
    # 這裡的 blueprint 就是上一步 LLM 回傳的 JSON
    forecaster = craft(blueprint)
    
    print(type(forecaster))
    # e.g. <class 'sktime.forecasting.compose._pipeline.TransformedTargetForecaster'>
    

    如果 LLM 有亂給不存在的 class/參數,這一步會直接爆掉,所以建議外面包一層驗證:

    def safe_craft(blueprint):
        try:
            return craft(blueprint)
        except Exception as e:
            # 記錄錯誤,丟回給 LLM 做自我修正或直接丟棄該藍圖
            print("Invalid blueprint:", e)
            return None
    
    forecaster = safe_craft(blueprint)
    if forecaster is None:
        # 重新請 LLM 生成,或 fallback 到手寫 baseline
        ...
    

    4. 做時間序列交叉驗證與回測(避免 leakage)

    時間序列不能隨機 shuffle,必須用 滾動時間窗

    from sktime.forecasting.model_selection import ExpandingWindowSplitter
    from sktime.performance_metrics.forecasting import mean_absolute_percentage_error
    
    cv = ExpandingWindowSplitter(
        initial_window=36,  # 例如先用 3 年訓練
        step_length=3,      # 每次往前滾 3 個月
        fh=[1, 2, 3]        # 評估 1-3 個月 horizon
    )
    
    CV_scores = []
    for train_idx, test_idx in cv.split(y):
        y_train, y_test = y.iloc[train_idx], y.iloc[test_idx]
        X_train, X_test = X.iloc[train_idx], X.iloc[test_idx]
    
        forecaster.fit(y_train, X=X_train)
        y_pred = forecaster.predict(fh=cv.fh, X=X_test)
    
        score = mean_absolute_percentage_error(y_test, y_pred)
        CV_scores.append(score)
    
    print("CV MAPE:", sum(CV_scores) / len(CV_scores))
    

    這個流程可以放在一個 LLMBlueprintForecaster 類別裡,作為你的 AutoForecast 前端代理:

    1. 給資料描述與限制
    2. LLM 產生藍圖
    3. craft() 轉成 pipeline
    4. 用時間窗交叉驗證打分
    5. 挑最佳藍圖,固化成產線模型

    建議與注意事項

    1. LLM 亂組 class / 參數:一定要有 validator

    常見問題:

    • 寫出不存在的 class 名稱(如 XGBoostForecaster 明明沒這個)
    • 傳錯 參數名稱 或型別

    實務上建議:

    • 自行維護一份 白名單 registryALLOWED_ESTIMATORS, ALLOWED_TRANSFORMERS,包含合法 class 與參數 schema
    • LLM 輸出後先做 schema validation,不合法就直接丟棄或要求 LLM 修正

    2. 避免過度複雜 pipeline:限制深度與組合數

    LLM 很容易產生「看起來很專業」的 pipeline:一堆 transformer 疊來疊去,訓練時間爆炸還容易 overfit。

    做法:

    • 在 prompt 裡明寫:max_pipeline_depth、禁止嵌套某些昂貴 transformer
    • 在 validator 裡硬限制步數,例如 len(steps) <= 4
    • 將 fit time / memory 也當成 約束條件,訓練時加上 timeout + 監控

    3. 嚴格避免 leakage:時間切割一律「只看過去」

    坑點:

    • 把整段資料做標準化 / 滯後特徵時,無意間用到未來資訊

    避免方式:

    • 一律用 sktime 的 transformer + forecaster pipeline,讓 transform 在 fit 只看到 train window
    • cross-validation 必須用 ExpandingWindowSplitter / SlidingWindowSplitter 類型
    • 在 prompt 裡提醒:不得使用未來的統計量(例如整體均值)來處理訓練資料

    4. 在專案中落地:把 LLM 當 search policy,而不是 oracle

    建議實務流程:

    1. Search policy:LLM 只負責提案藍圖,不直接上產線
    2. 離線評估:用固定的 backtest 配置(split、metric、timeout)評估每個藍圖
    3. 固化最佳藍圖:將 blueprint JSON 連同該版本資料 schema 一起存入 repo
    4. CI 自動回歸
    5. 新資料 schema / 分布變化時,自動對舊藍圖重新訓練 + 打分
    6. 可以定期讓 LLM 在新 constraint 下重新產生藍圖,與舊版本對比
    7. 可重現性:所有 LLM 輸出(prompt + response)都要 versioning(例如存到 S3 / Git LFS),確保每個産線模型的來歷可追溯

    關鍵結論:

    • craft() + LLM = 可控的 AutoForecast 工具鏈,你掌控 search space 與評估邏輯
    • 把 LLM 當作「有經驗的建模同事」,而不是神諭;所有藍圖都要在 sktime 的嚴格回測與 CI 下過關,才能進產線

    這樣,在實際銷售 / 房地產等時間序列場景中,你可以以相對低成本,不斷迭代更好的預測流程,同時維持可重現與可維運的工程品質。


    🚀 你現在可以做的事

    • 在專案中安裝並載入 sktime,試著手動呼叫 craft() 建一個簡單 pipeline
    • 依照文中範例,實作一份包含 max_pipeline_depth 與白名單的 LLM prompt,讓 LLM 先產出一版 pipeline_spec
    • 為產出的 blueprint 加上 safe_craft() + 時間序列交叉驗證,建立一個最小可用的 LLMBlueprintForecaster 原型