【LLM】基于LLM的agent应用(更新中)

note

  • 在未来,Agent 还会具备更多的可扩展的空间。
    • 就 Observation 而言,Agent 可以从通过文本输入来观察来理解世界到听觉和视觉的集成;
    • 就 Action 而言,Agent 在具身智能的应用场景下,对各种器械进行驱动和操作。
  • Agent 是以核心智能模型来驱动的,一个可以具备能力从思考开始,最终做到完整输出的智能性结构。Agent 的发展很符合第一性原理,从最先的 Prompt,后面有人在写完的 Prompt 后面加通用的规划器。

文章目录

  • note
  • 零、相关概念介绍
  • 一、人类与AI协同的三种模式
  • 二、Generative Agents
  • 三、一篇agent综述
  • 四、微软的AutoGen 框架
  • 五、agent和function call
  • 六、chatglm3-6b的agent应用
    • 1. chatglm3的特点
    • 2. ChatGLM3 对话格式
      • (1)规定
        • 整体结构
        • 对话头
      • (2)样例场景
        • 多轮对话
        • 工具调用
        • 代码执行
    • 3. 代码举例
  • 附:体系
  • Reference

零、相关概念介绍

在这里插入图片描述

  • 【狭义】openai定义的agent:Lilian Weng研究员指出agent应具有技能调用(Tool use)、记忆(Memory)和规划(Planning)能力
    • 推荐阅读:Marvin Minsky 的两本著作:《心智社会》和《情感机器》。Lilian Weng 文章:https://lilianweng.github.io/posts/2023-06-23-agent
  • 【广义】agent:以下几种能力:
  • Agent 的基础能力,包括常识推理、逻辑性等,来源于大模型提供的基础智能。所以我们对 Agent 这一层能力的设计,本质上都是对模型的优化。如果要改进 Agent 在这一方面的能力,通常需要更换或优化底层模型。
  • Agent 的角色扮演、情感理解和身份相关能力,与其记忆和拟人化角色设定的 Prompt 工程紧密相关。这部分称为“角色管理”,涉及到如何让 Agent 理解并扮演特定的角色或身份。
  • Agent 的技能调用能力,如编程、查询、绘图等,依赖于 Agent 之上的插件。OpenAI 的“Function calling”机制是一个经典的实现方 式,允许 Agent 调用外部的功能和资源。
  • Agent 的复杂思维能力,在基础智能之上,大模型通过人们构建的思维链、思维树等方式,学会更高层的思维方式。这种方法教会模型特定的模式或思维方式,从而提高其处理复杂问题的能力。

在这里插入图片描述

  • COT(Chain of Thoughts):思维链,一种模拟人类逻辑和推理过程的推理框架,能够帮助大语言模型解决复杂的算术、常识及字符推理等任务。
  • TOT(Tree of Thoughts):思维树,一种模拟人类逻辑和推理过程的推理框架,允许语言模型通过考虑多种不同的推理路径和自我评估选择来进行深思熟虑的决策,以及在必要时向前看或回溯以做出全局选择。
  • Autonomy Agent:理想状态下能够在没有外部干预的情况下自主作出决策和执行任务的AI系统。
  • Multi-Agent:多个AI代理共同工作,相互协作或竞争以完成复杂任务的系统。
  • RAG:检索增强生成(Retrieval Augmented Generation),通过在生成响应之前从知识源检索相关信息来增强LLM的能力,适合需要查询数据库、文档或其他结构化/非结构化数据存储库的应用程序。

一、人类与AI协同的三种模式

在这里插入图片描述

二、Generative Agents

《Generative Agents: Interactive Simulacra of Human Behavior》
25个agent进行交互,模拟人类行为。
在这里插入图片描述

参考:
[1] 《Generative Agents: Interactive Simulacra of Human Behavior》中文阅读
[2] https://arxiv.org/pdf/2304.03442.pdf

三、一篇agent综述

A Survey on LLM-based Autonomous Agents
链接:https://github.com/Paitesanshi/LLM-Agent-Survey

在这里插入图片描述

四、微软的AutoGen 框架

微软推出 AutoGen 框架,有哪些你喜欢的功能?

9 月 29 日消息,微软近日发布了名为 AutoGen 的全新工具,帮助开发者创建基于大语言模型的复杂应用程序。
微软表示开发者创建此类复杂应用程序,通常需要具备设计、实施和优化工作流程的专业知识,而本次推出 AutoGen 工具可以帮助开发者自动执行相关工作流程,简化搭建、优化等流程并实现自动化。

