OpenAI 34页最佳构建Agent实践
penAI发布O4,也发布34页最佳构建Agent实践,值得阅读。
什么是Agent?
传统软件使用户能够简化和自动化工作流程,而代理能够以高度独立的方式代表用户执行相同的工作流程。
代理是能够独立地代表您完成任务的系统。
工作流程是必须执行的一系列步骤,以满足用户的目标,无论是解决客户服务问题、预订餐厅、提交代码更改,还是生成报告。
集成了大型语言模型(LLM)但不使用它们来控制工作流程执行的应用程序——例如简单的聊天机器人、单轮LLM或情感分类器——不是代理。
更具体地说,代理具有以下核心特征,使其能够可靠且一致地代表用户行动:
1、 它利用LLM来管理工作流程执行并做出决策。它能够识别工作流程何时完成,并可以在需要时主动纠正其行动。在失败的情况下,它可以停止执行并将控制权转回给用户.
2、它可以访问各种工具来与外部系统交互——既可以收集上下文,也可以采取行动——并根据工作流程的当前状态动态选择适当的工具,始终在明确定义的护栏内运行.
何时构建代理?
构建代理需要重新思考您的系统如何做出决策和处理复杂性。与传统自动化不同,代理特别适合那些传统的确定性和基于规则的方法不足的工作流程。
考虑支付欺诈分析的例子。传统的规则引擎像清单一样工作,根据预设标准标记交易。相比之下,LLM代理更像一个经验丰富的调查员,评估上下文,考虑微妙的模式,并识别可疑活动,即使没有违反明确的规则。这种细微的推理能力正是使代理能够有效管理复杂、模糊情况的原因。
在评估代理可以增加价值的地方时,优先考虑以前抵制自动化的工作流程,特别是传统方法遇到摩擦的地方:
### 01 复杂决策
涉及细微判断、例外或上下文敏感决策的工作流程,例如客户服务工作流程中的退款审批。
### 02 难以维护的规则
由于广泛和复杂的规则集而变得笨重的系统,使更新成本高或容易出错,例如执行供应商安全审查。
### 03 严重依赖非结构化数据
涉及解释自然语言、从文档中提取意义或与用户进行对话交流的场景,例如处理家庭保险索赔。
在决定构建代理之前,验证您的用例是否能够明确满足这些标准。否则,确定性解决方案可能就足够了。
# Agent设计基础
在其最基本的形式中,一个agent由三个核心组件组成:
01 模型 驱动agent推理和决策的大语言模型
02 工具 agent可以用来执行操作的外部函数或API
03 指令 明确定义agent行为方式的指导和约束
## 选择您的模型
不同的模型在任务复杂性、延迟和成本方面具有不同的优势和权衡。正如我们将在下一节关于编排的内容中看到的,您可能需要考虑在工作流中的不同任务使用各种模型。
并非每项任务都需要最智能的模型——简单的检索或意图分类任务可能由更小、更快的模型处理,而像决定是否批准退款这样的更困难任务可能会从更强大的模型中受益。
一种行之有效的方法是使用每个任务的最强大模型构建代理原型,以建立性能基准。从那里开始,尝试引入较小的模型,看看它们是否仍能达到可接受的结果。这样,您就不会过早地限制代理的能力,并且可以诊断较小模型在哪些方面成功或失败。
总之,选择模型的原则很简单:
01 设置评估以建立性能基准
02 专注于使用最佳可用模型达到您的准确性目标
03 通过在可能的情况下用较小的模型替换较大的模型来优化成本和延迟
## 定义工具
工具通过使用底层应用程序或系统的API来扩展代理的能力。对于没有API的传统系统,代理可以依靠计算机使用模型通过网页和应用程序UI直接与这些应用程序和系统交互——就像人类一样。
每个工具都应该有一个标准化的定义,使工具和代理之间能够建立灵活的多对多关系。文档完善、经过充分测试且可重用的工具可以提高可发现性,简化版本管理,并防止冗余定义。
广义而言,代理需要三种类型的工具:
| 类型 | 描述 | 示例 |
| --- | --- | --- |
| 数据 | 使代理能够检索执行工作流所需的上下文和信息。 | 查询交易数据库或CRM等系统,阅读PDF文档,或搜索网络。 |
| 动作 | 使代理能够与系统交互,执行诸如向数据库添加新信息、更新记录或发送消息等操作。 | 发送电子邮件和短信,更新CRM记录,将客户服务工单转交给人工处理。 |
| 编排 | 代理本身可以作为其他代理的工具——参见编排部分的管理器模式。 | 退款代理,研究代理,写作代理。 |
## 配置指令
高质量的指令对于任何基于LLM的应用都至关重要,对于智能代理尤为关键。
清晰的指令可减少歧义并改善代理决策,从而实现更流畅的
工作流程执行和更少的错误。
## 代理指令的最佳实践
| 最佳实践 | 描述 |
|---------|------|
| 使用现有文档 | 创建例程时,使用现有的操作程序、支持脚本或政策文档来创建适合LLM的例程。例如,在客户服务中,例程可以大致对应知识库中的单个文章。 |
| 提示代理分解任务 | 从密集资源中提供更小、更清晰的步骤有助于最小化歧义,并帮助模型更好地遵循指令。 |
| 定义明确的行动 | 确保例程中的每一步都对应一个特定的行动或输出。例如,一个步骤可能指示代理询问用户的订单号,或调用API检索账户详情。明确说明行动(甚至是面向用户的消息的措辞)可减少解释错误的空间。 |
| 捕捉边缘情况 | 现实世界的交互经常会产生决策点,例如当用户提供不完整信息或提出意外问题时如何继续。健壮的例程会预见常见变化,并包含如何通过条件步骤或分支(例如在缺少必要信息时的替代步骤)来处理它们的指令。 |
编排
护栏
相关文章:
OpenAI 34页最佳构建Agent实践
penAI发布O4,也发布34页最佳构建Agent实践,值得阅读。 什么是Agent? 传统软件使用户能够简化和自动化工作流程,而代理能够以高度独立的方式代表用户执行相同的工作流程。 代理是能够独立地代表您完成任务的系统。 工作流程是必…...
第 5 期(进阶版):训练第一个 DDPM 模型(使用 CIFAR-10 数据集)
—— 用 DDPM 模型生成彩色图像,感受扩散魔法在 CIFAR-10 上的威力! 本期目标 将 MNIST 替换为 CIFAR-10; 模型结构适配 RGB 三通道输入; 保持原始扩散与采样流程; 增加图像可视化对比! 数据准备&…...
进程间通信(IPC)----共享内存
进程间通信(IPC)的共享内存机制允许不同进程直接访问同一块物理内存区域,是速度最快的IPC方式(无需数据拷贝)。 一、共享内存核心概念 1. 基本原理 共享内存区域:由内核管理的特殊内存段,可被…...
Xcode16 调整 Provisioning Profiles 目录导致证书查不到
cronet demo 使用的 ninja 打包,查找 Provisioning Profiles 路径是 ~/Library/MobileDevice/Provisioning Profiles,但 Xcode16 把该路径改为了 ~/Library/Developer/Xcode/UserData/Provisioning Profiles,导致在编译 cronet 的demo 时找不…...
Debian服务器环境下env变量丢失怎么办
在 Debian服务器环境下,如果出现了 env 环境变量丢失的问题,比如常见的 PATH、JAVA_HOME、PYTHONPATH 等系统变量或自定义变量不起作用,可能会导致一些命令无法执行、服务无法启动、脚本报错等。 这个问题常见于: 使用 cron、sy…...
搜广推校招面经七十八
字节推荐算法 一、实习项目:多任务模型中的每个任务都是做什么?怎么确定每个loss的权重 这个根据实际情况来吧。如果实习时候用了moe,就可能被问到。 loss权重的话,直接根据任务的重要性吧。。。 二、特征重要性怎么判断的&…...
ctf.show—Web(1-10)详细通关教程
Web1-签到题 1、按F12查看元素,发现有一段被注释的字符串 2、看起来并不像flag,格式类似于Base64编码 扔到Base64在线编码平台:Base64 编码/解码 - 锤子在线工具此工具是一个 Base64 编码或解码在线工具,实现把字符串转成 Base6…...
双层Key缓存
双层 Key 缓存是一种针对 缓存击穿 和 雪崩问题 的优化方案,其核心思想是通过 主备双缓存 的机制,确保在热点数据过期时仍能提供可用服务,同时降低对数据库的瞬时压力。以下是其核心原理、实现细节及适用场景的深度解析: 一、核心…...
android编译使用共享缓存
注意 服务器端与客户端系统的版本号需为Ubuntu20.04ccache版本不能低于4.4执行用户需要为sudo权限服务器端nfs目录权限必须为nobody:nogroup 一、服务端配置: 在服务器192.168.60.142上配置 NFS 共享 1.安装 NFS 服务器: 1 sudo apt-get install nfs…...
如何使用Labelimg查看已经标注好的YOLO数据集标注情况
文章目录 1、 安装并运行Labelimg1.1、安装Labelimg1.2、运行Labelimg 2、查看数据集标注情况2.1、创建类别名称文件classes.txt2.2、使用Labelimg打开查看标注文件2.3、正式标注 3、目标检测系列文章 本文主要介绍一下如何使用LabelImg查看已经标注好的YOLO数据集标注情况&…...
Web3架构下的数据隐私与保护
在这个信息爆炸的时代,Web3的概念如同一股清流,以其去中心化的特性,为数据隐私与保护带来了新的希望。Web3,也被称作下一代互联网,它通过区块链技术实现数据的去中心化存储和处理,旨在提高数据的安全性和隐…...
PCM 参数深度解析:采样率、帧、缓存大小与多通道关系
将下面的 PCM 配置作为例子: config.channels 2; // 立体声(2 个通道) config.rate 48000; // 采样率 48000 Hz,即每秒 48000 帧 config.period_size 1024; // 每个周…...
Kafka消费者端重平衡流程
重平衡的完整流程需要消费者 端和协调者组件共同参与才能完成。我们先从消费者的视角来审视一下重平衡的流程。在消费者端,重平衡分为两个步骤:分别是加入组和等待领导者消费者(Leader Consumer)分配方案。这两个步骤分别对应两类…...
【字节跳动AI论文】海姆达尔:生成验证的测试时间扩展
摘要:人工智能系统只能在能够验证知识本身的范围内创建和维护知识。 最近关于长链推理的研究表明,LLM在解决竞争问题方面具有巨大的潜力,但它们的验证能力仍然很弱,而且没有得到充分的研究。 在本文中,我们提出了Heimd…...
【Datawhale Al春训营】气象预测(AI+航空安全)竞赛笔记
这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...
大模型应用开发实战:AI Agent与智能体开发技术解析
更多AI大模型应用开发学习内容,尽在聚客AI学院 一、AI Agent的核心概念 AI Agent(智能体)是基于大模型构建的自主任务执行系统,能够根据用户指令拆解目标、调用工具、完成复杂任务(如数据分析、自动化办公)…...
《Learning Langchain》阅读笔记3-基于 Gemini 的 Langchain如何从LLMs中获取特定格式
纯文本输出是有用的,但在某些情况下,我们需要 LLM 生成结构化输出,即以机器可读格式(如 JSON、XML 或 CSV)或甚至以编程语言(如 Python 或 JavaScript)生成的输出。当我们打算将该输出传递给其他…...
Mac mini 安装mysql数据库以及出现的一些问题的解决方案
首先先去官网安装一下mysql数据库,基本上都是傻瓜式安装的流程,我也就不详细说了。 接下来就是最新版的mysql安装的时候,他就会直接让你设置一个新的密码。 打开设置,拉到最下面就会看到一个mysql的图标: 我设置的就是…...
智能体时代的产业范式确立,中国企业以探索者姿态走出自己的路
作者 | 曾响铃 文 | 响铃说 当前,一个新的20年的产业升级期已经开启,系统性的发展路径也正在形成。 前不久,以“共建智能体时代“为主题的超聚变探索者大会2025在河南郑州举办。超聚变变数字技术有限公司(以下简称:…...
电路安全智控系统与主机安全防护系统主要功能是什么
电路安全智控系统被称为电路安全用电控制系统。电路安全智控系统具备一系列强大且实用的功能。电路安全智控系统能够对总电压、总电流、总功率、总电能,以及各分路的电压、电流、功率、电能和功率因素等进行全方位的监控。在大型工厂的电力分配中,通过对…...
MCP Server驱动传统SaaS智能化转型:从工具堆叠到AI Agent生态重构,基于2025年技术演进与产业实践
MCP Server驱动传统SaaS智能化转型:从工具堆叠到AI Agent生态重构 (基于2025年技术演进与产业实践) MCP模型上下文协议 一、技术底座革新:MCP协议重构AI时代的"数字接口" 传统SaaS软件向大模型AI应用转型的核心矛盾…...
【工具变量】地市农业播种面积及粮食产量等21个相关指标(2013-2022年)
粮食产量、粮食播种面积及农作物播种面积等,是衡量农业发展水平和粮食安全的重要指标。随着全球粮食需求的持续增长,准确掌握这些数据对制定农业政策、优化生产结构和提高农业生产效率至关重要。因此,缤本次分享数据包括《中国统计NJ》、《中…...
使用 PySpark 批量清理 Hive 表历史分区
使用 PySpark 批量清理 Hive 表历史分区 在大数据平台中,Hive 表通常采用分区方式存储数据,以提升查询效率和数据管理的灵活性。随着数据的不断积累,历史分区会越来越多,既占用存储空间,也影响元数据管理性能。因此&a…...
A. k-th equality(1700)
Problem - 1835A - Codeforces Daily_CF_Problems/daily_problems/2025/04/0417/solution/cf1835a.md at main Yawn-Sean/Daily_CF_Problems 考虑所有形式为 abc 的等式,其中 a有 A 位数, b 有 B 位数, c 有 C 位数。所有数字都是正整数,求…...
深度学习-torch,全连接神经网路
3. 数据集加载案例 通过一些数据集的加载案例,真正了解数据类及数据加载器。 3.1 加载csv数据集 代码参考如下 import torch from torch.utils.data import Dataset, DataLoader import pandas as pd class MyCsvDataset(Dataset):def __init__(self, fil…...
echarts饼图中心呈现一张图片,并且能动态旋转的效果react组件
实现效果: 父组件: import React from react import styles from ./style.less import GaugeChart from ./GaugeChart;export default function index() {return (<div><div className{styles.bg} ></div><div style{{ width: 500…...
使用Docker搭建开源Email服务器
使用Docker搭建开源Email服务器 1 介绍 开源的Email服务器比较多,例如:poste.io、MailCatcher、Postal、mailcow等。由于poste.io支持docker安装,页面比较美观,使用简单,支持SMTP IMAP POP3等协议,安全…...
css图片设为灰色
使用filter方式将图片设置为灰色 普通图片使用:filter: saturate(0); 纯白图片使用: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"width…...
2025 年第十五届 MathorCup竞赛赛题浅析-助攻快速选题
本届妈杯竞赛各赛题难度均已经达到了国赛难度,也更好的回应了大家更为关心的,在当前AI环境下,似乎“数学建模变成了AI使用竞赛一样”。但是国委会一直以来都是一个态度:AI现在是无法直接解决任何一个国赛赛题的。对应的如今这句话…...
【android bluetooth 案例分析 03】【PTS 测试 1】【pts基本介绍】
Bluetooth SIG(Special Interest Group)提供的 PTS(Profile Tuning Suite)测试 是蓝牙认证过程中一项极为关键的步骤。它主要用于验证设备是否符合 Bluetooth SIG 制定的各项 蓝牙规范(Bluetooth Specification&#x…...
Java集合框架深度解析:HashMap、HashSet、TreeMap、TreeSet与哈希表原理详解
一、核心数据结构总览 1. 核心类继承体系 graph TDMap接口 --> HashMapMap接口 --> TreeMapSet接口 --> HashSetSet接口 --> TreeSetHashMap --> LinkedHashMapHashSet --> LinkedHashSetTreeMap --> NavigableMapTreeSet --> NavigableSet 2. 核心…...
【深度学习】张量计算:爱因斯坦求和约定|tensor系列03
博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: Yaoyao2024往期回顾:【深度学习】详解矩阵乘法、点积,内积,外积、哈达玛积极其应用|tensor系列02每日一言🌼: “岱宗夫如何&…...
OpenHarmony-Risc-V上运行openBLAS中的benchmark
OpenHarmony-Risc-V上运行openBLAS中的benchmark 文章目录 OpenHarmony-Risc-V上运行openBLAS中的benchmark前言一、编译openBLAS1.源码下载2.工具链下载3.编译并安装openBLAS 二、编译open BLAS中的benchmark三、上设备运行总结 前言 参考https://zhuanlan.zhihu.com/p/18825…...
CCF CSP 第36次(2024.12)(2_梦境巡查_C++)
CCF CSP 第36次(2024.12)(2_梦境巡查_C) 解题思路:思路一: 代码实现代码实现(思路一): 时间限制: 1.0 秒 空间限制: 512 MiB 原题链接 解题思路…...
windows下安装mcp servers
以sequential-thinking为例 macos下安装就像github readme中那样安装即可: {"mcpServers": {"sequential-thinking": {"command": "npx","args": ["-y","modelcontextprotocol/server-sequenti…...
OpenGauss 数据库介绍
OpenGauss 数据库介绍 OpenGauss 是华为基于 PostgreSQL 开发的企业级开源关系型数据库,现已成为开放原子开源基金会的项目。以下是 OpenGauss 的详细介绍: 一 核心特性 1.1 架构设计亮点 特性说明优势多核并行NUMA感知架构充分利用现代CPU多核性能行…...
Web3区块链网络中数据隐私安全性探讨
在这个信息爆炸的时代,Web3 的概念如同一股清流,以其去中心化、透明性和安全性的特点,为数据隐私保护提供了新的解决方案。本文将探讨 Web3 区块链网络中数据隐私的安全性问题,并探索如何通过技术手段提高数据隐私的保护。 Web3 …...
linux驱动之poll
驱动中 poll 实现 在用户空间实现事件操作的一个主要实现是调用 select/poll/epoll 函数。那么在驱动中怎么来实现 poll 的底层呢? 其实在内核的 struct file_operations 结构体中有一个 poll 成员,其就是底层实现的接口函数。 驱动中 poll 函数实现原…...
【最后203篇系列】028 FastAPI的后台任务处理
说明 今天偶然在别的文章里看到这个功能,突然觉得正好。 CeleryWorker已经搭好了,但是我一直想在用户请求时进行额外的处理会比较影响处理时间,用这个正好可以搭配上。 我设想的一个场景: 1 用户发起请求2 接口中进行关键信息…...
微信小程序中,将搜索组件获取的值传递给父页面(如 index 页面)可以通过 自定义事件 或 页面引用 实现
将搜索组件获取的值传递给父页面(如 index 页面)可以通过 自定义事件 或 页面引用 实现 方法 1:自定义事件(推荐) 步骤 1:搜索组件内触发事件 在搜索组件的 JS 中,当获取到搜索值时,…...
深入理解分布式缓存 以及Redis 实现缓存更新通知方案
一、分布式缓存简介 1. 什么是分布式缓存 分布式缓存:指将应用系统和缓存组件进行分离的缓存机制,这样多个应用系统就可以共享一套缓存数据了,它的特点是共享缓存服务和可集群部署,为缓存系统提供了高可用的运行环境,…...
C#核心笔记——(六)框架基础
我们在编程时所需的许多核心功能并不是由C#语言提供的,而是由.NET Framework中的类型提供的。本节我们将介绍Framework在基础编程任务(例如虚的等值比较、顺序比较以及类型转换)中的作用。我们还会介绍Framework中的基本类型,例如String、DateTime和Enum. 本章中的绝大部分…...
C# 点击导入,将需要的参数传递到弹窗的页面
点击导入按钮,获取本页面的datagridview标题的结构,并传递到导入界面。 新增一个datatable用于存储datagridview的caption和name,这里用的是devexpress组件中的gridview。 DataTable dt new DataTable(); DataColumn CAPTION …...
java面向对象编程【基础篇】之基础概念
目录 🚀前言🤔面向过程VS面向对象💯面向过程编程(POP)💯面向对象编程(OOP)💯两者对比 🌟三大特性💯封装性💯继承性💯多态性…...
Oceanbase单机版上手示例
本月初Oceanbase单机版发布,作为一个以分布式起家的数据库,原来一个集群动辄小十台机器,多着十几台几十台甚至更多,Oceanbase单机版的发布确实大大降低了硬件部署的门槛。 1.下载安装介质 https://www.oceanbase.com/softwarece…...
深度学习基础--CNN经典网络之InceptionV3详解与复现(pytorch)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 InceptionV3是InceptionV1的升级版,虽然加大了计算量,但是当时效果是比VGG效果要好的。本次任务是探究InceptionV3结构并进行复…...
VOIP通信中的错误码
cancle报文 Reason: SIP;cause200;text"Call completed elsewhere" Reason: Q.850;cause26表示取消的原因是呼叫在其他地方已经完成表示Q.850标准中的原因码26,通常对应于“呼叫被取消”(Call Cancelled)487 Request Terminated Re…...
C++ STL编程-vector概念、对象创建
vector 概念:是常见的一种容器,被称为“柔性数组”。 在vector中,front()是数组中的第一个元素,back()是数组的最后一个元素。begin()是是指向第一个元素,end()是指向back()的后一个元素 vector的对象创建࿰…...
easyexcel使用模板填充excel坑点总结
1.单层map设置值是{属性},那使用两层map进行设置值,是不是可以使用{属性.属性},以为取出map里字段只用{属性}就可以设置值,那再加个.就可以从里边map取出对应属性,没有两层map写法 填充得到的文件打开报错 was empty (…...
C#学习第16天:聊聊反射
什么是反射? 定义:反射是一种机制,允许程序在运行时获取关于自身的信息,并且可以动态调用方法、访问属性或创建实例。用途:常用于框架设计、工具开发、序列化、代码分析和测试等场景 反射的核心概念 1. 获取类型信息…...