AI Agent - 7大认知框架全解析与代码实现

0db0146d7802952b57343fdd237a6906.gif

出品丨咖哥 AI 

作者|黄佳

AI Agent,最近火得一塌糊涂。

Sam Altman 曾这样描述未来的AI Agent:“今天的AI模型是它们将会是的最‘笨’状态,未来只会越来越聪明!”  吴恩达在AI Ascent 2024会议上也不吝赞美:“这是AI发展的黄金时代,生成式AI和AI Agent将彻底改变我们工作的方式!”。这些业界领袖的话让人感受到未来AI与人类生活、工作的深度融合正在加速到来。

Agent之所以能成为Agent,是因为它具有了判断的能力,因而能够做成决策。那么它的判断能力是从哪里得到的,是从海量的人类语言中提炼出来的智慧。因为我们人类的自然语料中指定了场景A中应该这样做,场景B中应该那样做。因此大语言模型也就能够做出判断。这就是大语言模型成为Agent的基础。

9765eff4b740629cc728366785d4e58f.png

    一个可爱的Agent

不过,愿景虽好,现实并不理想。公众号“产品二姐”的一篇文章就指出——Agent开发者坦白,大家正在窘境中前行。Agent的开发现状是既没有什么有体系的理论指导,有没有什么优秀的范例来启发并模仿。

那么,在大模型应用开发时代,大家都在讨论的Agent到底应该如何设计实现。本文作者黄佳(代表作:GPT图解,动手做AI Agent)将以干货的方式,全面解析 7 大认知框架的设计模式和实现方式。

8a071fc1ba05da62961906e12a00851e.png

Agent认知框架的4种设计模式

吴恩达教授在红杉资本的人工智能峰会(AI Ascent)上谈到了自己对于AI Agent认知框架设计模式的四种分类,包括反思、工具使用、规划、多智能体协作。

0d50d93cb7a652ea5364ddc32fbf50c9.png

吴恩达教授提出的Agent认知框架的4种设计模式

这四种基本的思维框架设计模式分别是:

  • 反思(Reflection):Agent通过交互学习和反思来优化决策。

  • 工具使用(Tool use):Agent 在这个模式下能调用多种工具来完成任务

  • 规划(Planning):在规划模式中,Agent 需要规划出一系列行动步骤来达到目标。

  • 多Agent协作(Multiagent collaboration):涉及多个Agent之间的协作。

8e0e8c6c3c2d4a7dc46a3e689a39e05c.png

Agent认知框架的技术架构

OpenAI公司的安全系统主管Lilian Weng也提出了一个由大模型驱动的自主Agent系统的架构,其中包含规划(Planning)、记忆(Memory)、工具(Tools)、执行(Action)四大要素。

50098bf54cf80f17766243bd03bd32f7.png

在这个架构中,Agent位于中心位置,它通过协同各种组件来处理复杂的任务和决策过程。

  • 规划:Agent需要具备规划(同时也包含决策)能力,以有效地执行复杂任务。这涉及子目标的分解(Subgoal decomposition)、连续的思考(即思维链,Chain of thoughts)、自我反思和批评(Self-critics),以及对过去行动的反思(Reflection)。

  • 记忆: 包含了短期记忆和长期记忆两部分。短期记忆与上下文学习有关,属于提示工程的一部分,而长期记忆涉及信息的长时间保留和检索,通常是通过利用外部向量存储和快速检索。

  • 工具:这包括了Agent可能调用的各种工具,如日历、计算器、代码解释器和搜索功能,以及其他可能的工具。由于大模型一旦完成预训练,其内部能力和知识边界基本固定下来,而且难以拓展,那么这些工具显得异常重要。它们扩展了Agent的能力,使其能够执行超出其核心功能的任务。

  • 执行(或称行动):Agent基于规划和记忆来执行具体的行动。这可能包括与外部世界互动,或者通过工具的调用来完成一个动作(任务)。

围绕着这个架构,一系列的Agent认知框架开始落地。接下来,我们将重点介绍几种具有代表性的Agent认知框架设计模式及其实现思路。

16489e9b437acce029e98f272d56e00e.png

7种Agent认知框架的具体实现

下面,我们就来说一说主流的7种Agent认知框架的基本思想,并简明扼要的阐述如何具体实现这些框架。

框架 1 思维链(Chain of Thought)