微软表示 AutoGen 可以用于定义代理交互行为。开发人员可以使用自然语言和计算机代码为不同的应用程序编写灵活的对话模式。通过自动化多个 LLM 代理之间的聊天,开发人员可以轻松地让他们自主或根据人工反馈共同执行任务,包括需要通过代码使用工具的任务。

AutoGen 工具的主要功能:

  • AutoGen 提供多代理会话框架作为高级抽象。使用此框架,可以方便地构建 LLM 工作流程。
  • AutoGen 提供一系列工作系统,涵盖来自各个领域和复杂性的广泛应用。
  • AutoGen 支持增强型 LLM 推理 API,可用于提高推理性能并降低成本。

五、agent和function call

gpt中的function call可以让开发者在调用 GPT-4 和 GPT-3.5-turbo 模型时,描述函数并让模型智能地输出一个包含调用这些函数所需参数的 JSON 对象。这种功能可以更可靠地将 GPT 的能力与外部工具和 API 进行连接,从而实现以下应用:

  • 创建聊天机器人:开发者可以通过调用外部工具,如 ChatGPT 插件,回答问题,或者将查询「北京的天气如何?」转换为调用 getCurrentWeather(location: string) 的函数。
  • 将自然语言转换为 API 调用或数据库查询:例如,将查询「这个月我的前十个客户是谁?」转换为调用 get_customers_by_revenue(start_date, end_date, limit) 的内部 API 调用,或者将查询「上个月 Acme 公司下了多少订单?」转换为使用 sql_query(query)的 SQL 查询。
  • 从文本中提取结构化数据:开发者可以定义一个名为 extract_people_data(people) 的函数,以提取在维基百科文章中提到的所有人物。

六、chatglm3-6b的agent应用

1. chatglm3的特点

特点:

  • 更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base 具有在 10B 以下的预训练模型中最强的性能。
  • 更完整的功能支持: ChatGLM3-6B 采用了全新设计的 Prompt 格式,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent 任务等复杂场景。
  • 全新的 Agent 智能体能力:
    ChatGLM3 本次集成了自研的 AgentTuning 技术,激活了模型智能体能力,尤其在智能规划和执行方面,相比于ChatGLM二代提升 1000% ;开启国产大模型原生支持工具调用、代码执行、游戏、数据库操作、知识图谱搜索与推理、操作系统等复杂场景。

2. ChatGLM3 对话格式

为了避免用户输入的注入攻击,以及统一 Code Interpreter,Tool & Agent 等任务的输入,ChatGLM3 采用了全新的对话格式。

(1)规定

整体结构

ChatGLM3 对话的格式由若干对话组成,其中每个对话包含对话头和内容,一个典型的多轮对话结构如下

<|system|>
You are ChatGLM3, a large language model trained by Zhipu.AI. Follow the user's instructions carefully. Respond using markdown.
<|user|>
Hello
<|assistant|>
Hello, I'm ChatGLM3. What can I assist you today?
对话头

对话头占完整的一行,格式为

<|role|>{metadata}

其中 <|role|> 部分使用 special token 表示,无法从文本形式被 tokenizer 编码以防止注入。metadata 部分采用纯文本表示,为可选内容。

  • <|system|>:系统信息,设计上可穿插于对话中,但目前规定仅可以出现在开头
  • <|user|>:用户
    • 不会连续出现多个来自 <|user|> 的信息
  • <|assistant|>:AI 助手
    • 在出现之前必须有一个来自 <|user|> 的信息
  • <|observation|>:外部的返回结果
    • 必须在 <|assistant|> 的信息之后

(2)样例场景

多轮对话
  • 有且仅有 <|user|><|assistant|><|system|> 三种 role
<|system|>
You are ChatGLM3, a large language model trained by Zhipu.AI. Follow the user's instructions carefully. Respond using markdown.
<|user|>
Hello
<|assistant|>
Hello, I'm ChatGLM3. What can I assist you today?
工具调用
<|system|>
Answer the following questions as best as you can. You have access to the following tools:
[{"name": "get_current_weather","description": "Get the current weather in a given location","parameters": {"type": "object","properties": {"location": {"type": "string","description": "The city and state, e.g. San Francisco, CA",},"unit": {"type": "string"},},"required": ["location"],},}
]
<|user|>
今天北京的天气怎么样?
<|assistant|>
好的,让我们来查看今天的天气
<|assistant|>get_current_weather
```python
tool_call(location="beijing", unit="celsius")
```
<|observation|>
{"temperature": 22}
<|assistant|>
根据查询结果,今天北京的气温为 22 摄氏度。
代码执行
  • <|user|><|assistant|><|system|><|observation|> 四种 role。其中 <|assistant|> 的 metadata 只有 interpreter。
