AI Agent(人工智能体) 初步认识

news/2024/9/22 11:11:43/

什么是AI Agent(人工智能体)

AI Agent(人工智能体)是一种能够感知环境、进行决策和执行动作的智能实体。不同于传统的人工智能,AI Agent 具备通过独立思考、调用工具去逐步完成给定目标的能力。

简单说,AI聊天机器人主要靠“说”来回答你的问题,而AI Agent则会“动”起来完成具体的任务,就像人类助理一样,在你忙不过来的时候替你完成一些工作,区别就是用AI来驱动而不是人脑驱动。

从原理上说,AI Agent的核心驱动力是大模型,在此基础上增加规划(Planning)、记忆(Memory)和工具使用(Tool Use)三个关键组件。

智能体结构概述


 

在 LLM 支持的自主智能体系统中,LLM 充当智能体的大脑,并由几个关键组件进行补充:

规划(Planing)
子目标和分解(Subgoal and decomposition):代理将大型任务分解为更小的、可管理的子目标,从而能够有效地处理复杂的任务。
反思和完善(Reflection and refinement):智能体可以对过去的行为进行自我批评和自我反思,从错误中吸取教训,并针对未来的步骤进行完善,从而提高最终结果的质量。
记忆 (Memory)
短期记忆(Short-term memory):我认为所有的上下文学习(参见提示工程)都是利用模型的短期记忆来学习。
长期记忆(Long-term memory):这为代理提供了长时间保留和回忆(无限)信息的能力,通常是通过利用外部向量存储和快速检索。
工具使用(Tools use)
代理学习调用外部 API 来获取模型权重中缺失的额外信息(通常在预训练后很难更改),包括当前信息、代码执行能力、对专有信息源的访问等。

智能体用到的关键技术

1. 大语言模型:充当智能体的大脑做决策和推理.

2. Function Calling:

一个重大挑战:处理人工智能模型返回的非结构化文本数据。

传统的解决方案,从模型输出中提取结构化数据(如 JSON)需要复杂的提示工程(Prompt)或正则表达式 (RegEx),由于 AI 模型的不可预测性和用户输入的可变性,这可能容易出错且不一致。

现在的方案:为了解决这个问题,OpenAI推出了两项创新功能:Json模式和函数调用(Function Calling)。本文将深入研究函数调用功能,说明它如何简化从模型输出中提取结构化数据的过程,并辅以 TypeScript 代码示例。

3. 可调度的工具(Tools)

4. Vector Store 向量存储

OpenAI Function Calling工作的流程

根据OpenAI的文档,函数调用的基本步骤顺序如下:

1. 使用用户查询和函数(工具)参数中定义的一组函数来调用模型。
2. 模型可以选择调用一个或多个函数;如果是这样,内容将是一个符合您的自定义架构的字符串化 JSON 对象(注意:模型可能会产生参数)。
3. 在代码中将字符串解析为 JSON,并使用提供的参数(如果存在)调用函数。
4. 通过将函数响应作为新消息附加来再次调用模型,并让模型将结果汇总返回给用户。

参考资料

LLM Powered Autonomous Agents | Lil'Log

GPT之后下一个热点!硅谷大佬为啥追捧AI Agent? _ 东方财富网

https://towardsdatascience.com/create-an-agent-with-openai-function-calling-capabilities-ad52122c3d12


http://www.ppmy.cn/news/1462639.html

相关文章

ZooKeeper系列之ZAB协议

概述 ZooKeeper Atomic Broadcast,ZooKeeper原子消息广播协议。ZAB协议是为分布式协调服务ZK专门设计的一种支持崩溃恢复的原子广播协议。ZK主要依赖ZAB协议来实现分布式数据的最终一致性,基于该协议,ZK实现一种主备模式的系统架构来保持集群…

阴影映射(线段树)

实时阴影是电子游戏中最为重要的画面效果之一。在计算机图形学中,通常使用阴影映射方法来实现实时阴影。 游戏开发部正在开发一款 2D 游戏,同时希望能够在 2D 游戏中模仿 3D 游戏的光影效果,请帮帮游戏开发部! 给定 x-y 平面上的…

力扣450,删除二叉搜索树中的节点

450. 删除二叉搜索树中的节点 - 力扣(LeetCode) /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* Tr…

Python基于PyQt6制作GUI界面——单、多行文本输入

当涉及到 Qt 框架中的 QLineEdit 和 QTextEdit 控件时,它们是两种不同类型的文本输入/编辑控件,具有不同的用途和功能。 1、QLineEdit QLineEdit 是一个单行文本输入控件,用于接收和显示单行文本。它通常用于接收用户的输入,如用…

前端更改线上请求地址

由于后台接口更改 , 线上请求地址需从 /api/api/ 改成 /api/ , 需实现的效果如下图 1 在原本的vite.config.js中将前端做的端口转发内容更改 , 更改一行即可 import { defineConfig } from vite import react from vitejs/plugin-react import path from path import * as fs …

如何解决vcruntime140.dll丢失问题,详细介绍5种靠谱的解决方法

vcruntime140.dll是Microsoft Visual C Redistributable Package的一部分,它为使用Visual C编译器开发的应用程序提供必要的运行时环境。该DLL文件包含了大量应用程序运行时需要调用的库函数,这些函数是实现C标准库、异常处理机制、RTTI(运行…

C++进阶:C++11(列表初始化、右值引用与移动构造移动赋值、可变参数模版...Args、lambda表达式、function包装器)

C进阶:C11(列表初始化、右值引用与移动构造移动赋值、可变参数模版…Args、lambda表达式、function包装器) 今天接着进行语法方面知识点的讲解 文章目录 1.统一的列表初始化1.1{}初始化1.2 initializer_listpair的补充 2.声明相关关键字2.1a…

PHP8.0 match函数

match 表达式是 PHP 8.0 引入的一个新的控制结构,它提供了一种简洁且更强大的方式来进行条件匹配。与 switch 语句相比,match 表达式具有以下优势: 返回值:match 是一个表达式,它会返回一个值。严格比较:m…