在Agent认知框架领域,开一代风气之先的就是Chain-of-Thought Prompting这篇论文,这篇论文的出现甚至是早于ChatGPT。

在大模型推理能力普遍较弱的时代,这篇论文通过引入连贯的思考过程来引导模型进行更深入的逻辑推理,极大地提高了模型处理复杂问题的能力。这种方法不仅优化了模型的推理过程,还改善了输出的可解释性,使得模型的决策过程对于用户来说更加透明和易于理解。

论文中的Chain of Thought简称CoT,即思维链,是指在解决问题过程中形成的一系列逻辑思考步骤。在AI领域,尤其是在自然语言处理和机器理解任务中,CoT方法通过模拟人类的思考过程来提高模型的理解和推理能力。通过明确展示解决问题的逻辑步骤,CoT有助于增强模型的透明度和可解释性。

968ef9131f3c9a2e20703f886944624f.png

Chain-of-Thought论文中的思维链示例

其实,我们设计Agent时,需要参照的就是其方法论中的思想精华,参悟了思想,我们就可以通过精心设计的提示工程模板,来实现CoT框架。

举例来说,假设我们需要建立一个模型,用于评估个人的信用等级。这是一个典型的金融服务场景,其中涉及多个变量和逻辑判断。

在CoT框架下,我们可以设计以下提示,以帮助AI模型通过逻辑推理来评估信用等级:

考虑到申请人的以下信息:

- 年龄:35岁

- 年收入:$50,000

- 信用历史:无违约记录

- 负债:$10,000的信用卡债务

- 资产:无房产,有一辆值$15,000的汽车

步骤1:评估信用历史。申请人没有违约记录,这是一个积极的信用因素。

步骤2:考虑年收入与负债的比例。申请人的年收入为$50,000,而负债为$10,000,债务收入比为20%,这表明申请人有足够的收入来覆盖债务。

步骤3:考虑资产情况。虽然申请人没有房产,但有一辆汽车,可以作为贷款的担保。

步骤4:基于以上分析,综合评估申请人的信用等级。

最终判断:根据以上逻辑推理,申请人的信用等级应该是中等偏上。

下面是一个使用OpenAI API调用CoT框架的示例,这里使用Python语言进行编程。该代码通过发送一个包含逻辑推理步骤的详细问题描述到模型,从而获得关于个人信用评估的决策推理。 

from openai import OpenAI
client = OpenAI()


completion = client.chat.completions.create(
  model="gpt-4",  # 使用GPT-4模型
  messages=[
    {"role": "system", "content": "你是一个专门处理信用评估的智能助手,能够通过逻辑推理来分析申请人的信用状况。"},
    {"role": "user", "content": """
        考虑以下申请人的信息:
        - 年龄:35岁
        - 年收入:50,000美元
        - 信用历史:无违约记录
        - 负债:10,000美元的信用卡债务
        - 资产:无房产


        分析步骤如下:
        1. 根据年龄、收入和信用历史来评估违约风险。
        2. 考虑负债与收入的比率,判断负债水平是否合理。
        3. 评估无房产的风险因素,考虑是否会影响申请人的偿债能力。


        根据上述分析步骤,请评估这位申请人的信用等级。
    """}
  ]
)


print(completion.choices[0].message)

这里,我们构造了一个详细的提示,引导模型沿着设置的思维链路进行逻辑推理。这种方式不仅有助于生成更可解释的答案,而且能够提高决策的准确性。

CoT这篇文章是一石激起千层浪,后面研究大模型推理认知的文章就逐渐丰富了起来。

框架2 自问自答(Self-Ask)

顺着Chain-of-Thought的思路,就有了Self-Ask是对CoT的进一步扩展。

Self-Ask它允许模型自我生成问题,进行自查询来获取更多信息,然后再结合这些信息生成最终答案。这种方法使模型能够更深入地探索问题的各个方面,从而提高答案的质量和准确性。

59ceef24f020ae6626045bd88634d1cd.pngSelf-Ask论文中的示例

Self-Ask这种认知框架在需要深入分析或创造性解决方案的应用中非常有用,例如创意写作或复杂查询。

假设我们正在设计一款新的智能手表,需要考虑用户的多样化需求和技术可能性。我们可以设置如下的 Self-Ask 框架

