TFboys代言!士力架什么口味最受欢迎?

TFboys代言!士力架什么口味最受欢迎?

自201年起,就与TFboys这支中国最受欢迎的男子组合开始合作,成为其品牌推广的代言人。作为一种有着90年历史的巧克力品牌,<士力架>一直以来都备受中国消费者的青睐。而在这些年来,也相继推出了多种新口味以满足不同消费者的口感需求。那么,的哪种口味才是最受欢迎的呢?

1. 士力架原味

<士力架>最经典的口味就是原味。这款口味有着浓郁的巧克力味,同时也带有坚果的香气。不仅适合大多数人的口味需求,而且营养价值也很高。原味士力架含有丰富的蛋白质和纤维素,可以增强人体免疫力,同时也能够提供长效的饱腹感。因此,在众多口味中,原味士力架一直都是消费者最喜欢的口味之一。

2. 士力架花生味

除了原味以外,推出的另一种热门口味便是花生味。花生味士力架的口感非常独特,既有原味士力架的香气,又有花生的香甜味道。不仅如此,花生味士力架还含有较高的锌、镁等微量元素,可以促进身体健康和免疫力。因此,在一些健康注重的消费者中,花生味士力架也是非常受欢迎的。

3. 士力架香浓巧克力味

除了上述两种常见口味以外,还推出了香浓巧克力味。相比于原味,香浓巧克力味带有更加浓郁的巧克力味道,同时也加入了牛奶和糖粉等成分,更加满足消费者对于甜食的需求。同时,香浓巧克力味士力架也含有丰富的膳食纤维和维生素E等营养成分,可以起到抗氧化、延缓衰老的作用。因此,在一些注重美容和健康的年轻人中,香浓巧克力味士力架也有着一定的市场需求。

4. 士力架麦片蜂蜜味

最后一个我们要介绍的口味便是麦片蜂蜜味。这种口味融合了士力架和麦片、蜂蜜等成分,口感更为清新,既有原味的坚果香气,又有麦片和蜂蜜的清甜口感,更适合于爱吃小零食的女性朋友们。因此,麦片蜂蜜味士力架在女性群体中也有着一定的市场需求。

总结

综合以上介绍的几种口味,我们可以发现,每一种口味都有着不同的特点,适合不同消费者的需求。但是,如果要说哪一种口味是最受欢迎的,那么我们应该把目光聚焦在最经典、最受欢迎的口味上——原味士力架。原味士力架既有坚果的香气,又有巧克力的浓郁味道,营养成分也比较丰富。因此,无论是男女老少,都能够找到属于自己的心头好。当然,如果想要尝试其他口味也是可以的,但是我们还是要强调,原味士力架才是的最强主打! 问答话题:1. 的新口味有哪些?答:除了经典的原味士力架以外,还推出了花生味、香浓巧克力味和麦片蜂蜜味等多种新口味。2. 为什么原味士力架最受欢迎?答:原味士力架既有坚果的香气,又有巧克力的浓郁味道,同时含有丰富的营养成分,因此能够满足大多数消费者的口感需求和营养需求,所以才是最受欢迎的口味之一。

TFboys代言!士力架什么口味最受欢迎?特色

1、各种政务可以在软件上办理

2、新增江苏导游证,浙江导游证,四川导游证,广东导游证专项备考资料

3、你自己的浪漫世界有你自己的创造,让女朋友的选择培养自己喜欢的心灵;

4、个人办事法人办事部门办事。为您提供贴心的办事指南;

5、仙侠职业带来特色战斗玩法,多职业任你选择哦。

TFboys代言!士力架什么口味最受欢迎?亮点

1、独特的汽车造型,简洁车身可以拥有独特的涂装效果,从外观上可以比传统的豪华跑车更加奢华炫酷;

2、登录上线就有万千魅力的美女相送,更有免费钻石金币可以领取,福利拿到手软。

3、操作非常简单,击屏幕即可射出圆盘,它会随着你的用力方向前进;

4、尝试找到其他结尾。

5、优化聊天界面UI,颜值大幅提升

gezhongzhengwukeyizairuanjianshangbanlixinzengjiangsudaoyouzheng,zhejiangdaoyouzheng,sichuandaoyouzheng,guangdongdaoyouzhengzhuanxiangbeikaoziliaonizijidelangmanshijieyounizijidechuangzao,rangnvpengyoudexuanzepeiyangzijixihuandexinling;gerenbanshifarenbanshibumenbanshi。weinintigongtiexindebanshizhinan;xianxiazhiyedailaitesezhandouwanfa,duozhiyerennixuanzeo。AI Agents大(da)爆(bao)發(fa):軟(ruan)件(jian)2.0雛(chu)形(xing)初(chu)現(xian),OpenAI的(de)下(xia)壹(yi)步(bu)

作(zuo)者(zhe):Lilian Weng @OpenAI

編(bian)譯(yi):wenli 排(pai)版(ban):Mengxi

來(lai)源(yuan):海(hai)外(wai)獨(du)角(jiao)獸(shou)

本(ben)文(wen)编译自(zi) Lilian Weng 的個(ge)人(ren)博(bo)客(ke),Lilian 现在(zai)是(shi) OpenAI 的 Head of Safety Systems,之(zhi)前(qian)還(hai)領(ling)導(dao)過(guo) OpenAI 的 Applied AI 團(tuan)隊(dui)。

AI Agent 被(bei)認(ren)為(wei)是 OpenAI 发力(li)的下一个方(fang)向(xiang)。OpenAI 的聯(lian)合(he)創(chuang)始(shi)人 Andrej Karpathy 在近(jin)期(qi)的一次(ci)公(gong)開(kai)活(huo)動(dong)上(shang)提(ti)到(dao)“相(xiang)比(bi)模(mo)型(xing)訓(xun)練(lian)方法(fa),OpenAI 內(nei)部(bu)目(mu)前更(geng)關(guan)註(zhu) Agent 领域(yu)的變(bian)化(hua),每(mei)當(dang)有(you)新(xin)的 AI Agents 論(lun)文出(chu)来的時(shi)候(hou),内部都(dou)會(hui)很(hen)興(xing)奮(fen)並(bing)且(qie)认真(zhen)地(di)討(tao)论”,而(er)在更早(zao)之前,Andrej 还評(ping)價(jia) AutoGPT 是 Prompt Engineering 下一階(jie)段(duan)的探(tan)索(suo)方向。

