Context Engineering:從Prompt Engineering到上下文工程的演進

最近在做Deepresearch以及刷到一個不錯的文章:context-engineering-guide ,這篇文章揭示了提示工程以及上下文過程在智能體應用開源流程中,包括Deepresearch,MCP在內的一些概念,起到了非常重要的作用!

Context Engineering與Prompt Engineering的關系與區別

在深入探討Context Engineering之前,我們需要理解它與Prompt Engineering的關系。傳統的Prompt Engineering主要關注如何設計和優化單次的提示指令,讓AI模型更好地理解用戶意圖并產生期望的輸出。這就像是學會如何向一個專家提出精確的問題,通過精心設計的問題描述、示例和格式要求來獲得高質量的回答。

而Context Engineering則是一個更加寬泛和系統性的概念,它不僅包含了Prompt Engineering的所有技巧,還擴展到了整個AI系統的上下文管理。如果說Prompt Engineering是"問話的藝術",那么Context Engineering就是"環境構建的科學"。它關注的是如何為AI系統提供完整的工作環境,包括背景知識、歷史記錄、工具調用、數據檢索等各個方面,讓AI在這個精心構建的上下文環境中更好地完成復雜任務。

什么是上下文工程?

幾年前,包括許多頂尖的人工智能研究人員在內,不少人聲稱Prompt Engineering將會消亡。然而事實證明,他們的預測完全錯誤。Prompt Engineering不僅沒有消失,反而變得比以往任何時候都更加重要,重要到正在被重新命名為Context Engineering。

Context Engineering是一個用來描述如何調整大型語言模型執行任務所需的指令和相關上下文的重要過程的術語。已經有很多業界專家對此進行了討論,包括Ankur Goyal、Walden Yan、Tobi Lutke和Andrej Karpathy等人都曾提及這個概念的重要性。

人們之所以懷疑Prompt Engineering是一項嚴肅技能,主要是因為許多人將其與"盲目提示"混淆了。盲目提示是指在ChatGPT這樣的LLM中使用簡短的任務描述,僅僅是簡單地向系統提問。而真正的Prompt Engineering需要更仔細地思考提示的上下文和結構,或許從一開始,它就應該叫做Context Engineering。

從開發者的角度來看,Context Engineering是一個迭代過程,用于優化提供給LLM的指令和上下文,以達到期望的結果。這包括建立正式的流程,如評估管道,用來衡量策略是否有效。

Context Engineering的核心定義

考慮到人工智能領域的快速發展,我們可以采用一個更寬泛的Context Engineering定義:設計和優化提供給大型語言模型和高級AI模型的指令及相關上下文的過程,以使其能夠有效地執行任務。 這不僅包括基于文本的LLM,也涵蓋了為日益普及的多模態模型優化上下文。

Context Engineering包括但不限于以下幾個方面:設計和管理提示鏈、調整指令和系統提示、管理提示中的動態元素(如用戶輸入、日期時間等)、搜索和準備相關知識(即RAG檢索增強生成)、查詢增強、工具定義和指令(對于智能體系統而言)、準備和優化少樣本示例、結構化輸入和輸出、短期記憶管理以及長期記憶檢索等。

換言之,Context Engineering的目標就是優化在LLM上下文窗口中提供的信息,同時過濾掉噪聲信息。這本身就是一門科學,因為它需要系統地衡量LLM的性能表現。

Context Engineering的實踐應用

系統提示的設計與優化

讓我們通過一個具體的例子來看Context Engineering在實際中的應用。筆者最近為一個個人使用的多智能體深度研究應用做了一些上下文工程工作。在這個應用中,Search Planner(搜索規劃師)智能體負責根據用戶查詢生成搜索計劃。

以下是為這個子智能體整理的系統提示:

你是一位專業的研究規劃師。你的任務是將復雜的研究查詢(由<user_query></user_query>分隔)分解為具體的搜索子任務,每個子任務關注不同的方面或來源類型。當前日期和時間是:{{ $now.toISO() }}對于每個子任務,請提供:
1. 子任務的唯一字符串ID(例如,'subtask_1', 'news_update')
2. 專注于主查詢某個方面的具體搜索查詢
3. 要搜索的來源類型(web, news, academic, specialized)
4. 時間段相關性(today, last week, recent, past_year, all_time)
5. 領域重點(如果適用)(technology, science, health等)
6. 優先級級別(1-最高到5-最低)所有字段(id, query, source_type, time_period, domain_focus, priority)對每個子任務都是必需的,除了time_period和domain_focus如果不適用可以為null。創建2個子任務,這些子任務一起提供對主題的全面覆蓋。重點關注不同的方面、觀點或信息來源。

