大家好,我是烤鸭:

​ 最近除了研究开源模型和工具调用,也在看智能体相关,再好的模型或者代码都只是工具,想要有生产力还是得上价值(智能体),谁不想要一个可以7*24h工作的AI助手(牛马)呢。

介绍

什么是agent,可以看下下面的文章。

https://lilianweng.github.io/posts/2023-06-23-agent/

简单一张图概括下:

agent包含几大模块:计划、记忆、行为(调用工具)

在这里插入图片描述

模块详细说明

计划(Planning)

任务分解

思维链:
  • “逐步思考”,以利用更多的测试时间计算将艰巨的任务分解为较小,更简单的步骤。
思维树
  • 将问题分解为多个思考步骤,并每个步骤产生多个想法,从而创建树结构。搜索过程可以是BFS(广度优先搜索)或DFS(深度优先搜索),每个状态都由分类器(通过提示)或多数投票评估。

任务分解的简单触发方式可以通过提示词,比如"完成目标需要哪些投入",“写一个小说的大纲”。

或者使用域定义语言(PDDL)作为中间接口来描述规划问题,在此过程中。LLM 将问题转

换为“问题 PDDL”,然后请求经典规划器基于现有的“域 PDDL”生成 PDDL 规划,最后将

PDDL 规划转换回自然语言。

自我反省

React(行为)
  • 通过将动作空间扩展为特定于任务的离散动作和语言空间的组合,将推理和作用整合在LLM中。前者使LLM能够与环境互动(例如使用Wikipedia搜索API),而后者则促使LLM以自然语言生成推理痕迹。
Reflexion(反射)
  • 是一个框架,可为代理提供动态的记忆和自我反射能力,以提高推理能力。反射具有标准的RL设置,其中奖励模型提供了一个简单的二进制奖励,而动作空间遵循React中的设置,其中特定于任务的动作空间用语言增强以实现复杂的推理步骤。每次动作之后,代理都会计算启发式态,并且可以选择地决定重置环境以根据自我反射结果开始新的试验。反射机制可以排除效率低下或者包含幻觉的轨迹。
  • 在这里插入图片描述
Chain of Hindsight(事后观察链)

该过程是监督的微调,其中数据是以下形式的序列。对模型进行列出,以仅预测序列前缀的条件,以便该模型可以自我反射以根据反馈序列产生更好的输出。

记忆(Memory)

记忆的类型

Sensory Memory(感觉记忆):
  • 记忆的早期阶段,指在原始刺激结束后仍能保留感官信息(视觉、听觉等)印象的能力。
  • 感觉记忆作为原始输入的学习嵌入表示,包括文本、图像或其他模态
Short-Term Memory(短期记忆):
  • 存储我们当前已知且执行复杂认知任务(例如学习和推理)所需的信息
  • 短期记忆作为情境学习。由于受到 Transformer 有限上下文窗口长度的限制,它既短又有限
Long-Term Memory(长期记忆):
  • 外显/陈述性记忆:这是对事实和事件的记忆,指那些可以被有意识地回忆的记忆,包括情景

记忆(事件和经历)和语义记忆(事实和概念)。

  • 内隐/程序记忆:这种类型的记忆是无意识的,涉及自动执行的技能和行为,例如骑自行车或

在键盘上打字。

  • 长期记忆作为代理在查询时可以关注的外部向量存储,可通过快速检索访问

在这里插入图片描述

Maximum Inner Product Search (MIPS 最大内积搜索)
  • 外部存储器可以缓解注意力持续时间有限的限制。一种标准做法是将信息的嵌入表示保存到支持快速最大内积搜索(MIPS)的向量存储数据库中。为了优化检索速度,常见的选择是*近似最近邻**(ANN)*算法,该算法返回近似的前 k 个最近邻,以牺牲少量准确度为代价来获得巨大的速度提升。

  • MIPS 的几种常见人工神经网络(ANN)算法选择:

    • LSH(局部敏感哈希):它引入了一种哈希函数,使得相似的输入项以高概率被映射到相同的桶中,且桶的数量远小于输入的数量。
    • ANNOY(近似最近邻):其核心数据结构是随机投影树,这是一组二叉树,其中每个非叶子节点表示一个将输入空间一分为二的超平面,每个叶子节点存储一个数据点。这些树是独立且随机构建的,因此在某种程度上,它模仿了哈希函数。ANNOY搜索在所有树中同时进行,迭代搜索最接近查询的一半,然后聚合结果。这个想法与KD树非常相关,但可扩展性要强得多。
    • HNSW(层次可导航小世界网络):它受小世界网络概念的启发,在这种网络中,大多数节点可以在少量步骤内被其他任何节点到达;例如,社交网络的“六度分离”特性。HNSW构建了这些小世界图的层次结构,其中底层包含实际的数据点。中间的层创建快捷路径以加速搜索。在进行搜索时,HNSW从顶层的随机节点开始,向目标节点导航。当它无法再靠近时,它会向下移动到下一层,直到到达底层。上层中的每次移动都可能在数据空间中覆盖很大的距离,而下层中的每次移动则能提高搜索质量。
    • FAISS(Facebook AI Similarity Search):其工作原理基于这样一个假设:在高维空间中,节点之间的距离遵循高斯分布,因此数据点之间应存在聚类。FAISS通过将向量空间划分为簇来应用向量量化,然后在簇内进一步细化量化。搜索首先通过粗略量化寻找候选簇,然后通过更精细的量化进一步查看每个簇。
    • ScaNN(可扩展最近邻算法):ScaNN的主要创新是各向异性矢量量化。它将数据点量化成使得内积
      与原始距离相似。尽可能地,而不是选择最近的量化质心点。