from openai import OpenAI
client = OpenAI()


completion = client.chat.completions.create(
  model="gpt-4",  # 使用GPT-4模型
  messages=[
    {"role": "system", "content": "你是一个专门处理产品设计创新的智能助手,能够自我生成问题来探索创新的设计解决方案。"},
    {"role": "user", "content": """
        我们正在开发一款新的智能手表。请分析当前市场上智能手表的主要功能,并提出可能的创新点。
    """},
    {"role": "system", "content": "首先,考虑目前市场上智能手表普遍缺乏的功能是什么?"},
    {"role": "system", "content": "接下来,探讨哪些新增功能可能吸引健康意识强的消费者?"},
    {"role": "system", "content": "最后,分析技术上可行的创新功能,这些功能如何通过可穿戴技术实现?"}
  ]
)


print(completion.choices[0].message)

在这个示例中,通过系统自我生成的问题和回答,不仅引导了深入的市场和技术分析,还激发了对潜在创新点的思考。这种方法有助于在产品设计初期阶段就识别和整合创新的元素。

你可以通过Few-shot的方式,以这个样板为例,让大模型自己进行更多有创造性的思考,往往能激发我们开始并没有想到的创意点子。

14f0ce2711629ef32e9834ae9b03b626.png

更多细节可以了解我的课程

框架3 批判修正(Critique Revise)或 反思(Refection)

Critique Revise(批判修正)这个认知框架也叫做Self-Refection,是一种在人工智能和机器学习领域中应用的框架,主要用于模拟和实现复杂决策过程。这种架构基于“批判”和“修正”两个核心步骤,通过不断迭代改进来提高系统的性能和决策质量。

  • 批判(Critique):在这一步骤中,系统会评估当前的决策或行为产出,并识别出其中的问题或不足之处。这一过程通常涉及与预设目标或标准的比较,以确定当前输出与期望结果之间的差距。

  • 修正(Revise):基于批判步骤中识别的问题,系统在这一步骤中会调整其决策过程或行为策略,以期改进输出的质量。修正可以是对现有算法参数的调整,也可以是采用全新的策略或方法。

Critique Revise 认知架构的目标是通过不断自我评估和调整,使系统能够学习并改进决策过程,从而在面对复杂问题时做出更加有效的决策。

假设一家公司正在评估其最近的数字营销活动效果,以便制定未来的营销策略。使用 Critique Revise 框架,可以通过以下步骤来优化决策过程:

  • 批判(Critique):系统首先分析现有营销活动的数据,包括广告点击率、转化率、消费者互动情况等,并与既定的目标或行业标准进行比较。在这一阶段,系统识别出当前策略的不足之处,例如目标受众定位不准确、广告内容不吸引人或预算分配不合理。

  • 修正(Revise):基于批判阶段的分析结果,系统提出改进方案。这可能包括调整目标受众、重新设计广告内容、或优化预算分配策略。此外,系统还可能推荐测试新的营销渠道或技术,以提高整体营销效果。

代码实现如下:

from openai import OpenAI
client = OpenAI()


# 执行 Critique 阶段
critique_completion = client.chat.completions.create(
  model="gpt-4",
  messages=[
    {"role": "system", "content": "你是一个市场营销分析助手。"},
    {"role": "user", "content": "分析最近一次营销活动的效果,并指出存在的问题。"}
  ]
)


# 执行 Revise 阶段
revise_completion = client.chat.completions.create(
  model="gpt-4",
  messages=[
    {"role": "system", "content": "你是一个市场策略优化助手。"},
    {"role": "user", "content": "根据之前的批判,提出具体的改进措施。"}
  ]
)


print("Critique Results:", critique_completion.choices[0].message)
print("Revise Suggestions:", revise_completion.choices[0].message)

在这个过程中,AI系统首先执行 Critique 阶段,分析和识别问题;然后在Revise 阶段,根据识别的问题提出具体的改进措施。这种方法帮助企业深入理解市场动态,精确调整营销策略,从而实现更有效的市场应对。

框架 4 函数(工具)调用(Function Calling/Tool Calls)

Function Calling是由OpenAI提出的一种AI应用开发框架。在这种架构中,大语言模型被用作调用预定义函数的引擎,负责判断根据用户的需要,自动调用哪些工具。