Lilian Weng 的這(zhe)篇(pian) Blog 可(ke)以(yi)說(shuo)是目前 AI Agent 领域優(you)質(zhi)论文的系(xi)統(tong)綜(zong)述(shu),她(ta)將(jiang) Agents 定(ding)義(yi)为 LLM、記(ji)憶(yi)(Memory)、任(ren)務(wu)規(gui)劃(hua)(Planning Skills)以及(ji)工(gong)具(ju)使(shi)用(yong)(Tool Use) 的集(ji)合,其(qi)中(zhong) LLM 是核(he)心(xin)大腦(nao),Memory、Planning Skills 以及 Tool Use 等(deng)則(ze)是 Agents 系统實(shi)现的三(san)个关鍵(jian)組(zu)件,在文章(zhang)中,她还對(dui)每个模塊(kuai)下实现路(lu)徑(jing)進(jin)行(xing)了(le)細(xi)致(zhi)的梳(shu)理(li)和(he)说明(ming)。到今(jin)天(tian),構(gou)建(jian) AI Agent 的工具箱(xiang)已(yi)經(jing)相对完(wan)善(shan),但(dan)仍(reng)需(xu)要(yao)面(mian)对一些(xie)限(xian)制(zhi),例(li)如(ru)上下文長(chang)度(du)、长期规划和任务分(fen)解(jie),以及 LLM 能(neng)力的穩(wen)定性(xing)等。

從(cong)今年(nian) 3 月(yue) AutoGPT 推(tui)出後(hou),Generative Agent、GPT-Engineer、BabyAGI 項(xiang)目的爆发将 LLM 地敘(xu)事(shi)代(dai)入(ru)了新的阶段,从“超(chao)級(ji)大脑”到真正(zheng)有可能成(cheng)为Lillian 在自己(ji)的 Twitter 中也(ye)认为“This is probably just a new era”。

以下为本文目錄(lu),建議(yi)結(jie)合要點(dian)进行針(zhen)对性閱(yue)讀(du)。

??

01 Agent System 是什(shen)麽(me)

02 组件一:任务规划

03 组件二(er) : 记忆

04 组件三 : 使用工具

05 AI Agents 的实踐(jian)

06 LLM Agents 的局(ju)限

AutoGPT、GPT-Engineer 和 BabyAGI 等项目在一定程(cheng)度上已经展(zhan)示(shi)了使用大型語(yu)言(yan)模型(LLM)作为核心控(kong)制器(qi)来构建 AI Agents 的能力 。LLM 的潛(qian)力不(bu)僅(jin)限於(yu)生(sheng)成内容(rong)、故(gu)事、论文和應(ying)用等方面,它(ta)还具有強(qiang)大的通(tong)用問(wen)題(ti)解決(jue)能力,可以应用于各(ge)个领域。

01.Agent System 是什么

在以 LLM 为驅(qu)动的 AI Agents 系统中,LLM 是代理系统的“大脑”,并需要其他(ta)幾(ji)个关键组件的輔(fu)助(zhu):

1. 规划(Planning)

? 子(zi)目標(biao)和分解:AI Agents 能夠(gou)将大型任务分解为較(jiao)小(xiao)的、可管(guan)理的子目标,以便(bian)高(gao)效(xiao)的處(chu)理復(fu)雜(za)任务;

? 反(fan)思(si)和细化:Agents 可以对过去(qu)的行为进行自我(wo)批(pi)评和反省(sheng),从錯(cuo)誤(wu)中吸(xi)取(qu)经驗(yan)教(jiao)训,并为接(jie)下来的行动进行分析(xi)、總(zong)结和提煉(lian),这種(zhong)反思和细化可以幫(bang)助 Agents 提高自身(shen)的智(zhi)能和適(shi)应性,从而提高最(zui)終(zhong)结果(guo)的质量(liang)。

2. 记忆 (Memory)

? 短(duan)期记忆:所(suo)有上下文學(xue)習(xi)都是依(yi)賴(lai)模型的短期记忆能力进行的;

? 长期记忆:这种設(she)計(ji)使得(de) AI Agents 能够长期保(bao)存(cun)和調(tiao)用無(wu)限信(xin)息(xi)的能力,一般(ban)通过外部載(zai)體(ti)存儲(chu)和快(kuai)速(su)檢(jian)索来实现。

3. 工具使用(Tool use)

? AI Agents 可以学习如何(he)调用外部 API,以獲(huo)取模型權(quan)重(zhong)中缺(que)少(shao)的額(e)外信息,这些信息通常(chang)在預(yu)训练后很難(nan)更改(gai),包(bao)括(kuo)当前信息、代碼(ma)執(zhi)行能力、对專(zhuan)有信息源的訪(fang)问等。

Fig. 1. LLM 驱动下的 AI Agents System 概(gai)覽(lan)

02.组件一:任务规划

复杂任务的处理通常会涉(she)及到多(duo)个步驟(zhou),因(yin)此(ci) AI Agents 需要预先(xian)了解并对这些步骤进行规划。任务规划能力可以帮助 Agents 更好(hao)地理解任务结构和目标,以及在此基(ji)礎(chu)上如何分配(pei)資(zi)源和优化决策(ce),从而提高任务完成的效率(lv)和质量。

任务分解(Task Decomposition)

? 思維(wei)鏈(lian)(Chain of thought)

CoT 已经成为提升(sheng)复杂任务模型性能的标準(zhun)提示技(ji)術(shu),它通过讓(rang)模型“逐(zhu)步思考(kao)”,利(li)用更多的測(ce)試(shi)时間(jian),将困(kun)难的任务拆(chai)解为更小、更簡(jian)單(dan)的步骤。CoT 能够将大型任务轉(zhuan)化为多个可管理的子任务,并揭(jie)示模型的思维链條(tiao),从而提高模型性能。这种技术使得模型更易(yi)于理解,也更容易获得更好的结果。

? 思维樹(shu)( Tree of Thoughts)

在 CoT 的基础上,思维树( ToT )则是通过在每一步探索多种推理可能性来擴(kuo)展模型性能。ToT 首(shou)先将问题分解为多个思维步骤,每个步骤生成多个思维,从而创建一个树狀(zhuang)结构。搜(sou)索过程可以是廣(guang)度优先搜索(BFS)或(huo)深(shen)度优先搜索(DFS),每个状態(tai)由(you)分類(lei)器(通过提示)或多數(shu)票(piao)进行评估(gu)。

在处理任务时,可以通过以下几种方式(shi)来实现任务分解:

1. 通过 LLM 模型进行简单的提示,例如“Steps for XYZ.\n1.”、“What are the subgoals for achieving XYZ?”;

