LlamaIndex 工作流

如何通过LlamaIndex工作流程简化我的研究和演示 在这篇文章中,我将展示如何使用 LlamaIndex Workflows 来简化我研究最新进展并将其制作成PowerPoint演示文稿的流程。在寻找新的研究出版物或论文时,ArXiv.org 是我的主要来源。然而,这个网站上的论文数量非常多。截至2024年9月,ArXiv上大约有250万篇论文,仅在8月就提交了约17000篇(统计数据见这里)。即使只限于单一主题,也有大量内容需要阅读。但这并不是一个新问题。长期以来,学术研究者必须浏览大量的作品以进行自己的研究。 阅读详情

LlamaIndex 内部提供了一个简单的工作流引擎,为什么要有工作流引擎?做过 OA 的同学都了解工作流引擎,工作流的优势在于模块化开发,把业务节点进行抽象,流程于业务逻辑分离,方便进行业务节点组装,也是很多低代码平台的底层工作原理。大语言模型的应用特别适合工作流, 模型可以理解一个万能的 API,传统的 API 都有固定的入参、出参、功能,而模型会根据提示词做推理,具体做什么,返回什么,需要用户来自定义。例如,可以想象一个典型的场景,检测系统日志,如果发现异常发送邮件到指定的邮件组。本文将介绍如何在 LlamaIndex 创建工作流:

创建一个简单的工作流

首先安装工作流依赖

pip install llama-index-utils-workflow

LlamaIndex 是一个基于事件的工作流引擎,工作流通过事件来驱动,工作流节点在 LlamaIndex 中是 Step,节点对应类中的一个方法,方法上加上@step 注解,node 的输入和输出都是 event。工作流有两个特别 Event,StartEvent 和 StopEvent,StartEvent 是开始节点,workflow.run 启动 workflow 之后进入的第一个节点就是 StartEvent,workflow.run 可以传入初始化参数。

from llama_index.core.workflow import (
    StartEvent,
    StopEvent,
    Workflow,
    step,
    Event
)
import asyncio
from llama_index.utils.workflow import draw_all_possible_flows

class F1Event(Event):
    first_output: str

class MyWorkflow(Workflow):
    @step
    async def my_step(self, ev: StartEvent) -> StopEvent:
        # do something here
        return StopEvent(result=ev.topic)
    
    
draw_all_possible_flows(MyWorkflow, filename="basic_workflow.html")

async def main():
    w = MyWorkflow(timeout=10, verbose=False)
    result = await w.run(topic="Hello")
    print(result)


if __name__ == "__main__":
    import asyncio

    asyncio.run(main())

draw_all_possible_flows 可以将 Workflow 可视化
在这里插入图片描述

保存状态

通过上下文 (Conext) 在节点之间保存数据,例如初始化传入数据, 在其他节点获取数据。

from llama_index.core.workflow import (
    StartEvent,
    StopEvent,
    Workflow,
    step,
    Event,
    Context
)
import asyncio
from llama_index.utils.workflow import draw_all_possible_flows

class FirstEvent(Event):
    first_output: str


class SecondEvent(Event):
    second_output: str

class MyWorkflow(Workflow):
    @step
    async def step_one(self, ctx: Context, ev: StartEvent) -> FirstEvent:
        print(ev.first_input)
        
        await ctx.set("data", ev.data)
        
        return FirstEvent(first_output="First step complete.")

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

    @step
    async def step_three(self, ctx:Context, ev: SecondEvent) -> StopEvent:
        print(ev.second_output)
        print(await ctx.get("data"))
        return StopEvent(result="Workflow complete.")



async def main():
    w = MyWorkflow(timeout=10, verbose=False)
    result = await w.run(first_input="Hello", data={"name": "tom"})
    print(result)


if __name__ == "__main__":
    import asyncio

    asyncio.run(main())

嵌套工作流

工作流节点中,可以嵌套其他工作流,首先在 workflow 中添加工作流,在需要启动工作流的节点上,将子工作流作为参数传入。

from llama_index.core.workflow import (
    StartEvent,
    StopEvent,
    Workflow,
    step,
    Event,
    Context
)
import asyncio
from llama_index.utils.workflow import draw_all_possible_flows

class ReflectionFlow(Workflow):
    @step
    async def sub_start(self, ctx: Context, ev: StartEvent) -> StopEvent:
        print("Doing custom reflection")
        return StopEvent(result="Improved query")

class FirstEvent(Event):
    first_output: str


class SecondEvent(Event):
    second_output: str

