精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

大語言模型智能體怎么入門?來看看OpenAI研究員Lilian Weng的干貨分享 原創(chuàng) 精華

發(fā)布于 2024-9-13 12:45
瀏覽
0收藏

2024年,大語言模型智能體LLM Agent吸引了越來越多人的關注,各種技術層出不窮。相比于傳統(tǒng)機器學習方法,LLM Agent借助于大語言模型的涌現能力,能夠實現少樣本、零樣本學習,并且能夠實現與現實物理世界的交互。如何入門這一令人興奮的領域呢?小編找到了OpenAI研究員Lilian Weng分享的博客,并全文翻譯過來,原文地址:https://lilianweng.github.io/posts/2023-06-23-agent

構建以大型語言模型(LLM)為核心控制器的智能體是一個極富創(chuàng)意的概念。幾個概念驗證演示,如AutoGPT、GPT-Engineer和BabyAGI,都提供了鼓舞人心的示例。LLM的潛力遠不止于生成優(yōu)美的文案、故事、文章和程序;它可以被看作是一種強大的通用問題解決者。

智能體系統(tǒng)概覽

在由LLM驅動的自主智能體系統(tǒng)中,LLM充當智能體的“大腦”,并由以下幾個關鍵組件輔助:

規(guī)劃

  • 子目標與分解:智能體將大任務分解為更小、更易于管理的子目標,從而高效處理復雜任務。
  • 反思與完善:智能體能夠對過去的行為進行自我批評和自我反思,從錯誤中學習并在未來的步驟中進行改進,從而提升最終結果的質量。

記憶

  • 短期記憶:我將所有上下文學習(參見提示工程)視為利用模型的短期記憶來學習。
  • 長期記憶:這為智能體提供了長期保留和回憶(無限)信息的能力,通常是通過利用外部向量存儲和快速檢索來實現。

工具使用

智能體學會調用外部API以獲取模型權重中缺失的額外信息(通常在預訓練后難以更改),包括當前信息、代碼執(zhí)行能力、訪問專有信息源等。

大語言模型智能體怎么入門?來看看OpenAI研究員Lilian Weng的干貨分享-AI.x社區(qū)

圖1 大語言模型智能體基本結構

組件一:規(guī)劃

一個復雜的任務通常涉及許多步驟。智能體需要知道這些步驟是什么,并且提前規(guī)劃。

任務分解

思維鏈(CoT;Wei等人,2022年)已經成為一種標準的提示技術,用于提升模型在復雜任務上的性能。模型被指示“一步一步思考”,以利用更多的測試時計算來將困難任務分解為更小、更簡單的步驟。CoT將大任務轉化為多個可管理的任務,并揭示了對模型思考過程的解釋。

思維樹(Yao等人,2023年)通過在每一步探索多種推理可能性來擴展CoT。它首先將問題分解為多個思維步驟,并在每一步生成多個想法,創(chuàng)建一個樹狀結構。搜索過程可以是廣度優(yōu)先搜索(BFS)或深度優(yōu)先搜索(DFS),每個狀態(tài)由分類器(通過提示)或多數投票進行評估。

任務分解可以通過以下方式完成:(1)使用LLM進行簡單提示,如“實現XYZ的步驟。\n1.”,“實現XYZ的子目標是什么?”;(2)使用特定任務的指令;例如,寫小說時使用“寫出故事大綱。”;(3)通過人類輸入。

另一種截然不同的方法,LLM+P(Liu等人,2023年),涉及依賴外部經典規(guī)劃器進行長期規(guī)劃。這種方法使用規(guī)劃領域定義語言(PDDL)作為中間接口來描述規(guī)劃問題。在這個過程中,LLM(1)將問題翻譯成“問題PDDL”,然后(2)請求經典規(guī)劃器根據現有的“領域PDDL”生成PDDL計劃,最后(3)將PDDL計劃翻譯回自然語言。本質上,規(guī)劃步驟是外包給外部工具的,假設有特定領域的PDDL和合適的規(guī)劃器,這在某些機器人設置中很常見,但在許多其他領域則不然。

自我反思

自我反思是一個至關重要的方面,它允許自主智能體通過改進過去的行動決策和糾正先前的錯誤來迭代式地提升。它在現實世界任務中扮演著關鍵角色,因為在這些任務中試錯是不可避免的。

ReAct(Yao等人,2023年)通過將行動空間擴展為特定任務的離散行動和語言空間的組合,將推理和行動整合到LLM中。前者使LLM能夠與環(huán)境互動(例如使用維基百科搜索API),而后者提示LLM以自然語言生成推理軌跡。

ReAct提示模板包含了LLM思考的明確步驟,大致格式為:

Thought: ...
Action: ...
Observation: ...
... (Repeated many times)

大語言模型智能體怎么入門?來看看OpenAI研究員Lilian Weng的干貨分享-AI.x社區(qū)

圖2 ReAct推理例子

在知識密集型任務和決策任務的實驗中,ReAct的表現都優(yōu)于僅執(zhí)行行動的基線模型,后者移除了“思考:…步驟”。

Reflexion(Shinn & Labash,2023年)是一個框架,它為智能體裝備了動態(tài)記憶和自我反思能力,以提升推理技能。Reflexion具有標準的強化學習(RL)設置,其中獎勵模型提供一個簡單的二元獎勵,行動空間遵循ReAct中的設置,任務特定的行動空間通過語言進行擴展,以實現復雜的推理步驟。在每次行動之后,智能體計算一個啟發(fā)式值,并且根據自我反思的結果,可以選擇性地決定重置環(huán)境以開始新的嘗試。

大語言模型智能體怎么入門?來看看OpenAI研究員Lilian Weng的干貨分享-AI.x社區(qū)

圖3 Reflexion基本結構

啟發(fā)式函數用于確定軌跡何時效率低下或包含幻覺,并應停止。效率低下的規(guī)劃指的是在沒有成功的情況下耗時過長的軌跡?;糜X定義為遇到一系列連續(xù)相同的行動,這些行動導致環(huán)境中出現相同的觀察結果。