OpenAI Assistant中的支持的工具有代码解释器(数据分析)、函数调用、文件检索工具等等。对于需要与现有系统集成或执行具体技术任务的应用,如自动化脚本或数据分析,此方法非常合适。

9eb4f0faaaee2a27f001ddd016e3809f.pngOpen AI Assistant中的各种工具

当然,工具调用这种框架并不仅仅属于OpenAI API所专有,LangChain中的Agent也集成了大量的可用工具。

e5843d8319d388ec8467a65b2ae1de7c.png

LangChain中的工具和工具箱

关于Agent的工具调用,目前的常见大模型开发框架,都已经形成了非常完备的解决方案。

框架 5 ReAct(Reasoning-and-Acting)

那么,有了CoT的逐步推理, 有了Refection的反思,又有了工具调用,我们就终于来到了Agent认知框架的集大成者—— ReAct框架。

这个框架整合了先前的CoT和Reflection方法,并引入了工具调用功能,进一步增强了模型的交互能力和应用范围,代表了在Agent认知框架发展中的一个新的里程碑。

b26a940627164fe4fae5048b3aab025f.png

ReAct论文中指出,既要有推理,又要有行动

ReAct框架是推理和行动的整合,Reasoning and Acting, ReAct框架的核心思想在于在思考,观察和行动 反复循环,迭代,不断优化解决方案,知道问题最终解决位置,这就不仅使Agent能够进行复杂的内部推理,还能实时反应并调整其行为以适应不断变化的环境和需求。

776a0270ceed8102bac462fab6c7f585.png

目前,ReAct框架已经被无缝集成至LangChain,开发者可以非常轻松地创建ReAct Agent来完成具体任务。

2ab8b4dfa63815b2d39149e13d562e65.png

更多细节可以了解我的课程

框架 6 计划与执行(Plan-and-Execute)

Plan-and-Execute可以翻译为计划与执行架构。这种架构侧重于先规划一系列的行动,然后执行。它使LLM能够先综合考虑任务的多个方面,然后按计划行动。在复杂的项目管理或需要多步骤决策的场景中尤为有效,如自动化工作流程管理。

64c64f505ba5354051e536aaf84a42b4.png

Plan-and-Solve论文中的示例

目前,LangChain的Experiment(实验包)中支持Plan-and-Execute框架,开发者可以尝试创建Plan-and-Execute Agent,对任务先计划,再具体执行。

e3860b882332023864c3c1ba3dea3fd1.png

Plan-and-Solve的实现示例

框架 7 多Agent协作(Multi-Agents Collaboration)

多Agent系统(Multi-Agent System)的确是一个新的研究热点。这类研究关注如何使多个Agent协同工作,实现复杂的任务和目标。这包括合作、竞争以及协商策略的研究。

这类多Agent协作框架的代表性作品是AutoGen和MetaGPT。

AutoGen框架中的Agent定制(Agent Customization)功能允许开发者对Agent进行定制,用以实现不同的功能。

MetaGPT的框架,它将标准操作程序(SOPs)与基于大模型的多智能体系统相结合,使用SOPs来编码提示,确保协调结构化和模块化输出。这种框架允许智能体在类似流水线方法的范式中扮演多样化的角色,通过结构化的智能体协作和强化领域特定专业知识来处理复杂任务,提高在协作软件工程任务中解决方案的连贯性和正确性。

MetaGPT的Demo中,构建了一个软件公司场景下的多Agent软件实体,它能够处理复杂的任务,模仿软件公司的不同角色。其核心理念是"代码等同于团队的标准操作程序(Code = SOP(Team))",将标准操作程序具体化并应用于由大模型组成的团队。

ef8aba6cafcbc0c518a28b56323035d1.png

软件公司组织角色图

这个软件公司的组织角色图突出了公司内的不同角色及其职责。 

  • 老板(Boss):为项目设定总体要求。

  • 产品经理(Product Manager):负责编写和修订产品需求文档(PRD)。

  • 架构师(Architect):编写和修订设计,审查产品需求文档和代码。

  • 项目经理(Project Manager):编写任务,分配任务,并审查产品需求文档、设计和代码。

  • 工程师(Engineer):编写、审查和调试代码。

  • 质量保证(QA):编写和运行测试,以确保软件的质量。

你只要输入一行具体的软件开发需求。经过几轮协作,MetaGPT的假想软件工程团队就能够开发出真正可用的简单APP。

