發(fā)展脈絡(luò)
Prompt 工程
通過(guò)描述角色技能确镊、任務(wù)關(guān)鍵詞臂容、任務(wù)目標(biāo)及任務(wù)背景科雳,告知大模型需要輸出的格式,并調(diào)用大模型進(jìn)行輸出脓杉。如角色扮演(如摘要助手糟秘、翻譯官等)、少樣本提示和零樣本提示球散。
你現(xiàn)在是一個(gè)智能的文本摘要助手尿赚,在充分理解文本的情況下,根據(jù)文本關(guān)鍵信息對(duì)文本進(jìn)行摘要蕉堰。你需要遵循以下步驟:首先凌净,整體理解文本的內(nèi)容并分析出重要內(nèi)容;其次嘁灯,根據(jù)文本生成摘要泻蚊,內(nèi)容需準(zhǔn)確、語(yǔ)法結(jié)構(gòu)需連貫順暢丑婿、語(yǔ)言表達(dá)需簡(jiǎn)潔明了性雄;最后没卸,將摘要結(jié)果輸出,只輸出摘要的結(jié)果秒旋。
你是一名翻譯官约计,將以下語(yǔ)句從中文翻譯成英文。你需要遵循以下步驟:首先迁筛,整體理解句子的涵義煤蚌,注意可能包含特殊標(biāo)記符,翻譯時(shí)原封不動(dòng)保留。
你現(xiàn)在是一個(gè)排版助手细卧,使用Markdown格式對(duì)文本進(jìn)行排版尉桩。你需要遵循以下步驟:首先劳秋,理解整體文本的意思喇辽;其次,保持文本的內(nèi)容排版后完全不變育拨。
Prompt 外掛
僅憑 Prompt 工程無(wú)法滿(mǎn)足大模型需要止邮,比如大模型本身的諸多缺陷这橙,如不能及時(shí)更新知識(shí),上下文有限等导披。所以引入插件方式屈扎,比如引入向量數(shù)據(jù)庫(kù),通過(guò)額外數(shù)據(jù)的補(bǔ)充撩匕,再提交給大模型做 Prompt 工程鹰晨。
后續(xù)又引入了外掛模式,讓大模型調(diào)用函數(shù)和使用工具滑沧。比如:當(dāng)人們發(fā)現(xiàn)大模型的推理能力很差時(shí)并村,調(diào)用通用規(guī)劃器來(lái)解決問(wèn)題規(guī)劃。
LLM-As-Planner:直接使用LLM滓技,輸出結(jié)論。
LLM-As-Planner(In-context Learning):上下文學(xué)習(xí)棚潦,提供了一對(duì)用自然語(yǔ)言和PDDL描述的問(wèn)題令漂,作為L(zhǎng)LM的上下文。
LLM+P(In-context Learning):
- 大模型輸出合適的問(wèn)題描述(Problem PDDL)作為通用規(guī)劃器的輸入丸边。
- 使用通用規(guī)劃器解決問(wèn)題叠必。
- 將規(guī)劃器的輸出轉(zhuǎn)化為自然語(yǔ)言。
思維鏈
大模型能否像人類(lèi)一樣妹窖,一步一步得思考問(wèn)題纬朝?畢竟,人類(lèi)在解決問(wèn)題時(shí)骄呼,也是逐漸構(gòu)建解決方案共苛,而并非立即給出答案判没。因此,開(kāi)始出現(xiàn)了一系列的嘗試解法隅茎,比如思維鏈澄峰、多思維鏈、思維樹(shù)等辟犀。
- CoT(Chain of thought)
通過(guò) Prompt 要求 LLM 有將困難任務(wù)逐步分解成更小更簡(jiǎn)單的步驟俏竞,賦予了LLM 規(guī)劃能力;相比直接輸出方法堂竟,可以顯著提升語(yǔ)言模型在數(shù)學(xué)難題和通用推理任務(wù)上的性能魂毁。
問(wèn)題1:羅杰有5個(gè)網(wǎng)球,又買(mǎi)了兩盒出嘹,每盒有3個(gè)網(wǎng)球席楚,他現(xiàn)在一共有多少網(wǎng)球?回答:11
問(wèn)題2:食堂有23個(gè)蘋(píng)果疚漆,吃掉20個(gè)又買(mǎi)了6個(gè)酣胀,一共還有多少個(gè)?回答:27
實(shí)現(xiàn)方式:
少樣本輸入:一種是示例說(shuō)明娶聘,即通過(guò)給定問(wèn)題和答案的同時(shí)闻镶,提供思考過(guò)程。這樣丸升,當(dāng)詢(xún)問(wèn)模型時(shí)铆农,模型會(huì)模仿此過(guò)程,逐漸思考并給出答案狡耻。
零樣本輸入:一種是具體說(shuō)明墩剖,即要求模型詳細(xì)地、一步步地思考夷狰。
- CoT-SC
CoT的集成方案岭皂,考慮到CoT有時(shí)可能出現(xiàn)錯(cuò)誤,所以通過(guò)多次采樣的方式獲得多個(gè)CoT的結(jié)果沼头,最終返回預(yù)測(cè)最多次的答案爷绘。
問(wèn)題:每天有16個(gè)蛋,每天自己吃3個(gè)进倍,朋友用4個(gè)土至,一個(gè)蛋買(mǎi)2塊,每天可以賺多少錢(qián)猾昆?CoT回答:14
- ToT****(Tree of Thoughts)
在CoT-SC方案中也有局限性陶因,例如24點(diǎn)問(wèn)題就不能很好解決。使用ToT方案如下:將問(wèn)題進(jìn)行垂直分解垂蜗,分成三步來(lái)做楷扬,每一步分解成多個(gè)子問(wèn)題解幽,類(lèi)似于動(dòng)態(tài)規(guī)劃的做法,就好像把一個(gè)大任務(wù)拆解成了三個(gè)小的子任務(wù)毅否,然后再一步一步地去實(shí)現(xiàn)它亚铁。
輸入:4 9 10 13
輸出:使用這四位數(shù)進(jìn)行加減乘除,能否得到24點(diǎn)螟加。
步驟:建立 thought 樹(shù)徘溢,需要一個(gè) thought 生成器和 thought 評(píng)估器。
總結(jié):每個(gè)步驟都分解為多步捆探,因而得到樹(shù)形的任務(wù)鏈然爆。通過(guò)BFS(廣度優(yōu)先搜索)或 DFS(深度優(yōu)先搜索)來(lái)執(zhí)行,在節(jié)點(diǎn)通過(guò)prompt分類(lèi)器或者投票進(jìn)行評(píng)估決策黍图。
反饋
思維鏈的功能主要在于任務(wù)拆分和組合曾雕,缺點(diǎn)在于不能與外界進(jìn)行互動(dòng),所以需要反饋機(jī)制助被。
- ReAct:Synergizing Reasoning and Acting in Language Models
思路:將大任務(wù)分解為多個(gè)actions組合(與外部工具進(jìn)行交互剖张,如聯(lián)網(wǎng)搜索)+思維鏈。
- Action(動(dòng)作):就是要采取的外部工具揩环。
- Thought(思考):就是LLM對(duì)用戶(hù)question的思考搔弄,文字描述,遇到了什么問(wèn)題丰滑,應(yīng)該執(zhí)行什么顾犹。
- Observation(觀察):Action執(zhí)行的結(jié)果。
比如褒墨,詢(xún)問(wèn)一個(gè)關(guān)于科羅拉多造山帶的相關(guān)問(wèn)題炫刷,它就會(huì)去通過(guò)搜索工具進(jìn)行搜索,如果搜索結(jié)果沒(méi)有提到東部地區(qū)郁妈,它會(huì)繼續(xù)搜索東部地區(qū)的數(shù)據(jù)浑玛,然后繼續(xù)一步一步地思考,根據(jù)結(jié)果反復(fù)思考噩咪,直到完成這一項(xiàng)任務(wù)锄奢。
- Reflexion: Language Agents with Verbal Reinforcement Learning
在ReAct的基礎(chǔ)上,希望大模型在完成一次任務(wù)后剧腻,能夠積累經(jīng)驗(yàn),所以產(chǎn)生了借鑒強(qiáng)化學(xué)習(xí)思路的反射機(jī)制涂屁,能夠讓大模型記住每次任務(wù)的完成情況书在,無(wú)論效果好壞,以供未來(lái)參考拆又。
背景:論文提出了一種強(qiáng)化學(xué)習(xí)方法儒旬。傳統(tǒng)的調(diào)優(yōu)主要是通過(guò)訓(xùn)練調(diào)整網(wǎng)絡(luò)參數(shù)栏账,而文中提出的方法則是“分析”錯(cuò)誤,形成反思的“文字”并保存栈源,在之后的決策中挡爵,將其作為上下文以幫助決策。Reflexion 將環(huán)境中的反饋轉(zhuǎn)化為文本摘要甚垦,然后將其作為附加上下文添加到下一輪的 LLM 代理中茶鹃,從以前的錯(cuò)誤中學(xué)習(xí),以在未來(lái)任務(wù)中表現(xiàn)更好艰亮。
Reflexion 框架流程:
- Actor:首先闭翩,LLM基于Query生成文本和動(dòng)作,這步探索了各種 Actor 模型迄埃,包括 COT 和 ReAct疗韵,從而豐富了探索空間。
- 評(píng)估:用于評(píng)估 Actor 輸出的質(zhì)量侄非。將生成的軌跡作為輸入蕉汪,計(jì)算在給定任務(wù)上下文中的獎(jiǎng)勵(lì)分?jǐn)?shù)。
- Heuristic:計(jì)算一個(gè)啟發(fā)函數(shù)h逞怨,決定是否重啟env者疤,開(kāi)啟新實(shí)驗(yàn)(當(dāng)前決策路徑無(wú)效、冗余等)骇钦。
- Self-reflection:自我反思宛渐,使用 LLM 實(shí)現(xiàn),用于生成基于語(yǔ)言的反思眯搭。將生成軌跡和評(píng)估分?jǐn)?shù)生成摘要窥翩,作為上下文添加到下一輪。
Agent
Agent = 大語(yǔ)言模型/多模態(tài)模型 + 記憶 + 規(guī)劃 + 工具使用
理論基礎(chǔ)
為什么引入Agent鳞仙? 直接使用LLM有什么限制寇蚊?
- LLM 知識(shí)有限且更新不及時(shí),可以使用Agent獲取更新的信息棍好;
- LLM 上下文有限仗岸,Agent是LLM context未達(dá)到無(wú)限之前的有效外置途徑;
- LLM 無(wú)法同時(shí)擔(dān)任多個(gè)角色借笙,在需要協(xié)作的任務(wù)中無(wú)法發(fā)揮更好的能力扒怖;
大語(yǔ)言模型中發(fā)揮認(rèn)知協(xié)同作用:通過(guò)多人格自我協(xié)作成為任務(wù)解決代理 概述:人類(lèi)智能依賴(lài)于認(rèn)知協(xié)同的概念,在不同認(rèn)知過(guò)程之間進(jìn)行合作和信息整合业稼,相比單獨(dú)的認(rèn)知過(guò)程盗痒,能夠產(chǎn)生更優(yōu)越的結(jié)果。盡管大型語(yǔ)言模型(LLMs)在作為通用任務(wù)解決代理方面表現(xiàn)出有希望的性能低散,但它們?nèi)匀辉谛枰罅款I(lǐng)域知識(shí)和復(fù)雜推理的任務(wù)中遇到困難俯邓。在這項(xiàng)工作中骡楼,我們提出了“Solo Performance Prompting”(SPP)的概念,它通過(guò)與多個(gè)人物進(jìn)行多輪自我協(xié)作稽鞭,將單個(gè)LLM轉(zhuǎn)變?yōu)檎J(rèn)知協(xié)同者鸟整。認(rèn)知協(xié)同者指的是一種智能代理,它與多個(gè)思維合作朦蕴,結(jié)合他們的個(gè)體優(yōu)勢(shì)和知識(shí)篮条,以增強(qiáng)復(fù)雜任務(wù)中的問(wèn)題解決和整體性能。通過(guò)根據(jù)任務(wù)輸入動(dòng)態(tài)地識(shí)別和模擬不同的人物梦重,SPP釋放了LLMs中認(rèn)知協(xié)同的潛力兑燥。我們發(fā)現(xiàn),在LLMs中分配多個(gè)細(xì)粒度的人物角色琴拧,相比于使用單個(gè)或固定數(shù)量的人物角色降瞳,能夠激發(fā)更好的問(wèn)題解決能力。我們?cè)谌齻€(gè)具有挑戰(zhàn)性的任務(wù)上評(píng)估了SPP:創(chuàng)意性問(wèn)答蚓胸、Codenames協(xié)作和邏輯格子謎題挣饥,涵蓋了知識(shí)密集型和推理密集型兩種類(lèi)型。與之前僅增強(qiáng)LLMs推理能力的作品(如Chain-of-Thought)不同沛膳,SPP有效地激發(fā)了內(nèi)部知識(shí)獲取能力扔枫,減少了幻覺(jué),并保持了強(qiáng)大的推理能力锹安。
系統(tǒng)組成
一個(gè)基于LLM的自主Agent系統(tǒng)的幾個(gè)關(guān)鍵組成部分:
-
Planning(規(guī)劃)
- 任務(wù)分解:(思維鏈)代理可以將大型任務(wù)分解為更小短荐、更易管理的子目標(biāo),從而有效地處理復(fù)雜任務(wù)叹哭。
- 反饋:(反饋機(jī)制)代理可以對(duì)過(guò)去的行為進(jìn)行自我批評(píng)和自我反思忍宋,從錯(cuò)誤中學(xué)習(xí)并改進(jìn)未來(lái)的步驟,從而提高最終結(jié)果的質(zhì)量风罩。
-
Memory(記憶)
-
Tool use(工具使用)
- 通過(guò)輸出指令糠排,來(lái)調(diào)用額外的API,彌補(bǔ) LLM確實(shí)的信息和能力超升。當(dāng)前信息入宦、代碼執(zhí)行能力、對(duì)專(zhuān)有信息源的訪(fǎng)問(wèn)等室琢。
Agent案例
1. 演示平臺(tái)
智譜清言:https://chatglm.cn/main/gdetail/65d2f07bb2c10188f885bd89 (PPT助手)
百度飛漿:https://aistudio.baidu.com/application/center
字節(jié)Coze:https://www.coze.com/store/bot
Dify:https://dify.ai/
2. 文案創(chuàng)作助手
使用百度平臺(tái):https://ernie-bot-agent.readthedocs.io/zh-cn/latest/
任務(wù):
核心的使用案例代碼乾闰,包含記憶、大模型和工具的使用
# 記憶
memory = SlidingWindowMemory(max_round=10) # 滑動(dòng)窗口盈滴,最近10輪
# 大模型調(diào)用
llm_final = ERNIEBot(model="ernie-4.0", api_type="aistudio", enable_multi_step_tool_call=True)
image_path = '1.jpg'
# 工具使用:獲取圖片信息工具汹忠、文案創(chuàng)作工具
response = await FunctionAgent(llm=llm_final, tools=[GetInformation(llm, image_path),
plan_tool], memory=memory, max_steps=10).run("為1.jpg生成朋友圈文案")
工具代碼如下:
class GetPlanInputView(ToolParameterView):
recommendation: str = Field(description="圖像信息篩選結(jié)果")
class GetPlanOutputView(ToolParameterView):
response: str = Field(description="營(yíng)銷(xiāo)文案生成")
class CatchInformation(Tool):
description: str = "CatchInformation是一款專(zhuān)業(yè)且貼心的營(yíng)銷(xiāo)文案生成的工具"
input_type: Type[ToolParameterView] = GetPlanInputView
ouptut_type: Type[ToolParameterView] = GetPlanOutputView
def __init__(self, llm: ERNIEBot):
self.llm = llm
async def __call__(self, recommendation: str) -> Dict[str, str]:
prompt = f"請(qǐng)根據(jù)圖像信息篩選結(jié)果:\n{recommendation}\n輸出符合圖像信息的營(yíng)銷(xiāo)文案,請(qǐng)一步一步思考后輸出結(jié)果。"
response = await self.llm.chat([HumanMessage(prompt)])
return {"response": response.content}
SYSTEM_MESSAGE = "你是一個(gè)營(yíng)銷(xiāo)文案寫(xiě)作助手宽菜,你的任務(wù)是根據(jù)圖像信息篩選結(jié)果輸出符合圖像信息的營(yíng)銷(xiāo)文案。請(qǐng)注意竿报,你只需要輸出符合圖像信息的營(yíng)銷(xiāo)文案铅乡,不要輸出多余的解釋。"
llm = ERNIEBot(model="ernie-4.0", system=SYSTEM_MESSAGE)
# 將這個(gè)工具實(shí)例化烈菌,等待調(diào)用
plan_tool = CatchInformation(llm)
3. Appagent(操作APP)
代碼:https://github.com/mnotgod96/AppAgent?tab=readme-ov-file
介紹:通過(guò)自主學(xué)習(xí)和模仿人類(lèi)的點(diǎn)擊和滑動(dòng)手勢(shì)阵幸,在手機(jī)上執(zhí)行各種任務(wù)。如下方發(fā)郵件芽世、設(shè)置鬧鐘等挚赊。
LLM:使用 gpt-4-vision-preview 或者 qwen-vl-max 多模態(tài)大模型。
Action:使用 adb 命令進(jìn)行截圖济瓢、當(dāng)前界面的xml文件荠割;點(diǎn)擊、長(zhǎng)按旺矾、滑動(dòng)蔑鹦、輸入文字等。
Memory:主要是在訓(xùn)練階段箕宙,將訓(xùn)練過(guò)程中的任務(wù)和執(zhí)行過(guò)程用txt記錄下來(lái)嚎朽。
用戶(hù)輸入:打開(kāi)短信,發(fā)送XXX內(nèi)容給Lihua柬帕。
整體流程:
- 圖片理解:通過(guò)adb獲取當(dāng)前頁(yè)面截圖和xml布局文件哟忍,輸入給LLM獲取截圖操作位置的編號(hào)。
- 操作指令:通過(guò)LLM理解用戶(hù)輸入陷寝,并通過(guò) observation--Thought--Action--summary 完成一輪操作锅很。
- 重復(fù)上述兩步,直到完成用戶(hù)目標(biāo)盼铁。
4. (Multi Agent)Generative Agents Simulation:生成式Agent
Generative Agents 是一個(gè)超級(jí)有趣的實(shí)驗(yàn)粗蔚,其中 25 個(gè)虛擬角色,每個(gè)角色都由 LLM 支持的代理控制饶火,在沙盒環(huán)境中生活和交互鹏控,其靈感來(lái)自《模擬人生》。生成代理為交互式應(yīng)用程序創(chuàng)建可信的人類(lèi)行為模擬肤寝,可以根據(jù)自己的經(jīng)歷当辐、興趣和目標(biāo)來(lái)規(guī)劃自己的行為,例如起床鲤看、做早餐缘揪、去工作、畫(huà)畫(huà)、寫(xiě)作找筝、交流蹈垢、回憶和反思等。
- 為每個(gè)AI創(chuàng)建人設(shè)
為每個(gè)虛擬人物編寫(xiě)人物介紹和社會(huì)關(guān)系袖裕。如藥店店員曹抬、喜歡幫助別人,家人急鳄、鄰居和朋友關(guān)系等谤民。
- 創(chuàng)建可互動(dòng)的小鎮(zhèn)
智能體將會(huì)在這個(gè)被稱(chēng)為 SmallVille的小鎮(zhèn)里生活。研究人員為小鎮(zhèn)配置了很多可以互動(dòng)的組件疾宏,有居民區(qū)张足,Cafe,酒吧坎藐,大學(xué)为牍,商店,公園顺饮。智能體與場(chǎng)景是可以互動(dòng)的:例如在圖書(shū)館看書(shū)吵聪,在酒吧喝酒。智能體之間也可以互動(dòng):例如在Cafe吃飯的時(shí)候聊天兼雄,在公園相遇的時(shí)候一起運(yùn)動(dòng)吟逝。
- 為每個(gè)AI創(chuàng)建記憶流管理系統(tǒng)
記憶(在圖中用雙層框標(biāo)注):
- 長(zhǎng)期記憶 Memory Stream:把感知到的大量信息存入記憶流
- 瞬時(shí)記憶 Retrieved Memories:檢索出相關(guān)的少量記憶用于做出當(dāng)前想到的事情,讓大語(yǔ)言模型決定接下來(lái)要做出的行動(dòng)
操作(圓角矩形):每一個(gè)操作
- 感知 Perceive:智能體獲取當(dāng)前的狀態(tài)赦肋,例如:when, where, who, what
- 檢索 Retrieve:根據(jù)當(dāng)下感知到的內(nèi)容块攒,開(kāi)始回想相關(guān)的記憶
- 行動(dòng) Action:根據(jù)當(dāng)前想到的事情,讓大語(yǔ)言模型決定接下來(lái)的行動(dòng)
- 環(huán)路1:反思 Reflect:對(duì)檢索出的記憶進(jìn)行高層次的提煉佃乘,處理后再加回 記憶流
- 環(huán)路2:計(jì)劃 Planning:在固定的時(shí)刻內(nèi)制定未來(lái)的計(jì)劃囱井,可以隨時(shí)修改
參考文獻(xiàn)
- https://lilianweng.github.io/posts/2023-06-23-agent/
- https://blog.csdn.net/weixin_43564920/article/details/136004972
- lilianweng.github.io
- https://arxiv.org/abs/2304.11477
- https://arxiv.org/abs/2210.03629
- https://arxiv.org/abs/2304.03442
- https://zhuanlan.zhihu.com/p/647836219
- https://zhuanlan.zhihu.com/p/648376562
- Agent理論介紹