2. 通过使用特(te)定于任务的指(zhi)令(ling),例如“Write a story outline”;

3. 有人工輸(shu)入。

另(ling)一种非(fei)常独特的任务分解的方法是 LLM+P,它利用外部经典(dian)规划師(shi)(External classical planner)进行长期规划。該(gai)方法利用规划域定义语言 (Planning Domain Definition Language,PDDL) 作为中间接口(kou)来描(miao)述规划问题。在这个过程中,LLM 需要完成以下几个步骤:

1. 将问题转化为“问题 PDDL”;

2. 請(qing)求(qiu)经典规划师基于现有的“域 PDDL”生成 PDDL 计划;

3. 将 PDDL 计划翻(fan)译回(hui)自然(ran)语言。

LLM+P(Large Language Models + Planning):

LLM+P:Empowering Large Language Models with Optimal Planning Proficiency 论文中提出的一种任务解决方法,通过将 LLM 和规划(Planning)进行结合, 通过使用自然语言来描述任务规划,进一步生成解决方案(an),从而推动问题的解决。

在 LLM+P 中,LLM 用于将自然语言指令转換(huan)为機(ji)器可理解的形式,并生成 PDDL 描述。接下来,PDDL 描述可以被 P 规划器使用,生成合理的计划并解决給(gei)定的任务。目前,LLM+P 方法已经应用于許(xu)多领域,例如机器人路径规划、自动化测试和语言对話(hua)系统中的自然语言理解和生成问题等等。

PDDL(Planning Domain Definition Language):

PDDL 是一种标准化和通用的规划领域语言,用于描述计划领域的形式语言。它能够用于描述可行动作、初始状态和目标状态的语言,用于帮助规划器生成计划。PDDL 通常被用于 AI 的自动规划问题,例如机器人路径规划、调度问题、资源分配等。

从本质上講(jiang),由外部工具来完成规划步骤被这件事在某(mou)些机器人環(huan)境(jing)中很常見(jian),但在其他领域并不常见。该方法假(jia)设特定领域的 PDDL 和适当的规划师可用,可以帮助 Agents 更好地规划和执行任务,提高任务完成的效率和质量。

自我反思( Self-Reflection )

自我反思(Self-reflection)在任务规划中是一个重要环節(jie),它让 Agents 能够通过改进过去的行动决策、糾(jiu)正过往(wang)的错误以不斷(duan)提高自身表(biao)现。在现实世(shi)界(jie)的任务中,试错(trial and error)是必(bi)不可少的,因而自我反思在其中扮(ban)演(yan)著(zhu)(zhe)至(zhi)关重要的角色(se)。

? ReAct

通过将动作空(kong)间扩展为任务特定的離(li)散(san)动作和语言空间的组合,将推理和行动融(rong)合到 LLM 中。前者(任务特定的离散动作)使 LLM 能够與(yu)环境进行交(jiao)互(hu),例如使用维基百(bai)科(ke)搜索 API,而后者(语言空间)则促(cu)使 LLM 生成自然语言的推理軌(gui)跡(ji)。

ReAct是 Auto-GPT 实现的基础组件之一,由 Google Research Brain Team 在 ReAct:Synergizing Reasoning And Actiong In Language Models 论文中提出。在 ReAct 工作之前,大家(jia)往往将大模型的推理能力和行为决策能力分开进行研(yan)究(jiu)。而 ReAct 首次在语言模型中将推理和行为决策緊(jin)密(mi)结合起(qi)来,使得语言模型的推理能力能够根(gen)據(ju)知(zhi)識(shi)进行计划安(an)排,行为决策能够与外界工具进行交互。

简单来说,ReAct 方法即(ji)推理+动作得到结果。靈(ling)感(gan)来自于作者对人类行为的一个洞(dong)察(cha):在人类从事一项需要多个步骤的任务时,每一步之间往往会有一个推理过程。作者提出让 LLM 把(ba)内心独白(bai)“说”出来,然后再(zai)根据独白做(zuo)相应的动作,模仿(fang)人类的推理过程,以提高 LLM 答(da)案的准確(que)性。这种方式在多种数据集上都取得了 SOTA 效果,并且更加(jia)可信,提升了 LLM 应对“胡(hu)说八(ba)道(dao)”的能力。

此外,作者还提出了进一步提高 ReAct 准确率的方法,即微(wei)调(fine-tuning),类似(si)人类“内化”知识的过程,将上千(qian)条正确的推理动作轨迹输入进 LLM 进行 fine-tuning, 可以顯(xian)著提高准确率。

ReAct 提示模板(ban)包含(han)了明确的 LLM 思考步骤,大致格(ge)式如下·:

Thought: ...

Action: ...

Observation: ...

... (Repeated many times)

Fig. 2. 知识密集型任务(例如 HotpotQA,FEVER)和决策任务(例如 AlfWorld Env,WebShop)的推理轨迹示例。Source:ReAct 论文

在知识密集型任务和决策任务这兩(liang)类实验中,ReAct 的表现优于仅使用 Act 的基准模型。在 Act 模型中,“Thought:...”步骤被刪(shan)除(chu)了 。

? Reflexion

一个为 AI Agents 提供(gong)动态记忆和自我反思能力,以提高推理能力的框(kuang)架(jia)。该框架采(cai)用标准的强化学习设置(zhi),其中獎(jiang)勵(li)模型提供简单的二元(yuan)奖励(0/1),动作空间遵(zun)循(xun) ReAct 中的设置,同(tong)时基于特定任务的行动空间,使用语言增(zeng)强功(gong)能,以实现复杂的推理步骤。在每个动作 at 之后,AI Agents 会计算(suan)一个啟(qi)发式值(zhi) ht,并根据自我反思的结果来選(xuan)擇(ze)是否(fou)重置环境以开始新的实验。

Reflexion 是在今年 6 月发布(bu)的最新论文 Reflexion: Language Agents with Verbal Reinforcement Learning 中提出的新框架。在 HumanEval 编码基准上,Reflexion 框架已经達(da)到了 91% 的准确率,超过了之前最先进的 GPT-4(只(zhi)达到了 80%)。

在 Reflexition 框架下,可以通过语言反饋(kui)而非更新权重的方式来强化 Language Agents。具体实现上,Reflexition agents 会通过口頭(tou)反馈信號(hao)来反映(ying)任务情(qing)況(kuang),并在情景(jing)记忆緩(huan)沖(chong)中保留(liu)自己的反射(she)文本,这些反馈推动着在下一次实验中做出更好的决策。该方法具有足(zu)够的灵活性,可以合并各种类型(标量值或自由形式的语言)和反馈信号的来源(外部或内部模擬(ni)),并在不同的任务(順(shun)序(xu)决策、编码、语言推理)中获得比基線(xian)代理显著的改进。

