autogen 人工输入模式

news2025/1/16 6:51:31

一、Allowing Human Feedback in Agents 允许代理中的人类反馈

  1. 发起聊天 (initiate_chat)
    功能:用于启动对话过程。
    参数:max_turns:限制对话的最大回合数。如果设置为3,意味着对话将在第三个回合后自动终止,除非提前满足其他终止条件。
  2. 最大连续自动回复 (max_consecutive_auto_reply)
    功能:控制在没有人工干预的情况下,系统可以连续自动回复的最大次数。此参数有助于防止对话陷入无限循环,并确保在适当的时候请求人工输入。
  3. 终止消息 (is_termination_msg)
    功能:定义一个条件,当收到的消息满足该条件时,对话将立即终止。
    自定义:可以通过 is_terminate_msg 类的构造函数中的参数来定制触发终止的具体条件。例如,如果消息中包含特定关键词(如“TERMINATE”),则会触发终止。

二、Human Input Modes

AutoGen 的 human_input_mode 通过 ConversableAgent 支持三种人工输入模式:

NEVER:系统完全自主,不请求人工输入。
TERMINATE(默认):仅在满足终止条件时请求人工输入,人类可以拦截并重置自动回复计数max_consecutive_auto_reply
ALWAYS:每次交互都请求人工输入,人类可选择跳过、拦截或终止对话,忽略max_consecutive_auto_reply基于连续自动回复次数的终止规则。

三、Human Input Mode = NEVER 系统自主

在这种模式下,系统完全自主运行,不会请求任何人工输入或干预。所有操作和决策均由代理根据预设规则和逻辑自行完成。这种设置非常适合不需要人类介入、期望自动化处理的任务场景。
示例:两个代理之间的猜数字游戏

  • 设定:两个代理进行互动,其中一个代理选择一个随机数字,另一个代理尝试猜测这个数字。
  • 终止条件:当猜测的数字正确时,发出特定的终止消息来结束游戏。
  • 运行方式:在整个游戏过程中,不会有人工输入的机会;代理将根据内置逻辑自动进行猜测,直到满足终止条件(即猜中数字)为止。
    import os
    
    from autogen import ConversableAgent
    
    # 创建一个持有数字53的代理,用于玩猜数字游戏
    agent_with_number = ConversableAgent(
        "agent_with_number",  # 代理的名称
        system_message="You are playing a game of guess-my-number. You have the number 53 in your mind, and I will try to guess it. If I guess too high, say 'too high', if I guess too low, say 'too low'. ",
        # system_message="你正在玩一个猜数字的游戏。 在第一轮游戏中,你心中的数字是53,我将尝试猜测这个数字。 如果我猜的数字太高,请说'太高了';如果我猜的数字太低,请说'太低了'。",
        llm_config=llm_config,  # 配置使用的语言模型和API密钥
        max_consecutive_auto_reply=5,  # 设置最大连续自动回复次数,在此之后会请求人工输入
        is_termination_msg=lambda msg: "53" in msg["content"],  # 如果猜中数字则终止
        human_input_mode="TERMINATE",  # 游戏终止前需要人工输入
    )
    
    
    # 创建一个猜测数字的代理,用于尝试猜出对方的数字
    agent_guess_number = ConversableAgent(
        "agent_guess_number",  # 代理的名称
        system_message="我脑子里有一个数字,你会试着猜出来的。如果我说‘太高’,你应该猜一个较低的数字。如果我说太低,你应该猜一个更高的数字。",  # 系统消息,定义代理的行为
        llm_config={"config_list": [{"model": "gpt-4", "api_key": os.environ["OPENAI_API_KEY"]}]},
        human_input_mode="NEVER",  # 不要求人工干预
    )
    
    # 开始对话,由持有数字的代理发起
    result = agent_with_number.initiate_chat(
        agent_guess_number,  # 对话的另一方是猜测数字的代理
        message="我有一个介于1和100之间的数字。猜猜看!",  # 初始消息,告知对方数字范围并邀请猜测
    )
    

四、Human Input Mode = ALWAYS 人工输入模式 = ALWAYS

在这种模式下,系统在每次交互时都会主动请求人工输入,适合那些需要人类监督或决策的任务场景
人类用户可以:

跳过:允许系统继续进行自动回复。
拦截:提供反馈或修改系统的行为。
终止:立即结束对话。