class MyWorkflow(Workflow):
    @step
    async def step_one(self, ctx: Context, ev: StartEvent) -> FirstEvent:
        print(ev.first_input)
        
        await ctx.set("data", ev.data)
        
        return FirstEvent(first_output="First step complete.")

    @step
    async def step_two(self, ctx:Context, ev: FirstEvent, reflection_workflow: Workflow) -> SecondEvent:
        print(ev.first_output)
        res = await reflection_workflow.run(query="nested")
        print(f"nested workflow {res}")
        return SecondEvent(second_output="Second step complete.")

    @step
    async def step_three(self, ctx:Context, ev: SecondEvent) -> StopEvent:
        print(ev.second_output)
        print(await ctx.get("data"))
        return StopEvent(result="Workflow complete.")



async def main():
    w = MyWorkflow(timeout=10, verbose=False)
    w.add_workflows(reflection_workflow=ReflectionFlow())

    result = await w.run(first_input="Hello", data={"name": "tom"})
    print(result)


if __name__ == "__main__":
    import asyncio

    asyncio.run(main())

总结

在 LlamaIndex 中,为了能够更好的将组建进行组装,提供工作流机制,事件工作流可以很好的解耦工作流的逻辑。事件工作流要尽量简单,如果节点过多就是导致事件过于复杂,事件管理也是比较松散的,过多的依赖会导致后期维护困难。

LlamaIndex实现 JSON结构化输出的反射工作流程 本笔记本将介绍如何设置 一个LlamaIndex的工作流,从用户的提问中,提取结构化对象的关键信息,以便通过重试和对错误进行反思来提供可靠的JSON结构化文本输出的。这在用户希望LLM能按照用户意愿生成标准的Json格式文本场景中,非常有用!本文中使用的是国内阿里云的DashScope中由于工作流首先是异步的,因此这一切都在 Notebook 中运行良好。如果您在自己的代码中运行,则希望使用它来启动异步事件循环(如果尚未运行)。 阅读详情

相关推荐

SolidWorks 2022 学习(一)软件安装

接下来是安装SolidWorks,右键SolidWorks.2022.SP0.Premium.DVD.iso,选择装载。然后以管理员身份运行SolidWorks_Flexnet_Server目录下的server_install.bat。更改需要安装的产品,以及安装路径,并勾选接受条款,点击现在安装,会弹出如下窗口。然后以管理员身份运行setup.exe,开始安装solidworks。下载链接会在文章末尾给出,下载完成的文件如下图所示。双击注册表文件,然后点击确定。保持不动,点击确定,开始安装。

qq_38383364的博客 3130

llama-index做一个简单查询工作流(rag)

进行了多次尝试,输出结果都不是很理想哈,prompt里面又是英语又是中文的,有点为难这个0.5b的大模型了,第一次答的还算沾点边,第二次不知道为啥干翻译去了,然后这个任务的名字他也经常出错,返回错误的格式,就得不断重试和调整prompt。使用llamaparse解析PDF文件,有一个文件夹,里面都是pdf,这里可以随便放几篇论文进去,然后可以通过循环定义不同的引擎,这里我只放了一个,所以名称就没修改,只有一个。按理来说prompt的问题的话qwen也会有同样的错误,但是虽然也有发生,重复两次也总是能执行。

2303_77229879的博客 2042

300个fpga练手项目推荐

• 按键设置BPM,LED和蜂鸣器同步打拍(支持4/4、3/4拍)• 例:先实现DDR3控制器(基础),再构建视频处理流水线(集成)◦ 驱动小型e-Paper显示日期/时间(SPI接口,静态刷新)◦ 音频输入经FFT后,用LED柱状显示频率能量(8频段简化)◦ 通过HC-05模块接收手机指令,控制电机方向(前进/后退)• 随机点亮LED,用按钮响应,数码管显示反应时间(毫秒级)• 8个LED旋转闪烁,按钮停止后显示中奖编号(带减速动画)• 用4方向按键输入手势(如→→←↑),正确后点亮绿色LED。

qq_62784677的博客 7644

LlamaIndex工作流详解:提升数据处理效率的关键

工作流(Workflow)是事件驱动、基于步骤的应用执行流程控制方式。它由多个步骤(steps)组成,每个步骤负责处理特定类型的事件并发出新的事件。这种设计使得工作流能够灵活地处理各种应用场景,从简单的单一步骤流程到复杂的、包含多个分支和循环的多步骤流程。在LlamaIndex中,工作流通过子类化Workflow类并定义具体的步骤来实现。每个步骤使用@step装饰器装饰,该装饰器用于推断每个步骤的输入和输出类型,从而确保工作流的有效性和正确性。

llm_way的博客 1491

C#串口通讯实战:如何用SerialPort类搞定工业传感器数据采集(附完整代码)