Fig. 3. 反射框架的圖(tu)解Source:Reflexion 论文

启发式函(han)数(heuristic function)用来帮助确定轨迹是否低(di)效或者包含幻(huan)覺(jiao)(hallucination),进而决定是否要停(ting)止(zhi)任务。低效的规划是指花(hua)費(fei)过长时间而沒(mei)有成功的轨迹;幻觉是指遇(yu)到一系列(lie)連(lian)續(xu)相同的动作,导致环境中出现相同的觀(guan)察结果。

自我反思(Self-reflection)是通过向 LLM 展示一个 two-shot 的示例来创建的,其中每个示例都是成对出现的,即“失(shi)敗(bai)的轨迹——指导未(wei)来计划变化的理想(xiang)反映”。隨(sui)后将该反思添(tian)加到 AI Agents 的短期工作记忆(短期记忆)中,最多不超过三个,以作为查(zha)詢(xun) LLM 的上下文。

? Chain of Hindsight

CoH 来自于 Hao Liu 等人于 2023 年 2 月发布的 Chain of Hindsight Aligns Language Models with Feedback,它的核心思想是在上下文中呈(cheng)现顺序改进输出的歷(li)史(shi),并训练模型顺应趨(qu)勢(shi)以產(chan)生更好的输出。

CoH 通过鼓(gu)励模型来明确展示一系列过去的输出及对应反馈,进一步改进自己的输出。其中人类反馈数据是一个集合 Dh = {(x,yi,ri,zi)n1=1},其中 x 是提示,每个 yi 代表一个模型補(bu)全(quan),ri 是人类对 yi 的评分,ri、yi、zi 是相互对应的关系,zi 代表人类对模型输出提供的事后反馈(Hindsight feedback)。假设反馈元组按(an)奖励排名(ming),较好的输出会得到更高的奖励值,如 rn≥rn-1≥...≥r1。该过程将在有監(jian)督(du)条件下进行微调,数据格式为 tn=(x,zi,yi,zj,...,zn,yn),其中 ≤i≤j≤n,以便让模型去学习如何根据反馈序列生成更好的输出。

模型经过微调后,将已知的输出序列作为训练数据,令模型能够预测在给定序列前綴(zhui)(sequence prefix)条件下的 yn,以便在反馈序列(feedback sequence)的基础上进行自我反思,从而产生更高质量的输出。在测试时,该模型可以选择性地接收(shou)帶(dai)有人类注釋(shi)者的多輪(lun)指令,即人类提供的反馈注释,从而进一步提高模型的性能和准确性。

为了避(bi)免(mian)过拟合,CoH 框架添加了一个正则化项(Regularization Term),以最大化预训练数据集的对数可能性。这个正则化项可以帮助模型更好地泛(fan)化和适应新的数据,避免过度拟合现有的数据。此外,由于反馈序列中有许多常用詞(ci),为了避免模型在训练过程中依赖于这些词,CoH 在训练期间随机屏(ping)蔽(bi)了 0%-5% 的历史 token。

正则化项(Regularization Term):

正则化是机器学习中应对过拟合的一种简单而有效的技术。它的目的是通过限制模型的复杂度来提高其泛化性能,因此在各类问题上都得到了广泛的应用。过拟合意(yi)味(wei)着模型在训练数据集上表现良(liang)好,但是在未知数据上的泛化性能卻(que)很差(cha)。

通常,正则化项被添加到損(sun)失函数中来懲(cheng)罰(fa)模型中过多的參(can)数,以限制模型参数的数量和大小,使得参数值更加平(ping)滑(hua)。常见的正则化项包括 L1 正则化和 L2 正则化。正则化项的系数可以通过交叉(cha)验證(zheng)等技术来调整(zheng),以使得模型在训练集和测试集上的性能都达到最优。

实验中的训练数据集来自于 WebGPT 的对比、人类反馈总结和人类偏(pian)好数据集的组合。

Fig. 4. 使用 CoH 进行微调后,模型可以按照(zhao)指令生成按顺序进行增量改进的输出。Source:CoH 论文

? 算法蒸(zheng)餾(liu)(Algorithm Distillation)

将 CoH 的思想应用于强化学习任务中的跨(kua)集轨迹,其中算法被封(feng)裝(zhuang)在长期历史条件策略(lve)中。由于 AI Agents 能够与环境多次进行交互,并不断进步,AD 连接这种学习历史记录并将其馈送(song)到模型中。这樣(yang),就(jiu)可以实现每一次的预测操(cao)作都比以前的试验带来更好的性能。AD 的目标是学习强化学习的过程,而不是训练特定于任务的策略本身。通过将算法封装在长期历史条件策略中,AD 可以捕(bu)获模型与环境交互的历史记录,从而使得模型能够更好地学习和改进自己的决策和行动,从而提高任务完成的效率和质量。

Fig. 5. 算法蒸馏(AD)的工作原(yuan)理 Source:Algorithm Distillation 论文

In-context Reinforcement Learning with Algorithm Distillation 这篇论文认为,任何一种生成学习历史的算法都可以通过对动作执行行为的克(ke)隆(long),将其提炼到神(shen)经網(wang)絡(luo)中。在论文中,历史数据是由一组源策略生成的,每个策略都是为特定任务进行训练的。在训练阶段的每次强化学习運(yun)行期间,都会随机采样一个任务,并使用多集历史记录的子序列进行训练。这样学习出来的策略与任务无关。

实際(ji)上,由于模型的上下文窗(chuang)口长度有限,因此使用的劇(ju)集(episodes) 应该足够短,从而方便构建多剧集历史数据。在强化学习中,通常需要 2-4 集的多情节上下文来学习接近最佳(jia)的上下文强化学习算法,这是因为在上下文中,强化学习的发生往往需要足够长的上下文来提供背(bei)景和意义。

论文使用了三个基线进行对比,包括 ED(专家蒸馏,使用专家轨迹而非学习历史的行为克隆)、源策略(用于生成 UCB 蒸馏的轨迹)和 RL2( 2017 年提出的一种在线强化学习算法,作为上限进行比较)。盡(jin)管 AD 算法仅使用离线强化学习,但其性能仍接近作为上限对比的 RL2,并且学习速度比其他基线快得多。此外,在使用源策略的部分训练历史记录的条件下,AD 的改进速度也比 ED 基线快得多。这些结果表明,AD 算法在上下文强化学习方面具有很好的性能,并且比其他基线更快地学习和改进。

