慣性聚合 高效追蹤和閱讀你感興趣的部落格、新聞、科技資訊
閱讀原文 在慣性聚合中打開

推薦訂閱源

WordPress大学
WordPress大学
M
MIT News - Artificial intelligence
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
T
The Blog of Author Tim Ferriss
Engineering at Meta
Engineering at Meta
Jina AI
Jina AI
Last Week in AI
Last Week in AI
I
InfoQ
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
人人都是产品经理
人人都是产品经理
MongoDB | Blog
MongoDB | Blog
The Cloudflare Blog
月光博客
月光博客
爱范儿
爱范儿
D
Docker
罗磊的独立博客
博客园 - 叶小钗
博客园 - 司徒正美

掘金

Win 安装Claude Code FastAPI 的 CORSMiddleware 跨域中间件 Java 自研 ReAct Agent 半年后,我用 LangGraph 验证了这些设计取舍 🚀AI编程工作流终极形态:GitNexus!零Token消耗实现代码知识图谱化!让Claude Code和Codex拥有上帝视角彻底告别盲目改代码,复杂项目重 LeetCode 72. 编辑距离:动态规划经典题解 被The Graph的GraphQL查询坑了三天,我用一个真实DeFi项目把链上数据索引彻底搞懂了 (AI) 编写简单 AI 助手 (ds-agent) 别再让 pnpm 跟着 nvm 跑了!独立安装终极指南 Claude Code 为什么这么顺?Anthropic 最新复盘:真正撑住它的不是模型,而是缓存 从 /simplify 指令深挖 Claude Code 多 Agent 协同机制 Function-Calling与工具使用 新手上路(六):Claude code装上ECC全家桶:38 个子代理、156 个技能、生产级 Hooks 与 Rules 体系 我在 Claude、Kimi、opencode 三个 AI 之间搭了一条自动协作管道 【技能篇】OpenClaw Skill 详解:给 AI 装上"专业外挂" wagmi v2 多链钱包切换:一个 Uniswap 仿盘项目让我踩了三天坑 两周浅学 RAG 我把 Python re 模块比喻成摸金手套 新手上路(三):Claude Code Skills 装了一堆没用?20+ 个 Skill 横向对比 + 三套组合方案,按需抄 K2.6、DeepSeek V4、GPT-5.5 都来了,组合拳打起来 Claude Code 进阶之路:从记忆系统到子代理编排 [java] 编译之后的记录类(Record Classes)长什么样子(上) 国产大模型能力大比拼,社区有话说 我研读了 500 个 Spring Boot 生产级代码库,90% 都犯了这 7 个致命错误 JAVA重点难点 转发-中央网信办部署开展“清朗·整治AI应用乱象”专项行动 合同同步逻辑 【合并已排序数组的三种实现策略,哪一种更可取?】 30天减20斤挑战:少一斤发100红包(2) 我竟然被JavaScript的隐式类型转换坑了三天! 二十五.Electron 初体验与进阶 本地到生产,解决 AI 全栈最后一公里——构建&部署&运维 程序员创业半年:顺的事、不顺的事,和我一直没想清楚的事 UI组件库elementplus 像使用 Redis 一样操作 LocalStorage 向量检索的流程是怎样的?Embedding 和 Rerank 各自的作用? LangChain DeepAgents 速通指南(七)—— DeepAgents使用Agent Skill 为什么越来越多的大厂抛弃MCP,转向CLI? 【节点】[SquareRoot节点]原理解析与实际应用 juejin.cn juejin.cn 从 “存得下” 到 “算得快”:工业物联网需要新一代时序数据平台越来越多工业用户开始意识到一个问题:**数据是存下来了, - 掘金 放弃 Claude 订阅?我用 8 年前的服务器,强跑 Google 最强开源模型 Gemma 4 真实测评! Python开发者狂喜!200+课时FastAPI全栈实战合集,10大模块持续更新中🔥 从 Claw-Code 看 AI 驱动的大型项目开发:2 人 + 10 个自治 Agent 如何产出 48K 行 Rust 代码 秒级创建实例,火山引擎 Milvus Serverless 让 AI Agent 开发更快更省火山引擎MilvusSer MediaPlayer 播放器架构:NuPlayer 的 Source/Decoder/Renderer 三驾马车 juejin.cn juejin.cn juejin.cn juejin.cn
Prompt Engineering、Harness Engineering和Context Engineering
卷帘依旧 · 2026-05-27 · via 掘金

Context Engineering vs Harness Engineering vs Prompt Engineering

這三個概念構成了 LLM 應用開發的三層技術棧,從微觀到宏觀、從單次交互到系統架構層層遞進。


一、Prompt Engineering(提示詞工程)

概念

設計、優化輸入給 LLM 的文本指令,以獲取最佳輸出。這是最基礎、最微觀的層次。

核心特點

  • 作用範圍:單次 LLM 調用
  • 輸入輸出:文本 → 文本
  • 優化目標:輸出質量、準確性、格式
  • 調試方式:人工調整提示詞,觀察輸出變化