<|system|>
你是一位智能AI助手,你叫ChatGLM3,你连接着一台电脑,但请注意不能联网。在使用Python解决任务时,你可以运行代码并得到结果,如果运行结果有错误,你需要尽可能对代码进行改进。你可以处理用户上传到电脑上的文件,文件默认存储路径是/mnt/data/。
<|user|>
#File: /mnt/data/metadata.jsonl
#Size: 35380
#File uploaded
文件中是否存在缺失值或异常值?
<|assistant|>
首先,我将读取您提供的文件,并查看其内容以确定是否存在缺失值或异常值。我们从加载文件开始:
<|assistant|>interpreter
```python
import json# Load the uploaded file
data = []
with open("/mnt/data/metadata.jsonl", 'r') as file:for line in file:data.append(json.loads(line))# Display the first few records to get a sense of the data
data[:5]
```
<|observation|>
```result
[{'file_name': 'aceinthehole.png','name': 'Ace in the Hole','type': 'survivor','description': 'Lady Luck always seems to be throwing something good your way.'},{'file_name': 'adrenaline.png','name': 'Adrenaline','type': 'survivor','description': 'You are fuelled by unexpected energy when on the verge of escape.'},{'file_name': 'aftercare.png','name': 'Aftercare','type': 'survivor','description': "Unlocks potential in one's aura reading ability."},{'file_name': 'agitation.png','name': 'Agitation','type': 'killer','description': 'You get excited in anticipation of hooking your prey.'},{'file_name': 'alert.png','name': 'Alert','type': 'survivor','description': 'Your acute senses are on high alert.'}]
```
<|assistant|>
该文件看起来包含有关某些条目的元数据,每个条目有以下字段:- `file_name`: 文件名称
- `name`: 名称
- `type`: 类型(例如 "survivor" 或 "killer")
- `description`: 描述接下来,我将检查这些字段是否存在缺失值。
<|assistant|>interpreter
```python
# Check for missing values in each column
missing_values = {key: sum(1 for item in data if key not in item) for key in data[0].keys()}missing_values
```
<|observation|>
```result
{'file_name': 0, 'name': 0, 'type': 0, 'description': 0}
```
<|assistant|>
每个字段都没有缺失值。这意味着每个条目都完整。接下来,我们可以检查是否存在任何潜在的异常值。这通常需要更深入的分析和对数据的了解,但我可以从一些基本的统计和分布开始进行检查。为了这样做,我们可以查看“type”字段的值分布,看看是否有任何意外的类别。
<|assistant|>interpreter
```python
# Check the distribution of values in the 'type' column
type_distribution = {key: sum(1 for item in data if item['type'] == key) for key in set(item['type'] for item in data)}type_distribution
```
<|observation|>
```result
{'survivor': 116, 'killer': 103}
```
<|assistant|>
“type”字段有两个值:“survivor”和“killer”。其中,“survivor”有116个条目,而“killer”有103个条目。从这个初步的检查中,我们没有发现任何明显的异常值。如果您有任何特定的标准或其他字段需要检查,我可以为您提供更详细的分析。您还希望我检查什么呢?
<|user|>
帮我画一个爱心
<|assistant|>interpreter
```python
import numpy as np
import matplotlib.pyplot as plt# 爱心形状的参数方程
def heart(t):x = 16 * np.sin(t) ** 3y = 13 * np.cos(t) - 5 * np.cos(2 * t) - 2 * np.cos(3 * t) - np.cos(4 * t)return x, yt = np.linspace(0, 2 * np.pi, 1000)
x, y = heart(t)plt.figure(figsize=(6, 6))
plt.plot(x, y, color='red')
plt.axis('equal')
plt.axis('off')
plt.show()
```
<|observation|>
```result
【image】
```
<|assistant|>
这是一个爱心形状。我使用了参数方程来描述这个形状,并使用matplotlib进行了绘制。如果您有任何其他需求或问题,请随时告诉我。
<|user|>  # End

3. 代码举例

更新中。


附:体系

在这里插入图片描述

Reference