Fig. 6. 在需要内存和探索的环境中,比较了 AD、ED、源策略和 RL2 的性能。其中,环境仅分配二元奖励(0/1)。源策略使用 A3C 算法针对“黑(hei)暗(an)”环境进行训练,使用 DQN 算法针对水(shui)迷(mi)宮(gong)进行训练。Resource:Algorithm Distillation 论文

03.组件二 : 记忆

Memory 的类型

Memory 可以定义为用于获取、存储、保留和稍(shao)后检索信息的进程。人类的大脑记忆可以分为以下几类:

1. 感觉记忆(Sensory Memory):这是记忆的最早阶段,提供在原始刺(ci)激(ji)结束(shu)后保留感官(guan)信息(視(shi)觉,聽(ting)觉等)印(yin)象(xiang)的能力。通常,感觉记忆只能持(chi)续几秒(miao)鐘(zhong)。子类別(bie)包括标誌(zhi)性记忆(视觉)、回聲(sheng)记忆(听觉)和觸(chu)觉记忆(触摸(mo))。

2. 短期记忆/工作记忆(Short-Term Memory, STM/ Working Memory):它存储了我們(men)目前知道并执行复杂的认知任务(如学习和推理)所需的信息。短期记忆被认为具有大約(yue) 7 个项目的容量,持续 20-30 秒。

Gordon Miller 在 1956 年发表了一篇关于人类短期记忆容量的论文 The Magical Number Seven, Plus or Minus Two: Some Limits on Our Capacity for Processing Information,论文中他提出,经过一系列实验观察发现,人类的短期记忆(STM)大概只能容納(na) 7±2 个项目。

3. 长期记忆(Long-Term Memory ,LTM):长期记忆可以在很长一段时间内保存信息,从几天到几十(shi)年不等,存储容量基本上是无限的。LTM 又(you)可以被分为:

? 显式/陳(chen)述性记忆(Explicit / declarative memory):这是对事实和事件的记忆,是指那(na)些可以有意识地回忆起来的记忆,包括情景记忆(事件和经历)和语义记忆(事实和概念(nian));

? 内隱(yin)/程序记忆(Implicit / Procedural memory):这种类型的记忆是无意识的,涉及自动执行的技能和例程,例如騎(qi)自行車(che)或在键盤(pan)上打(da)字(zi)。

Fig. 7.人类记忆的分类

参考人类记忆的分类,我们可以有一个粗(cu)略的映射:

? 感觉记忆(Sensory memory)作为原始输入的学习嵌(qian)入表示,包括文本、图像(xiang)或其他模式;

? 短期记忆(Short-term memory)作为上下文学习,但由于 Transformer 有限上下文窗口长度的限制,这种记忆短暫(zan)且有限;

? 长期内存(Long-term memory)作为 AI Agents 可以在查询时处理的外部向量存储,可通过快速检索访问。

最大内積(ji)搜索(MIPS)

外部存储器可以減(jian)少有限注意力(Finite Attention Span)的限制。一种标准做法是将信息的 embedding 保存到向量存储数据庫(ku)中,该数据库支(zhi)持快速最大内积搜索(Maximum Inner Product Search,MIPS)。为了提高检索速度,常见的方法是使用近似最近鄰(lin)(ANN)算法,以返(fan)回大约前 k 个最近邻,以犧(xi)牲(sheng)一定的精(jing)度损失来换取巨(ju)大的加速,这种方法可以减輕(qing)模型处理大量历史信息时的计算負(fu)擔(dan),提高模型的效率和性能。

最大内积搜索(Max-Inner Product Search) 算法用于在高维向量空间中搜索最相似的向量,它的基本思想是,给定一个查询向量 q 和一个向量集合 S,目标找(zhao)到 S 中与 q 的内积最大的向量。为了加速搜索过程,可以采用一些优化技巧(qiao),如倒(dao)排索引(yin)、局部敏(min)感哈(ha)希(xi)等。最大内积搜索算法在实际问题中有很广泛的应用,特别是在信息检索、推薦(jian)系统、语义搜索等需要处理高维向量数据的领域。

以下是几种常见的 ANN 算法,可用于快速的执行 MIPS:

? 局部敏感哈希(Locality-Sensitive Hashing,LSH)

它引入了一个哈希函数,使得类似的输入项以高概率映射到相同的存储桶(tong)中,而存储桶的数量遠(yuan)小于输入的数量。这也就意味着,类似的输入项在 LSH 哈希后,它们很可能会被映射到相同的存储桶中,而相似度较低的输入项则可能会被映射到不同的存储桶中,从而提高了查找相似项的效率。

? 近似最近邻搜索算法(Approximate Nearest Neighbors Oh Yeah,ANNOY )

它的核心数据结构是一组二叉树构成的随机投(tou)影(ying)树。在这些树中,每个非葉(ye)节点代表一个超平面,将输入空间分成两半(ban),每个叶子节点存储一个数据点。随机投影树是独立(li)且随机构建的,因此在某种程度上,它模仿了哈希函数的作用。ANNOY 搜索发生在所有树中,以叠(die)代方式搜索最接近查询的那一半,并将结果聚(ju)合起来。这个想法与 KD 树非常类似,但更具可扩展性。

KD 树(K-Dimensional Tree):一种将空间中点分开存储的树状数据结构。KD 树常被用于快速查找以及高维空间下的最近邻搜索。KD 树通过有选择地划分空间,将点存储在叶子节点,这使得搜索新点的时候能够快速去附(fu)近的叶子节点找到最相似的点,从而在对数时间内完成高维空间的近似最近邻搜索。

? 分層(ceng)可导航(hang)小世界(Hierarchical Navigable Small World,HNSW)

它的灵感来自于 Small World Networks,即网络中的大多数节点都可以在少量步骤内由任何其他节点到达。HNSW 算法主(zhu)要通过分层的方式,构建分层图,在保证搜索质量的同时,提升搜索速度。其中,最底(di)层包含实际数据点,中间图层创建快捷(jie)方式以加快搜索速度。每当执行搜索时,HNSW 从頂(ding)层的随机节点开始向目标导航。当它不能靠(kao)近时,它会向下移(yi)动到下一层,直(zhi)到到达底层。上层的每次移动都可能覆(fu)蓋(gai)数据空间中的很大距(ju)离,而下层的每次移动则会细化搜索质量。