工具使用

人类比机器更厉害的一个主要原因是人会使用工具。为大型语言模型(LLM)配备外部工具可以显著扩展模型的能力。

  • MRKL(模块化推理、知识与语言”的缩写,是一种用于自主代理的神经符号架构)。MRKL系统被提议包含一组“专家”模块,而通用大型语言模型(LLM)则作为路由器,将查询路由到最适合的专家模块。这些模块可以是神经网络(如深度学习模型)或符号系统(如数学计算器、货币转换器、天气API)。他们进行了一项实验,旨在微调大型语言模型(LLM)以调用计算器,并以算术作为测试用例。实验结果表明,解决口头数学问题比解决明确表述的数学问题更难,因为大型语言模型(7B Jurassic1-大型模型)无法可靠地提取基本算术的正确参数。这些结果凸显了外部符号工具何时能够可靠工作的重要性,而知道何时以及如何使用这些工具则至关重要,这取决于大型语言模型的能力。

  • TALM(工具增强语言模型)和Toolformer都对语言模型(LM)进行了微调,以学习使用外部工具API。数据集的扩展基于新添加的API调用注释是否能提高模型输出的质量。更多详细信息请参见“提示工程”中的“外部API”部分。

  • ChatGPT插件和OpenAI API函数调用是大型语言模型(LLMs)在实践中增强工具使用能力的良好示例。工具API的集合可以由其他开发者提供(如插件中所示),也可以自定义(如函数调用中所示)。

  • HuggingGPT是一个框架,它使用ChatGPT作为任务规划器,根据模型描述在HuggingFace平台上选择可用模型,并根据执行结果对响应进行总结。

在这里插入图片描述

该系统包括4个阶段:

(1)任务规划:大型语言模型(LLM)作为大脑,将用户请求解析为多个任务。每个任务都有四个属性:任务类型、ID、依赖关系和参数。它们使用少量示例来指导LLM进行任务解析和规划。

说明:

人工智能助手可以将用户输入解析为多个任务:
[{"task": task, "id": task_id, "dep": dependency_task_ids, "args": {"text": text, "image": URL, "audio": URL, "video": URL}}]。
"dep"字段表示生成当前任务所依赖的新资源的上一个任务的ID。
特殊标记"-task_id"指的是在依赖任务中生成的文本、图像、音频和视频,其ID作为task_id。
任务必须从以下选项中选择:{{可用任务列表}}。
任务之间存在逻辑关系,请注意它们的顺序。如果无法解析用户输入,请回复空JSON。
以下是几个示例供您参考:{{演示}}。聊天记录记录为{{聊天记录}}。从这些聊天记录中,您可以找到用户提到的资源路径,以便进行任务规划。

(2)模型选择:大型语言模型(LLM)将任务分配给专家模型,其中请求被设计为多项选择题的形式。LLM会收到一个模型列表供其选择。由于上下文长度有限,需要进行基于任务类型的过滤。

说明:

根据用户请求和调用命令,AI助手会帮助用户从模型列表中选择一个合适的模型来处理用户请求。AI助手仅输出最合适模型的模型ID。输出必须采用严格的JSON格式:“id”:“id”,“reason”:“您选择的详细理由”。我们为您准备了一个模型列表{{ Candidate Models }}供您选择。请从列表中选择一个模型。

(3) 任务执行:专家模型执行特定任务并记录结果。

说明:

根据输入和推理结果,人工智能助手需要描述流程和结果。之前的阶段可以归纳为:
用户输入:{{用户输入}},
任务规划:{{任务}},
模型选择:{{模型分配}},
任务执行:{{预测}}。
你必须首先以直接的方式回答用户的请求。然后以第一人称描述任务流程,并向用户展示你的分析和模型推理结果。如果推理结果包含文件路径,必须告诉用户完整的文件路径。

