【AI Agent系列】【阿里AgentScope框架】实战1:利用AgentScope实现动态创建Agent和自由组织讨论

简介: 【AI Agent系列】【阿里AgentScope框架】实战1:利用AgentScope实现动态创建Agent和自由组织讨论

大家好,我是 同学小张,持续学习C++进阶知识和AI大模型应用实战案例,持续分享,欢迎大家点赞+关注,共同学习和进步。


从实战中学习和拆解AgentScope框架的使用和知识。本文利用AgentScope框架实现的是 多智能体的自由讨论 。

代码参考:https://github.com/modelscope/agentscope/tree/main/examples/conversation_self_organizing


0. 实现效果

先上最终的实现效果,给大家一个直观的感受。本文实现的效果如下:

有多个Agent(例如案例中的 PhysicsTeacher物理老师、curious student好奇的学生、analytical student分析型学生),针对一个话题展开讨论,每个Agent轮流发言。

1. 需求拆解

要实现多智能体之间的自由讨论,需要实现以下内容:

(1)有多个对话智能体

(2)多个对话智能体之间的通信(数据流控制)

(3)本文要实现的是不固定的多智能体对话,也就是说,多智能体是动态创建的,因此有个Agent来组织讨论,例如本例中讨论的物理问题,该Agent需要根据这个物理问题创建相应的智能体(物理老师和各种学生等)

这么一看,是不是就觉得非常简单了?对话智能体(DialogAgent)和数据流控制(Pipeline)我们前面都已经深入学习过了,还不了解的可以去看我前面的AgentScope相关文章。

2. 代码实现

2.1 初始化AgentScope

AgentScope在使用前,需要先初始化配置,主要是将要使用的大模型和相关的API Key 设置一下:

import agentscope
model_configs = [
    {
        "model_type": "openai",
        "config_name": "gpt-3.5-turbo",
        "model_name": "gpt-3.5-turbo",
        # "api_key": "xxx",  # Load from env if not provided
        # "organization": "xxx",  # Load from env if not provided
        "generate_args": {
            "temperature": 0.5,
        },
    },
]
agentscope.init(model_configs=model_configs)

2.2 创建讨论的组织者

根据前面的需求分析,我们首先需要有一个Agent来根据问题动态生成讨论问题的Agent们。

这里使用一个对话智能体DialogAgent即可:

# init the self-organizing conversation
agent_builder = DialogAgent(
    name="agent_builder",
    sys_prompt="You're a helpful assistant.",
    model_config_name="gpt-3.5-turbo",
)

有了这个agent实例,可以通过传入Prompt和问题来获取参与讨论的Agents以及各Agents的设定。这里的Prompt是比较重要的,看下示例中的Prompt:

Act as a group discussion organizer. Please provide the suitable scenario for discussing this question, and list the roles of the people who need to participate in the discussion in order to answer this question, along with their system prompt to describe their characteristics.
The response must in the format of:
#scenario#: <discussion scenario>
#participants#:
* <participant1 type>: <characteristic description>
* <participant2 type>: <characteristic description>
Here are some examples.
Question: Joy can read 8 pages of a book in 20 minutes. How many hours will it take her to read 120 pages?
Answer:
#scenario#: grade school class discussion
#participants#:
* Instructor: Act as an instructor who is in a class group discussion to guide the student group discussion. Please encourage critical thinking. Encourage participants to think critically and challenge assumptions by asking thought-provoking questions or presenting different perspectives.
* broad-minded-student: Act as a student who is broad-minded and is open to trying new or different ways to solve problems. You are in a group discussion with other student under the guidance of the instructor.
* knowledgeable-student: Act as a knowledgeable student and discuss with others to retrieve more information about the topic. If you do not know the answer to a question, please do not share false information
Please give the discussion scenario and the corresponding participants for the following question:
Question: {question}
Answer:

Prompt里,要求要给出讨论的流程、讨论的参与者与讨论参与者各自的“system prompt”。

运行时,将Prompt与问题组合传给Agent:

query = "假设你眼睛的瞳孔直径为5毫米,你有一台孔径为50厘米的望远镜。望远镜能比你的眼睛多收集多少光?"
x = load_txt(
"D:\\GitHub\\LEARN_LLM\\agentscope\\start_0\\conversation_self_organizing\\agent_builder_instruct.txt",
).format(
    question=query,
)
x = Msg("user", x, role="user")
settings = agent_builder(x)

看下这个Agent的运行结果:

文字版运行结果:

tools:extract_scenario_and_participants:82 - {'Scenario': 'Physics class discussion on optics', 'Participants': {'PhysicsTeacher': 'Act as a physics teacher who is leading the discussion on optics. Your role is to facilitate the conversation, provide explanations, and ensure that the discussion stays focused on the topic of light collection and optics.', 'curious-student': 'Act as a student who is curious and eager to learn more about optics and light collection. You ask insightful questions and actively participate in the discussion to deepen your understanding.', 'analytical-student': 'Act as a student who is analytical and enjoys solving problems related to optics. You approach the question methodically and use logical reasoning to arrive at solutions.'}}

输出结果给出了 Scenario 以及该问题的 Participants参与者,参与者有 PhysicsTeacher、curious-student 和 analytical-student。并给出了这几个参与者的角色设定。

之后通过一个解析函数,将里面的角色和设定解析出来就可以用来动态创建这些Agent了。

