大模型 智能體(Agent)入門學習

智能體是什么

????????智能體是指基于大語言模型(LLMs)構建的智能體,具有強大的語言理解和處理能力,可以自動化地完成各種復雜的任務。大模型智能體的構建需要使用大量的數據和計算資源,并進行精細的模型訓練和優化,以實現高性能的智能體,展現出類似人類的歸納和思考能力。

智能體的應用場景

大模型智能體在多個領域有廣泛的應用:

  • 自然語言處理:處理文本分類、情感分析、命名實體識別等功能。
  • 問答系統:自動回答用戶問題,提供準確的信息和服務。
  • 文本生成:生成新聞報道、小說、廣告語等。
  • 語音識別和生成:實現語音轉文字、文字轉語音等功能。
  • 機器翻譯:將一種語言的文本翻譯成另一種語言。

智能體的組成

智能體.png

智能體四個組成部分:大模型+工具+記憶+規劃

規劃(Planning)

把大型任務分解為子任務,以便高效的處理復雜任務,并規劃執行任務的流程;
對任務執行的過程進行思考和反思,從而決定是繼續執行任務,或判斷任務完結并終止運行。

規劃,可以理解為觀察和思考。如果用人類來類比,當我們接到一個任務,我們的思維模式可能會像下面這樣:

  • 我們首先會思考怎么完成這個任務。
  • 然后我們會審視手頭上所擁有的工具,以及如何使用這些工具高效地達成目的。
  • 我們會把任務拆分成子任務。
  • 在執行任務的時候,我們會對執行過程進行反思和完善,吸取教訓以完善未來的步驟
  • 執行過程中思考任務何時可以終止

這是人類的規劃能力,我們希望智能體也擁有這樣的思維模式,因此可以通過 LLM 提示工程,為智能體賦予這樣的思維模式。在智能體中,最重要的是讓 LLM 具備這以下能力:

子任務分解(Subgoal decomposition)

通過 LLM 使得智能體可以把大型任務分解為更小的、更可控的子任務,從而能夠有效完成復雜的任務。

思維鏈(Chain of Thoughts, CoT)

思維鏈已經是一種比較標準的提示技術,能顯著提升 LLM 完成復雜任務的效果。當我們對 LLM 這樣要求「think step by step」,會發現 LLM 會把問題分解成多個步驟,一步一步思考和解決,能使得輸出的結果更加準確。這是一種線性的思維方式。

思維鏈的 prompt 可以像是如下這樣(這里只是一個極簡的 prompt,實際會按需進行 prompt 調優):

template="Answer the question: Q: {question}? Let's think step by step:"

反思和完善(self-critics)

智能體在執行任務過程中,通過 LLM 對完成的子任務進行反思,從錯誤中吸取教訓,并完善未來的步驟,提高任務完成的質量。同時反思任務是否已經完成,并終止任務。這種反思和完善可以幫助 Agent 提高自身的智能和適應性。

Reflection

通過結合推理(Reasoning)和行動(Acting)來增強推理和決策的效果

  • 推理(Reasoning): LLM 基于已有的知識行動(Acting)后獲取的知識,推導出結論的過程。
  • 行動(Acting): LLM 根據實際情況,使用工具獲取知識,或完成子任務得到階段性的信息。

為什么結合推理和行動?

  • 僅推理(Reasoning Only):LLM 僅僅基于已有的知識進行推理,生成答案來回答這個問題。很顯然,如果 LLM 本身不具備這些知識,可能會出現幻覺,胡亂回答一通。
  • 僅行動(Acting Only):大模型不加以推理,僅使用工具(比如搜索引擎)搜索這個問題,得出來的將會是海量的資料,不能直接回答這個問題。
  • 推理+行動(Reasoning and Acting):LLM 首先會基于已有的知識,并審視擁有的工具。當發現已有的知識不足以回答這個問題,則會調用工具,比如:搜索工具、生成報告等,然后得到新的信息,基于新的信息重復進行推理和行動,直到完成這個任務。

Reasoning+Acting 的 prompt 模版的大致思路為:

Thought(思考): ...
Action(行動): ...
Observation(觀察): ...

Thought(思考): ...
Action(行動): ...
Observation(觀察): ...

...(Repeated many times(重復多次))
Final Answer: ...

使用LangChain實現零樣本智能體,零樣本智能體是指在不給大模型任何樣本提示信息的情況,由大模型去實現工具調用來得到問題的答案,代碼實現如下:

from langchain.agents import tool
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI
from datetime import date

llm = OpenAI(
    api_key="sk-esjT0arInWjjUXbfCcF228498d99433...........",
    base_url="https://api.aigc369.com/v1"
)

@tool
def time() -> str:
 """
  Return the date of Today
  """
 return str(date.today())

agent = initialize_agent([time], llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

agent.run("今天是什么日期")

智能體執行過程如下:

> Entering new AgentExecutor chain...
 I should use the tool "time" to find the date
Action: time
Action Input: Today
Observation: 2024-11-06
Thought: I now know the final answer
Final Answer: Today's date is November 6th, 2024.

> Finished chain.

記憶(Memory)

短期記憶是指在執行任務的過程中的上下文,會在子任務的執行過程產生和暫存,在任務完結后被清空,短期記憶受到有限上下文窗口長度的限制,不同的模型的上下文窗口限制不同。
長期記憶是長時間保留的信息,一般是指外部知識庫,通常用向量數據庫來存儲和檢索,向量數據庫通過將數據轉化為向量存儲。

工具(Tool)

LLM 是數字世界中的程序,想要與現實世界互動、獲取未知的知識,或是計算某個復雜的公式等,都離不開工具。有了這些工具 API,智能體就可以與物理世界交互,解決實際的問題。因此需要為智能體配備各種工具以及賦予它使用工具的能力。

Function Calling 是一種實現大型語言模型連接外部工具的機制。通過 API 調用 LLM 時,調用方可以提供一系列描述函數(包括函數的功能描述、請求參數說明、響應參數說明),讓 LLM 根據用戶的輸入,合適地選擇調用哪個函數,同時理解用戶的自然語言,并轉換為調用函數的請求參數(通過 JSON 格式返回)。調用方使用 LLM 返回的函數名稱和參數,調用本地函數并得到響應。最后,如果有進一步需求,把本地函數的響應傳給 LLM,讓 LLM 組織成自然語言再給出最終答案。
function calling 具體工作流程如下圖所示:

function calling.png

詳細介紹可以參考文章大模型 Function Call介紹
本文是對大模型Agent入門級學習,參考了以下文章:
https://cloud.tencent.com/developer/article/2422923,后續有新的收獲再進行更新。。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容