精品欧美一区二区三区在线观看 _久久久久国色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??


?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦
亚洲视频免费在线| 99成人在线| 欧美日韩视频第一区| 中文字幕欧美人与畜| 国产suv一区二区| 国产精品一二| 久久资源免费视频| 无码人妻aⅴ一区二区三区| 99九九久久| 亚洲一区二区影院| 午夜欧美性电影| 粉嫩小泬无遮挡久久久久久| 日日摸夜夜添夜夜添国产精品 | 国产精品久久久久久亚洲色| 台湾佬中文娱乐久久久| 亚洲精品亚洲人成人网在线播放| 久99久在线| 国产高潮流白浆喷水视频| 性色一区二区| 欧美激情视频一区二区三区不卡| 一区二区三区四区视频| 欧洲一区二区视频| 男女性高潮免费网站| 亚洲宅男一区| 亚洲国产成人av在线| 国产成人在线综合| 欧美黑人粗大| 亚洲 欧美综合在线网络| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 亚洲欧洲国产综合| 国产精品一区二区久久精品爱涩| 国产成人激情小视频| 国产欧美日韩另类| 一个色综合网| www.亚洲免费视频| 亚洲色成人网站www永久四虎| 99这里只有精品视频| 欧美二区三区91| 韩国中文字幕av| 日韩免费福利视频| 欧美日韩国产区| 97在线国产视频| 亚洲图区一区| 亚洲人成在线播放网站岛国| 色阁综合av| 国产免费av高清在线| 337p粉嫩大胆色噜噜噜噜亚洲| 99电影网电视剧在线观看| 国产精品视频一二区| 麻豆91在线播放| 国产精品久久久久9999| 一区二区不卡在线视频 午夜欧美不卡'| 午夜久久久精品| 欧亚av在线| 婷婷中文字幕综合| 你懂的av在线| 色网在线免费观看| 欧美午夜片在线免费观看| 国产综合av在线| 午夜激情电影在线播放| 欧美日韩亚洲视频| 日韩av在线综合| 欧美momandson| 91搞黄在线观看| 一本岛在线视频| 伊人国产精品| 欧美不卡一区二区三区四区| 波多野结衣三级视频| 果冻天美麻豆一区二区国产| 亚洲精品在线免费播放| 亚洲av无码一区二区三区网址| 美女呻吟一区| 国产亚洲欧洲高清一区| 久久久视频6r| 99热在线成人| 欧美精品亚州精品| 国产无码精品在线观看| 在线免费三级电影网站| 精品精品99| 日韩精品免费一线在线观看| 精品国产av无码| 欧美日韩在线网站| 欧美超级免费视 在线| 精品少妇一二三区| 免费精品视频| 国产免费一区二区三区在线能观看 | 国产精品免费看片| 超碰97免费观看| av电影免费在线看| 狠狠久久亚洲欧美专区| 91精品无人成人www| 57pao国产一区二区| 日韩久久免费电影| 中国特黄一级片| 国产精品激情电影| 国产成人久久久| 国产欧美一区二区三区视频在线观看| 国产a精品视频| 日韩不卡av| 在线看女人毛片| 91电影在线观看| 成年人性生活视频| 国产亚洲一区| 欧美激情一区二区三区成人| 无码人妻精品一区二| 国内精品免费**视频| 久久精品ww人人做人人爽| 1pondo在线播放免费| 亚洲一区二区三区小说| 狠狠热免费视频| 视频一区日韩精品| 亚洲社区在线观看| 亚洲天堂一区二区三区| 潘金莲激情呻吟欲求不满视频| 日韩精品一级| 中文字幕欧美专区| 在线观看亚洲欧美| 国产一区二区网址| 日本一区视频在线| 操人在线观看| 日韩西西人体444www| 97超碰在线资源| 韩日欧美一区| 91精品久久久久久久久久另类| 天堂资源中文在线| 一区二区三区不卡视频| 8x8x成人免费视频| 欧美特黄一级大片| 日本久久亚洲电影| 五月婷婷六月色| 亚洲亚洲人成综合网络| 91网址在线观看精品| 色琪琪久久se色| 日本人成精品视频在线| 午夜在线视频免费| 亚洲一卡二卡三卡四卡| 韩国三级hd中文字幕有哪些| 久久福利影院| 国产精自产拍久久久久久蜜| 久久这里精品| 色八戒一区二区三区| 国产三级视频网站| 国产日韩亚洲| 久久久7777| 久久影院午夜精品| 亚洲国产精品一区二区久| 久久久久噜噜噜亚洲熟女综合| 国产一区二区日韩精品| 超碰成人在线免费观看| 懂色aⅴ精品一区二区三区| 国产一区二区三区在线视频| 国产三级av片| 久久综合资源网| 青青草原av在线播放| 最新国产一区| 国产精品高潮呻吟久久av无限 | av电影一区二区| 精品少妇人妻av免费久久洗澡| 97人人澡人人爽91综合色| 欧美精品福利视频| 老熟妇高潮一区二区高清视频| 亚洲午夜av在线| 亚洲欧美高清在线| 国产又大又黑又粗免费视频| 在线播放不卡| 精品欧美一区二区久久久伦| 亚洲精品永久免费视频| 亚洲人a成www在线影院| 怡红院成永久免费人全部视频| 日本一区二区三区视频视频| 日韩欧美国产片| 一区二区三区网站| 国产女主播一区二区| 亚洲美女久久精品| 最近2019中文字幕mv免费看| 国产精品一品二区三区的使用体验| 尤物在线观看一区| 特级西西人体4444xxxx| 视频一区在线视频| 最新国产精品久久| 91欧美极品| 国产成人涩涩涩视频在线观看| аⅴ资源新版在线天堂| 欧美一区二区网站| 中文字幕第15页| 中文av一区二区| 中文字幕第3页| 热久久免费视频| 日本一级黄视频| 美女精品一区最新中文字幕一区二区三区 | 国产这里有精品| 久久综合九色综合97婷婷女人| 韩国中文字幕av| 欧美三级特黄| 日本一区视频在线播放| y111111国产精品久久久| 青草热久免费精品视频| a毛片在线观看| 亚洲欧美成人网| 国产成人毛毛毛片| 日本道色综合久久| 国产一级片免费看| 国产精品天美传媒| 国产xxxxxxxxx| 国产一区二三区| 久久综合免费视频影院| 日韩毛片无码永久免费看| 国产一区二区在线观看视频| 亚洲中文字幕无码不卡电影| 你懂的国产精品永久在线| 日本免费高清一区二区| 中文在线综合| 国产精品免费网站| 成人性生交大片免费看网站| 中日韩美女免费视频网站在线观看| 亚洲国产中文字幕在线| 欧美视频第二页| 国产九色在线播放九色| 一区二区三区欧美激情| 欧美三级视频网站| 93久久精品日日躁夜夜躁欧美| 在线免费观看av网| 日日夜夜精品免费视频| 香港三级韩国三级日本三级| 伊人久久大香线| 亚洲精品成人a8198a| 欧美sss在线视频| 99国产视频| 四虎影视国产精品| 国产精品久久久久久久天堂| 日韩理论视频| 性欧美长视频免费观看不卡| 大片免费在线观看| 日韩亚洲精品电影| av电影在线网| 尤物九九久久国产精品的特点| 外国精品视频在线观看| 亚洲成色999久久网站| 亚洲黄色小说在线观看| 国产成人免费| 日韩美女中文字幕| 超级碰碰久久| 日本高清久久天堂| 最新中文字幕在线播放| 91chinesevideo永久地址| 爱看av在线入口| 欧美激情奇米色| 动漫一区二区| 97在线精品国自产拍中文| 2021天堂中文幕一二区在线观| 欧美激情中文网| 麻豆av在线免费观看| 久久男人的天堂| 国产在线观看www| 欧美一级bbbbb性bbbb喷潮片| 小草在线视频免费播放| 欧美在线不卡区| 三上悠亚激情av一区二区三区 | 日本aa在线观看| 天天天综合网| 最新av网址在线观看| 欧美三级第一页| 欧洲精品在线播放| 日韩视频不卡| 欧洲av无码放荡人妇网站| 丝袜美腿高跟呻吟高潮一区| 蜜桃免费在线视频| 国产真实乱对白精彩久久| 少妇性l交大片7724com| 成人久久久精品乱码一区二区三区| 日本一卡二卡在线| 久久亚洲精品小早川怜子| 亚洲自拍偷拍图| 日韩美女视频19| 国产极品美女高潮无套嗷嗷叫酒店| 999国产在线视频| 日韩精品中文字| 九色在线视频| x99av成人免费| 蜜桃传媒在线观看免费进入| 97在线视频免费播放| 三上悠亚国产精品一区二区三区| 国产一区二中文字幕在线看| 视频一区视频二区欧美| 蜜桃久久影院| 911精品美国片911久久久| 草草视频在线免费观看| 久久综合影视| 樱花草www在线| 99精品国产91久久久久久| 五月天精品在线| 一区二区三区四区国产精品| 亚洲s码欧洲m码国产av| 欧美顶级少妇做爰| 日本五码在线| 久久夜色精品国产亚洲aⅴ| zzzwww在线看片免费| 国产日本欧美在线观看| 久久动漫网址| 中文字幕在线中文字幕日亚韩一区| 亚洲精品少妇| www.污网站| 久久男人中文字幕资源站| 美国黄色小视频| 在线观看成人免费视频| 成人精品在线播放| 中文字幕久久精品| 黄色aa久久| 97伦理在线四区| 91日韩免费| 粉嫩虎白女毛片人体| 岛国一区二区在线观看| 亚洲人做受高潮| 色94色欧美sute亚洲线路一久 | 国产成人午夜高潮毛片| 精品无码人妻一区二区免费蜜桃| 亚洲国产一区二区三区| 国产又大又黄的视频| 亚洲视频在线视频| h片在线观看视频免费免费| 91久久久久久久一区二区| 欧美日韩激情| 成人一级片网站| 99久久精品国产一区| 91视频免费在线看| 777a∨成人精品桃花网| jizz在线观看视频| 日韩av男人的天堂| 亚洲成a人片77777在线播放| 女人帮男人橹视频播放| 国产精品一区免费视频| 九九热视频在线免费观看| 欧美午夜电影网| 国产中文在线视频| 欧美在线免费视频| 欧美a级网站| 69堂免费视频| 99精品视频一区二区三区| 黄色小说在线观看视频| 欧美va亚洲va| 欧洲精品二区| 97在线资源站| 欧美午夜免费影院| 香蕉视频在线观看黄| 樱花草国产18久久久久| 国产片在线播放| 欧美超级乱淫片喷水| 清纯唯美激情亚洲| 亚洲男人的天堂在线| 精品国产xxx| 亚洲精品丝袜日韩| 亚洲深夜视频| 日本公妇乱淫免费视频一区三区| 亚洲欧美春色| 免费观看a级片| 欧美日韩高清一区二区| 国产精品va在线观看视色 | www黄色av| 久久精品亚洲麻豆av一区二区| 国产嫩bbwbbw高潮| 亚洲人成伊人成综合网久久久| 国产精品久久久久av电视剧| 欧美一级二级三级| 老司机一区二区| 超碰手机在线观看| 亚洲精品在线一区二区| 一区二区电影免费观看| 日本亚洲自拍| 精品一二三四区| 国产性猛交普通话对白| 日韩av在线免费观看一区| 亚洲校园激情春色| 亚洲巨乳在线观看| 国产一区二区三区不卡在线观看 | 欧洲亚洲精品在线| 成人免费看片| 国产精品一区二区三区观看| 欧美一级播放| 成人信息集中地| 精品国产乱码久久久久久久久 | 日韩精品成人av| 亚洲最大的av网站| 国产精品永久| 男人av资源站| 亚洲国产成人久久| 日韩不卡在线| www.国产亚洲| 国产女人水真多18毛片18精品视频 | 亚洲第一视频区| 日韩欧美中文字幕一区| 伊人网在线播放| 国产女人18毛片| 久久久www免费人成精品| 国产视频第一页| 日韩av免费在线看| 欧美亚韩一区| 国产探花视频在线| 亚洲高清色综合| 亚洲国产精选| 69堂免费视频|