在這個系統提示中,有很多部分都需要仔細考慮,為規劃智能體提供精確的上下文,使其能夠有效地執行任務。這不僅僅是設計一個簡單的提示或指令,而是需要反復試驗,并提供重要的上下文,以便模型能夠最佳地執行任務。

指令層面的上下文工程

指令是提供給系統的高層指示,精確告訴系統要完成什么任務。例如:“你是一位專業的研究規劃師。你的任務是將復雜的研究查詢分解為具體的搜索子任務,每個子任務關注不同的方面或來源類型。”

很多初學者甚至是經驗豐富的AI開發者可能就止步于此了。但從完整的提示來看,我們需要給系統提供大量額外的上下文,才能讓它按照我們的意愿工作。這正是Context Engineering的意義所在:它通過告知系統更多關于問題范圍和具體需求的細節,來引導系統的行為。

用戶輸入的結構化處理

用戶輸入雖然在系統提示中沒有直接顯示,但需要進行結構化處理。例如:

<user_query> What's the latest dev news from OpenAI? </user_query>

這里使用了分隔符,這是為了更好地結構化提示。這對于避免混淆非常重要,能夠清晰地界定用戶輸入是什么,以及希望系統生成什么內容。有時候,輸入的內容和希望模型輸出的信息是相關的,比如查詢是輸入,而子查詢是輸出。

結構化輸入與輸出的優化

除了高層指令和用戶輸入之外,還需要花相當大的精力來詳細描述智能體需要生成的內容結構。以下是提供給規劃智能體的詳細指令,以便它根據用戶查詢創建子任務:

對于每個子任務,請提供:
1. 子任務的唯一字符串ID(例如,'subtask_1', 'news_update')
2. 專注于主查詢某個方面的具體搜索查詢
3. 要搜索的來源類型(web, news, academic, specialized)
4. 時間段相關性(today, last week, recent, past_year, all_time)
5. 領域重點(如果適用)(technology, science, health等)
6. 優先級級別(1-最高到5-最低)所有字段(id, query, source_type, time_period, domain_focus, priority)對每個子任務都是必需的,除了time_period和domain_focus如果不適用可以為null。創建2個子任務,這些子任務一起提供對主題的全面覆蓋。重點關注不同的方面、觀點或信息來源。

仔細觀察上面的指令,筆者列出了希望規劃智能體生成所需信息的清單,并提供了一些提示和示例,以便更好地引導數據生成過程。這對于向智能體提供關于預期的額外上下文至關重要。例如,如果不告訴它優先級級別應該在1-5的范圍內,系統可能會傾向于使用1-10的范圍。

為了從規劃智能體那里獲得一致的輸出,還需要提供關于子任務格式和期望字段類型的信息作為上下文:

每個子任務將包含以下信息:
id: str
query: str
source_type: str  # 例如,"web", "news", "academic", "specialized"
time_period: Optional[str] = None  # 例如,"today", "last week", "recent", "past_year", "all_time"
domain_focus: Optional[str] = None  # 例如,"technology", "science", "health"
priority: int  # 1(最高)到5(最低)

這種結構化輸出的方法是Context Engineering中一個被許多AI開發者忽略的重要方面。這是一種非常強大的方法,尤其當智能體產生的輸出不穩定,而它們又需要按照特定的格式傳遞給工作流中的下一個組件時。

工具集成與動態上下文

在構建智能體系統時,工具的集成是Context Engineering的重要組成部分。例如,將當前日期和時間作為上下文傳入是非常重要的,這可以通過簡單的函數調用實現:

The current date and time is: {{ $now.toISO() }}

這樣的工具調用有助于增加動態性,即僅在查詢需要時獲取相關信息。這就是Context Engineering的意義所在——它迫使開發者對"向LLM傳遞什么樣的上下文"以及"何時傳遞"做出具體的決策。這很重要,因為它消除了應用程序中的假設和不準確性。