当然MetaGPT的功能不仅限于此,还可以用于其他场景构建应用程序。

e82b662702c6a80045ad97d612adec33.png

各种认知框架的组合运用

上述认知框架当然是可以的组合的比如说,ReAct框架中,就一定应该配置Tool Calls,通过工具的调用+Tool Calls 才能够改变环境的状态,继续观察,才能够进一步的思考。

04176b1a314450e0aecc7f065de296ba.pngReAct + Tool Calls

当然,每种Agent认知架构都有自己独特的优势,至于选择哪一种,如何组合起来更实用,取决于具体需求、应用场景和期望的用户体验。选择适合应用的认知架构是大语言模型应用开发的一个关键步骤。

好吧,今天的干货分享就到这里。我试图用比较简短的篇幅,从理论到实践,全面系统地分析了Agent技术的发展现状,希望能够为你的Agent应用开发提供了参考和启发。未来,Agent技术的进一步发展将深刻影响人工智能在各领域的应用,推动人机协同迈上新台阶。

上述所有示例,我的课程中,均有代码实现和详细讲述!从小白到专家,一起入群学习大模型。

2451475744f752790d50948556b95e74.png

更多细节可以了解我的课程

参考资料

1.https://36kr.com/p/2716201666246790 - 吴恩达最新演讲:AI Agent工作流的未来

2.https://lilianweng.github.io/posts/2023-06-23-agent/ - LLM Powered Autonomous Agents

3.Chain-of-Thought Prompting Elicits Reasoning in Large Language Models , 36th Conference on Neural Information Processing Systems (NeurIPS 2022).

4.Press, O., Zhang, M., Min, S., Schmidt, L., Smith, N. A., & Lewis, M. (2022).

Measuring and Narrowing the Compositionality Gap in Language Models. arXiv preprint arXiv:2212.09551.

5.Wang, L., Xu, W., Lan, Y., Hu, Z., Lan, Y., Lee, R. K.-W., & Lim, E.-P. (2023). Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models. arXiv. 

6.Yao, S., Zhao, J., Yu, D., Du, N., Shafran, I., Narasimhan, K., & Cao, Y. (2023). ReAct: Synergizing Reasoning and Acting in Language Models. arXiv preprint arXiv:2210.03629. 

7.https://github.com/geekan/MetaGPT - MetaGPT: The Multi-Agent Framework

150af3b20aa4b843ea956bd1fb9139a2.gif

  • 16
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在C#中实现图像自动检查,可以使用开源的AI框架,例如TensorFlow.NET。 以下是一个简单的C#代码示例,演示如何使用TensorFlow.NET进行图像自动检查: ```csharp using System; using System.IO; using System.Linq; using TensorFlow; namespace ImageAnalysisExample { class Program { static void Main(string[] args) { // Replace with your model file path string modelFilePath = "MODEL_FILE_PATH"; // Load the model var model = new TFModel(modelFilePath); // Define the input tensor name and shape string inputTensorName = "input"; var inputTensorShape = new TFShape(1, 224, 224, 3); // Define the output tensor name string outputTensorName = "output"; // Load the image from a file var imageFilePath = "IMAGE_FILE_PATH"; var imageData = File.ReadAllBytes(imageFilePath); // Create the input tensor from the image data var inputTensor = TFTensor.FromBuffer(imageData, inputTensorShape); // Run the prediction var output = model.Run(new[] { inputTensor }, new[] { outputTensorName }); // Extract the prediction result var result = output[0].GetValue() as float[,]; // Print the result to the console Console.WriteLine("Prediction results:"); Console.WriteLine($" Adult content: {result[0, 0]}"); Console.WriteLine($" Racy content: {result[0, 1]}"); } } } ``` 在此代码示例中,你需要将MODEL_FILE_PATH替换为你的模型文件路径,将IMAGE_FILE_PATH替换为要进行图像自动检查的图像文件路径。 该代码将使用TensorFlow.NET加载模型,并将图像数据作为输入张量运行预测。模型将返回一个输出张量,其中包含检查的结果。你可以根据需要解析该结果并提取所需的信息。例如,在此示例中,我们假设模型返回一个大小为1x2的张量,其中第一列包含有关图像是否包含成人内容的信息,第二列包含有关图像是否包含色情内容的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值