本文详细介绍了如何使用C#的SerialPort类实现工业级传感器数据采集,涵盖串口通讯基础配置、数据帧处理、异常恢复机制及性能优化策略。通过实战代码示例,帮助开发者构建稳定可靠的工业数据采集系统,特别适合需要处理高频数据采集和复杂工业环境的场景。

weixin_42525551的博客 1088

微信小程序中蓝牙打印机中文编码处理:使用iconv-lite库

本文介绍了微信小程序集成蓝牙打印机时中文乱码问题的解决方案。由于打印机通常仅支持GBK/GB2312编码,而小程序使用UTF-8,导致中文显示异常。通过引入轻量级iconv-lite库进行编码转换,可高效解决该问题。文章详细说明了从库安装、编码转换到蓝牙发送的实现步骤,并提供了完整代码示例。关键注意事项包括编码验证、分段发送和兼容性测试。该方法经实际验证,能有效保障中文打印的准确性,适用于零售、物流等场景。

canglingyue的专栏 1310

深入解析LlamaIndex Workflows:构建复杂RAG与智能体工作流

面对多样的LLM应用需求,不管是主流如LangChain这样的基础开发框架,还是以云服务提供的低代码开发平台,都试图在提供基础组件抽象的基础上,提供更便捷的组装与编排这些组件的方式,以帮助构建更高级的AI工作流应用。。提供了一种与LangGraph不同、事件驱动的框架,以编排复杂的RAG或Agent应用工作流,支持灵活的分支、并行与循环等处理。

Androiddddd的博客 2584

数字IC后端设计实现 | PR工具中到底应该如何控制density和congestion?(ICC2&Innovus)

数字IC后端设计实现中到底应该如何控制cell density和congestion?(ICC2和Innovus两种解决方案)

weixin_37584728的博客 7113

LlamaIndex - workflow

一、关于 workflow 二、基于图的用户体验的局限性 三、从图表到EDA:去事件驱动 四、工作流入门 1、基本使用 2、工作流可以循环 3、工作流保持状态 4、工作流程可以定制 5、可以调试工作流 五、为什么今天应该使用工作流 六、资源

AI工程化、开源分享、文档翻译、代码笔记 1626

[QMT和ptrade量化交易小白入门]-125、菜场大妈加上四大现金行业指数风控,最大回撤从22%减少了一半

群里面有人建议,在菜场大妈策略的基础上,加入申万的行业指数(银行,钢铁,有色,煤炭)测算其宽度,当这四大行业其中有一个高就会清仓(用来控制回撤)。这背后的逻辑是,在存量资金博弈的市场环境中,资金总量相对固定,当银行、钢铁、有色、煤炭等大市值周期行业因基本面改善(如涨价、政策催化)或避险需求而走强时,会吸引大量资金涌入,导致其他板块(尤其是小市值股票)面临流动性虹吸。经过回测,对比上一个版本发现确实是可以降低一半的回撤,最大回撤从22.3%降到了11.4%,而且有很多时间是空仓等待。

木头大左的博客 241

使用 Simulink Real-Time 搭建一个完整的实时信号采集与滤波系统模型

本文详细介绍了基于Simulink Real-Time构建实时信号采集与滤波系统的完整流程。主要内容包括:系统配置(模型创建与参数设置)、信号采集模块搭建(模拟信号源或真实硬件连接)、实时滤波器设计(浮点/定点)、输出可视化(Scope/ToWorkspace等)、模型编译与下载到目标机、外部模式在线调试及数据保存方法。系统可实现微秒级实时信号处理,适用于工业控制、航空航天等对时间确定性要求高的场景。文章还提供了优化建议(多速率建模、优先级调度等)和应用场景说明,帮助读者快速掌握实时系统开发的核心技能。

amy_mhd的博客 304

LlamaIndex 工作流简介以及基础工作流

多个步骤可以通过定义自定义事件来实现,这些事件可以由某个步骤发出,并触发其他步骤。下面我们来定义一个简单的三步工作流。StopEvent,Workflow,step,Event,现在我们定义两个自定义事件:FirstEvent 和 SecondEvent。现在我们来定义工作流本身。我们通过为每个步骤指定输入类型和输出类型来实现这一点。step_one 接收一个 StartEvent,并返回一个 FirstEvent。

2501_90353350的博客 1004

【零基础学习CAPL】——CAN报文的发送(CRC——ChecSum值)

本章主要介绍带有CRC值的报文发送一般报文可使用CANoe的IG模块直接发送,但带有CRC值的报文就只能编写脚本进行发送,以下详细讲解在配合Panel面板情况下,如何进行带有循环冗余码的报文进行报文的发送。

LOVE135149的博客 1913

为 Llamaindex 工作流构建交互式 UI

原文:towardsdatascience.com/building-an-interactive-ui-for-llamaindex-workflows-842dd7abedde?