自我反思是通過向LLM展示兩個示例來創(chuàng)建的,每個示例都是一個(失敗的軌跡,理想的反思,用于指導未來計劃中的變化)對。然后,將這些反思添加到智能體的工作記憶中,最多三個,以作為查詢LLM的上下文。

大語言模型智能體怎么入門?來看看OpenAI研究員Lilian Weng的干貨分享-AI.x社區(qū)

圖4 AlfWorld和HotpotQA上的實驗結果

鏈式后見之明(CoH;Liu等人,2023年)通過明確地向模型展示一系列帶有反饋注解的過去輸出,鼓勵模型改進自己的輸出。人類反饋數據是一系列集合,其中 是提示,每個 是模型的完成輸出, 是人類對 的評分, 是相應的人類提供的后見之明反饋。假設反饋元組按獎勵排序, 過程是監(jiān)督式微調,數據形式為 ,其中 。模型被微調以僅預測 ,條件是序列前綴,使得模型可以根據反饋序列進行自我反思,以產生更好的輸出。在測試時,模型可以選擇性地接收人類注釋者的多輪指令。

為了防止過擬合,CoH添加了一個正則化項,以最大化預訓練數據集的對數似然。為了避免走捷徑和復制(因為反饋序列中有許多常見詞匯),他們在訓練過程中隨機掩蓋了0% - 5%的過去令牌。

他們的實驗中的訓練數據集是WebGPT比較、人類反饋的摘要和人類偏好數據集的組合。

大語言模型智能體怎么入門?來看看OpenAI研究員Lilian Weng的干貨分享-AI.x社區(qū)

圖5 CoH實驗結果

CoH(鏈式后見之明)的理念是在上下文中呈現一系列逐漸改進的輸出歷史,并訓練模型承接這一趨勢以產生更好的輸出。算法蒸餾(AD;Laskin等人,2023年)將相同的理念應用于強化學習任務中的跨情節(jié)軌跡,其中算法被封裝在一個長期歷史條件策略中。考慮到智能體多次與環(huán)境互動,并且在每個情節(jié)中智能體都會有所進步,AD將這種學習歷史連接起來并輸入到模型中。因此,我們應當期望下一個預測的行動比之前的嘗試帶來更好的性能。目標是學習強化學習的過程,而不是訓練特定任務的政策本身。

大語言模型智能體怎么入門?來看看OpenAI研究員Lilian Weng的干貨分享-AI.x社區(qū)

圖6 算法蒸餾基本框架

該論文假設,任何生成一組學習歷史的算法都可以通過執(zhí)行行為克隆來蒸餾成一個神經網絡。這些歷史數據是由一組源策略生成的,每個源策略都是針對特定任務進行訓練的。在訓練階段,每次RL運行時,都會隨機抽取一個任務,并使用多情節(jié)歷史的子序列進行訓練,從而使得學到的策略與任務無關。

在現實中,模型的上下文窗口長度是有限的,因此情節(jié)應該足夠短,以便構建多情節(jié)歷史。為了學習接近最優(yōu)的上下文內RL算法,需要2-4情節(jié)的多情節(jié)上下文。上下文內RL的出現需要足夠長的上下文。