日期和時間對于系統而言是重要的上下文,否則它在處理需要了解當前日期和時間的查詢時往往表現不佳。例如,如果要求系統搜索上周發生的OpenAI最新開發者新聞,它可能會隨意猜測日期和時間,從而導致次優的查詢,最終搜索結果也不準確。

RAG與記憶管理

RAG(檢索增強生成)和記憶管理是Context Engineering中的高級技術。雖然在基礎版本中可能不需要使用短期記憶,但可以構建一個版本來緩存針對不同用戶查詢的子查詢。這有助于加速和優化工作流。如果用戶之前已經使用了類似的查詢,可以將這些結果存儲在向量數據庫中,并查詢這些結果,從而避免為已經生成并存在于向量數據庫中的計劃重新創建一組子查詢。

這是一種巧妙的Context Engineering應用,它使應用程序更具動態性、更經濟、效率更高。Context Engineering不僅僅是優化提示,更是根據設定的目標選擇合適的上下文。在如何維護向量數據庫以及如何將這些現有子任務拉入上下文方面,還有更多創意空間。富有創造性和新穎的Context Engineering才是真正的技術護城河。

狀態與歷史上下文管理

在復雜的智能體系統中,狀態和歷史上下文管理是一個重要組成部分。系統可能需要修訂全部或部分查詢、子任務,甚至是從網絡搜索API獲取的數據。這意味著系統將需要多次嘗試解決問題,并且需要訪問先前的狀態以及系統可能的所有歷史上下文。

對于實際應用而言,這意味著智能體需要訪問子任務的狀態、修訂情況、工作流中每個智能體過去的結果,以及幫助進行修訂階段所需的任何其他上下文。對于這種類型的上下文,傳遞什么取決于正在優化的目標。這里需要做出大量的決策。Context Engineering并不總是直接了當的,這個組件需要經過多次迭代才能達到最佳效果。

最后我們看一個Deep Research的智能體例子,下圖展示了如何從簡單指令擴展到包含時間context、輸出格式、字段定義的完整系統。Context engineer需要系統思維,精確定義每個組件,動態管理變化因素,持續優化效果。這已成為AI開發的關鍵技能。

圖片來源:https://x.com/ProgramerJohann/status/1942241296351105528/photo/1

高級Context Engineering技術

在Context Engineering中還有許多高級技術有待探索,包括上下文壓縮、上下文管理技術、上下文安全和有效性評估等。這些技術主要用于衡量上下文隨時間的有效性。上下文可能會被稀釋或變得低效,即充斥著過時和不相關的信息,這需要專門的評估工作流來捕獲這些問題。

上下文壓縮技術能夠在保持關鍵信息的同時減少上下文長度,這對于處理長文檔或大量歷史記錄特別重要。上下文管理技術則涉及如何動態地添加、刪除和更新上下文中的信息,以確保系統始終擁有最相關和最新的信息。

上下文安全是另一個重要方面,它涉及如何防止惡意或錯誤的上下文信息影響系統的行為。這包括對輸入的驗證、對上下文來源的審核以及對輸出的監控等。

Context Engineering的未來發展

Context Engineering將繼續演變為AI開發者和工程師的一項重要技能集合。除了手動進行Context Engineering,還有機會構建能夠自動化處理有效上下文工程的方法。目前已經有一些工具嘗試做到這一點,但這個領域還需要更多的進展。

自動化Context Engineering可能包括智能的上下文選擇、動態的上下文優化、基于性能反饋的上下文調整等。這些技術的發展將使Context Engineering更加高效和可擴展,同時降低開發者的工作負擔。

隨著AI模型能力的不斷增強和應用場景的日益復雜,Context Engineering的重要性只會越來越突出。它不僅是一個技術問題,也是一個設計問題,需要開發者具備深入的領域知識和豐富的實踐經驗。

結語

Context Engineering代表了從簡單的提示工程向全面的上下文管理的演進。它不僅包含了傳統Prompt Engineering的所有技巧,還擴展到了整個AI系統的環境構建和優化。通過系統性的上下文設計、結構化的輸入輸出管理、工具集成、記憶管理和狀態維護,Context Engineering為構建高效、可靠的AI應用提供了強大的技術支撐。