# 创建一个代表人类代理的ConversableAgent实例,名为"human_proxy"
# llm_config=False 表示这个代理不会使用语言模型(LLM)进行响应
# human_input_mode="ALWAYS" 意味着这个代理在任何时候都会请求人类输入
human_proxy = ConversableAgent(
    "human_proxy",
    llm_config=False,  # 不使用LLM
    human_input_mode="ALWAYS",  # 总是请求人类输入
)

# 使用数字代理开始聊天,并以“10”作为初始消息。
# agent_with_number 是之前定义的、持有某个数字的代理
result = human_proxy.initiate_chat(
    agent_with_number,  # 与之聊天的代理,它持有一个数字
    message="10",  # 初始猜测的消息
)
用户可以进行人为干预human_proxy:比如输入数字,比如太高系统会自动给出另一个数字回答;可以退出

human_proxy (to agent_with_number):  解释:初始数字 10

10

--------------------------------------------------------------------------------

>>>>>>>> USING AUTO REPLY...
agent_with_number (to human_proxy): 解释:数字agent 太小啦

Too low.

--------------------------------------------------------------------------------
Replying as human_proxy. Provide feedback to agent_with_number. Press enter to skip and use auto-reply, or type 'exit' to end the conversation: 50
human_proxy (to agent_with_number):
解释:向数字agent提供反馈。然后按enter键自动回复;输入exit 结束对话;
本人输入50,回车

50

--------------------------------------------------------------------------------

>>>>>>>> USING AUTO REPLY...
agent_with_number (to human_proxy): 解释:数字agent 太小啦

Too low.

--------------------------------------------------------------------------------
Replying as human_proxy. Provide feedback to agent_with_number. Press enter to skip and use auto-reply, or type 'exit' to end the conversation: 

>>>>>>>> NO HUMAN INPUT RECEIVED.

>>>>>>>> USING AUTO REPLY...
human_proxy (to agent_with_number):



--------------------------------------------------------------------------------

>>>>>>>> USING AUTO REPLY...
agent_with_number (to human_proxy):

Too high.


--------------------------------------------------------------------------------
Replying as human_proxy. Provide feedback to agent_with_number. Press enter to skip and use auto-reply, or type 'exit' to end the conversation: 53
human_proxy (to agent_with_number): 解释:我又输入 5353

--------------------------------------------------------------------------------
Please give feedback to human_proxy. Press enter or type 'exit' to stop the conversation:  
解释:本人猜对了,告诉human_proxy反馈。按enter或键入“exit”停止对话

>>>>>>>> NO HUMAN INPUT RECEIVED. # 未收到人工输入 输出结果
ChatResult(chat_id=None, chat_history=[{'content': '10', 'role': 'assistant', 'name': 'human_proxy'}, {'content': 'Too low.', 'role': 'user', 'name': 'agent_with_number'}, {'content': '50', 'role': 'assistant', 'name': 'human_proxy'}, {'content': 'Too low.', 'role': 'user', 'name': 'agent_with_number'}, {'content': '53', 'role': 'assistant', 'name': 'human_proxy'}], summary='53', cost={'usage_including_cached_inference': {'total_cost': 0.000845, 'gpt-4o-2024-05-13': {'cost': 0.000845, 'prompt_tokens': 151, 'completion_tokens': 6, 'total_tokens': 157}}, 'usage_excluding_cached_inference': {'total_cost': 0.00047, 'gpt-4o-2024-05-13': {'cost': 0.00047, 'prompt_tokens': 85, 'completion_tokens': 3, 'total_tokens': 88}}}, human_input=['50', '53'])

五、Human Input Mode = TERMINATE 人机输入模式

请求人工输入:仅当满足终止条件时。
拦截并回复:人类介入并提供新输入,计数器重置。
跳过:使用自动回复机制继续,计数器重置。
终止:人类选择立即结束对话。

这种方式展示了 TERMINATE 模式下,系统可以在特定条件下请求人类帮助,确保对话可以根据需要灵活调整,同时保留自动化处理的能力。

CSDN 博客图片 CSDN 博客图片
# 定义一个具有数字猜测功能的对话代理
agent_with_number = ConversableAgent(
    "agent_with_number",
    system_message="You are playing a game of guess-my-number. "
    "In the first game, you have the "
    "number 53 in your mind, and I will try to guess it. "
    "If I guess too high, say 'too high', if I guess too low, say 'too low'. ",
    llm_config=llm_config,
    max_consecutive_auto_reply=1,  # maximum number of consecutive auto-replies before asking for human input
    is_termination_msg=lambda msg: "53" in msg["content"],  # 当消息中包含数字53时,认为游戏结束
    human_input_mode="TERMINATE",  # 游戏终止前需要人工输入
)