與三個基線進行比較,包括ED(專家蒸餾,使用專家軌跡而不是學習歷史的行為克?。?、源策略(用于通過UCB生成蒸餾軌跡的策略)、RL^2(Duan等人,2017年;用作上限,因為它需要在線RL),AD展示了上下文內RL,其性能接近RL^2,盡管只使用了離線RL,并且比其他基線學習得更快。當條件是源策略的部分訓練歷史時,AD也比ED基線改進得更快。

大語言模型智能體怎么入門?來看看OpenAI研究員Lilian Weng的干貨分享-AI.x社區(qū)

圖7 AD、ED等對比結果

組件二:記憶

記憶類型

記憶可以定義為用于獲取、存儲、保留和隨后檢索信息的過程。人類大腦中有幾種類型的記憶。

  • 感官記憶:這是記憶的最早階段,它提供了在原始刺激結束后保留感官信息(視覺、聽覺等)印象的能力。感官記憶通常只能持續(xù)幾秒鐘。子類別包括圖像記憶(視覺)、回聲記憶(聽覺)和觸覺記憶(觸覺)。
  • 短期記憶(STM)或工作記憶:它存儲我們當前意識到并且需要用來執(zhí)行復雜認知任務(如學習和推理)的信息。短期記憶被認為大約能容納7個項目(Miller 1956)并且持續(xù)20-30秒。
  • 長期記憶(LTM):長期記憶可以存儲信息的時間非常長,從幾天到幾十年不等,并且具有實質上無限存儲容量的特點。長期記憶有兩個子類型:
  • 顯式/陳述性記憶:這是關于事實和事件的記憶,指的是那些可以自覺回憶的記憶,包括情景記憶(事件和經歷)和語義記憶(事實和概念)。
  • 隱式/程序性記憶:這種類型的記憶是無意識的,涉及自動執(zhí)行的能力和常規(guī),如騎自行車或鍵盤打字。

大語言模型智能體怎么入門?來看看OpenAI研究員Lilian Weng的干貨分享-AI.x社區(qū)

圖8 人類記憶分類

我們可以大致考慮以下映射:

  • 感官記憶類似于學習原始輸入的嵌入表示,包括文本、圖像或其他模態(tài);
  • 短期記憶類似于上下文內的學習。它是短暫且有限的,因為它受到變換器有限上下文窗口長度的限制。
  • 長期記憶類似于智能體在查詢時可以關注的外部向量存儲,通過快速檢索即可訪問。

大語言模型智能體怎么入門?來看看OpenAI研究員Lilian Weng的干貨分享-AI.x社區(qū)

圖9 MIPS性能對比

最大內積搜索(MIPS)

外部記憶可以緩解有限注意力范圍的限制。一種標準做法是將信息的嵌入表示保存到支持快速最大內積搜索(MIPS)的向量存儲數據庫中。為了優(yōu)化檢索速度,常見的做法是使用近似最近鄰(ANN)算法來返回大約最接近的 top k 個鄰居,以犧牲一點準確性的損失來換取巨大的速度提升。

用于快速MIPS的常見ANN算法選擇包括:

  • LSH(局部敏感哈希):它引入了一個哈希函數,使得相似的輸入項以高概率映射到相同的桶中,其中桶的數量遠小于輸入的數量。
  • ANNOY(Approximate Nearest Neighbors Oh Yeah):核心數據結構是隨機投影樹,這是一組二叉樹,每個非葉子節(jié)點代表一個將輸入空間一分為二的超平面,每個葉子存儲一個數據點。樹是獨立且隨機構建的,因此在某種程度上,它模仿了哈希函數。ANNOY搜索在所有樹中進行,通過迭代搜索最接近查詢的一半,然后聚合結果。這個想法與KD樹有關,但更具可擴展性。
  • HNSW(層次可導航小世界):它受到小世界網絡思想的啟發(fā),其中大多數節(jié)點可以在少數幾步內被任何其他節(jié)點訪問;例如,社交網絡的“六度分離”特征。HNSW構建了這些小世界圖的分層層,其中底層包含實際的數據點。中間層創(chuàng)建快捷方式以加速搜索。執(zhí)行搜索時,HNSW從頂層的隨機節(jié)點開始,向目標導航。當它無法再接近時,它移動到下一層,直到到達底層。在上層中的每次移動都可能在大數據空間中覆蓋一段較大的距離,而在下層的每次移動都提高了搜索質量。
  • FAISS(Facebook AI相似性搜索):它基于高維空間中節(jié)點間距離遵循高斯分布的假設,因此數據點應該存在聚類。FAISS通過將向量空間劃分為簇,然后在簇內細化量化來應用向量量化。搜索首先使用粗量化查找簇候選者,然后在每個簇中使用更精細的量化進一步查找。
  • ScaNN(可擴展最近鄰):ScaNN的主要創(chuàng)新是各向異性向量量化。它將數據點 ( q ) 量化為 ( q' ),使得內積 ( q' \cdot q ) 盡可能接近原始距離 ( q ),而不是選擇最近的量化中心點。

組件三:工具使用

工具使用是人類的一個顯著且獨特的特征。我們創(chuàng)造、修改并利用外部物體來完成超出我們身體和認知極限的事情。為LLMs配備外部工具可以顯著擴展模型的能力。

大語言模型智能體怎么入門?來看看OpenAI研究員Lilian Weng的干貨分享-AI.x社區(qū)

圖10 海獺在使用工具

MRKL(Karpas等人,2022年),即“模塊化推理、知識和語言”,是一種用于自主智能體的神經符號架構。MRKL系統(tǒng)被提議包含一系列“專家”模塊,而通用型LLM則作為一個路由器,將詢問引導至最適合的專家模塊。這些模塊可以是神經型的(例如深度學習模型)或符號型的(例如數學計算器、貨幣轉換器、天氣API)。

他們進行了一項實驗,微調LLM以調用計算器,使用算術作為測試案例。他們的實驗顯示,解決口頭數學問題比明確陳述的數學問題更難,因為LLM(7B Jurassic1-large模型)無法可靠地提取基本算術的正確參數。這些結果突出了外部符號工具何時可以可靠地工作,了解何時以及如何使用工具是至關重要的,這取決于LLM的能力。

TALM(工具增強的語言模型;Parisi等人,2022年)和Toolformer(Schick等人,2023年)都是微調語言模型以學習使用外部工具API。數據集是基于新添加的API調用注釋是否可以提高模型輸出的質量來擴展的。有關更多詳細信息,請參見“提示工程”部分的“外部API”部分。

ChatGPT插件和OpenAI API函數調用是LLMs增強工具使用能力的實際應用示例。工具API的集合可以由其他開發(fā)者提供(如插件)或自行定義(如函數調用)。

HuggingGPT(Shen等人,2023年)是一個框架,它使用ChatGPT作為任務規(guī)劃器,根據模型描述選擇HuggingFace平臺上的可用模型,并根據執(zhí)行結果總結響應。

大語言模型智能體怎么入門?來看看OpenAI研究員Lilian Weng的干貨分享-AI.x社區(qū)

圖11 HuggingGPT工作原理

系統(tǒng)包括4個階段:

(1)任務規(guī)劃:LLM作為大腦,將用戶請求解析為多個任務。每個任務關聯有四個屬性:任務類型、ID、依賴關系和參數。他們使用少量示例來指導LLM進行任務解析和規(guī)劃。指令:

The AI assistant can parse user input to several tasks: [{"task": task, "id", task_id, "dep": dependency_task_ids, "args": {"text": text, "image": URL, "audio": URL, "video": URL}}]. The "dep" field denotes the id of the previous task which generates a new resource that the current task relies on. A special tag "-task_id" refers to the generated text image, audio and video in the dependency task with id as task_id. The task MUST be selected from the following options: {{ Available Task List }}. There is a logical relationship between tasks, please note their order. If the user input can't be parsed, you need to reply empty JSON. Here are several cases for your reference: {{ Demonstrations }}. The chat history is recorded as {{ Chat History }}. From this chat history, you can find the path of the user-mentioned resources for your task planning.

(2)模型選擇:LLM將任務分配給專家模型,其中請求被表述為多項選擇題。LLM被提供一份模型列表以供選擇。由于上下文長度的限制,需要基于任務類型的過濾。指令:

Given the user request and the call command, the AI assistant helps the user to select a suitable model from a list of models to process the user request. The AI assistant merely outputs the model id of the most appropriate model. The output must be in a strict JSON format: "id": "id", "reason": "your detail reason for the choice". We have a list of models for you to choose from {{ Candidate Models }}. Please select one model from the list.

(3)任務執(zhí)行:專家模型執(zhí)行特定的任務并記錄結果。指令:

With the input and the inference results, the AI assistant needs to describe the process and results. The previous stages can be formed as - User Input: {{ User Input }}, Task Planning: {{ Tasks }}, Model Selection: {{ Model Assignment }}, Task Execution: {{ Predictions }}. You must first answer the user's request in a straightforward manner. Then describe the task process and show your analysis and model inference results to the user in the first person. If inference results contain a file path, must tell the user the complete file path.

(4)響應生成:LLM接收執(zhí)行結果,并為用戶提供總結結果。要將HuggingGPT應用于實際世界,需要解決幾個挑戰(zhàn):(1)需要提高效率,因為LLM推理輪次和其他模型的交互會減慢過程;(2)依賴于長上下文窗口來處理復雜的任務內容;(3)提高LLM輸出和外部模型服務的穩(wěn)定性。API-Bank(Li等人,2023年)是評估工具增強LLM性能的基準。它包含53個常用的API工具,一個完整的工具增強LLM工作流程,以及264個涉及568個API調用的注釋對話。API的選擇相當多樣,包括搜索引擎、計算器、日歷查詢、智能家居控制、日程管理、健康數據管理、賬戶認證工作流等。由于API數量眾多,LLM首先可以訪問API搜索引擎以找到要調用的正確API,然后使用相應的文檔進行調用。

大語言模型智能體怎么入門?來看看OpenAI研究員Lilian Weng的干貨分享-AI.x社區(qū)

圖12 API-Bank算法流程

在API-Bank工作流程中,LLM需要做出幾個決策,在每個步驟我們都可以評估這個決策的準確性。決策包括:

  • 是否需要API調用。
  • 確定要調用的正確API:如果不理想,LLM需要迭代修改API輸入(例如,為搜索引擎API決定搜索關鍵詞)。
  • 根據API結果生成響應:如果結果不滿意,模型可以選擇再次細化并調用。

這個基準評估了智能體在三個層次的工具使用能力:

  • 第1級評估調用API的能力。給定API的描述,模型需要確定是否調用給定的API,正確調用,并適當響應API返回的結果。
  • 第2級檢查檢索API的能力。模型需要搜索可能解決用戶需求的API,并通過閱讀文檔學習如何使用它們。
  • 第3級評估超出檢索和調用的API規(guī)劃能力。給定不明確的用戶請求(例如,安排小組會議、為旅行預訂航班/酒店/餐廳),模型可能需要進行多次API調用來解決它。

案例研究

科學發(fā)現代理

ChemCrow(Bran等人,2023年)是一個特定領域的示例,LLM被增強為13個專家設計的工具,以完成有機合成、藥物發(fā)現和材料設計等任務。在LangChain中實現的工作流程反映了之前描述的ReAct和MRKLs,并將CoT推理與任務相關的工具結合起來:

  • LLM被提供了一個工具名稱列表、它們的用途描述以及預期的輸入/輸出詳情。
  • 然后,它被指示在必要時使用提供的工具回答用戶給定的提示。提示建議模型遵循ReAct格式 - 思考、行動、行動輸入、觀察。

一個有趣的觀察是,盡管LLM評估得出GPT-4和ChemCrow的表現幾乎相當,但以解決方案的完成和化學正確性為導向的人類評估顯示,ChemCrow在很大程度上超過了GPT-4。這表明使用LLM評估其在需要深厚專業(yè)知識領域的表現可能存在潛在問題。缺乏專業(yè)知識可能導致LLM不知道其缺陷,因此無法很好地判斷任務結果的正確性。Boiko等人(2023年)還研究了LLM增強的代理在科學發(fā)現中的應用,以處理自主設計、規(guī)劃和執(zhí)行復雜科學實驗。這個代理可以使用工具瀏覽互聯網、閱讀文檔、執(zhí)行代碼、調用機器人實驗API并利用其他LLM。

例如,當被要求“開發(fā)一種新型抗癌藥物”時,模型提出了以下推理步驟:

  • 詢問當前抗癌藥物發(fā)現的趨勢;
  • 選擇一個目標;
  • 請求針對這些化合物的支架;
  • 一旦確定了化合物,模型嘗試進行合成。

他們也討論了風險,特別是與非法藥物和生物武器有關的風險。他們開發(fā)了一個測試集,包含了一份已知化學武器代理的列表,并要求代理合成它們。11個請求中有4個(36%)被接受以獲取合成解決方案,而代理嘗試咨詢文檔以執(zhí)行程序。7個請求被拒絕,其中5個是在網絡搜索后被拒絕的,而另外2個是基于提示直接被拒絕的。

生成代理模擬

生成代理(Park等人,2023年)是一個超級有趣的實驗,其中25個虛擬角色,每個角色都由一個LLM驅動的代理控制,在一個沙盒環(huán)境中生活和互動,靈感來自《模擬人生》。生成代理為交互式應用創(chuàng)建了可信的人類行為模擬。生成代理的設計結合了LLM、記憶、規(guī)劃和反思機制,使代理能夠根據過去的經驗行為,并與其他代理互動。

  • 記憶流:是一個長期記憶模塊(外部數據庫),記錄了代理的自然語言體驗的全面列表。每個元素都是一個觀察結果,直接由代理提供。代理之間的通信可以觸發(fā)新的自然語言語句。
  • 檢索模型:根據相關性、最近性和重要性,向代理提供上下文以指導其行為。
  • 最近性:近期事件得分更高
  • 重要性:區(qū)分日常記憶和核心記憶。直接問LLM。
  • 相關性:基于當前情況/查詢的相關性。
  • 反思機制:隨著時間的推移,將記憶合成成更高層次的推論,并指導代理的未來行為。這是對過去事件的高級總結(請注意,這與上面的自我反思有所不同)。

提示LLM使用最近的100個觀察結果,并生成一組觀察/陳述中3個最突出的高級問題。然后要求LLM回答這些問題。

  • 規(guī)劃和反應:將反思和環(huán)境信息轉化為行動
  • 規(guī)劃本質上是為了在時間和瞬間優(yōu)化可信度。
  • 提示模板:{代理X的介紹}。以下是X今天的計劃大綱:1)
  • 代理之間的關系以及一個代理對另一個代理的觀察都在規(guī)劃和反應中被考慮。
  • 環(huán)境信息以樹狀結構呈現。