典型技術

// 1. 角色扮演
const prompt = `你是一位資深 Python 工程師,請審查以下代碼...`;

// 2. 思維鏈(Chain of Thought)
const prompt = `請逐步推理:1. 首先... 2. 然後...`;

// 3. Few-shot 示例
const prompt = `示例1: ... → ...\n示例2: ... → ...\n現在處理:`;

// 4. 輸出格式約束
const prompt = `以 JSON 格式輸出:{"field1": "", "field2": ""}`;

侷限性

  • ❌ 無狀態管理(每次調用獨立)
  • ❌ 無法處理超長上下文
  • ❌ 不能調用外部工具
  • ❌ 無錯誤恢復機制

二、Harness Engineering(腳手架工程)

概念

構建 LLM 應用的外部系統和工具鏈,包括工具定義、狀態管理、錯誤處理、成本控制等。這是中間層,負責"編排"。

核心特點

  • 作用範圍:整個 Agent/應用會話
  • 主要組件:工具、狀態、緩存、降級、監控
  • 優化目標:系統可靠性、成本控制、用戶體驗
  • 調試方式:日誌、鏈路追蹤、A/B 測試

核心組件

class Harness {
  // 1. 工具定義(讓 LLM 調用外部能力)
  tools = {
    read_file: { handler: async (path) => {...} },
    execute_bash: { handler: async (cmd) => {...} },
    search_web: { handler: async (query) => {...} }
  };
  
  // 2. 狀態管理(上下文窗口控制)
  manageContext() {
    if (tokenCount > 0.75 * maxTokens) {
      this.compress();  // 壓縮歷史
    }
  }
  
  // 3. 緩存策略(降低成本)
  setupCache() {
    // 標記穩定前綴,複用 KV Cache
    this.cachePrefix = [systemPrompt, toolDefinitions];
  }
  
  // 4. 錯誤處理與降級
  async callWithFallback(prompt) {
    try {
      return await callModel('opus', prompt);
    } catch {
      return await callModel('sonnet', prompt);  // 降級
    }
  }
  
  // 5. 成本控制
  estimateCost(messages) {
    return countTokens(messages) * 0.015 / 1000;
  }
}

解決的核心問題

問題Harness 解決方案
上下文溢出壓縮、摘要、滑動窗口
工具調用失敗重試、降級、超時控制
成本失控Token 計數、緩存、模型路由
響應不穩定多次採樣、投票機制
安全風險工具白名單、沙箱執行

三、Context Engineering(上下文工程)

概念

設計、管理、優化 LLM 在整個任務生命週期中能看到的所有信息。這是最宏觀的層次,關注"信息生態"。

核心特點

  • 作用範圍:跨會話、跨 Agent、長期任務
  • 主要對象:信息選擇、壓縮、記憶、共享
  • 優化目標:信息密度、長期一致性、知識複用
  • 調試方式:信息檢索評估、記憶召回率

上下文的層次結構

Level 4: 長期記憶(跨會話)
         ├─ 向量數據庫
         ├─ 知識圖譜
         └─ 用戶偏好

Level 3: 工作區上下文(項目級)
         ├─ CLAUDE.md / README
         ├─ 項目結構
         └─ 近期修改

Level 2: 會話上下文(本次對話)
         ├─ 歷史消息
         ├─ 已執行操作
         └─ 中間決策

Level 1: 瞬時上下文(當前消息)
         ├─ 用戶最新輸入
         └─ 臨時工具結果

關鍵技術

// 1. 信息選擇(只加載相關內容)
class ContextSelector {
  async select(query, codebase) {
    // 從 10 萬行代碼中檢索最相關的 5 個文件
    const relevant = await vectorDB.search(query, { topK: 5 });
    // 每個文件只提取相關函數(而非全部)
    return relevant.map(f => this.extractRelevantSnippets(f));
  }
}

// 2. 信息壓縮(有損但保留關鍵結構)
class ContextCompressor {
  compress(code, level) {
    if (level === 1) return this.extractSignatures(code);     // 只剩函數名
    if (level === 2) return this.extractSignaturesAndComments(code);
    return this.simplifyImplementation(code);                  // 保留邏輯但簡化
  }
}

// 3. 長期記憶(跨會話存儲)
class LongTermMemory {
  async memorize(decision) {
    await vectorDB.add(decision.embedding, decision.summary);
    await knowledgeGraph.createRelation(decision.from, decision.to);
  }
  
  async recall(question) {
    return await vectorDB.search(question);  // 語義檢索
  }
}

三者的核心區別

對比表格

維度Prompt EngineeringHarness EngineeringContext Engineering
作用範圍單次 LLM 調用Agent 會話生命週期跨會話、跨 Agent
時間尺度毫秒級分鐘-小時級天-周級
主要對象文本指令工具、狀態、錯誤信息選擇、壓縮、記憶
優化目標輸出質量系統可靠性、成本信息密度、長期一致性
典型問題"怎麼讓模型理解意圖?""Agent卡住了怎麼辦?""如何記住上週的決定?"
失敗後果回答質量差系統崩潰、成本失控重複工作、決策矛盾
調試方式人工調整提示詞日誌、鏈路追蹤檢索評估、召回率
依賴關係獨立依賴好的 Prompt依賴 Harness 提供存儲