[1] 当MLG邂逅AI,Copilot模式将成就「Growth Automation」时代
[2] 大模型下半场,关于Agent的几个疑问
[3] LLM-Native产品的变与不变
[4] 聊聊我对AI Agents技术的一些看法.小夕
[5] Agent = LLM+Planning+Feedback+Tool use
[6] ChatGLM团队发布AI Agent能力评测工具AgentBench:GPT-4一骑绝尘,开源模型表现非常糟糕
[7] 从 GPTs 聊到 Agent、LLMOps 以及开源的新机会.质朴发言
[8] chatglm3.0发布,对应的权重,部署代码管上:
模型:https://huggingface.co/THUDM/chatglm3-6b-base
模型:https://huggingface.co/THUDM/chatglm3-6b
[9] chatglm 32k版本:https://huggingface.co/THUDM/chatglm3-6b-32k
[10] 低成本部署:https://github.com/THUDM/ChatGLM3/blob/main/DEPLOYMENT.md
工具调用:https://github.com/THUDM/ChatGLM3/blob/main/tool_using/README.md
github:https://github.com/THUDM/ChatGLM3
[11] 智谱AI推出第三代基座大模型
[12] https://modelscope.cn/models/ZhipuAI/chatglm3-6b/summary
[13] 北大校友“炼丹”分享:OpenAI如何训练千亿级模型?
[14] 大模型工具调用(function call)原理及实现:https://zhuanlan.zhihu.com/p/663770472
[15] 万字解析 AI Agent:如何重构千亿美金市场,掀起软件生产革命?
[16] Langchain-Chatchat项目:5.1-ChatGLM3-6B工具调用
[17] 智谱ChatGLM3魔搭最佳实践教程
[18] ChatGLM3 的工具调用(FunctionCalling)实现原理
[19] XAgent:地址:🔗 https://github.com/OpenBMB/XAgent
案例展示地址:🔗 https://x-agent.net/
博客地址:🔗 https://blog.x-agent.net
[20] Function Call: Chat 应用的插件基石与交互技术的变革黎明
[21] https://platform.openai.com/docs/guides/function-calling

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/197195.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业数字化转型的好处?_光点科技

企业数字化转型是当今商业世界中一个至关重要的议题。数字化转型不仅仅意味着采用新技术&#xff0c;而是涉及到企业在文化、运营和客户体验方面的根本变革。那么&#xff0c;企业数字化转型的好处是什么呢&#xff1f; 1.数字化转型可以显著提高企业的运营效率。 通过自动化流…

ChinaSoft 论坛巡礼 | 新兴系统软件论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

Portraiture2024PS/LR专用智能磨皮插件,AI算法美颜,提高P图效率

ps皮肤美白磨皮滤镜有吗&#xff1f;ps本身无自带美白磨皮滤镜&#xff0c;虽然部分滤镜有磨皮、提亮功能&#xff0c;但往往需要搭配蒙版、通道功能使用。但ps可安装第三方软件&#xff0c;比如常用的磨皮插件portraiture3&#xff0c;那么&#xff0c;磨皮插件portraiture3怎…

xstream实现xml和java bean 互相转换

目录 pom引用java bean 类XML 转换工具类测试类执行结果注意问题 JAXB方式见&#xff1a; JAXB实现XML和Bean相互转换 Java中实现XML和Bean的转换的方式或插件有以下几种&#xff1a; JAXB&#xff08;Java Architecture for XML Binding&#xff09;&#xff1a;JAXB是Java …

多因素方差分析(Multi-way Analysis of Variance) R实现

1, data0507 flower 是某种植物在两个海拔和两个气温下的开花高度&#xff0c;采用合适 的统计方法&#xff0c;检验该种植物的开花高度在不同的海拔之间和不同的气温之间有无差异&#xff1f;如果有差异&#xff0c;具体如何差异的&#xff1f;&#xff08;说明依据、结论等关…

2023OceanBase年度发布会后,有感

很荣幸收到了OceanBase邀请&#xff0c;于本周四&#xff08;11月16日&#xff09;参加了OceanBase年度发布会并参加了DBA老友会&#xff0c;按照理论应该我昨天&#xff08;星期五&#xff09;就回到成都了&#xff0c;最迟今天白天就该把文章写出来了&#xff0c;奈何媳妇儿买…

第9章 K8s进阶篇-持久化存储入门

9.1 k8s存储Volumes介绍 Container&#xff08;容器&#xff09;中的磁盘文件是短暂的&#xff0c;当容器崩溃时&#xff0c;kubelet会重新启动容器&#xff0c;但最初的文件将丢失&#xff0c;Container会以最干净的状态启动。另外&#xff0c;当一个Pod运行多个Container时&…

Linux C 线程