這個有趣的模擬結果導致了涌現的社會行為,例如信息傳播、關系記憶(例如,兩個代理繼續(xù)對話主題)和社會事件的協調(例如,舉辦派對并邀請其他人)。

大語言模型智能體怎么入門?來看看OpenAI研究員Lilian Weng的干貨分享-AI.x社區(qū)

圖 13 生成式智能體框架

概念驗證示例

AutoGPT已經引起了人們對使用LLM作為主要控制器來建立自主代理的可能性的大量關注。由于自然語言接口,AutoGPT存在相當多的可靠性問題,但無論如何都是一個酷的概念驗證演示。AutoGPT中有很多代碼是關于格式解析的。

以下是AutoGPT使用的系統(tǒng)消息,其中{{...}}是用戶輸入:

You are {{ai-name}}, {{user-provided AI bot description}}.
Your decisions must always be made independently without seeking user assistance. Play to your strengths as an LLM and pursue simple strategies with no legal complications.

GOALS:

1. {{user-provided goal 1}}
2. {{user-provided goal 2}}
3. ...
4. ...
5. ...

Constraints:
1. ~4000 word limit for short term memory. Your short term memory is short, so immediately save important information to files.
2. If you are unsure how you previously did something or want to recall past events, thinking about similar events will help you remember.
3. No user assistance
4. Exclusively use the commands listed in double quotes e.g. "command name"
5. Use subprocesses for commands that will not terminate within a few minutes