# 定义一个用于猜测数字的对话代理
agent_guess_number = ConversableAgent(
    "agent_guess_number",
    system_message="I have a number in my mind, and you will try to guess it. "
    "If I say 'too high', you should guess a lower number. If I say 'too low', "
    "you should guess a higher number. ",
    llm_config=llm_config,
    human_input_mode="NEVER", # 从不需要人工输入
)

# 开始对话,由agent_with_number发起,并向agent_guess_number发送第一条消息
result = agent_with_number.initiate_chat(
    agent_guess_number,
    message="I have a number between 1 and 100. Guess it!",
)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络渗透实验四(渗透课)

实验目的和要求实验目的:通过对目标靶机的渗透过程,了解CTF竞赛模式,理解CTF涵盖的知识范围,如MISC、PPC、WEB等,通过实践,加强团队协作能力,掌握初步CTF实战能力及信息收集能力。熟悉网络扫描、…

C++_关于异常处理throw-try-catch

文章目录 作用1. 无异常捕获2. 有异常捕获 作用 简单说,异常处理机制主要作用是让程序能够继续执行,或者以一种可控的方式终止,而非让程序因为错误直接崩溃 一个简单的动态数组类,来看看有异常捕获和无异常捕获的区别 1. 无异常…

LabVIEW氢同位素单质气体定量分装系统

氢同位素单质气体在多个行业中有重要应用,如能源和化工。传统的分装方法面临精度和自动化程度不足的问题。为此,开发了一套基于LabVIEW和质量流量控制器的定量分装系统,提高分装精度和效率,同时减少资源浪费和环境污染。 项目背景…

第427场周赛: 转换数组、用点构造面积最大的矩形 Ⅰ、长度可被 K 整除的子数组的最大元素和、用点构造面积最大的矩形 Ⅱ

Q1、转换数组 1、题目描述 给你一个整数数组 nums&#xff0c;它表示一个循环数组。请你遵循以下规则创建一个大小 相同 的新数组 result &#xff1a; 对于每个下标 i&#xff08;其中 0 < i < nums.length&#xff09;&#xff0c;独立执行以下操作&#xff1a; 如…

华为服务器使用U盘重装系统

一、准备工作 下载官方系统&#xff08;注意服务器CPU的架构是x86-64还是aarch64&#xff0c;不然可能报意想不到的错&#xff09;制作启动U盘&#xff08;下载rufus制作工具&#xff0c;注意文件系统选FAT32还是NTFS&#xff09; 二、安装步骤 将U盘插入USB接口重启服务器…

java八股-流量封控系统

文章目录 请求后台管理的频率-流量限制流量限制的业务代码UserFlowRiskControlFilter 短链接中台的流量限制CustomBlockHandler 对指定接口限流UserFlowRiskControlConfigurationSentinelRuleConfig 请求后台管理的频率-流量限制 根据登录用户做出控制&#xff0c;比如 x 秒请…

Nginx限流实践-limit_req和limit_conn的使用说明

注意&#xff1a; 本文内容于 2024-12-07 19:38:40 创建&#xff0c;可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容&#xff0c;请访问原文地址&#xff1a;Nginx限流实践。感谢您的关注与支持&#xff01; 一、限流 之前我有记录通过CentOS7定时任务实…

centos9升级OpenSSH

需求 Centos9系统升级OpenSSH和OpenSSL OpenSSH升级为openssh-9.8p1 OpenSSL默认为OpenSSL-3.2.2&#xff08;根据需求进行升级&#xff09; 将源码包编译为rpm包 查看OpenSSH和OpenSSL版本 ssh -V下载源码包并上传到服务器 openssh最新版本下载地址 wget https://cdn.openb…

【CSS in Depth 2 精译_068】11.2 颜色的定义(下):CSS 中的各种颜色表示法简介

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间11.2.2 CSS 颜色表示法 ✔️ 11.2.2.…

16-02、JVM系列之:内存与垃圾回收篇(二)