對于AI開發者而言,掌握Context Engineering技能已經變得至關重要。它不僅能夠顯著提升AI系統的性能和可靠性,還能夠為復雜的AI應用場景提供更好的解決方案。隨著AI技術的不斷發展,Context Engineering必將成為AI開發領域的核心競爭力之一。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88794.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88794.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88794.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jenkins部署vue前端項目

文章目錄前言一、安裝nginx二、jenkins構建項目總結前言 前面已經使用jenkins部署了后端springboot項目&#xff0c;現在開始學習jenkins部署前端Vue項目。 一、安裝nginx 訪問nginx官網&#xff0c;https://nginx.org/en/download.html下載tar包 上傳到服務器目錄中 然后到…

設計總監年中復盤:用Adobe XD內容識別布局,告別“手動調距”

時至年中&#xff0c;這不僅是檢視上半年項目成果的節點&#xff0c;更是優化團隊工作流、為下半年挑戰儲備動能的關鍵時期。在海外設計界工作的十余年間&#xff0c;我發現&#xff0c;一個高效的設計團隊與一個疲于奔命的團隊之間&#xff0c;最大的差別往往就在于是否建立了…

Unity 在Rider中通過Lingma插件使用MCP

環境&#xff1a; Unity 2022.3.12f1 JetBrains Rider 2025.1.4 Lingma 2.5.14 Python 3.13.4 下載包 首先在unity package manager 加入unity-mcp包 https://github.com/justinpbarnett/unity-mcp.git 然后下載uv包&#xff08;要先先下載python&#xff09;,網上很多…

pycharm+SSH 深度學習項目 遠程后臺運行命令

pycharmSSH 深度學習項目 遠程后臺運行命令碎碎念&#xff0c;都是實驗室里那說關機就關機&#xff0c;說重啟就重啟的臺式機逼得。。學吧記錄 運行&#xff1a;nohup /root/miniconda3/bin/python -u "run.py" > /root/log/nohup.log 2>&1 &實時查看日…

【Linux | 網絡】應用層(HTTP)

目錄一、認識URL二、urlencode和urldecode三、HTTP協議格式&#xff08;使用Fiddler抓包&#xff09;3.1 安裝并使用Fiddler抓包3.2 HTTP協議格式3.2.1 HTTP請求3.2.1.1 資源URL路徑3.2.1.2 請求方法&#xff08;Method&#xff09;3.2.1.3 Location頭字段&#xff08;重定向相…

編程實踐:單例模式(懶漢模式+餓漢模式)

說明:本專欄文章有兩種解鎖方案 1:付費訂閱,暢享所有文章 2:免費獲取,點擊下方鏈接,關注,自動獲取免費鏈接 https://free-img.400040.xyz/4/2025/04/29/6810a50b7ac8b.jpg 主題:C++ 單例模式 什么是單例模式

破局電機制造四大痛點:MES與AI視覺的協同智造實踐

萬界星空科技電機行業MES系統解決方案是針對電機制造過程中多工序協同難、質量追溯復雜、設備管理要求高等痛點設計的數字化管理系統。一、電機行業的核心痛點1. 多工序協同困難 電機制造涉及繞線、裝配、測試等多道工序&#xff0c;工藝銜接復雜&#xff0c;傳統人工調度效率…

HTML 初體驗

HTML&#xff08;超文本標記語言&#xff09;全稱&#xff1a;HyperText Markup Language。超文本是什么&#xff1f;答&#xff1a;超文本就是網頁中的鏈接。標記是什么&#xff1f;答&#xff1a;標記也叫標簽&#xff0c;是帶尖括號的文本。需求1&#xff1a;將“我愛中國”…

網絡層TCP機制

1.確認應答機制由于發送信息的距離可能較遠,可能出現后發的信息先到的情況,怎么辦?TCP將每個字節的數據都進行了編號,即為序列號如何分辨一個數據包是普通數據還是應答數據呢2.超時重傳由于丟包是一個隨機的事件,因此在上述tcp傳輸的過程中,丟包就存在兩種情況但是在發送方的角…

【一起來學AI大模型】微調技術:LoRA(Low-Rank Adaptation) 的實戰應用