小世界网络(small world networks)是一种图结构,其中大多数相邻节点可以通过少量躍(yue)点或步骤从其他节点到达。简单来说,大多数节点可以在很少的步骤内由任何其他节点到达,而且具有高聚集性,即相邻节点之间的连接更密集。

小世界效应在自然界和人类社(she)会中都很常见,例如脑神经元的连接、互联网底层架构分布和社交网络的形成等等,最为大眾(zhong)熟(shu)知的则是例如社交网络中常被提及的“六(liu)度理论”。小世界网络也是当代计算机硬(ying)件中许多片(pian)上网络架构的灵感来源。在 AI 领域,该概念也被广泛应用于近似最近邻搜索算法,如 HNSW 算法。

? Facebook AI 相似性搜索(Facebook AI Similarity Search,FAISS)

Facebook AI Similarity Search(FAISS)是一种基于向量量化的相似性搜索工具,它基于以下假设:在高维空间中,节点之间的距离遵循高斯(si)分布,因此应该存在数据点的聚类。FAISS 将向量空间划分为簇(cu),然后通过细化量化簇内向量来应用向量量化。搜索首先查找具有粗量化的聚类候选项,然后进一步查找具有更精细量化的每个聚类。

? 可扩展最近邻(Scalable Nearest Neighbors,ScaNN)

Scalable Nearest Neighbors(ScaNN)是一种可扩展的最近邻搜索工具,适用于高维向量空间中的最近邻搜索。傳(chuan)统的向量量化方法通常选择壁(bi)櫥(chu)量化质心点,然后将数据点映射到最近的质心点。这样做的问题是在高维向量空间中,由于维度災(zai)难的存在,这些质心点往往不能很好地表示数据点之间的真实距离,导致搜索质量下降(jiang)。

ScaNN 的主要创新是各向異(yi)性矢(shi)量量化(Anisotropic Vector Quantization,AVQ),即通过量化数据点的方向和大小来解决上述问题,使得内积尽可能接近原始距离,从而减少了数据点之间的距离误差。这使得 ScaNN 能够处理高维向量空间中的最近邻搜索,并且在大型数据集中具有高效性和可扩展性。

Fig. 8. 人类记忆的分类,Resource:ScaNN 论文

04.组件三 : 使用工具

人类最显著的特征(zheng)之一是能够使用工具。人类通过创造(zao)、修(xiu)改和利用外部对象来完成超出我们身体和认知極(ji)限的任务。同样,给 LLM 配備(bei)外部工具也可以显著扩展大模型的功能,使其能够处理更加复杂的任务。

Fig. 9. 海獺(ta)在水中时用巖(yan)石(shi)打开貝(bei)殼(ke)的图片,雖(sui)然动物(wu)会使用工具,但复杂性无法与人类相提并论。

MRKL 架构

MRKL(Modular Reasoning, Knowledge and Language)即 “模块化推理、知识和语言”,是一种用于自主代理 的神经符(fu)号架构。MRKL 架构的设计中包含了“专家(expert)”模块的集合,通用 LLM 将扮演路由器(router)的角色,通过查询路由找到最合适的专家模块。这些模块可以是神经模块(Neural),例如深度学习模型,也可以是符号模块,例如数学计算器、貨(huo)幣(bi)转换器、天氣(qi) API 等。

MRKL 由 AI21 Labs 的 Ehud Karpas 等人在 2022 年 5 月发布。在 MRKL Systems: A modular,neuro-symbolic architecture that combines large language models,external knowledge sources and discrete reasoning 论文中 Ehud 等人提出了一个突(tu)破(po) LLM 固(gu)有限制的解决方案,定义了 MRKL 结构。

MRKL 的核心思想是,现有 LLM(如 GPT-3 )等仍存在一些缺陷(xian),包括遺(yi)忘(wang)、外部知识的利用效率低下等。为此,MRKL 将神经网络模型、外部知识库和符号专家系统相结合,提升了自然语言处理的效率和精度。通过 MRKL 系统,不同类型的模块能够被整合在一起,实现更高效、灵活和可扩展的 AI 系统。

在测试中,MRKL 的作者团队对语言模型(7B Jurassic1-large 模型)进行了微调,使用算术问题作为测试用例来调用计算器。实验结果表明,相比于明确陈述的数学问题,解决口头数学问题更加具有挑(tiao)戰(zhan)性,因为 LLM 未能可靠地提取基本算术的正确参数。这些结果强调了外部符号工具可靠工作的重要性,知道何时以及如何使用这些工具取决于 LLM 的功能。

让模型学习使用外部工具的 API

TALM(工具增强语言模型 Tool Augmented Language Models)和 Toolformer 都是通过微调 LM 来学习使用外部工具 API。为了提高模型的性能和准确性,数据集根据新添加的 API 调用注释是否可以提高模型输出的质量进行了扩展。(在 Lilian 的 Prompt Engineering 的文章中也提到了 External APIs 相关的内容)。

ChatGPT 插(cha)件 Plugin 和 OpenAI API 函数调用 Function Calling 是 LLM 实践中增强工具使用能力的很好例子。工具 API 的集合可以由其他开发人員(yuan)来提供(例如在插件中)或自定义(例如在函数调用中)。

HuggingGPT

HuggingGPT 将 ChatGPT 作为任务计划器,可以根据模型描述,选择 HuggingFace 平臺(tai)中可用的模型,并根据执行结果总结響(xiang)应。

Fig. 10. HuggingGPT 的工作原理

该系统包括 4 个阶段:

1. 任务规划(Task planning):LLM 作为大脑,负責(ze)将用戶(hu)请求解析为多个任务。每个任务都有四(si)个关联的屬(shu)性:任务类型、ID、依赖项和参数。通过使用 Few-shot 的例子,能够指导 LLM 进行任务解析和规划。

指令如下:

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. 模型选择( Model selection): LLM 可以根据任务类型将请求分配给相应的专家模型,这些模型一般限制为多项选择题的类型。然后,LLM 提供一个可供选择和使用的模型列表。由于上下文长度的限制,LLM 需要基于任务类型进行过濾(lv),以确保选择的模型能够有效地处理请求。

指令如下:

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. 任务执行 Task execution:专家模型执行并记录特定任务的结果。

指令如下:

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. 响应生成(Response generation):LLM 接收执行结果并向用户提供匯(hui)总结果。

要将 HuggingGPT 投入实际使用,还需要解决以下几个挑战:

? 提高效率,因为 LLM 的推理轮次和与其他模型的交互都会减慢(man)整个过程;