龙哥盟 903

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

llamaindex实战-Workflow: 基于事件驱动的工作流概述

LlamaIndex 中的工作流是一个事件驱动的抽象,用于将多个事件链接在一起。工作流由step组成,每个step负责处理某些事件类型并发出新事件。

zg_hover的专栏 1333

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LlamaIndex 工作流 分支和循环

工作流的一个关键特性是,它们能够以比基于图的方法更简单和灵活的方式实现分支和循环逻辑。

2501_90353350的博客 526

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LlamaIndex 工作流 并发执行

除了循环和分支之外,工作流还可以并发地执行步骤。当你有多个可以相互独立运行的步骤,并且这些步骤中包含需要等待的耗时操作时,这种并发执行的方式就非常有用,因为它允许其他步骤并行运行。

2501_90353350的博客 618

LLamaIndex 工作流和多个Step配置

工作流内置于 LlamaIndex 核心在开发过程中,可视化您的工作流程很有帮助;

mousegavin的专栏 451

LlamaIndex工作流可视化的AI助手分析探索

借助AI助手,我们可以更加深入地理解LlamaIndex工作流可视化的实现原理和应用价值。这一功能不仅提高了开发者的工作效率和准确性,还为AI应用的开发和维护提供了有力的支持。未来,随着AI技术的不断发展和完善,我们有理由相信LlamaIndex工作流可视化功能将会变得更加智能和高效,为AI开发领域带来更多的创新和突破。总之,LlamaIndex工作流可视化功能是一项非常实用的特性,它能够帮助开发者更好地理解和调试工作流,提高开发效率和准确性。

欢迎你来到我的博客 609

LlamaIndex之Workflow工作流案例

输入:客户提交的工单文本(如“订单未收到,物流号123456”)。输出:自动分类工单类型(物流/售后/技术问题)。检索关联的订单数据、知识库文档。生成解决方案草稿(含操作步骤和引用来源)。要求:端到端延迟 <3秒,支持历史工单学习。(1) 工单分类工作流# 定义分类Prompt判断以下工单类型,仅输出物流/售后/技术:工单内容: {ticket_text}""")# 创建分类工作流steps=[

zouyang920的博客 464

LlamaIndex 工作流 上下文状态和流式传输事件

到目前为止,在我们的示例中,我们一直通过自定义事件的属性在各个步骤之间传递数据。这是一种强大的数据传递方式,但它也存在一些局限性。例如,如果你想在那些并非直接相连的步骤之间传递数据,你就需要通过中间的所有步骤来传递这些数据。这会使你的代码变得更难阅读和维护。为避免这一问题,我们在工作流中的每个步骤都可以使用一个 Context(上下文) 对象。要使用它,只需在你的步骤函数中声明一个类型为 Context 的参数即可。

2501_90353350的博客 851

我如何使用 LlamaIndex 工作流简化我的研究和演示过程

在这篇文章中,我将展示如何使用 LlamaIndex 工作流简化我的研究过程,帮助我研究某个主题的最新进展,然后将这些研究成果转化为 PowerPoint 演示文稿。当涉及到查找新的研究出版物或论文时,ArXiv.org是我主要的来源。然而,网站上的论文非常多。截至 2024 年 9 月,ArXiv 上大约有 250 万篇论文,其中 17,000 篇是仅在 8 月份提交的(统计数据在这里即使限制在一个特定主题下,要阅读的内容依然非常庞大。但这并不是一个新问题。

龙哥盟 1101

LLamaIndex 工作流Context上下文

默认情况下,AgentWorkflow在运行之间是无状态的。这意味着代理将没有以前运行的任何内存。为了解决工作流具有长期记忆,引入context上下文状态管理

mousegavin的专栏 421

LlamaIndex 记忆模块高级定制与工作流集成

通过继承可实现完全定制化的记忆逻辑,以下是一个统计关键词提及次数的示例:python"""统计特定关键词在对话中被提及的次数""""""处理新存入的消息,更新关键词计数""""""获取关键词提及统计结果"""return f"关键词 '{self.keyword}' 共被提及 {self.mention_count} 次""""自定义截断逻辑(此处不执行实际截断)"""return content # 示例中保留完整统计,实际可按需求截断。

佑瞻的博客 1111

LlamaIndex项目中的智能代理工作流构建指南

LlamaIndex项目中的智能代理工作流构建指南 【免费下载链接】agents-course This repository contains the Hugging Face Agents Course. 项目地址: htt...

gitblog_00315的博客 446
上一篇: LlamaIndex 实现 Agent
下一篇: 一个简单的 NLP 神经网络
hawk2014bj
博客等级 码龄12年 1013粉丝 265原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值