大模型 智能体(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阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容