生成式AI的智能演化至今,人機(jī)協(xié)同呈現(xiàn)了三種模式:
嵌入(embedding)模式。用戶通過與AI進(jìn)行語(yǔ)言交流,使用提示詞來設(shè)定目標(biāo),然后AI協(xié)助用戶完成這些目標(biāo),比如普通用戶向生成式AI輸入提示詞創(chuàng)作小說、音樂作品、3D內(nèi)容等。在這種模式下,AI的作用相當(dāng)于執(zhí)行命令的工具,而人類擔(dān)任決策者和指揮者的角色。
副駕駛(Copilot)模式。2021年微軟在GitHub首次引入了Copilot(副駕駛)的概念。GitHub Copilot是一個(gè)輔助開發(fā)人員編寫代碼的AI服務(wù)。2023年5月,微軟在大模型的加持下,Copilot迎來全面升級(jí),推出Dynamics 365 Copilot、Microsoft 365 Copilot和Power Platform Copilot等,并提出“Copilot是一種全新的工作方式”的理念。在這種模式下,人類和AI更像是合作伙伴,共同參與到工作流程中,各自發(fā)揮作用。AI介入到工作流程中,從提供建議到協(xié)助完成流程的各個(gè)階段。例如,在軟件開發(fā)中,AI可以為程序員編寫代碼、檢測(cè)錯(cuò)誤或優(yōu)化性能提供幫助。人類和AI在這個(gè)過程中共同工作,互補(bǔ)彼此的能力。AI更像是一個(gè)知識(shí)豐富的合作伙伴,而非單純的工具。
智能體(Agent)模式。人類設(shè)定目標(biāo)和提供必要的資源(例如計(jì)算能力),AI獨(dú)立地承擔(dān)大部分工作,最后人類監(jiān)督進(jìn)程以及評(píng)估最終結(jié)果。這種模式下,AI充分體現(xiàn)了智能體的互動(dòng)性、自主性和適應(yīng)性特征,接近于獨(dú)立的行動(dòng)者,而人類則更多地扮演監(jiān)督者和評(píng)估者的角色。
人機(jī)協(xié)同三種模式示意圖:
OpenAI內(nèi)部工程師Weng Lilian 在《LLM Powered Autonomous Agents》文章中將AI Agent定義為,以大語(yǔ)言模型為大腦驅(qū)動(dòng),具有自主理解感知、規(guī)劃、記憶和使用工具的能力,能自動(dòng)化執(zhí)行完成復(fù)雜任務(wù)的系統(tǒng)。
基于LLM驅(qū)動(dòng)的Agent基本框架:
它具有記憶、規(guī)劃、行動(dòng)和使用工具四個(gè)主要模塊:
記憶(Memory)。記憶模塊負(fù)責(zé)存儲(chǔ)信息,包括過去的交互、學(xué)習(xí)到的知識(shí),甚至是臨時(shí)的任務(wù)信息。有效的記憶機(jī)制能夠保障智能體在面對(duì)新的或復(fù)雜的情況時(shí),調(diào)用以往的經(jīng)驗(yàn)和知識(shí)。例如,記憶功能的聊天機(jī)器人可以記住用戶的偏好或先前的對(duì)話內(nèi)容,提供更個(gè)性化和連貫的交流體驗(yàn)。它分為短期記憶和長(zhǎng)期記憶:a.短期記憶,用于上下文學(xué)習(xí);b.長(zhǎng)期記憶,提供長(zhǎng)時(shí)間保留和回憶信息的能力,通常通過外部向量數(shù)據(jù)庫(kù)和快速檢索實(shí)現(xiàn)。長(zhǎng)期記憶積累了大量行業(yè)領(lǐng)域的數(shù)據(jù)和知識(shí),使智能體更強(qiáng)大、更具行業(yè)深度、個(gè)性化和專業(yè)化能力。
規(guī)劃(Planning)。規(guī)劃模塊包括事前規(guī)劃和事后反思兩個(gè)階段。在事前規(guī)劃階段,智能體通過預(yù)測(cè)和決策制定來規(guī)劃未來行動(dòng)。例如,在執(zhí)行復(fù)雜任務(wù)時(shí),智能體將大目標(biāo)分解為可管理的子目標(biāo),以高效地規(guī)劃一系列步驟或行動(dòng),以達(dá)到預(yù)期結(jié)果。在事后反思階段,智能體能夠檢查和改進(jìn)制定計(jì)劃中存在的不足之處。它會(huì)反思錯(cuò)誤和不足,并吸取經(jīng)驗(yàn)教訓(xùn)進(jìn)行改進(jìn)。這些經(jīng)驗(yàn)將被納入長(zhǎng)期記憶中,幫助智能體避免錯(cuò)誤,并更新其對(duì)世界的認(rèn)知。
工具使用(Tool use)。工具使用模塊指的是智能體能夠利用外部資源或工具來執(zhí)行任務(wù)。如學(xué)習(xí)調(diào)用外部API來獲取模型權(quán)重中缺失的額外信息,包括當(dāng)前信息、代碼執(zhí)行能力、對(duì)專有信息源的訪問等,以此來補(bǔ)足LLM自身不足。例如LLM的訓(xùn)練數(shù)據(jù)不是實(shí)時(shí)更新的,這時(shí)可以使用工具訪問互聯(lián)網(wǎng)來獲取最新信息。智能體使用工具比人類更為高效,通過調(diào)用不同的API或工具,完成復(fù)雜任務(wù)和輸出高質(zhì)量結(jié)果,這種使用工具的方式也代表了智能體的一個(gè)重要特點(diǎn)和優(yōu)勢(shì)。
行動(dòng)(Action)。行動(dòng)模塊是智能體實(shí)際執(zhí)行決定或響應(yīng)的部分。面對(duì)不同的任務(wù),智能體系統(tǒng)有一個(gè)完整的行動(dòng)策略集,在決策時(shí)可以選擇需要執(zhí)行的行動(dòng),比如記憶檢索、推理、學(xué)習(xí)、編程等。
這四個(gè)模塊相互配合使智能體能夠在更廣泛的情境中采取行動(dòng)和作出決策,以更智能、更高效的方式執(zhí)行復(fù)雜任務(wù)。
基于大模型的Agent不僅可以讓每個(gè)人都有增強(qiáng)能力的專屬智能助理,還將改變?nèi)藱C(jī)協(xié)同的模式,帶來更為廣泛的人機(jī)融合。
2.1 垂直領(lǐng)域AI Agent 實(shí)現(xiàn)路徑
垂直領(lǐng)域 AI Agent 整體架構(gòu)示意圖:
AI Agent 整體流程示意圖:
LangChain 是一個(gè)用于開發(fā)由語(yǔ)言模型驅(qū)動(dòng)的應(yīng)用程序的框架。主要作用為允許與 LLM 模型進(jìn)行交互,使用 LLM 模型與外部數(shù)據(jù)源進(jìn)行連接。
實(shí)現(xiàn)例如:
LLM 調(diào)用
支持多種模型接口,比如 OpenAI、Hugging Face、AzureOpenAI ...
Fake LLM,用于測(cè)試
緩存的支持,比如 in-mem(內(nèi)存)、SQLite、Redis、SQL
用量記錄
支持流模式
Prompt管理,支持各種自定義模板
擁有大量的文檔加載器,比如 Email、Markdown、PDF、Youtube ...
對(duì)索引的支持
文檔分割器
向量化
對(duì)接向量存儲(chǔ)與搜索,比如 Chroma、Pinecone、Qdrand
Chains
LLMChain
各種工具Chain
LangChainHub
LangChain組件
Loader 加載器
從指定源進(jìn)行加載數(shù)據(jù)的。比如:文件夾 DirectoryLoader、Azure 存儲(chǔ) AzureBlobStorageContainerLoader、CSV文件 CSVLoader、印象筆記 EverNoteLoader、Google網(wǎng)盤 GoogleDriveLoader、任意的網(wǎng)頁(yè) UnstructuredHTMLLoader、PDF PyPDFLoader、S3 S3DirectoryLoader/S3FileLoader、 YoutubeLoader 等,官方提供許多加載器可使用。
Document 文檔
當(dāng)使用Loader加載器讀取到數(shù)據(jù)源后,數(shù)據(jù)源需要轉(zhuǎn)換成 Document 對(duì)象后,后續(xù)才能進(jìn)行使用。
Text Spltters 文本分割
為什么需要分割文本?因?yàn)椴还苁前盐谋井?dāng)作 prompt 發(fā)給 openai api ,還是使用 openai api embedding 功能都是有字符限制的,需要使用文本分割器去分割加載的 Document。
Vectorstores 向量數(shù)據(jù)庫(kù)
數(shù)據(jù)相關(guān)性搜索其實(shí)是向量運(yùn)算。所以,不管我們是使用 openai api embedding 功能還是直接通過向量數(shù)據(jù)庫(kù)直接查詢,都需要將我們的加載進(jìn)來的數(shù)據(jù) Document 進(jìn)行向量化,才能進(jìn)行向量運(yùn)算搜索。
Chain 鏈
Chain 理解為任務(wù)。一個(gè) Chain 就是一個(gè)任務(wù),多個(gè)任務(wù)組成一個(gè)Chain鏈。
Agent 代理
Agent可以動(dòng)態(tài)的選擇和調(diào)用Chain鏈或者已有的工具。
Embedding
用于計(jì)算文本的相關(guān)性。這個(gè)也是 OpenAI API 能實(shí)現(xiàn)構(gòu)建自己知識(shí)庫(kù)的關(guān)鍵所在。
2.3 思維鏈(Chain of Thought)
2021年,提示學(xué)習(xí)(prompt learning)浪潮興起,而早在2020年,OpenAI 在《Language Models are Few-Shot Learners》論文中提出了如何使用 prompt learning 提升大模型的推理能力。
論文中提出了 Zero-shot、One-shot、Few-shot 三種不同的 prompt 方法
Few-Shot(FS)是指模型在推理時(shí)給予少量樣本,但不允許進(jìn)行權(quán)重更新。對(duì)于一個(gè)典型數(shù)據(jù)集,F(xiàn)ew-shot 有上下文和樣例。Few-shot 的工作方式是提供 K 個(gè)樣本,然后期望模型生成對(duì)應(yīng)的結(jié)果。通常將 K 設(shè)置在 10 到 100 的范圍內(nèi),因?yàn)檫@是可以適應(yīng)模型上下文窗口的示例數(shù)量(nctx = 2048)。Few-shot 的主要優(yōu)點(diǎn)是大幅度降低了對(duì)特定任務(wù)數(shù)據(jù)的需求,并減少了從微調(diào)數(shù)據(jù)集中學(xué)習(xí)過度狹窄分布。主要缺點(diǎn)是該方法的結(jié)果迄今為止遠(yuǎn)不如最先進(jìn)的微調(diào)模型,仍需要一小部分特定任務(wù)的數(shù)據(jù)。
One-Shot(1S)與 Few-Shot 類似,只允許一個(gè)樣本(除了任務(wù)的自然語(yǔ)言描述外)。將 One-Shot 與 Few-Shot、Zero-Shot 區(qū)分開的原因是它最接近某些任務(wù)與人類溝通的方式。相比之下,如果沒有示例,有時(shí)很難傳達(dá)任務(wù)的內(nèi)容或格式。
Zero-Shot(0S)和 One-shot 類似,但不允許提供樣本,只給出描述任務(wù)的自然語(yǔ)言指令。在某些情況下,即使是人類,在沒有例子的情況下,也可能難以理解任務(wù)的格式。例如,如果要求某人“制作一張關(guān)于200米沖刺世界紀(jì)錄的表格”,這個(gè)請(qǐng)求可能是模棱兩可的,因?yàn)榭赡懿磺宄砀駪?yīng)該具有什么格式或包含什么內(nèi)容。然而,Zero-shot 是最接近人類執(zhí)行任務(wù)的方法。
即使是 Few-Shot,還是存在較大的缺陷的。如果你的問題相對(duì)簡(jiǎn)單,不需要什么邏輯推理,可能靠大模型背答案就能做得不錯(cuò),但是對(duì)于一些需要推理的問題,一些簡(jiǎn)單的算術(shù)應(yīng)用題,大模型就大概率不行。
于是,思維鏈(Chain-of-Thought,CoT)很自然地被提出了。
2022 年,在 Google 發(fā)布的論文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》中首次提出,通過讓大模型逐步參與將一個(gè)復(fù)雜問題分解為一步一步的子問題并依次進(jìn)行求解的過程可以顯著提升大模型的性能。而這一系列推理的中間步驟就被稱為思維鏈(Chain of Thought)。
當(dāng)人類指令輸入 Agent 主體后,Agent 主體通過一系列計(jì)劃、決策與控制,使用工具與外部環(huán)境互動(dòng)。
Agent 主體的大模型是模擬人類智能決策流程的核心,在許多 Agent 需要處理的任務(wù)中,Agent 的“先天知識(shí)”并不包含解決任務(wù)的直接答案,因此 Agent 需要在一系列與外部環(huán)境的交互循環(huán)中,制定計(jì)劃,做出決策,執(zhí)行行動(dòng),收到反饋等,在整個(gè)計(jì)劃、決策與控制的循環(huán)中,大模型需要具備“感知CoT”,“記憶CoT”與“推理CoT”的能力,如下圖所示, 思維鏈CoT可以從這三個(gè)方面來“賦能” Agent。
LLM模型(Function Call)的本質(zhì)就是讓大模型通過微調(diào)學(xué)會(huì)根據(jù)prompt中的函數(shù)的定義學(xué)會(huì)下一步應(yīng)該調(diào)用哪個(gè)函數(shù),然后我們解析大模型預(yù)測(cè)的文本結(jié)果去執(zhí)行對(duì)應(yīng)的函數(shù),最后再把執(zhí)行的結(jié)果拼接到prompt中,讓大模型繼續(xù)預(yù)測(cè)后續(xù)的步驟。
主要的步驟有6步:
定義工具
用戶提出問題
LLM模型根據(jù)工具和用戶問題預(yù)測(cè)是否需要使用工具,如果需要就預(yù)測(cè)出要調(diào)用哪個(gè)工具以及輸入?yún)?shù)
系統(tǒng)發(fā)現(xiàn)大模型預(yù)測(cè)要使用工具,就調(diào)用對(duì)應(yīng)的函數(shù)
系統(tǒng)將調(diào)用結(jié)果拼接到prompt中
大模型根據(jù)函數(shù)調(diào)用結(jié)果回答用戶問題
3. AI Agent面臨的挑戰(zhàn)
AI Agent 在未知領(lǐng)域中的泛化能力
AI Agent 的過度交互問題
如何實(shí)現(xiàn)個(gè)性化 Agent
如何建立多智能體社會(huì)
AI Agent 的安全問題
如何建立 AI Agent 能力評(píng)估
LangChain-Chinese-Getting-Started-Guide: https://github.com/liaokongVFX/LangChain-Chinese-Getting-Started-Guide
langchain Introduction: https://python.langchain.com/en/latest/
LangChain-Chatchat: https://zhipu-ai.feishu.cn/wiki/QiLtwks1YioOSEkCxFIcAEWNnzb
LLM Powered Autonomous Agents: http://lilianweng.github.io/posts/2023-06-23-agent/
Language Models are Few-Shot Learners: https://arxiv.org/pdf/2005.14165.pdf
Chain-of-Thought Prompting Elicits Reasoning in Large Language Models: https://arxiv.org/abs/2201.11903
ChatGLM3 的工具調(diào)用FunctionCalling實(shí)現(xiàn)原理: https://zhuanlan.zhihu.com/p/664233831
聯(lián)系客服