一句話總結

  • Prompt Engineering怎麼說(微觀表達)
  • Harness Engineering怎麼做(中觀系統)
  • Context Engineering知道什麼(宏觀信息)

協作關係圖

用戶需求
    ↓
┌─────────────────────────────────────────┐
│  Context Engineering(宏觀)             │
│  "應該加載哪些歷史決策?"                 │
│  "如何壓縮10萬行代碼到2000 token?"       │
│  "如何記住上週的架構決策?"               │
└─────────────┬───────────────────────────┘
              ↓ 提供精選/壓縮後的信息
┌─────────────────────────────────────────┐
│  Harness Engineering(中觀)            │
│  "如何定義工具讓Agent調用?"              │
│  "上下文快滿了,要不要壓縮?"             │
│  "工具調用失敗,重試還是降級?"           │
└─────────────┬───────────────────────────┘
              ↓ 構建請求、管理狀態
┌─────────────────────────────────────────┐
│  Prompt Engineering(微觀)              │
│  "系統提示詞怎麼寫?"                     │
│  "這個工具描述怎麼讓模型理解?"            │
│  "如何用few-shot示例引導輸出格式?"       │
└─────────────┬───────────────────────────┘
              ↓ 構造最終 Prompt
           LLM 調用

實際案例對比

場景:構建一個代碼審查 Agent

// ========== 1. Prompt Engineering ==========
// 關注:如何讓模型輸出高質量審查意見

const reviewPrompt = `
你是一位資深代碼審查專家。審查以下代碼:

規則:
1. 安全性:檢查 SQL 注入、XSS
2. 性能:檢查 N+1 查詢
3. 可維護性:檢查命名、註釋

輸出格式:
- 🔴 嚴重問題
- 🟡 建議改進

代碼:
${code}
`;

// ========== 2. Harness Engineering ==========
// 關注:如何讓 Agent 穩定運行、控制成本

class CodeReviewHarness {
  async review(prUrl) {
    // 工具定義
    const tools = {
      get_diff: () => fetchDiff(prUrl),
      run_linter: (code) => eslint(code),
      get_file_history: (path) => gitLog(path)
    };
    
    // 狀態管理:避免上下文溢出
    let context = { reviewedFiles: [], comments: [] };
    
    // 錯誤處理:工具調用失敗時降級
    try {
      const diff = await tools.get_diff();
      for (const file of diff.files) {
        const issues = await this.reviewFile(file);
        context.comments.push(...issues);
      }
    } catch (error) {
      // 降級:只做靜態分析
      return this.staticAnalysisOnly();
    }
    
    // 成本控制:預估 token 消耗
    if (this.estimateCost(context) > 0.5) {
      await this.compressHistory();
    }
    
    return context;
  }
}

// ========== 3. Context Engineering ==========
// 關注:應該加載哪些信息?如何壓縮?如何記憶?

class CodeReviewContext {
  async buildContext(pr) {
    return {
      // 當前 PR 的變更
      currentDiff: await this.getDiff(pr),
      
      // 相關歷史決策(從向量庫檢索)
      pastDecisions: await this.vectorDB.search(
        pr.description, 
        { filter: { type: 'architectural', limit: 5 } }
      ),
      
      // 項目規範(從 CLAUDE.md 加載)
      projectRules: await this.loadClaudeMd(),
      
      // 壓縮策略:只保留關鍵信息
      compressedHistory: this.compress(pastDecisions, {
        keepSignatures: true,
        dropImplementation: true
      })
    };
  }
}

發展路徑

const learningPath = {
  beginner: "只做 Prompt Engineering",
  intermediate: "Prompt + Harness(工具、狀態、錯誤處理)",
  advanced: "完整三層(重點是 Context Engineering)"
};

// 投入產出比
const roi = {
  promptEngineering: "低成本、高回報(適合簡單任務)",
  harnessEngineering: "中成本、中回報(適合生產環境)",
  contextEngineering: "高成本、高回報(適合複雜長期任務)"
};

總結

核心區別

層次核心問題關鍵產出
Prompt如何表達意圖?高質量的單次回覆
Harness如何構建可靠系統?穩定運行的 Agent
Context如何管理信息生態?長期一致的知識體系

現代 LLM 應用的競爭壁壘

2023 年:Prompt Engineering 是核心技能
2024 年:Harness Engineering 成為標配
2025 年:Context Engineering 是真正的護城河

原因:當基礎能力(提示詞、工具調用)被模型內置後,真正區分產品優劣的是如何管理信息——知道保留什麼、丟棄什麼、從哪裡檢索、如何壓縮。這也是 Claude Code、Cursor 等產品的核心競爭力所在。