LoRA&#xff08;Low-Rank Adaptation&#xff09; 的實戰應用&#xff0c;使用 Hugging Face 的 peft (Parameter-Efficient Fine-Tuning) 庫對大型語言模型進行高效微調。LoRA 因其顯著降低資源消耗&#xff08;顯存和計算&#xff09;同時保持接近全量微調性能的特點&#x…

RedisJSON 內存占用剖析與調優

一、基礎內存模型指針包裝 所有 JSON 值&#xff08;標量、對象、數組、字符串等&#xff09;至少占用 8 字節&#xff0c;用于存儲一個帶類型標記的指針。標量與空容器 null、true、false、小整數&#xff08;靜態緩存&#xff09;、空字符串、空數組、空對象 均不分配額外內存…

【LeetCode 熱題 100】23. 合并 K 個升序鏈表——(解法一)逐一合并

Problem: 23. 合并 K 個升序鏈表 題目&#xff1a;給你一個鏈表數組&#xff0c;每個鏈表都已經按升序排列。 請你將所有鏈表合并到一個升序鏈表中&#xff0c;返回合并后的鏈表。 文章目錄整體思路完整代碼時空復雜度時間復雜度&#xff1a;O(K * N)空間復雜度&#xff1a;O(1…

垃圾收集器-Serial Old

第一章 引言1.1 JVM 中垃圾收集的簡要概述JVM&#xff08;Java Virtual Machine&#xff09;作為 Java 程序的運行時環境&#xff0c;負責將字節碼加載至內存并執行&#xff0c;同時也承擔著內存管理的重任。垃圾收集&#xff08;Garbage Collection&#xff0c;簡稱 GC&#x…

Docker(02) Docker-Compose、Dockerfile鏡像構建、Portainer

Docker-Compose 1、Docker Desktop 在Windows上安裝Docker服務&#xff0c;可以使用Docker Desktop這個應用程序。 下載并安裝這樣的一個安裝包 安裝好后&#xff1a;執行命令 docker --version 從Docker Hub提取hello-world映像并運行一個容器&#xff1a; docker run h…

大數據時代UI前端的用戶體驗設計新思維:以數據為驅動的情感化設計

hello寶子們...我們是艾斯視覺擅長ui設計和前端數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;從 “經驗設計” 到 “數據共情” 的體驗革命傳統 UI 設計常陷入 “設計師主觀經…

TypeScript 學習手冊

1.TypeScript 概念 TypeScript&#xff08;簡稱 TS&#xff0c;靜態類型&#xff09;是微軟公司開發的一種基于 JavaScript &#xff08;簡稱 JS&#xff0c;動態類型&#xff09;語言的編程語言。TypeScript 可以看成是 JavaScript 的超集&#xff08;superset&#xff09;&a…

掌握現代CSS:變量、變形函數與動態計算

CSS近年來發展迅速&#xff0c;引入了許多強大的功能&#xff0c;如變量、高級變形函數和動態計算能力。本文將深入探討如何在CSS中設置并使用變量&#xff0c;以及如何有效利用translate3d、translateY和translateX等變形方法。我們還將解析var()和calc()函數的關鍵作用。一、…

貝爾量子實驗設想漏洞

1 0 1 0 1 1 0 1 0 1 1 1 0 0 1 0 帶墨鏡如果先上下交換再左右交換&#xff0c;很可能不一樣的概率是2%&#xff0c;但是因為交換誕生了一個與之前序列相同的所以不一樣概率變成1%&#xff0c;我們在測的時候不能這么測啊&#xff0c;你得看序列完…

在 Android 庫模塊(AAR)中,BuildConfig 默認不會自動生成 VERSION_CODE 和 VERSION_NAME 字段

為什么AAR庫模塊的 BuildConfig 沒有 versionCode 和 versionName&#xff1f; aar庫模塊的 BuildConfig 默認不包含版本信息 應用模塊&#xff08;com.android.application&#xff09;會自動生成 versionCode 和 versionName 到 BuildConfig。但庫模塊&#xff08;com.androi…

強化學習 (11)隨機近似

計算均值的新方法有兩種方法。第一種方法很直接&#xff0c;即收集所有樣本后計算平均值&#xff1b;但這種方法的缺點是&#xff0c;若樣本是在一段時間內逐個收集的&#xff0c;我們必須等到所有樣本都收集完畢。第二種方法可避免此缺點&#xff0c;因為它以增量迭代的方式計…