def extract_scenario_and_participants(content: str) -> dict:
    result = {}
    # define regular expression
    scenario_pattern = r"#scenario#:\s*(.*)"
    participants_pattern = r"\*\s*([^:\n]+):\s*([^\n]+)"
    # search and extract scenario
    scenario_match = re.search(scenario_pattern, content)
    if scenario_match:
        result["Scenario"] = scenario_match.group(1).strip()
    # search and extract participants
    participants_matches = re.finditer(participants_pattern, content)
    participants_dict = {}
    for match in participants_matches:
        participant_type, characteristic = match.groups()
        participants_dict[
            participant_type.strip().replace(" ", "_")
        ] = characteristic.strip()
    result["Participants"] = participants_dict
    
    logger.info(result)
    return result
scenario_participants = extract_scenario_and_participants(settings["content"])

2.3 动态创建讨论者

有了参与者及其描述,直接用循环语句创建这些Agent:

# set the agents that participant the discussion
agents = [
    DialogAgent(
        name=key,
        sys_prompt=val,
        model_config_name="gpt-3.5-turbo",
    )
    for key, val in scenario_participants["Participants"].items()
]

2.4 开始讨论

这里用了 sequentialpipeline 顺序发言:

max_round = 2
msg = Msg("user", f"let's discuss to solve the question with chinese: {query}", role="user")
for i in range(max_round):
    msg = sequentialpipeline(agents, msg)

运行结果见文章刚开始的实现效果,实现讨论。

3. 总结

本文主要拆解了一个利用AgentScope框架实现的多智能体自由讨论案例,先由一个Agent根据问题生成讨论流程和讨论者,然后根据讨论者动态创建Agent。

主要的亮点在于:

(1)有一个Agent把控全局,生成流程和各参与者的描述

(2)动态创建讨论者Agent,这让这个系统有了更好的通用性,根据不同的问题有不同类型和不同数量的Agent会被创建。

值得借鉴。

如果觉得本文对你有帮助,麻烦点个赞和关注呗 ~~~


  • 大家好,我是 同学小张,持续学习C++进阶知识AI大模型应用实战案例
  • 欢迎 点赞 + 关注 👏,持续学习持续干货输出
  • +v: jasper_8017 一起交流💬,一起进步💪。
  • 微信公众号也可搜【同学小张】 🙏

本站文章一览:

相关文章
|
2天前
|
存储 人工智能 自然语言处理
AI Agent框架(LLM Agent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望
【7月更文挑战第2天】AI Agent框架(LLM Agent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望
AI Agent框架(LLM Agent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望
|
3天前
|
人工智能 前端开发 搜索推荐
移动应用开发的未来趋势:跨平台框架与AI的融合
【7月更文挑战第4天】随着移动设备的普及和用户需求的多样化,移动应用开发正面临前所未有的挑战与机遇。本文将深入探讨跨平台框架在提高开发效率、降低成本方面的优势,以及人工智能技术如何赋能移动应用,提供更加智能化的用户体验。我们将分析当前市场上流行的跨平台工具如Flutter和React Native,并探讨AI技术在移动应用中的具体应用案例,预测未来移动应用开发的发展方向。
|
3天前
|
SQL 监控 前端开发
AI+若依框架(低代码开发)
AI+若依框架(低代码开发)
12 1
|
10天前
|
人工智能 搜索推荐 安全
移动应用开发的未来趋势:跨平台框架和AI集成
【6月更文挑战第26天】在移动应用开发的快速演变领域中,开发者面临着不断变化的挑战与机遇。本文将探讨未来移动应用开发的几个关键趋势,包括跨平台框架的兴起、人工智能(AI)技术的集成,以及这些技术如何影响应用的性能、安全性和用户体验。通过分析当前的技术进步,我们预见到移动应用将更加智能、响应迅速且无缝集成于用户日常生活中。
|
8天前
|
人工智能 开发框架 前端开发
移动应用开发的未来趋势:跨平台框架与AI的融合
在数字化时代的浪潮中,移动应用已成为人们日常生活和工作中不可或缺的一部分。随着技术的不断进步,移动应用开发领域也迎来了新的变革。本文将探讨移动应用开发的未来趋势,重点关注跨平台框架的发展以及人工智能(AI)技术在其中的应用。通过分析当前市场上流行的跨平台开发框架,如React Native、Flutter等,以及AI技术如何改变移动应用的开发方式,我们将揭示这些技术如何共同推动移动应用开发进入一个新的时代。
11 0
|
20天前
|
机器学习/深度学习 人工智能 算法
Agent AI智能体:塑造未来社会的智慧力量
Agent AI智能体:塑造未来社会的智慧力量
155 0
|
8天前
|
人工智能 自然语言处理 前端开发
你要的AI Agent工具都在这里
只有让LLM(大模型)学会使用工具,才能做出一系列实用的AI Agent,才能发挥出LLM真正的实力。本篇,我们让AI Agent使用更多的工具,比如:外部搜索、分析CSV、文生图、执行代码等。
你要的AI Agent工具都在这里
|
24天前
|
人工智能 自然语言处理 API
深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手
深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手
198 0
深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
能自动查找各种漏洞,专用于网络安全的AI Agent
【7月更文挑战第3天】研究表明,大型语言模型(LLM)可应用于网络安全,自动发现和利用漏洞,包括零日漏洞。多Agent系统中,HPTSA规划任务,其他Agent执行具体工作,提升发现和应对漏洞的效率。然而,LLM的复杂性可能导致可解释性、可控性问题,且系统鲁棒性、泛化能力和安全性仍需加强。[链接: arxiv.org/abs/2406.01637]
16 1
|
17天前
|
人工智能 自然语言处理 监控
AI大模型智能体工作流涉及使用Ollama和FastGPT这两个工具
AI大模型智能体工作流涉及使用Ollama和FastGPT这两个工具
246 4