(4) 响应生成:大型语言模型(LLM)接收执行结果,并向用户提供总结后的结果。

要将HuggingGPT投入实际应用,需要解决几个挑战:
(1)由于大型语言模型(LLM)的推理轮次以及与其他模型的交互都会减缓进程,因此需要提高效率;
(2)它依赖于较长的上下文窗口来传达复杂的任务内容;
(3)需要提高大型语言模型输出和外部模型服务的稳定性。

API-Bank是评估工具增强型大型语言模型(LLM)性能的基准。它包含53个常用的API工具、一个完整的工具增强型LLM工作流程以及264个标注对话,涉及568个API调用。所选API类型相当多样,包括搜索引擎、计算器、日历查询、智能家居控制、日程管理、健康数据管理、账户认证工作流程等。由于API数量众多,大型语言模型(LLM)首先会访问API搜索引擎以找到要调用的正确API,然后使用相应的文档进行调用。

在这里插入图片描述

在API-Bank工作流程中,大型语言模型(LLM)需要做出几个决策,并且我们可以在每一步评估这些决策的准确性。决策包括:

  1. 是否需要API调用。
  2. 确定要调用的正确API:如果不够好,大型语言模型(LLMs)需要迭代修改API输入(例如,为搜索引擎API确定搜索关键词)。
  3. 基于API结果的响应:如果结果不令人满意,模型可以选择进行优化并再次调用。

该基准测试从三个层面评估智能体的工具使用能力:

  • 一级评估调用API的能力。给定一个API的描述,模型需要确定是否调用给定的API、是否正确调用以及是否对API返回做出正确响应。

  • 二级评估的是检索API的能力。模型需要搜索可能满足用户需求的API,并通过阅读文档学习如何使用它们。

  • 三级评估的是在检索和调用之外规划API的能力。对于不明确用户请求(例如安排小组会议、为旅行预订航班/酒店/餐厅),模型可能需要进行多次API调用才能解决。

搭建自己的Agent

国内的智能体平台还是比较丰富的,有云上的,也有开源支持本地部署的。

扣子空间:https://www.coze.cn/space

开源的dify:https://github.com/langgenius/dify

还有个人开源的:https://gitee.com/aiflowy/aiflowy

这里以本地部署的dify为例:

做一个图片生成的智能体,与其说是智能体,不如说是工具的链式调用。

逻辑也比较简单:用户输入 -> 图片生成 -> 查询结果 -> 下载图片。

生成/修改图片调用的是本地Qwen-Image/Qwen-Image-Edit的包装的http接口。

在这里插入图片描述

复杂智能体应该是什么样的:

类似之前写过一篇浏览器自动化操作的,https://blog.csdn.net/Angry_Mills/article/details/147542187

toC比较友好的可以试试纳米AI。

这是我之前生成的,https://bot.n.cn/share/mcp?id=qr6avd&from=pc&src=360_llq
在这里插入图片描述

先不说质量怎么样,如果人工通过页面或者调API的方式生成这个视频,时间和金钱成本都不会少的,何况人家的质量还行,我觉得及格了吧。

网上还有好多卖扣子工作流的,什么一键生成视频,抓取新闻生成摘要,很多这种。

在知识付费的时代,我不反对卖课的,但是打着AI旗号骗钱的就算了。目前AI最赚钱的场景就是卖课、卖会员,什么做视频一天涨粉好几百那种的就别想了。

如果你有显卡,本地部署comfyui,下载一些开源的模型自己玩就好了,还可以搞nfsw。

网上也有很多云服务器网站,也可以租算力,自己部署体验下。

总结

agent是提高了效率,但是现阶段AI最大的问题还是成本与收益。

比如上面我发的browser-use,执行一个打开某个网页,下载第一个视频的指令。可能需要花几毛钱,如果从成本收益的角度,估计没人会这么用。

再比如生成图片或者视频那些,用豆包或者即梦的网站还行,每天有免费的额度,如果调API或者接入智能体的话,成本花费不是个人能支撑的。

扣子有很多生态和第三方接入的智能体,性价比还可以。

想用这个来赚钱还是别想了,做一个工作辅助还行。

下一篇写一下dify源码windows本地部署(非docker版本)。

文章参考

https://lilianweng.github.io/posts/2023-06-23-agent/

https://arthurchiao.art/blog/ai-agent-white-paper-zh/

https://zhuanlan.zhihu.com/p/1916633385411020714

Logo

更多推荐