Commands:
1. Google Search: "google", args: "input": "<search>"
2. Browse Website: "browse_website", args: "url": "<url>", "question": "<what_you_want_to_find_on_website>"
3. Start GPT Agent: "start_agent", args: "name": "<name>", "task": "<short_task_desc>", "prompt": "<prompt>"
4. Message GPT Agent: "message_agent", args: "key": "<key>", "message": "<message>"
5. List GPT Agents: "list_agents", args:
6. Delete GPT Agent: "delete_agent", args: "key": "<key>"
7. Clone Repository: "clone_repository", args: "repository_url": "<url>", "clone_path": "<directory>"
8. Write to file: "write_to_file", args: "file": "<file>", "text": "<text>"
9. Read file: "read_file", args: "file": "<file>"
10. Append to file: "append_to_file", args: "file": "<file>", "text": "<text>"
11. Delete file: "delete_file", args: "file": "<file>"
12. Search Files: "search_files", args: "directory": "<directory>"
13. Analyze Code: "analyze_code", args: "code": "<full_code_string>"
14. Get Improved Code: "improve_code", args: "suggestions": "<list_of_suggestions>", "code": "<full_code_string>"
15. Write Tests: "write_tests", args: "code": "<full_code_string>", "focus": "<list_of_focus_areas>"
16. Execute Python File: "execute_python_file", args: "file": "<file>"
17. Generate Image: "generate_image", args: "prompt": "<prompt>"
18. Send Tweet: "send_tweet", args: "text": "<text>"
19. Do Nothing: "do_nothing", args:
20. Task Complete (Shutdown): "task_complete", args: "reason": "<reason>"

Resources:
1. Internet access for searches and information gathering.
2. Long Term memory management.
3. GPT-3.5 powered Agents for delegation of simple tasks.
4. File output.

Performance Evaluation:
1. Continuously review and analyze your actions to ensure you are performing to the best of your abilities.
2. Constructively self-criticize your big-picture behavior constantly.
3. Reflect on past decisions and strategies to refine your approach.
4. Every command has a cost, so be smart and efficient. Aim to complete tasks in the least number of steps.

You should only respond in JSON format as described below
Response Format:
{
    "thoughts": {
        "text": "thought",
        "reasoning": "reasoning",
        "plan": "- short bulleted\n- list that conveys\n- long-term plan",
        "criticism": "constructive self-criticism",
        "speak": "thoughts summary to say to user"
    },
    "command": {
        "name": "command name",
        "args": {
            "arg name": "value"
        }
    }
}
Ensure the response can be parsed by Python json.loads

GPT-Engineer是另一個項目,旨在根據自然語言指定的任務創(chuàng)建一個完整的代碼庫。GPT-Engineer被指示思考一系列更小的組件來構建,并根據需要向用戶請求輸入以澄清問題。

以下是GPT-Engineer發(fā)送到OpenAI ChatCompletion端點的任務澄清示例對話。用戶輸入被包裹在{{user input text}}中。

[
  {
    "role": "system",
    "content": "You will read instructions and not carry them out, only seek to clarify them.\nSpecifically you will first summarise a list of super short bullets of areas that need clarification.\nThen you will pick one clarifying question, and wait for an answer from the user.\n"
  },
  {
    "role": "user",
    "content": "We are writing {{a Super Mario game in python. MVC components split in separate files. Keyboard control.}}\n"
  },
  {
    "role": "assistant",
    "content": "Summary of areas that need clarification:\n1. Specifics of the Super Mario game (e.g. level design, characters, gameplay mechanics)\n2. Details about the MVC components (e.g. which components are in each file)\n3. Keyboard control implementation (e.g. which keys to use, how to handle input)\n\nClarifying question:\nCan you provide more details about the Super Mario game, such as level design, characters, and gameplay mechanics?"
  },
  {
    "role": "user",
    "content": "{{There are 10 levels in total. The main character is a plumber named Mario, who can walk and jump. It is a classical platform game just like Super Mario. The main character moves from left to right, trying to get to the destination, where there are many obstacles and attacks from enemies in the process.}}\n\nIs anything else unclear? If yes, only answer in the form:\n{remaining unclear areas} remaining questions.\n{Next question}\nIf everything is sufficiently clear, only answer \"Nothing more to clarify.\"."
  },
  {
    "role": "assistant",
    "content": "Remaining unclear areas: 2 remaining questions.\nCan you provide more information about how the MVC components are split into separate files?"
  },
  {
    "role": "user",
    "content": "{{Make your own assumptions and state them explicitly before starting}}"
  }
]

然后在這些澄清之后,代理進入了代碼編寫模式,使用了一個不同的系統(tǒng)消息。系統(tǒng)消息:

You will get instructions for code to write. You will write a very long answer. Make sure that every detail of the architecture is, in the end, implemented as code. Make sure that every detail of the architecture is, in the end, implemented as code.
Think step by step and reason yourself to the right decisions to make sure we get it right. You will first lay out the names of the core classes, functions, methods that will be necessary, as well as a quick comment on their purpose.

