AI Agents Loop异步执行可视化Tutorial 借助AgentBoard工具可视化工作流

本文涉及的产品
图像搜索,7款服务类型 1个月
简介: 本文介绍了AI Agent的异步执行循环(Agent Loop),并展示了如何利用开源框架agentboard可视化这一过程。通过分析不同框架(如AutoGen、LangGraph、AutoAgent)对Agent Loop的抽象,文章详细说明了从简单的功能调用到复杂的多阶段执行流程的设计。此外,还提供了使用agentboard进行日志记录与流程可视化的具体示例,包括安装步骤、代码实现及运行方法,帮助开发者更高效地调试和优化AI Agent的应用。

0. AI Agent Loop 异步执行

AI Agents 在很多领域和行业得到广泛应用。在一些开源框架和闭源平台帮助下,开发一个AI Agent也变得更加轻松,开比如微软的 AutoGen, LangChain公司的 LangGraph都都对AI Agent执行过程 agent loop 进行了抽象和封装,方便开发者以较低代码量接入甚至0代码在平台上配置完成。具体的 AI Agent 的执行过程往往是一个异步执行的 loop,本篇博客会给大家介绍一下基础的 AI Agent的执行流程 agent loop定义,并且借助于开源框架 agentboard (github: https://github.com/AI-Hub-Admin/agentboard)来可视化Agent Loop的执行过程,比如(PLANNING/ACTION/REACT/REFLECT)每个阶段的输入、输出、执行时长等等。可以参考 agentboard 可视化 agent loop 的tutorial (http://www.deepnlp.org/blog/agentBoard-ai-agent-visualization-toolkit-agent-loop-workflow).


Agenboard 可视化异步执行Async Agent的Agent Loop

image.png

Agentboard 可视化Pytorch Tensors支持图片/语音/视频 Image/Audio/Video Tensors

image.png

对话可视化Chat Visualizer: Agentboard可视化Agent中 Multi-Agent Messages

image.png

1. 什么是 AI Agent的Agent Loop


借助Open AI研究员Lilianweng的 AI Agent的架构图 (https://lilianweng.github.io/posts/2023-06-23-agent/),AI Agent 依赖大模型能力,进行规划 (PLAN) 和 执行 (ACTION),这个过程中会设计到 Tools工具使用 和 Memory 记忆模块更新。

image.png


具体到 AI Agent 开发,不同框架对于执行过程抽象不同。简单的Agent 执行逻辑可能只包含一次 LLM来根据用户输入 prompt和可以选择工具tools来进行决策和填充参数,然后本地 Agent 执行。复杂一些Agent Loop 会设计到更多阶段,我们可以参考 AutoGen(https://microsoft.github.io/autogen/0.2/), LangGraph(https://github.com/langchain-ai/langgraph), AutoAgent(https://ai-hub-admin.github.io/AutoAgent/), GPTeam(https://github.com/101dotxyz/GPTeam) 等等这些框架对于Agent Loop的抽象。


1.1 简单的 Function Calling Tools Use

AI Agent 执行简单的功能如:天气查询,股价查询,订单查询,基本只会调用一次 LLM,输入是prompt和可以选择的tools (函数的定义Schema),拿到返回结果之后给函数进行参数填充,然后运行 Function Calling调用。


例如:

OpenAI的 Function Calling


            prompt = "Can you give me an example of python code usage of async await functions"
            messages.append({"role": "user", "content": prompt})

            completion = client.chat.completions.create(
                model="gpt-3.5-turbo",
                messages=[
                    {"role": "system", "content": "You are a helpful assistant."},
                    {"role": "user", "content": prompt}
                ]
            )
            response_message = completion.choices[0].message
            print(response_message) # {"role":"xxx", "content":"xxx"}

            messages.append(response_message)


Anthropic Claude API Function Calling


    client = Anthropic()
    MODEL_NAME = "claude-3-opus-20240229"

    
    response = client.messages.create(
                model=MODEL_NAME,
                max_tokens=4096,
                messages=[
                    {"role": "user", "content": user_message},
                    {"role": "assistant", "content": message.content},
                    {
                        "role": "user",
                        "content": [
                            {
                                "type": "tool_result",
                                "tool_use_id": tool_use.id,
                                "content": tool_result,
                            }
                        ],
                    },
                ],
                tools=tools,
            )



1.2 更加复杂的自主Agent (Autonomous Agents)的 agent loop

a. LangChain的 GPTeam中每个Agent包含的 loop有: observe->plan->react->act->reflect

(Agent Loop的代码: https://github.com/101dotxyz/GPTeam/blob/34bdfb3b040258b2f414e3e61ba2761c7295ba3d/src/agent/base.py?ref=blog.langchain.dev#L1050)

(https://blog.langchain.dev/gpteam-a-multi-agent-simulation/)


其中核心Agent Loop 逻辑


b. AutoAgent库中抽象异步Agent Async Agent的Loop包含更加精简 plan->act->refect : (AutoAgent的AgentLoop: https://github.com/AI-Hub-Admin/AutoAgent/blob/main/src/AutoAgent/core.py)


    async def run_loop(self):

        try:
            print ("%s|%s|run_loop start|0" % (self.name, get_current_datetime()))

            plan_duration = await self.plan()
            print ("%s|%s|Plan Complete|%s" % (self.name, get_current_datetime(), plan_duration))

            act_duration = await self.act()
            print ("%s|%s|Act Complete|%s" % (self.name, get_current_datetime(), act_duration))

            reflect_duration = await self.reflect()
            print ("%s|%s|Reflect Complete|%s" % (self.name, get_current_datetime(), reflect_duration))

            total_duration = plan_duration + act_duration + reflect_duration

            return "%s|%s|run_loop complete|%s" % (self.name, get_current_datetime(), total_duration)
        except Exception as e:
            print (e)
            print (traceback.print_exc())
            return "%s|%s|run_loop complete|%s" % (self.name, get_current_datetime(), 0)


2. 借助AgentBoard 来对不同框架下的Agent Loop可视化


完整代码例子: https://github.com/AI-Hub-Admin/agentboard/blob/main/examples/async_agents/run_agentboard_autoagent.py

首先需要安装 python库 AutoAgent 和 agentboard

pip install AutoAgent agentboard



2.1 基于AutoAgent框架的重新写 run_loop 函数


基础的 run_loop 函数中每个stage执行函数是灵活定义的,我们在定义的 plan, act, refect 函数中,只执行一段 sleep随机长度时间的逻辑,然后就结束,模拟执行一个真实 Agent 进行 RAG/爬虫的等待时间。我们继承基础类 AsyncAgent并且重写 async def run_loop 函数,包含了 self.plan(), self.act(), self.reflect() 3个函数,每个函数等待预期时间 est_time。



import time
import agentboard as ab
from agentboard.utils import function_to_schema

from AutoAgent.core import AsyncAgent, AsyncAutoEnv
from AutoAgent.utils import get_current_datetime

class AutoAgentWorkflow(AsyncAgent):
    """
        Agent who can plan a day and write blog/posts videos on the website
        execute cycle: plan->act->reflect
    """
    async def run_loop(self):

        try:

            ## PLAN
            plan_duration = await self.plan()
            print ("%s|%s|PLAN Complete|%s" % (self.name, get_current_datetime(), plan_duration))

            ## ACT 
            act_duration = await self.act()
            print ("%s|%s|ACT Complete|%s" % (self.name, get_current_datetime(), act_duration))

            ## REFLECT
            reflect_duration = await self.reflect()
            print ("%s|%s|REFLECTION Complete|%s" % (self.name, get_current_datetime(), reflect_duration))

            total_duration = plan_duration + act_duration + reflect_duration
            print ("%s|%s|END|%s" % (self.name, get_current_datetime(), 0))

            return "%s|%s|run_loop complete|%s" % (self.name, get_current_datetime(), total_duration)
        except Exception as e:
            print (e)
            return "%s|%s|run_loop complete|%s" % (self.name, get_current_datetime(), 0)



接着,我们初始化2个Agent,2个Agent的prompt 分别是让一个 做网站管理员Agent,一个做评论自动回复的Agent,之后新建一个异步执行的环境类,直接使用AutoAgent包中基础类 AsyncAutoEnv就行,里面封装了 agent 异步执行和 multi-thread的细节。初始化异步执行环境需要传入 OpenAI或者是LLM API提供商的 client,配置 get_openai_client,例子里面不用配置也可以先跑只是不会调用。



def get_openai_client():
    from openai import OpenAI
    client = OpenAI(api_key="")
    return client

def run_async_agents_env_agentboard():
    """
    """

    agent1_prompt = """You are playing the role of a Web admin agent... """
    agent2_prompt = """You are playing the role of a Automatic reply agent..."""

    agent_1 = AutoAgentWorkflow(name="agent 1", instructions=agent1_prompt)
    agent_2 = AutoAgentWorkflow(name="agent 2", instructions=agent2_prompt)

    agents = [agent_1, agent_2]
    env = AsyncAutoEnv(get_openai_client(), agents=agents)
    results = env.run()

if __name__ == "__main__":
    run_async_agents_env_agentboard()

可以看到2个Agent的执行日志,我们发现2个Agent 同时间启动,然后每个Agent在 agent loop中不同阶段等待时间不同,最终执行完一个画了 18s,一个画了 19s。


ID|Timestamp|Stage|Duration

DEBUG: Futures [, ]

agent 1|2024-11-22 14:51:37|PLAN Complete|5

agent 2|2024-11-22 14:51:37|PLAN Complete|5

agent 2|2024-11-22 14:51:43|ACT Complete|6

agent 1|2024-11-22 14:51:45|ACT Complete|8

agent 1|2024-11-22 14:51:50|REFLECTION Complete|5

agent 1|2024-11-22 14:51:50|END|0

agent 2|2024-11-22 14:51:51|REFLECTION Complete|8

agent 2|2024-11-22 14:51:51|END|0

Results: ['agent 1|2024-11-22 14:51:50|run_loop complete|18', 'agent 2|2024-11-22 14:51:51|run_loop complete|19']



开发2个Agent输出日志量还可以接受,如果要开发100个Agent 甚至1000个agent同时执行任务呢?执行日志和debug 几乎没办法看了,这个时候我们可以借助agentboard 把agent执行过程的 输入input,输出output,prompt这些都保存下来,然后在 agentboard 服务网页上可视化出来,方便查找日志和debug,以及监控程序运行。


AgentBoard Tutorial http://www.deepnlp.org/blog/agentBoard-ai-agent-visualization-toolkit-agent-loop-workflow

image.png

2.2 在重写的run_loop 函数用agentboard 加日志打印每个stage的输入/输出

2.2.1. Agent Loop 开始和结束打印 START/END的 workflow


函数使用agentboard库的 ab.summary.agent_loop, 入参中:


  • process_id: 代表了展现流程图中的一个 workflow
  • workflow_type: 会决定最终流程图的形状,start/end 都会被展示为流程图中标准的圆 process。



ab.summary.agent_loop(name="START", data="This is start stage of %s" % self.name, agent_name = self.name, process_id="START", workflow_type="start", duration = 0)
ab.summary.agent_loop(name="END", data="This is end stage of %s" % self.name, process_id="END", agent_name = self.name, workflow_type="end", duration = total_duration)


2.2.2. Agent Loop 打印 ACT具体执行阶段


我们打印三条日志,都使用相同的 process_id=ACT,代表需要聚合的维度,比如包含:Action阶段打印输入input, 输出output, 调用LLM的 prompt等信息, 这3词日志要使用用相同的 process_id="ACT"。我们为了记录异步信息,在name="EXECUTION", 可以支持拓展 kwargs 的信息,把 duration 执行时间信息也打印进去。


## ACT stage
ab.summary.agent_loop(name="INPUT", data="This is Act Input of %s" % self.name, agent_name = self.name, process_id="ACT", duration = 0)

act_duration = await self.act()

ab.summary.agent_loop(name="EXECUTION", data="This is ACT Execution Input of %s" % self.name, agent_name = self.name, process_id="ACT", duration = act_duration)

ab.summary.agent_loop(name="OUTPUT", data="This is ACT Output of %s" % self.name, agent_name = self.name, process_id="ACT", duration = 0)



2.2.3. Agent打印一个Decision判断逻辑 Process


在Agent Loop中,我们经常会遇到需要做执行workflow判断工作,比如 当用户不再输入,我们就终止流程,如果用户继续追问,我们就继续调用 PLAN-ACT-REFLECT 周期。


重点设置 process_id 参数为 DECISION

process_id="DECISION"


workflow_type 为 decision

workflow_type = "decision"


这样可视化时候 workflow_type=decision流程会可视化为 决策节点。


## add a decision node log
ab.summary.agent_loop(name="DECISION", data="This is decision stage of %s" % self.name, process_id="DECISION", agent_name = self.name, workflow_type = "decision", duration = 0)


2.2.4 完整的 Agent Loop 执行


完整例子参考:https://www.github.com/AI-Hub-Admin/agentboard/blob/main/examples/async_agents/run_agentboard_autoagent.py


我们用命令行执行agentboard,然后就可以在浏览器看到可视化的agent loop的workflow,把鼠标放到比如 ACT的输入节点上,还可以看大打印的具体内容 (对应日志的 data 字段)。


## 执行异步流程,打印到本地日志 ./log 目录下
python run_agentboard_autoagent.py

## 命令行启动agentboard 可视化流程置顶 logdir
agentboard --logdir=./log


就可以看到Agent执行的逻辑了,基于这个简单例子,我们可以通过继承基础类AsyncAgent,重写 run_loop 函数拓展更加复杂的AI Agent执行逻辑,然后按照对应格式来打印日志,并且通过 agentboard 工具来可视化。同时 agentboard 也提供了 多模态的数据可视化函数,来打印 图片,语音,视频的 tensor的数据,配合 pytorch 和 tensorflow 等框架一起使用。比如针对对话历史 Chat History Messages 的可视化等具体可以参考:


image.png


相关文档

1. AutoAgent Github:https://github.com/AI-Hub-Admin/AutoAgent

2. agentboard Github: https://ai-hub-admin.github.io/agentboard

3. agentboard Tutorial: http://www.deepnlp.org/blog/agentBoard-ai-agent-visualization-toolkit-agent-loop-workflow

4. agentboard Docs: https://github.com/AI-Hub-Admin/agentboard/blob/main/docs/agentboard_docs.md

5. agentboard AI Agent Chat visualizer: http://www.deepnlp.org/workspace/dialogue_visualization


相关文章
|
18天前
|
人工智能 Java API
教你自创工作流,赋予AI助理个性化推荐超能力
本文详细介绍了使用Spring AI Alibaba构建AI助理的全过程,涵盖从基本流程设计到实际操作实现的各个方面。文章首先回顾了前期工作,包括旅游攻略、天气查询和个人待办事项等功能模块的设计与实现。接着,深入探讨了工作流的实现细节,如事件封装优化、工作流节点创建及复杂工作流的高效管理。最后,通过实际项目启动与运行测试,展示了AI助理的实际效果,验证了系统的稳定性和可扩展性。本文不仅适合Java开发者学习AI技术,也为后续的优化和功能拓展提供了宝贵的经验。
366 7
教你自创工作流,赋予AI助理个性化推荐超能力
|
4天前
|
人工智能 自然语言处理 搜索推荐
你用过最好用的AI工具是什么?
2023年AI革命风起云涌,众多产品令人振奋。我体验了OpenAI的ChatGPT、微软New Bing、Anthropic Claude等多款AI产品。特别推荐微软New Bing,它集成了强大的搜索引擎和语言模型,回答问题精准,提供最新信息,还能免费进行创意绘图。此外,New Bing还集成了Copilot网页助手,帮助用户高效提取和总结内容。
55 27
你用过最好用的AI工具是什么?
|
5天前
|
人工智能 数据可视化 JavaScript
NodeTool:AI 工作流可视化构建器,通过拖放节点设计复杂的工作流,集成 OpenAI 等多个平台
NodeTool 是一个开源的 AI 工作流可视化构建器,通过拖放节点的方式设计复杂的工作流,无需编码即可快速原型设计和测试。它支持本地 GPU 运行 AI 模型,并与 Hugging Face、OpenAI 等平台集成,提供模型访问能力。
46 14
NodeTool:AI 工作流可视化构建器,通过拖放节点设计复杂的工作流,集成 OpenAI 等多个平台
|
4天前
|
机器学习/深度学习 人工智能 算法
X-AnyLabeling:开源的 AI 图像标注工具,支持多种标注样式,适于目标检测、图像分割等不同场景
X-AnyLabeling是一款集成了多种深度学习算法的图像标注工具,支持图像和视频的多样化标注样式,适用于多种AI训练场景。本文将详细介绍X-AnyLabeling的功能、技术原理以及如何运行该工具。
30 2
X-AnyLabeling:开源的 AI 图像标注工具,支持多种标注样式,适于目标检测、图像分割等不同场景
|
12天前
|
编解码 人工智能 监控
VISION XL:支持四倍超分辨率的 AI 视频修复处理工具,提供去除模糊、修复缺失等功能
VISION XL是一款基于潜在扩散模型的高效视频修复和超分辨率工具,能够修复视频缺失部分、去除模糊,并支持四倍超分辨率。该工具优化了处理效率,适合快速处理视频的应用场景。
60 6
VISION XL:支持四倍超分辨率的 AI 视频修复处理工具,提供去除模糊、修复缺失等功能
|
19天前
|
存储 人工智能 数据库
Codel:AI代理工具,支持在终端、浏览器、编辑器执行复杂任务和项目
Codel是一款全自主AI代理工具,支持在终端、浏览器和编辑器中执行复杂任务和项目。它运行在沙盒化的Docker环境中,具备自主操作能力,内置浏览器和文本编辑器,所有操作记录存储于PostgreSQL数据库。Codel能够自动完成复杂任务,如创建项目结构、进行网络搜索等,适用于自动化编程、研究与开发、教育与培训以及数据科学与分析等多个领域。
56 11
Codel:AI代理工具,支持在终端、浏览器、编辑器执行复杂任务和项目
|
21天前
|
机器学习/深度学习 人工智能 自然语言处理
Voice-Pro:开源AI音频处理工具,集成转录、翻译、TTS等一站式服务
Voice-Pro是一款开源的多功能音频处理工具,集成了语音转文字、文本转语音、实时翻译、YouTube视频下载和人声分离等多种功能。它支持超过100种语言,适用于教育、娱乐和商业等多个领域,为用户提供一站式的音频处理解决方案,极大地提高工作效率和音频处理的便捷性。
91 10
Voice-Pro:开源AI音频处理工具,集成转录、翻译、TTS等一站式服务
|
20天前
|
Web App开发 机器学习/深度学习 人工智能
Magic Copy:开源的 AI 抠图工具,在浏览器中自动识别图像进行抠图
Magic Copy 是一款开源的 AI 抠图工具,支持 Chrome 浏览器扩展。它基于 Meta 的 Segment Anything Model 技术,能够自动识别图像中的前景对象并提取出来,简化用户从图片中提取特定元素的过程,提高工作效率。
60 7
Magic Copy:开源的 AI 抠图工具,在浏览器中自动识别图像进行抠图
|
22天前
|
人工智能 自然语言处理 算法
Devika AI:开源的 AI 软件开发工具,理解和执行复杂的人类指令
Devika AI 是一款开源的 AI 软件开发工具,能够理解和执行复杂的人类指令。它通过分解任务、信息搜集和代码生成,帮助开发者提高效率,减少人工干预。本文将详细介绍 Devika AI 的功能、技术原理以及如何运行和配置该工具。
46 9
Devika AI:开源的 AI 软件开发工具,理解和执行复杂的人类指令
|
22天前
|
人工智能 JSON 自然语言处理
智能化AI工具-语言翻译与本地化
在全球化发展的背景下,语言翻译与本地化需求日益增长。无论是跨境电商、国际合作,还是本地化应用开发,都需要高效、准确的翻译解决方案。阿里云通义千问作为一款强大的大语言模型,不仅具备出色的自然语言理解能力,还能够在多语言翻译和本地化场景中发挥重要作用。本博客将详细介绍如何基于阿里云通义千问开发语言翻译与本地化工具,包括产品介绍、程序代码以及阿里云相关产品的具体使用流程。
58 10

热门文章

最新文章