Multi-Agent实践第2期: @智能体 你怎么看?

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 我们将带你体验如何实现一个更具互动性的多智能体群聊:你可以直接"@"提及某个智能体来引发对话。

前言

在上一期的文章《Multi-Agent实践第1期:5分钟上手AgentScope》中,我们简要介绍了如何使用AgentScope快速构建一个多智能体聊天应用。本期,我们将带你体验如何实现一个更具互动性的多智能体群聊——在这个群聊中,你可以直接"@"提及某个智能体来引发对话。

欢迎关注AgentScope,在github上(https://github.com/modelscope/agentscope) 为我们star 🌟。我们会在接下来几天,继续推出一系列教程,让大家每天花5~10分钟,搭建出不同的由简单到复杂的有趣的多智能体应用!

准备工作与智能体配置

第一步:设置基本参数

为了实现我们的群聊环境,第一步是设置一些基本参数。USER_TIME_TO_SPEAK定义了用户在回合中发言的时间限制,这里我们给用户设置了10秒钟的时间来输入他们的消息。

USER_TIME_TO_SPEAK = 10

接下来,我们设定群聊的默认话题和系统提示。这将指导Agent与用户互动,并为群聊提供初始的讨论方向。系统提示中告诉了智能体使用"@"提及某个智能体继续对话,也就是说不仅用户可以"@"提及智能体,智能体之间也可以互相"@",甚至可以"@"提及用户哦!

DEFAULT_TOPIC = """
This is a chat room and you can speak freely and briefly.
"""
SYS_PROMPT = """
You can designate a member to reply to your message, you can use the @ symbol.
This means including the @ symbol in your message, followed by
that person's name, and leaving a space after the name.
All participants are: {agent_names}
"""

第二步:配置模型与智能体

在上一期中,我们介绍了直接实例化智能体,实际上通过配置文件,我们也可以直接使用agentscope.init在初始化模型配置的同时构建智能体。

import agentscope
npc_agents = agentscope.init(
    model_configs="./model_configs.json",
    agent_configs="./agent_configs.json",
)

这里我们将在model_configs.json中配置模型信息,这里我们使用千问(qwen)。

// model_configs.json
[
    {
    "model_type": "dashscope_chat",
    "config_name": "tongyi_qwen_config",
    "model_name": "qwen-max",
    "api_key": "************"  // 在这里填写你DashScope中的API-KEY
    }
]

在我们的群聊实践中,每个智能体都被赋予了独特的身份和背景故事,这些设置是通过设定不同的sys_prompt来实现的。在agent_configs.json里,我们将一一介绍这些配置中的智能体以及其角色设定:

  1. Lingfeng(凌风): 凌风是一位帝国朝廷中的贵族,以其智慧和策略眼光而闻名。他经常参与复杂的政治阴谋,最近怀疑女王的顾问有叛国行为。他的言谈举止让人想起古典文学,显示出他深厚的文化底蕴和对古代智慧的追求。
  2. Boyu(博宇): 博宇是凌风的朋友。他的言语现代但带有戏剧性的色彩,与他对情感故事讲述的爱好相契合。通过秘密通信,博宇紧密关注着凌风在帝国朝廷中的政治活动。
  3. Haotian(浩天): 浩天是凌风的表弟,相比于宫廷的拘束生活,他更喜欢自由的田野。作为一位受到赞誉的运动员,他的影响力在政治动荡时期为凌风提供了保护。浩天喜欢通过体育训练来为生活中的挑战做准备。
// agent_configs.json
[
    {
        "class": "DialogAgent",
        "args": {
            "name": "Lingfeng",
            "sys_prompt":"You are Lingfeng, a noble in the imperial court, known for your wisdom and strategic acumen. You often engage in complex political intrigues and have recently suspected the Queen’s adviser of treachery. Your speaking style is reminiscent of classical literature.",
            "model_config_name": "tongyi_qwen_config",
            "use_memory": true
        }
    },
    {
        "class": "DialogAgent",
        "args": {
            "name": "Boyu",
            "sys_prompt":"You are Boyu, a friend of Lingfeng. Your speech is modern but with a flair for the dramatic, matching your love for emotive storytelling. You've been closely following Lingfeng’s political maneuvers in the imperial court through secret correspondence.",
            "model_config_name": "tongyi_qwen_config",
            "use_memory": true
        }
    },
    {
        "class": "DialogAgent",
        "args": {
            "name": "Haotian",
            "sys_prompt":"You are Haotian, Lingfeng’s cousin who prefers the open fields to the confines of court life. As a celebrated athlete, your influence has protected Lingfeng in times of political strife. You promote physical training as a way to prepare for life's battles, often using sports metaphors in conversation.",
            "model_config_name": "tongyi_qwen_config",
            "use_memory": true
        }
    }
]

第三步:搭建群聊环境

在配置模型与智能体并初始化AgentScope之后,我们使用UserAgent创建用户代理,通过msghub创建群聊。这样,群聊环境就建立起来了。

import agentscope
from agentscope.agents import UserAgent
from agentscope.msghub import msghub
def main():
    # 通过`agentscope.init()`初始化智能体
    ...
    # 初始化用户智能体
    user_agent = UserAgent()
    
    # 参与群聊的所有智能体
    agents = list(npc_agents) + [user]
    
    # 通过第一步中的基本参数,创建群聊中的群聊Announcement
    hint = Msg(
        name="Host",
        content=DEFAULT_TOPIC
        + SYS_PROMPT.format(
            agent_names=[agent.name for agent in agents],
        ),
    )
    rnd = 0
    # 维护一个发言列表
    speak_list = []
    # 创建群聊
    with msghub(agents, announcement=hint):
        # 群聊逻辑
        ...

第四步:实现交互逻辑

我们设计了一个简单的轮流对话机制,用户可以通过输入指定的内容与智能体互动,也可以使用“@”符号指定回复某个智能体。

轮流对话机制的初始化: 群聊环境通过一个持续的循环来维持对话的进行,等待和处理每个参与者的输入。

while True:
    # 循环体中的代码负责处理对话逻辑

等待和处理用户输入: 系统会等待用户在一定时间内(由USER_TIME_TO_SPEAK定义)输入他们的消息。如果用户及时输入了内容,则继续执行后续逻辑。

try:
    x = user(timeout=USER_TIME_TO_SPEAK)
    if x.content == "exit":
        break

超时处理: 如果用户没有在规定时间内进行输入,跳过捕获TimeoutError错误,系统会记录一条日志信息,表示用户超过了响应时间,并跳过用户的回合,因此用户可以在群聊中跳过当轮发言。

except TimeoutError:
x = {"content": ""}
    logger.info(
        f"User has not typed text for "
        f"{USER_TIME_TO_SPEAK} seconds, skip.",
        )

智能体交互逻辑: 系统检查用户消息中是否有"@提及"智能体的内容,并根据提及情况决定回合中将交互的智能体,并加入speak_list中。

speak_list += filter_agents(x.get("content", ""), npc_agents)
if len(speak_list) > 0:
    next_agent = speak_list.pop(0)
    x = next_agent()

如果speak_list为空,即没有被"@"提及的智能体,那么通过select_next_one,来选择一个智能体发言。无论是被提及的智能体还是系统选择的智能体,它们的回复(如果有)都将为下一轮的交互做准备。

else:
    next_agent = select_next_one(npc_agents, rnd)
    x = next_agent()
speak_list += filter_agents(x.content, npc_agents)
rnd += 1

工具类函数:我们使用正则表达式来提取"@"提及到的智能体:

def filter_agents(string: str, agents: Sequence) -> Sequence:
    """
    该函数会筛选输入字符串中以'@'为前缀的给定名称的出现,并返回找到的名称列表。
    """
    if len(agents) == 0:
        return []
    # 创建一个匹配@后跟任何候选名字的模式
    pattern = (
        r"@(" + "|".join(re.escape(agent.name) for agent in agents) + r")\b"
    )
    # 在字符串中找到所有模式的出现
    matches = re.findall(pattern, string)
    
    # 为了快速查找,创建一个将代理名映射到代理对象的字典
    agent_dict = {agent.name: agent for agent in agents}
    # 返回匹配的代理对象列表,保持顺序
    ordered_agents = [
        agent_dict[name] for name in matches if name in agent_dict
    ]
    return ordered_agents

并且通过随机选择来决定当发言列表为空时,下一个发言的智能体,读者也可以自己实现更复杂的逻辑:

def select_next_one(agents: Sequence, rnd: int) -> Sequence:
    return agents[rnd % len(agents)]

第五步:启动带有"@"提及功能的群聊应用

现在,您可以运行main.py脚本,启动多智能体群聊应用。

python main.py  # 或者使用as_studio main.py

image.png

总结

到这里,我们已经完成了一个带有"@"提及功能的多智能体群聊的基本搭建。AgentScope提供的强大功能,让我们能够以最小的努力实现这样的多智能体应用。未来,我们还可以扩展智能体的功能,增加更丰富的交互方式,甚至接入更高级的模型,让群聊环境生动起来。完整的代码可以在链接中找到(https://github.com/modelscope/agentscope/tree/main/examples/conversation_with_mentions)。

延伸阅读和资源

比赛

看到这里,如果你有好玩的想法,不如实践起来,还可以顺便参加下面的比赛~

image.png


点击即可参加赛事报名~

Create @ AI 创客松第四季 (aliyun.com)

相关文章
|
1月前
|
前端开发 API 决策智能
多智能体微调实践:α-UMi 开源
近年来,为了加强大型语言模型(Large-Language Models, LLM)实时信息处理、解决专业问题的能力,催生了工具调用智能体(Tool Integrated Agent)概念
|
7天前
|
数据采集 人工智能 自然语言处理
万字干货|复杂表格多Agent方案:从LLM洞察、系统性 思考到实践经验总结
笔者结合实践经验以近期在负责的复杂表格智能问答为切入点,结合大模型的哲学三问(“是谁、从哪里来、到哪里去”),穿插阐述自己对大模型的一些理解与判断,以及面向公共云LLM的建设模式思考,并分享软件设计+模型算法结合的一些研发实践经验。
|
8天前
|
Prometheus 监控 Java
深入探索:自制Agent监控API接口耗时实践
在微服务架构中,监控API接口的调用耗时对于性能优化至关重要。通过监控接口耗时,我们可以识别性能瓶颈,优化服务响应速度。本文将分享如何自己动手实现一个Agent来统计API接口的调用耗时,提供一种实用的技术解决方案。
18 3
|
21天前
|
人工智能 API 决策智能
swarm Agent框架入门指南:构建与编排多智能体系统的利器 | AI应用开发
Swarm是OpenAI在2024年10月12日宣布开源的一个实验性质的多智能体编排框架。其核心目标是让智能体之间的协调和执行变得更轻量级、更容易控制和测试。Swarm框架的主要特性包括轻量化、易于使用和高度可定制性,非常适合处理大量独立的功能和指令。【10月更文挑战第15天】
148 6
|
1月前
|
Python 机器学习/深度学习 人工智能
手把手教你从零开始构建并训练你的第一个强化学习智能体:深入浅出Agent项目实战,带你体验编程与AI结合的乐趣
【10月更文挑战第1天】本文通过构建一个简单的强化学习环境,演示了如何创建和训练智能体以完成特定任务。我们使用Python、OpenAI Gym和PyTorch搭建了一个基础的智能体,使其学会在CartPole-v1环境中保持杆子不倒。文中详细介绍了环境设置、神经网络构建及训练过程。此实战案例有助于理解智能体的工作原理及基本训练方法,为更复杂应用奠定基础。首先需安装必要库: ```bash pip install gym torch ``` 接着定义环境并与之交互,实现智能体的训练。通过多个回合的试错学习,智能体逐步优化其策略。这一过程虽从基础做起,但为后续研究提供了良好起点。
111 4
手把手教你从零开始构建并训练你的第一个强化学习智能体:深入浅出Agent项目实战,带你体验编程与AI结合的乐趣
|
1月前
|
机器学习/深度学习 人工智能 算法
打造你的超级Agent智能体——在虚拟迷宫中智斗未知,解锁AI进化之谜的惊心动魄之旅!
【10月更文挑战第5天】本文介绍了一个基于强化学习的Agent智能体项目实战,通过控制Agent在迷宫环境中找到出口来完成特定任务。文章详细描述了环境定义、Agent行为及Q-learning算法的实现。使用Python和OpenAI Gym框架搭建迷宫环境,并通过训练得到的Q-table测试Agent表现。此项目展示了构建智能体的基本要素,适合初学者理解Agent概念及其实现方法。
85 9
|
1月前
|
机器学习/深度学习 人工智能 算法
Agent Q:具备自我学习、评估的智能体
近年来,人工智能领域取得了显著进步,特别是智能体技术备受瞩目。智能体作为AI系统核心,能自主学习、决策和执行任务,应用广泛。Agent Q作为一种具备自我学习和评估能力的智能体,通过强化学习算法,能自动优化行为策略,适应复杂环境,无需人工干预。此外,它还能根据评估指标调整策略,持续提升任务完成质量。尽管存在复杂环境适应性和计算资源消耗等挑战,Agent Q仍为智能机器人、自动驾驶等领域的应用提供了新思路,推动了AI技术的发展。论文详细内容可在此处获取:https://multion-research.s3.us-east-2.amazonaws.com/AgentQ.pdf
67 1
|
2月前
|
存储 机器学习/深度学习 人工智能
深入浅出 AI 智能体(AI Agent)|技术干货
随着人工智能技术的发展,智能体(AI Agents)逐渐成为人与大模型交互的主要方式。智能体能执行任务、解决问题,并提供个性化服务。其关键组成部分包括规划、记忆和工具使用,使交互更加高效、自然。智能体的应用涵盖专业领域问答、资讯整理、角色扮演等场景,极大地提升了用户体验与工作效率。借助智能体开发平台,用户可以轻松打造定制化AI应用,推动AI技术在各领域的广泛应用与深度融合。
2025 0
|
3月前
|
存储 人工智能
|
6天前
|
存储 人工智能 自然语言处理
AI经营|多Agent择优生成商品标题
商品标题中关键词的好坏是商品能否被主搜检索到的关键因素,使用大模型自动优化标题成为【AI经营】中的核心能力之一,本文讲述大模型如何帮助商家优化商品素材,提升商品竞争力。
AI经营|多Agent择优生成商品标题

热门文章

最新文章