我们之前搭建了许多不同类型的智能体,其中最受欢迎的就是在智能体中搭建各种工作流——这也是我最喜欢探索和玩的领域。那么,究竟什么是工作流?如何在后端实现一个工作流呢?今天我们就先简单了解下。

什么是工作流?

工作流是一种事件驱动、基于步骤的方法,用于控制和管理应用程序的执行流程。在这种方法中,应用程序被拆分为多个互相独立但又相互关联的部分,每个部分都被称为“步骤”。这些步骤通常由特定的事件触发,而每个步骤在执行时也可能会触发其他事件,从而激活更多后续的步骤。

通过精心设计和组合这些步骤与事件,你可以创建出复杂的流程,进而封装业务逻辑。

简单入门

首先,在开始之前,你需要确保你的电脑上已经安装了Python环境。我这里使用的是Python 3.10版本,但你可以根据自己的需要选择任何其他版本,前提是它符合项目的需求。接下来,我们将从创建一个新的Python项目开始,带你一步步入门。为了确保项目的依赖不与你电脑中其他Python项目的环境冲突,我们将使用虚拟环境。

今天的教程将聚焦于Python项目的基础入门部分,我们会一步步进行讲解。在后续的章节中,我们会深入探讨更复杂的技术和方法,话不多说,我们正式开始吧!

项目创建

虚拟环境搭建

  • 在你的项目目录中打开终端(命令提示符),然后使用以下命令创建虚拟环境: python -m venv venv
  • 在 Windows 上,使用以下命令激活虚拟环境: .\venv\Scripts\activate
  • 保存依赖库列表: pip freeze > requirements.txt
  • 退出虚拟环境: deactivate

VSCode配置

我使用的IDE是VSCode,当然你也可以根据个人喜好选择其他开发工具。虽然我们已经启动了Python虚拟环境,但需要注意的是,默认情况下,当你点击运行时,代码依旧是通过原始的Python路径来执行,而非虚拟环境中的Python解释器。因此,我们需要进行一些简单的配置来确保代码在正确的环境下运行。

  • 按下 Ctrl + Shift + P (Windows/Linux) 或 Cmd + Shift + P (Mac) 打开命令面板。
  • 输入并选择 Python: Select Interpreter
  • 在弹出的列表中,选择你虚拟环境中的 Python 解释器。

在弹出的窗口中,选择我们的项目路径中的venv目录即可。然后每次再点击运行就OK了。

Hello World

首先,为了确保后续操作顺利进行,需要提前安装以下两个依赖包。请使用以下命令进行安装:

pip install llama-index-core

pip install llama-index-utils-workflow

然后,直接粘贴以下代码,我们就可以顺利运行这个简单的程序。这个工作流的主要功能是打印“Hello, World!”消息,是一个非常基础的工作流示例:

from llama_index.core.workflow import (
StartEvent,
StopEvent,
Workflow,
step,
) class MyWorkflow(Workflow):
@step
async def my_step(self, ev: StartEvent) -> StopEvent:
# do something here
return StopEvent(result="Hello, world!") async def main():
w = MyWorkflow(timeout=10, verbose=False)
result = await w.run()
print(result) if __name__ == "__main__":
import asyncio
asyncio.run(main())

在这段代码中,整体逻辑其实相当简单易懂。主要通过定义带有 step 注解的方法,并通过执行这些方法来实现工作流的流程控制。不过,代码中有两个关键的节点事件需要特别注意,它们分别是 StartEventStopEvent。工作流的执行通常从 StartEvent 开始,并且必须以 StopEvent 结束,确保工作流的完整性和正确性。

需要特别注意的是,如果工作流在执行过程中存在其他事件或步骤没有被正确触发或执行,系统会抛出错误。下面看下。

多个事件

我们依然可以进行简单的测试,毕竟这是流数据处理的基本操作。在此,我们定义了两个自定义事件,如下所示:

from llama_index.core.workflow import (
StartEvent,
StopEvent,
Workflow,
step,
Event,
) class FirstEvent(Event):
first_output: str class SecondEvent(Event):
second_output: str

然后我们在工作流中引用下:

class MyWorkflow(Workflow):
@step
async def step_one(self, ev: StartEvent) -> FirstEvent:
print(ev.first_input)
return FirstEvent(first_output="First step complete.") @step
async def step_two(self, ev: FirstEvent) -> SecondEvent:
print(ev.first_output)
return SecondEvent(second_output="Second step complete.") @step
async def step_three(self, ev: SecondEvent) -> StopEvent:
print(ev.second_output)
return StopEvent(result="Workflow complete.") async def main():
w = MyWorkflow(timeout=10, verbose=False)
result = await w.run(first_input="Start the workflow.")
print(result)

这样,我们就可以逐步执行各个事件。如果在执行过程中某一个步骤未能顺利完成,例如我们直接修改了第二个事件并且导致返回结束,那么第三个步骤将无法执行,这样就会引发错误。

@step
async def step_two(self, ev: FirstEvent) -> StopEvent:
print(ev.first_output)
return StopEvent(result="Second step complete.") @step
async def step_three(self, ev: SecondEvent) -> StopEvent:
print(ev.second_output)
return StopEvent(result="Workflow complete.")

在构建智能体工作流的过程中,如果没有进行连线操作,系统通常会自动检测并提示错误。这种情况下,错误提示会提醒用户必须完成连线,以确保工作流的正常运行和功能的完整性。报错信息如下:

可视化分析

工作流可视化功能在这里显得相对简单,它主要用于查看整个调用链路的结构和流程,而不像其他平台那样具备强大的交互操作性。我们一起看下:

from llama_index.utils.workflow import draw_all_possible_flows
#省略重复代码 if __name__ == "__main__":
import asyncio asyncio.run(main())
draw_all_possible_flows(MyWorkflow, filename="multi_step_workflow.html")

执行完成后,将会生成一个可正常打开的HTML文件。下面请看下图所示的内容:

整个工作流程非常清晰明了。在每一次执行当前事件时,首先会打印出所调用的方法名称,接着会显示正在处理的事件名称,最后以“done”字样结束该过程。

总结

通过今天的简单介绍,我们初步了解了工作流的基本概念及实现方法。工作流作为一种事件驱动的执行机制,为我们提供了更灵活的方式来管理和控制应用程序的流程。我们通过创建和配置虚拟环境,逐步实现了基础的工作流示例,体验了如何使用Python构建多步骤的业务逻辑。

在后续的学习中,我们还将探索更复杂的工作流构建方法。希望通过这一系列的实践,能够激发大家在智能体领域的创新思维,共同探讨更高效的解决方案。


我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是一位腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者。

我将不吝分享我在技术道路上的个人探索与经验,希望能为你的学习与成长带来一些启发与帮助。

欢迎关注努力的小雨!