线程 概述线程和进程的异同如何选择使用进程还是线程 函数获取进程自身ID  pthread_self创建线程  pthread_create退出线程  pthread_exit线程等待  pthread_join 四种线程模型1 &#xff09;单线程2 &#xff09;单线程3 &#xff09;双线程4 &#xff09;三线程 概述…

记录我常用的免费API接口

目录 1.随机中英文句子 2.随机中英文句子&#xff08;带图片和音频&#xff09; 3.随机一句诗 4.随机一句话 5.随机一句情话 6. 随机一句舔狗语录 7.历史上的今天 8.获取来访者ip地址 9&#xff1a;获取手机号信息 10. 垃圾分类查询 11.字典查询 12.QQ信息查询 1.随…

Alibaba Nacos注册中心源码剖析

Nacos&Ribbon&Feign核心微服务架构图 架构原理&#xff1a; 微服务系统在启动时将自己注册到服务注册中心&#xff0c;同时对外发布 Http 接口供其它系统调用&#xff08;一般都是基于Spring MVC&#xff09;服务消费者基于 Feign 调用服务提供者对外发布的接口&…

使用VC++实现分段线性变换,直方图均衡化、锐化处理(使用拉普拉斯算子)

图像锐化1 获取源工程可访问huiningLi的gitee可在此工程的基础上进行学习。 实验要求 5.1实验目的、要求 实验目的&#xff1a; &#xff08;1&#xff09;掌握图像增强的原理与相关方法。 &#xff08;2&#xff09;能使用VC实现图像增强的一些相关功能。 实验要求&#xf…

C/C++字符判断 2021年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C字符判断 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C字符判断 2021年12月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 对于给定的字符&#xff0c;如果该字符是大小写字母或…

Uniapp连接iBeacon设备——实现无线定位与互动体验(实现篇)

export default { data() { return { iBeaconDevices: [], // 存储搜索到的iBeacon设备 deviceId: [], data: [], url: getApp().globalData.url, innerAudioContext: n…

定时获取公网ip并发送邮件提醒

前一段时间路由器刷的老毛子固件“穿透服务”中定时更新阿里DDNS失败了&#xff0c;用了很久第一次遇到。所以需要做个备用的措施用来实时获取公网ip信息 1、基于python实现 开启邮箱的SMTP功能拿到授权码(不是登录密码) #!/usr/bin/python # -*- coding: UTF-8 -*- import …

vue解除数据双向绑定

let obj JSON.parse(JSON.stringify(data));例如&#xff0c;table列表中&#xff0c;点击编辑时&#xff0c;可对val进行如上操作来解除双向绑定

Java Swing算术我最棒

内容要求 1) 本次程序设计是专门针对 Java 课程的,要求使用 Java 语言进行具有一定代码量的程序开发。程序的设计要结合一定的算法&#xff0c;在进行代码编写前要能够设计好自己的算法。 本次程序设计涉及到 Java 的基本语法&#xff0c;即课堂上所介绍的变量、条件语句、循…

什么是缓存雪崩、击穿、穿透?

背景 数据一般是存储于数据库中&#xff0c;数据库中的数据都是存在磁盘上的&#xff0c;磁盘读写的速度相较于内存或者CPU中的寄存器来说是非常慢的了。 如果用户的请求都直接访问数据库的话&#xff0c;请求数量一上来&#xff0c;数据库很容易就崩溃了&#xff0c;所以为了…

Flume学习笔记(2)—— Flume进阶

Flume进阶 Flume 事务 事务处理流程如下&#xff1a; Put doPut&#xff1a;将批数据先写入临时缓冲区putListdoCommit&#xff1a;检查channel内存队列是否足够合并。doRollback&#xff1a;channel内存队列空间不足&#xff0c;回滚数据 Take doTake&#xff1a;将数据取…

应用场景丨迭代市政综合管廊监测系统建设

市政综合管廊是指在城市地下建造的隧道空间&#xff0c;将市政、电力、通讯、燃气、给排水等各种管线集于一体&#xff0c;实施统一规划、设计、建设和管理。综合管廊有利于解决反复开挖路面、架空线网密集、管线事故频发等问题&#xff0c;是保障城市运行的重要基础设施和“生…

Dubbo的优雅下线原理分析

文/朱季谦 Dubbo如何实现优雅下线&#xff1f; 这个问题困扰了我一阵&#xff0c;既然有优雅下线这种说法&#xff0c;那么&#xff0c;是否有非优雅下线的说法呢&#xff1f; 这&#xff0c;还真有。 可以从linux进程关闭说起&#xff0c;其实&#xff0c;我们经常使用到杀…