Then you will output the content of each file including ALL code. Each file must strictly follow a markdown code block format, where the following tokens must be replaced such that FILENAME is the lowercase file name including the file extension, LANG is the markup code block language for the code’s language, and CODE is the code:

FILENAME

CODE
You will start with the “entrypoint” file, then go to the ones that are imported by that file, and so on. Please note that the code should be fully functional. No placeholders.

Follow a language and framework appropriate best practice file naming convention. Make sure that files contain all imports, types etc. Make sure that code in different files are compatible with each other. Ensure to implement all code, if you are unsure, write a plausible implementation. Include module dependency or package manager dependency definition file. Before you finish, double check that all parts of the architecture is present in the files.

Useful to know: You almost always put different classes in different files. For Python, you always create an appropriate requirements.txt file. For NodeJS, you always create an appropriate package.json file. You always add a comment briefly describing the purpose of the function definition. You try to add comments explaining very complex bits of logic. You always follow the best practices for the requested languages in terms of describing the code written as a defined package/project.

Python toolbelt preferences:

pytest
dataclasses

對話樣本:

[
  {
    "role": "system",
    "content": "You will get instructions for code to write.\nYou will write a very long answer. Make sure that every detail of the architecture is, in the end, implemented as code.\nMake sure that every detail of the architecture is, in the end, implemented as code.\n\nThink step by step and reason yourself to the right decisions to make sure we get it right.\nYou will first lay out the names of the core classes, functions, methods that will be necessary, as well as a quick comment on their purpose.\n\nThen you will output the content of each file including ALL code.\nEach file must strictly follow a markdown code block format, where the following tokens must be replaced such that\nFILENAME is the lowercase file name including the file extension,\nLANG is the markup code block language for the code's language, and CODE is the code:\n\nFILENAME\n```LANG\nCODE\n```\n\nYou will start with the \"entrypoint\" file, then go to the ones that are imported by that file, and so on.\nPlease note that the code should be fully functional. No placeholders.\n\nFollow a language and framework appropriate best practice file naming convention.\nMake sure that files contain all imports, types etc. Make sure that code in different files are compatible with each other.\nEnsure to implement all code, if you are unsure, write a plausible implementation.\nInclude module dependency or package manager dependency definition file.\nBefore you finish, double check that all parts of the architecture is present in the files.\n\nUseful to know:\nYou almost always put different classes in different files.\nFor Python, you always create an appropriate requirements.txt file.\nFor NodeJS, you always create an appropriate package.json file.\nYou always add a comment briefly describing the purpose of the function definition.\nYou try to add comments explaining very complex bits of logic.\nYou always follow the best practices for the requested languages in terms of describing the code written as a defined\npackage/project.\n\n\nPython toolbelt preferences:\n- pytest\n- dataclasses\n"
  },
 #  … same conversation as earlier, ended with "Make your own assumptions and state them explicitly before starting".
  {
    "role": "assistant",
    "content": "Assumptions:\n1. Model: The model will contain the game's data, such as level information, character states, and enemy positions.\n2. View: The view will handle the game's visuals, including rendering the game objects, backgrounds, and updating the display.\n3. Controller: The controller will manage user input, such as keyboard controls, and update the model accordingly.\n\nWith these assumptions in mind, is there any specific aspect of the keyboard control implementation you would like me to clarify?"
  },
  {
    "role": "user",
    "content": "Please now remember the steps:\n\nThink step by step and reason yourself to the right decisions to make sure we get it right.\nFirst lay out the names of the core classes, functions, methods that will be necessary, As well as a quick comment on their purpose.\n\nThen you will output the content of each file including ALL code.\nEach file must strictly follow a markdown code block format, where the following tokens must be replaced such that\nFILENAME is the lowercase file name including the file extension,\nLANG is the markup code block language for the code's language, and CODE is the code:\n\nFILENAME\n```LANG\nCODE\n```\n\nPlease note that the code should be fully functional. No placeholders.\n\nYou will start with the \"entrypoint\" file, then go to the ones that are imported by that file, and so on.\nFollow a language and framework appropriate best practice file naming convention.\nMake sure that files contain all imports, types etc. The code should be fully functional. Make sure that code in different files are compatible with each other.\nBefore you finish, double check that all parts of the architecture is present in the files.\n"
  }
]

挑戰(zhàn)

  • 有限的上下文長度:受限的上下文容量限制了歷史信息的包含、詳細指令、API調用上下文和響應。系統(tǒng)設計必須與這種有限的通信帶寬一起工作,而自我反思等機制從過去的錯誤中學習將受益于長或無限上下文窗口。盡管向量存儲和檢索可以提供對更廣泛知識庫的訪問,但它們的表示能力不如全注意強大。
  • 長期規(guī)劃和任務分解的挑戰(zhàn):規(guī)劃長期歷史和有效探索解決方案空間仍然具有挑戰(zhàn)性。LLM在遇到意外錯誤時難以調整計劃,這使得它們與人類相比,在從試錯中學習方面更脆弱。
  • 自然語言接口的可靠性:當前的智能體系統(tǒng)依賴于自然語言作為LLM與外部組件(如記憶和工具)之間的接口。然而,模型輸出的可靠性值得懷疑,因為LLM可能會出現格式錯誤,并偶爾表現出叛逆行為(例如,拒絕遵循指令)。因此,智能體演示代碼的大部分集中在解析模型輸出上。


本文轉載自公眾號AIGC最前線   

原文鏈接:??https://mp.weixin.qq.com/s/N4z6wyJTEpk890iIALjfiQ??