玩转AI工作流:一步步搭建灵活的自动化流程的更多相关文章

  1. flow.ci + Github + Slack 一步步搭建 Python 自动化持续集成

    理想的程序员必须懒惰,永远追随自动化法则.Automating shapes smarter future. 在一个 Python 项目的开发过程中可能会做的事情:编译.手动或自动化测试.部署环境配置 ...

  2. 手把手教你如何玩转Activiti工作流

    手把手教你如何玩转Activiti工作流 置顶 2018年01月30日 19:51:36 Cs_hnu_scw 阅读数:24023   版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

  3. 一步步搭建物联网系统——无处不在的CSS

    无处不在的CSS 或许你觉得CSS一点儿也不重要,而事实上,如果说HTML是建筑的框架,CSS就是房子的装修.那么Javascript呢,我听到的最有趣的说法是小三--还是先让我们回到代码上来吧. C ...

  4. 一步步搭建自己的博客 .NET版(2、评论功能)

    前言 这次开发的博客主要功能或特点:    第一:可以兼容各终端,特别是手机端.    第二:到时会用到大量html5,炫啊.    第三:导入博客园的精华文章,并做分类.(不要封我)    第四:做 ...

  5. 一步步搭建react-native环境(苹果OS X)

    因重新升级了系统,一步步搭建react-native环境. 1.安装Homebrew 打开终端命令->ruby -e "$(curl -fsSL https://raw.githubu ...

  6. 一步步搭建docker私有仓库并从私有仓库中下载镜像

    一步步搭建docker私有仓库 #下载镜像 docker pull registry#查看镜像 docker images #运行私有仓库,指定端口和数据卷 docker run -d -p : -v ...

  7. 快快使用ModelArts,零基础小白也能玩转AI!

    摘要: 走过路过不要错过,看Copy攻城狮如何借力华为云ModelArts玩转AI. "自2018年10月发布以来,ModelArts累计服务了众多行业十几万开发者,通过基础平台的完备性和面 ...

  8. 新入手服务器不会玩?抢占式实例服务器教程,从零搭建tomcat超简流程

    新入手服务器不会玩?抢占式实例服务器教程,从零搭建tomcat超简流程 相信很多新人入手Linux服务器后,一脸无奈,这黑框框究竟能干啥?忽觉巨亏血亏不是? 这里面门道可不是你想象中的那么点,简则服务 ...

  9. HMS Core Discovery第16期回顾|与虎墩一起,玩转AI新“声”态

    HMS Core 在AI领域最新的技术能力有哪些?本期Discovery直播以<与虎墩一起,玩转AI新"声"态>为主题,邀请了HMS Core 机器学习服务产品经理.机 ...

  10. 3 分钟轻松搭建 Ruby 项目自动化持续集成

    任何事情超过 90 秒就应该自动化,这是程序员的终极打开方式.Automating shapes smarter future. 这是一篇关于 Ruby 项目持续集成的快速指导教程,教大家如何使用 f ...

随机推荐

  1. 怎样防止浏览器自动将http网址转变为https

    Chrome 浏览器 地址栏中输入 chrome://net-internals/#hsts 在 Delete domain security policies 中输入项目的域名,并 Delete 删 ...

  2. Kafka原理剖析之「Topic创建」

    一.前言 Kafka提供了高性能的读写,而这些读写操作均是操作在Topic上的,Topic的创建就尤为关键,其中涉及分区分配策略.状态流转等,而Topic的新建语句非常简单 bash kafka-to ...

  3. Excel中制作目录的3种方法,你了解几种?

    点赞再看,养成习惯:言之无文,行而不远. 微信搜索[亦心Excel]关注这个不一样的自媒体人. 本文 GitHub https://github.com/hugogoos/Excel 已收录,包含Ex ...

  4. CSS – Design System

    介绍 这篇 Tailwind CSS 的教程:Translating a Custom Design System to Tailwind CSS 充分的体现了什么是 Design System. 设 ...

  5. Spring —— bean配置

    基础配置      别名配置    作用范围配置      适合交给容器进行管理的bean   (复用性的对象,无需重复创建的对象) 表现层对象 业务层对象 数据层对象 工具对象   不适合交给容器管 ...

  6. MySQL事务理论及实现

    理论大多引自<高性能MySQL>一书,不过在自测的过程中不知道是不是SQL版本的问题,还是操作有问题,在设置事务隔离级别的时候 按书上讲SET TRANSACTION ISOLATION ...

  7. 【赵渝强老师】HBase的体系架构

    一.什么是HBase? HBase是一个基于HDFS之上的分布式的.面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文"BigTable大表",即:把所 ...

  8. 在Windows平台使用源码编译和安装PyTorch3D指定版本

    最近在部署 SyncTalk 虚拟数字人项目时,需要安装很多依赖项,在执行到pip install --no-index --no-cache-dir pytorch3d -f https://dl. ...

  9. 数列专题2 求数列的前n项和

    \({\color{Red}{欢迎到学科网下载资料学习 }}\) [ [基础过关系列]高二数学同步精品讲义与分层练习(人教A版2019)] ( https://www.zxxk.com/docpack ...

  10. 利用3Dslice提取血管中心线

    1.首先进入官网下载你需要的版本.你也可以安装老版本,我已经用红色框框出来了. 2.开始安装,等个几十秒钟就ok了. 3.当然要实现提取中心线,还需要 VMTK 这个玩意, 打开应用,找到 insta ...