? 解决长上下文窗口的限制,在这一前提下,HuggingGPT 才(cai)有可能处理复杂的任务内容;

? 提高 LLM 输出和外部模型服(fu)务的稳定性。

API-Bank

API-Bank 是用于评估工具增强 LLM 性能的基准,它包含了 53 个常用的 API 工具、一个完整的工具增强型 LLM 工作流(liu)程,涉及到 568 个 API 调用的 264 个带注释的对话。

API-Bank 由阿(e)裏(li)巴(ba)巴达摩(mo)院(yuan)在 2023 年 4 月发布的 API-Bank: A Benchmark for Tool-Augmented LLMs 中提出。API-Bank 是第(di)一个专門(men)用于评估 LLMs 使用外部工具能力的基准评估系统 ,它采用了一种全新的、具有扩展性的 LLMs 使用工具的範(fan)式,旨(zhi)在全面评估 LLMs 在 API 规划、检索和正确调用方面的能力。

这些 API 的选择非常多样化,包括搜索引擎(qing),计算器,日(ri)历查询,智能家居(ju)控制,日程安排管理,健(jian)康(kang)数据管理,帳(zhang)户身份(fen)验证工作流程等。由于有大量的 API,LLM 首先可以访问 API 搜索引擎,找到合适的 API 调用,然后使用相应的文檔(dang)进行调用,以便更好的处理请求。

Fig. 11. LLM 如何在 API 銀(yin)行中进行 API 调用的偽(wei)代码, Source:Li et al, 2023

在 API-Bank 的工作流程中,LLM 需要做出几个决策,并且我们可以在每步决策中评估其准确性。这些决策包括:

? 是否需要 API 调用;

? 确定调用的正确 API:如果效果不够好,LLM 需要迭代修改 API 输入,例如确定搜索引擎 API 的搜索关键字;

? 基于 API 结果的响应:模型可以选择进行优化,如果结果不滿(man)意,则再次调用 API。

API-Bank 将测试分为了三个级别,以评估 AI Agents 的工具使用能力:

? Level-1 评估调用 API 的能力。通过给定 API 的描述,模型需要确定是否调用给定的 API、如何正确调用它以及正确响应 API 返回;

? Level-2 检查检索 API 的能力。该模型需要搜索可能解决用户需求的 API,并通过阅读文档来学习如何使用它们;

? Level-3 评估在检索和调用之外规划 API 的能力。鑒(jian)于不明确的用户请求,例如安排小组会议,预訂(ding)航班(ban)、酒(jiu)店(dian)、餐(can)廳(ting)以及旅(lv)行规划等,模型可能要通过执行多个 API 调用才能徹(che)底解决问题。

05.AI Agents 的实践

科学研究领域的应用

ChemCrow是 LLM 被应用于生物技术和藥(yao)物研究的例子,LLM 增强了其中 13 种专家设计的工具,以完成有机合成、药物发现和材(cai)料(liao)设计方面的任务。该工作流在 LangChain 中实现,反映了之前在 ReAct 和 MRKLs 中描述的内容,并将 CoT 推理与与任务相关的工具相结合:

? LLM 提供了工具名稱(cheng)列表、实用程序的描述以及有关预期输入/输出的詳(xiang)细信息;

? 然后指示它在必要时使用提供的工具回答用户给定的提示。该指令建议模型遵循 ReAct 格式,即前文中的 -Thought, Action, Action Input, Observation。

其中一个有趣(qu)的观察结果是,基于 LLM 的评估得出的结论显示 GPT-4 和 ChemCrow 的性能几乎(hu)相同,但根据专家对解决方案的完成和化学正确性的人类评估表明,ChemCrow 的性能明显优于 GPT-4。这表明,在需要深厚(hou)专業(ye)知识的领域中,使用 LLM 来评估自身表现存在潜在的问题。缺乏(fa)专业知识可能会导致 LLM 难以意识到自身缺陷,从而无法很好地判(pan)断任务结果的正确性。

Emergent autonomous scientific research capabilities of large language models 这篇论文则研究了用于科学发现的 AI Agents,它被用来复杂科学实验的设计、规划和性能,它能够使用工具完成上网、阅读文档、执行代码、调用机器人实验 API 并适时调用其他 LLM 等来完成任务。

例如,当收到"develop a novel anticancer drug" 的请求时,模型提出了以下推理步骤:

1. 了解当前的抗(kang)癌(ai)药物发现趋势和最新的研究进展;

2. 确定一个具体的目标,例如选择一个特定的癌癥(zheng)类型或治(zhi)療(liao)方法;

3. 开始尋(xun)找针对这个目标的化合物,可能需要进行虛(xu)拟篩(shai)选或测试;

4. 一旦(dan)找到了合适的化合物,模型会嘗(chang)试设计并合成出一种新的抗癌药物。

在论文中,作者还讨论了一些風(feng)險(xian)问题,特别是非法药物和生物武(wu)器的风险,并开发了一个测试装置。

这个测试装置中包含了一份已知化学武器制劑(ji)的清(qing)单,并要求 Agents 来合成这些制剂。在 11 个测试请求中,有 4 个(36%)被系统接受(shou),系统甚(shen)至在这个过程中还查阅了文档试图完成整个任务流程。其余(yu) 7 个请求则被系统拒(ju)絕(jue),其中 5 个拒绝动作发生在进行 Web 搜索之后,2 个则是系统只根据 prompt 内容就提出拒绝。

Generative Agents

Generative Agents 生成 AI Agents 是一项非常有趣的实验,其灵感来自模拟人生遊(you)戲(xi)。实验中有 25 个虚拟角色,每个角色都分别由一个 AI Agent 控制,它们在沙(sha)盒(he)环境中生活和互动。这种生成 AI Agents 的设计可以为交互式应用程序创建可信的人类行为模拟,通过将 LLM 与记忆,计划和反思机制相结合,AI Agents 能够根据以往的经验进行调整和改进,并与其他 AI Agents 进行交互。

Memory

Stream 是一种长期记忆模块,外部数据库会以自然语言形式记录 AI Agents 的完整体验列表。这个列表中的每个元素(su)都代表着一个观察(observation),也就是 AI Agents 在某个特定时间点发生的事件或行为。这些事件或行为可以是 AI Agents 与用户的交互,也可以是 AI Agents 之间的通信和協(xie)作。

此外,当 Agents 之间进行通信和协作时,这些交互可以触发新的自然语言语句(ju),这些语句也会被记录在 Stream 中,形成新的观察。

Retrieval