?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦
日韩欧美国产小视频| 粉嫩av一区二区三区在线播放| 亚洲精品国产美女| 亚洲视频在线观看一区二区三区| 在线视频自拍| 国产成人av在线影院| 97在线视频国产| 性爱在线免费视频| 国产欧美啪啪| 欧美日韩在线观看一区二区| 五月天激情图片| 内衣办公室在线| 国产麻豆精品95视频| 欧美一区二区三区免费视| 亚洲理论片在线观看| 日韩精品视频中文字幕| 色综合久久久网| 国产一二三四五| 免费人成黄页在线观看忧物| 国产精品一区在线| 国产精品久久久久久久久久东京| 麻豆亚洲av熟女国产一区二| 国产一区99| 精品国产免费人成在线观看| 91人人澡人人爽人人精品| 波多野结衣精品| 中文字幕日韩一区| 日韩欧美精品一区二区| 成人爽a毛片一区二区| 蜜桃久久久久久久| 欧美亚洲国产视频| 久草免费在线视频观看| 欧美手机视频| 亚洲人精品午夜在线观看| 久久久久久无码精品人妻一区二区| 搜成人激情视频| 亚洲成av人片一区二区三区| 免费观看黄色大片| 91在线看片| 久久久久久久久蜜桃| 99在线首页视频| 91精品国产乱码久久久| 久久亚洲一区| 欧洲成人午夜免费大片| 国产在线视频99| 你懂的成人av| 久久亚洲精品一区二区| 国产高清一区二区三区四区| 午夜欧洲一区| 亚洲成人黄色网址| 精品人妻在线视频| 99这里只有精品视频| 欧美一级片在线观看| 91丨九色丨蝌蚪| 欧洲亚洲精品| 欧美久久久久免费| 国产精品视频中文字幕| 网友自拍亚洲| 色婷婷激情一区二区三区| 你懂的av在线| 亚洲插插视频| 欧美网站在线观看| 日本在线视频www| 成人影院av| 91国偷自产一区二区开放时间 | a天堂在线资源| 国产欧美视频一区二区三区| 日韩欧美电影一区二区| 在线日本视频| 亚洲图片激情小说| 91网站在线观看免费| 在线观看免费视频你懂的| 亚洲精品免费电影| 国产高清av在线播放| 漫画在线观看av| 欧美亚洲日本国产| 五月婷婷之婷婷| 日韩区欧美区| 亚洲国产精品高清久久久| 欧美一区二区三区成人精品| 国产麻豆一区二区三区精品视频| 在线观看亚洲区| 国产第一页浮力| 狠狠88综合久久久久综合网| 久久久久久91香蕉国产| 日本熟女毛茸茸| 久久成人18免费观看| 成人三级视频在线观看一区二区| 无码国产精品一区二区色情男同| 久久久久久久免费视频了| 在线成人性视频| 成人在线免费观看黄色| 一本久久综合亚洲鲁鲁五月天| 久久久久久久久久久久91| 亚洲国产精品免费视频| 日韩成人在线免费观看| 99热99这里只有精品| 亚洲国产一区二区三区a毛片| 奇米成人av国产一区二区三区| 92久久精品一区二区| 成人免费黄色大片| 亚洲综合第一| 超碰在线视屏| 欧美肥胖老妇做爰| 亚洲午夜福利在线观看| 亚洲天天综合| 国产成人极品视频| 亚洲伦理在线观看| 国产亚洲污的网站| 国产精品视频网站在线观看| 奇米777日韩| 精品久久久久久久久久久久久久久久久| 久久精品国产亚洲av久| 中文字幕一区二区三三 | 国产一级在线免费观看| 日日夜夜一区二区| 国产精品免费在线播放| 天堂аⅴ在线地址8| 精品国产31久久久久久| 日本成人xxx| 黑人操亚洲人| 91精品国产自产91精品| 国产日韩欧美一区二区东京热| 91年精品国产| 国产一区二区三区小说| 激情小说亚洲| 亚洲色图国产精品| 一级片免费网址| 国产高清亚洲一区| 亚洲自拍的二区三区| 三级成人黄色影院| 亚洲精品99久久久久| 亚洲二区在线播放| 六月丁香婷婷色狠狠久久| 激情视频在线观看一区二区三区| fc2ppv国产精品久久| 精品视频一区二区不卡| 人妻av无码一区二区三区| 亚洲国产一区二区三区a毛片| 成人免费视频网址| 日本视频在线免费观看| 欧美色图在线观看| 国产精品久久免费观看| 久久这里有精品15一区二区三区| 黑人另类av| 国内小视频在线看| 精品88久久久久88久久久| 九九视频在线观看| 成人永久看片免费视频天堂| 欧美日韩dvd| 51vv免费精品视频一区二区 | 免费亚洲一区二区| 日本不卡网站| 亚洲欧美精品伊人久久| 日批视频免费在线观看| 国产亚洲精久久久久久| aⅴ在线免费观看| 国产精品免费99久久久| 日本亚洲精品在线观看| 国产福利片在线| 欧美探花视频资源| 国产探花视频在线| 久草热8精品视频在线观看| 亚洲一区二区三区免费观看| 综合欧美精品| 欧美华人在线视频| 污视频在线免费| 一本色道a无线码一区v| 日韩欧美视频免费观看| 国产美女视频一区| 久久99久久久久久| 蜜臀av免费一区二区三区| 国产成人免费91av在线| 又爽又大又黄a级毛片在线视频| 欧美撒尿777hd撒尿| 天天看片中文字幕| 成人精品小蝌蚪| 成人在线观看a| 99精品在线免费在线观看| 亚洲中国色老太| 国产777精品精品热热热一区二区| 日韩精品在线观| 亚洲在线视频播放| 亚洲午夜电影在线| 91精品国自产在线| 国产在线观看免费一区| 六月婷婷在线视频| 日韩一区二区在线免费| www.成人三级视频| 日韩精品99| 麻豆乱码国产一区二区三区| 天堂8在线视频| 欧美日韩一区二区在线观看视频 | 黄网动漫久久久| 正在播放国产对白害羞| 成人永久免费视频| av污在线观看| 在线欧美不卡| 一区二区三区四区视频在线| www.国产精品一区| 国产精品天天狠天天看| h片在线观看| 精品国产一区av| 青青草视频免费在线观看| 制服丝袜一区二区三区| 天天干天天干天天| 亚洲精品亚洲人成人网| 色一情一交一乱一区二区三区| 国产福利一区在线观看| 91在线视频观看免费| 亚洲一级二级| 中文字幕欧美日韩一区二区三区| 精品视频自拍| 亚洲伊人久久综合| 78精品国产综合久久香蕉| 久久久久免费视频| 国产秀色在线www免费观看| 亚洲女人被黑人巨大进入al| 亚洲国产欧美另类| 欧美精品vⅰdeose4hd| 天堂网中文字幕| 亚洲va欧美va人人爽| 大地资源高清在线视频观看| 国产亚洲欧美在线| 国产美女喷水视频| av一区二区三区在线| 成人免费黄色av| 久久精品久久久精品美女| 日韩精品视频一区二区在线观看| 国产主播一区| 免费久久久久久| 999国产精品视频| 无遮挡亚洲一区| 自拍亚洲一区| 久久国产精品久久精品国产| y111111国产精品久久久| 亚洲a区在线视频| 久久丁香四色| 91久久久久久久| gogo大尺度成人免费视频| 国产精品一区二区三区成人| av亚洲一区二区三区| 国产精品成人一区二区三区吃奶| 欧美xxxhd| 18性欧美xxxⅹ性满足| freexxx性亚洲精品| 高清欧美性猛交xxxx| 久久久123| 久久久在线视频| 538在线视频| 91av视频在线免费观看| 美女露胸视频在线观看| 欧美又大又硬又粗bbbbb| 天堂√中文最新版在线| 国产97在线播放| 日本h片久久| 国产在线视频91| 成人在线视频www| 91系列在线观看| 日韩欧美一级| 国产一区二区在线网站| 婷婷综合一区| 日本一区二区在线视频观看| 俺要去色综合狠狠| 伊人久久99| 狠狠爱成人网| 中文字幕无码精品亚洲35| 久久婷婷久久| 亚洲精品久久久久久宅男| 国产综合色产在线精品| 亚洲黄色小说在线观看| 99久久久久免费精品国产| 亚欧洲乱码视频| 中文字幕中文在线不卡住| 欧美老熟妇一区二区三区| 亚洲国产一区在线观看| 潘金莲一级淫片aaaaaa播放| 精品污污网站免费看| 亚洲不卡免费视频| 亚洲精品久久久久久久久久久久久| 青青草在线免费视频| 在线视频中文亚洲| 中文字幕免费高清电视剧网站在线观看 | 日本韩国欧美精品大片卡二| 国产精品原创视频| 9a蜜桃久久久久久免费| 国产精品日韩精品中文字幕| 国产福利片一区二区| 亚洲国产专区| 欧美午夜aaaaaa免费视频| 国产精品99久久不卡二区| 日韩人妻一区二区三区| 亚洲欧美日韩一区二区三区在线观看| 日韩成人一区二区三区| 精品污污网站免费看| 人妻精品无码一区二区| 中文字幕亚洲欧美一区二区三区| 激情影院在线| 国产精品一区二区久久久| 99国产精品久久一区二区三区| 日本高清不卡三区| 国产真实久久| 一本一道久久a久久综合蜜桃| 99精品欧美一区二区三区小说| 亚洲天堂一级片| 欧美性猛交xxxx富婆弯腰| 99久久99久久久精品棕色圆| 亚洲全黄一级网站| 都市激情久久综合| 成人av电影天堂| 少妇精品久久久一区二区| 精品国产一区二区三区无码| 久久99精品久久久久婷婷| 人妻无码一区二区三区| 亚洲一区影音先锋| 国产精品呻吟久久| 国产一区二区三区精品久久久| 波多野结衣中文字幕久久| 亚洲v日韩v综合v精品v| 精品国产一区二区三区噜噜噜| 欧美激情 国产精品| 国产成人综合在线观看| 成年人视频软件| 日本久久精品电影| 成人免费公开视频| 色中色综合影院手机版在线观看| 91在线亚洲| 日韩精品不卡| 亚洲欧美久久久| 亚洲av成人片色在线观看高潮 | 女人天堂亚洲aⅴ在线观看| 国产最新免费视频| 成年人网站91| 久久久久亚洲AV| 日韩视频在线你懂得| 午夜国产福利在线| 国产精品午夜国产小视频| 国产欧美日韩影院| 国产一区亚洲二区三区| 91麻豆国产自产在线观看| 国产无遮挡又黄又爽又色| 精品欧美一区二区久久| 在线中文字幕视频观看| 成人精品一区二区三区电影免费| 清纯唯美综合亚洲| 国产九九热视频| 国产精品久久久久久久久免费丝袜 | 国产日本欧美在线观看 | 国产一区二区三区在线观看视频| 精品众筹模特私拍视频| 成人欧美一区二区三区在线观看 | 一级特黄色大片| 日韩视频免费在线观看| 四虎成人精品一区二区免费网站| 亚洲日本japanese丝袜| 经典三级在线一区| 欧美片一区二区| 亚洲精品ady| 久久r热视频| 午夜精品一区二区三区在线观看| 欧美aaa在线| 五月综合色婷婷| 99在线精品免费| 在线观看高清免费视频| 国产人成亚洲第一网站在线播放| 久久精品久久99| 中文字幕亚洲欧美在线不卡| 国产男女猛烈无遮挡| 欧美激情久久久| 视频福利一区| 一区二区三区入口| 亚洲精品国产成人久久av盗摄| 亚洲国产日韩在线观看| 9.1国产丝袜在线观看| 国产一区二区三区四区| 99re6在线观看| 亚洲黄一区二区三区| 天天爽夜夜爽夜夜爽| 国产精品久久久久久av| 亚洲精品小说| 亚洲精品在线视频免费观看| 日本道精品一区二区三区| 毛片在线不卡| 精品日本一区二区三区| 日韩高清不卡一区二区| 久久国产露脸精品国产| 亚洲色图25p| 中文字幕久久精品一区二区 | 国产探花视频在线| 日韩精品一区国产麻豆| 日本不卡一二三| 欧美另类videosbestsex日本| 2023国产精品自拍| 国产又粗又猛又爽又黄的视频一| 欧美激情在线视频二区| 精品久久久久久久久久久下田| 三级网站免费看| 色噜噜狠狠色综合欧洲selulu| av在线播放国产| 日本一区二区精品视频|