JVM系列之&#xff1a;内存与垃圾回收篇(二) ##本篇内容概述&#xff1a; 1、堆Heap Area 2、方法区Method Area 3、运行时数据区总结 4、对象的实例化内存布局和访问定位一、堆 Heap Area 1、堆的核心概念 一个JVM实例只存在一个堆内存&#xff0c;堆也是Java内存管理的核心…

一文了解模式识别顶会ICPR 2024的研究热点与最新趋势

简介 对模式识别研究领域前沿方向的跟踪是提高科研能力和制定科研战略的关键。本文通过图文并茂的方式介绍了ICPR 2024的研究热点与最新趋势&#xff0c;帮助读者了解和跟踪模式识别的前沿研究方向。本推文的作者是黄星宇&#xff0c;审校为邱雪和许东舟。 一、会议介绍 ICPR…

网络安全知识:网络安全网格架构

在数字化转型的主导下&#xff0c;大多数组织利用多云或混合环境&#xff0c;包括本地基础设施、云服务和应用程序以及第三方实体&#xff0c;以及在网络中运行的用户和设备身份。在这种情况下&#xff0c;保护组织资产免受威胁涉及实现一个统一的框架&#xff0c;该框架根据组…

树莓集团是如何链接政、产、企、校四个板块的?

树莓集团作为数字影像行业的积极探索者与推动者&#xff0c;我们通过多维度、深层次的战略举措&#xff0c;将政、产、企、校四个关键板块紧密链接在一起&#xff0c;实现了资源的高效整合与协同发展&#xff0c;共同为数字影像产业的繁荣贡献力量。 与政府的深度合作政府在产业…

关于睡懒觉

我们经常听到一个词&#xff1a;睡懒觉。 我认为&#xff0c;睡懒觉这个词&#xff0c;是错误的。 人&#xff0c;是需要睡眠的&#xff0c;睡不够&#xff0c;就不会醒。睡够了&#xff0c;自然会醒&#xff0c;也不想继续睡。不信你试试&#xff0c;睡够了&#xff0c;你…

简单的动态带特殊符号敏感词校验

简单的动态带特殊符号敏感词校验 敏感词之前进行了简单了解&#xff0c;使用结巴分词自带词库可以实现&#xff0c;具体参考我的如下博文 敏感词校验 此次在此基础进行了部分优化&#xff0c;优化过程本人简单记录一下&#xff0c;具体优化改造步骤如下所示 1.需求 我们公司…

C++(十二)

前言&#xff1a; 本文将进一步讲解C中&#xff0c;条件判断语句以及它是如何运行的以及内部逻辑。 一&#xff0c;if-else,if-else语句。 在if语句中&#xff0c;只能判断两个条件的变量&#xff0c;若想实现判断两个以上条件的变体&#xff0c;就需要使用if-else,if-else语…

【Redis】Redis基础——Redis的安装及启动

一、初识Redis 1. 认识NoSQL 数据结构&#xff1a;对于SQL来说&#xff0c;表是有结构的&#xff0c;如字段约束、字段存储大小等。 关联性&#xff1a;SQL 的关联性体现在两张表之间可以通过外键&#xff0c;将两张表的数据关联查询出完整的数据。 查询方式&#xff1a; 2.…

Devops 实践

Devops 实践 基本概念jenkins实践安装jenkins仓库环境准备代码环境准备第一次构建持续集成持续部署集成插件 优秀实践心得体会 参考 摘要&#xff1a;本文首先将介绍一些基本概念&#xff0c;包括Devops&#xff0c;CI/CD等&#xff0c;然后基于知名开源CI/CD工具jenkins进行实…

学生信息管理系统(简化版)数据库部分

使用Mysql&#xff0c;与navicat工具 下面是mysql创建的代码&#xff0c;可做必要修改 -- 创建学生学籍信息表 CREATE TABLE StudentEnrollment (-- 学号&#xff0c;作为主键student_id VARCHAR(8) NOT NULL,-- 学生姓名stu_name VARCHAR(8) NOT NULL,-- 学生性别gender VARC…

图生3d 图生全景 学习笔记

目录 instantsplat Aluciddreamer ZoeDepth 会自动下载模型&#xff1a; 图生全景图SD-T2I-360PanoImage&#xff1a; instantsplat Sparse-view SfM-free Gaussian Splatting in Seconds 稀疏视图无SfM高斯喷洒 GitHub - NVlabs/InstantSplat: InstantSplat: Sparse-vi…