根据相关性、新近度和重要性等因素显示上下文的模型,以指导 Agents 的行为。

? 新近度(Recency):最近事件的得分较高;

? 重要性(Importance):區(qu)分世俗(su)记忆和核心记忆,这个可以通过直接问 LLM 来实现;

? 相关性(Relevance):基于某个信息或概念与当前情况或查询的相关程度。

世俗记忆:通常指与个人日常生活和经历相关的常规记忆,例如某个人的姓(xing)名、生日、電(dian)话号码、家庭(ting)住(zhu)址(zhi)、工作職(zhi)责等等。这些信息通常与个人的身份、社交网络以及日常活动密切(qie)相关,是人们在日常生活中所需要掌(zhang)握(wo)和记忆的信息。

核心记忆:相较于世俗记忆,核心记忆则更多地涉及到人类共(gong)性的知识和技能,例如语言、数学、科学、藝(yi)术等等。这些信息通常与人类文化、历史和智慧(hui)相关,是人类在长期文化演化和认知发展中所积累(lei)的知识和技能。

Reflection

反射机制是指随着时间的推移,模型将记忆合成为更高层次的推理,并指导 AI Agents 的未来行为。其中,推理是指对过去事件的更高层次的总结和摘(zhai)要。需要特别注意的是,这与前文提到的自我反思(self-reflection) 有一些不同。

该机制可以提示 LLM 最近的 100 个观察结果,并根据给定的一组观察/陈述生成 3 个最突出的高级问题,然后让 LLM 回答这些问题。

Planning & Reacting 规划与反应 : 将反射和环境信息转化为行动

? 计划本质上是为了优化当前情境下的决策和行动,以提高可信度;

? Prompt 模板:{Intro of an agent X}. Here is X's plan today in broad strokes: 1);

? 在规划和反应时,AI Agents 会考慮(lv)它们之间的关系,以及一个 AI Agent 对另一个 AI Agent 的观察和反馈;

? 环境信息往往存在于树状结构中。

Fig. 12. 生成 AI Agents 架构,Source:Park et al,2023

这个有趣的模拟引发了一些突发的社会行为,例如信息的传播(bo)扩散和关系记忆等,在实验中出现了两个 AI Agents 延(yan)续对话主题的行为以及舉(ju)辦(ban)聚会、并邀(yao)请许多其他人等社交事件。

AI Agent 的概念验证

AutoGPT 是一个备受关注的项目,它探索了以 LLM 作为主控制器来建立 AI Agents 的可能性。虽然该项目在自然语言界面的可靠性方面仍存在很多问题,但它仍然是一个很酷(ku)的概念验证。在这个项目中,AutoGPT 使用了许多代码来解析数据格式,以帮助 AI Agents 更好地理解和处理自然语言输入。

以下是 AutoGPT 使用的系统消(xiao)息,其中 {{...}} 是用户输入:

You are {{ai-name}}, {{user-provided AI bot deion}}.

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":""

2. Browse Website:"browse_website", args:"url":"","question":""

3. Start GPT Agent:"start_agent", args:"name":"","task":"","prompt":""

4. Message GPT Agent:"message_agent", args:"key":"","message":""

5. List GPT Agents:"list_agents", args:

6. Delete GPT Agent:"delete_agent", args:"key":""

7. Clone Repository:"clone_repository", args:"repository_url":"","clone_path":""

8. Write to file:"write_to_file", args:"file":"","text":""

9. Read file:"read_file", args:"file":""

10. Append to file:"append_to_file", args:"file":"","text":""

11. Delete file:"delete_file", args:"file":""

12. Search Files:"search_files", args:"directory":""

13. Analyze Code:"analyze_code", args:"code":""

14. Get Improved Code:"improve_code", args:"suggestions":"","code":""

15. Write Tests:"write_tests", args:"code":"","focus":""

16. Execute Python File:"execute_python_file", args:"file":""

17. Generate Image:"generate_image", args:"prompt":""

18. Send Tweet:"send_tweet", args:"text":""

19. Do Nothing:"do_nothing", args:

20. Task Complete (Shutdown):"task_complete", args:"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是另一个旨在创建一个完整的代码存储库,以执行指定的自然语言任务的项目。为了实现这个目标,GPT 工程师需要考虑构建哪(na)些较小的组件,并在必要时与用户进行交互以澄(cheng)清问题或获取更多信息。也就是说,将最接近真实意图的自然语言任务转化为可执行的代码,以确保任务需求得到正确理解和实现。

以下是发送到 GPT 工程师使用的 OpenAI ChatComplete 端(duan)点的任务说明示例对话,{{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"

}

]

随后,一旦 GPT 工程师与用户澄清了任务需求,AI Agents 会进入代码编寫(xie)模式,并使用不同的系统消息来执行编写代码的任务,系统消息如下:

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"

}

]

06.LLM Agents 的局限

在研究了许多以 LLM 为中心构建的 AI Agents 的关键思想和实验成果之后,基于 LLM 搭(da)建 Agents 系统的实现还存在以下限制:

? 有限的上下文容量(Finite context length)

这会限制系统的历史信息、详细说明、API 调用上下文和响应的能力。系统的设计必須(xu)在这种有限的通信带寬(kuan)下工作,但这种限制使得自我反思等机制无法从很长或无限的上下文窗口中受益(yi)。尽管向量存储和检索可以提供对更大的知识库的访问,但它们的表示能力不如 Full Attention 机制强大。

? 长期规划和任务分解方面的挑战(Challenges in long-term planning and task decomposition)

在漫(man)长的历史中进行规划和有效探索解决方案空间仍然具有很大的挑战性。尽管 LLM 能够尝试调整计划来应对意外错误,但与从反复试验中学习的人类相比,它的魯(lu)棒(bang)性较低。

? 自然语言接口的可靠性挑战(Reliability of natural language interface)

当前的 Agents 系统依赖自然语言作为 LLM 与记忆、工具等外部组件的接口,然而,模型输出的可靠性有问题,LLM 可能会出现格式错误、甚至在一些时候也会表现出叛(pan)逆(ni)行为,如拒绝遵循指令等。为了提高自然语言接口的可靠性,就需要进一步改进自然语言处理技术,以减少错误和提高模型的鲁棒性。因此,目前大部分 Agents demo 的代码都側(ce)重于分析模型的输出,以检测并纠正潜在的错误。

Reference

https://lilianweng.github.io/posts/2023-06-23-agent/返回搜狐(hu),查看(kan)更多

责任编輯(ji):

发布于:山西吕梁石楼县