首页 纸飞机账号批发内容详情

[大模型实战 07 额外篇] 从 ReAct 到 Workflow:基于云端 API 构建事件驱动的智能体

2026-03-08 2 飞机号购买网站

把模型从本地加载起来,再到去调用云端API,LlamaIndex那种WorkFlow正在重新塑造Agent的开发范式。在这篇文章里,会详细深入到这个事件驱动的新引擎当中,帮你摆脱GPU限制,达成更高效的智能体应用。

WorkFlow的核心机制

有着对复杂多智能体协作可清晰可控优势的LlamaIndex的WorkFlow,其本质是一个由事件驱动的状态机,开发者能够借助定义各类别的Event用来控制数据的流向趋势,并且每一步骤Step会凭借返回值来“发射”事件,以此触发接下来的处理步骤。

from llama_index.core.workflow import Event
class NewsExtractedEvent(Event):
    content: str  # 这里可以随便定义内容
    xxx: int # 多少条都可以

StartEvent以及StopEvent属于两个特别的事件类型,调用workflow.run()之际会自动触发StartEvent,当任意Step返回StopEvent之时,整个WorkFlow便会即刻终止并输出结果,这种机制保证了流程的可预测性与简洁性。

事件驱动的Step定义

from llama_index.core.workflow import Workflow, step, StartEvent, StopEvent, Event
class ProcessedDataEvent(Event):
    data: str
class MyWorkflow(Workflow):
    @step
    async def ingest(self, ev: StartEvent) -> ProcessedDataEvent:
        # 1. 接收初始输入
        input_data = ev.get("input")
        return ProcessedDataEvent(data=input_data.upper())
    @step
    async def finish(self, ev: ProcessedDataEvent) -> StopEvent:
        # 2. 接收上一步处理后的数据
        return StopEvent(result=f"处理完成: {ev.data}")
# 运行
wf = MyWorkflow()
await wf.run(input="hello world") # -> "处理完成: HELLO WORLD"

于WorkFlow里,每一个Step均能够被设定成一个调用大模型予以处理的函数,进行开发者能够依照业务需求自行定义出多样的Event类型,像那个NewBlogPostEvent能够涵盖title以及link字段那般,用来于不同的Step之中间传递结构化数据。

这样的事件驱动架构极为适配用于构建多智能体系统,好比,Checker专门负责去检测新内容,当检测到之后朝着Notifier发送事件,Notifier接住事件之后开展通知任务,整个流程全然借助事件来实现解耦,各个Step独自运行彼此之间不会产生干扰。

免费API服务的选择

Groq是个推理加速平台,其核心是自行研究的LPU,它的推理速度极其惊人,虽并非模型开发者,然而作为模型搬运工,给开发者提供了高效的API调用服务,这于需要快速响应的应用场景格外有价值。

国内开发者较多使用的平台是硅基流动,它提供多种模型选择,这些模型便宜量大。其中有不少免费模型可以用来调用,本文代码实战部分会使用硅基流动的免费模型,以此让没有 GPU 的开发者能够顺利运行示例内容。

环境配置与API调用

# 1. 确保安装最新版 uv
!pip install -U uv
# 2. 使用修正后的包名进行安装
# llama-index 包含核心组件
# llama-index-llms-groq 是 Groq 的适配器
# llama-index-llms-llms-openai-like 是 所有适配openai接口的适配器
!uv pip install llama-index llama-index-llms-groq llama-index-llms-openai-like feedparser requests transformers

以API方式去调用大模型,Kaggle的Accelerator选None就行,彻底摆脱了GPU的依赖,配置时得在Secrets里添加Groq以及硅基流动的API Key,分别命名成GROQ_API_KEY和SILICON-API_KEY。

要是对硅基流动进行调用,那要么能够运用llama-index-llms-siliconflow定制库,要么为了具备通用性而采用llama-index-llms-openai-like。通用接口得明确指定所涉及模型的名称、api-key以及api的url,然而定制接口仅仅只需配置环境变量就行。

状态管理与实践技巧

import os
from llama_index.llms.groq import Groq
from llama_index.core import Settings
os.environ["GROQ_API_KEY"] = user_secrets.get_secret("GROQ_API_KEY")
# 推荐使用 llama-3.3-70b,它的逻辑推理能力足以应对多智能体协作
Settings.llm = Groq(model="llama-3.3-70b-versatile")

于实现博客更新检测Agent这个环节之中,能够借助比较此刻的标题以及全局变量global_last_title的做法,用以判别是不是存在新的内容。运用此种方式,规避了模型直接进行判断之时,有可能产生的幻觉或者过度客气的相关问题。

from llama_index.llms.openai_like import OpenAILike
Settings.llm = OpenAILike(
    model="Qwen/Qwen3-8B",
    api_key=user_secrets.get_secret("SILICON-API_KEY"),
    api_base="https://api.siliconflow.cn/v1",
    is_chat_model=True
)

开发多智能体协作之际,强制模型输出JSON格式属于一大难题。当模型指令跟随能力欠佳之时,能够采用正则表达式来兜底解析。与此同时,需要留意,多智能体循环请求速度过快有可能触发API遭致429错误,得要合理把控请求频率。

生产环境的应用建议

本教程运用全局变量,仅仅是为了使代码阅读门槛得以降低。于生产环境里,应当把状态进行持久化存储,像是借助数据库或者Redis,而非去依赖内存当中的全局变量。如此一来,能够保证应用重启之后状态不会丢失。

from llama_index.core.workflow import Workflow, step, StartEvent, StopEvent, Context, Event
class NewBlogPostEvent(Event):
    title: str
    link: str

碰到API存在限流状况之际,能够思索于Step之中间添入延迟机制,又或者达成退避重试策略。ReAct模式当中的模型得要再三进行思考-行动-观察循环,在较短的时间段之内会生成高密度请求,恰当的设计能够防止触发并发限制。

你在进行多智能体应用开发期间有没有碰到过API调用方面的问题呢?欢迎于评论区把你的经历分享出来,与此同时点赞并收藏这篇文章,进而使更多的开发者能够避免重复走那些不顺的路!

from llama_index.core.agent.workflow import ReActAgent
CHECKER_SYSTEM_PROMPT = """
### ROLE
咱们是一个极其精准的数据提取专家。
### TASK
1. 调用工具获取最新博客文章。
2. 提取其标题和链接。
3. **必须**以 JSON 格式输出。
### OUTPUT_FORMAT
{"title": "文章标题", "link": "文章链接"}
"""
checker = ReActAgent(
            name="checker",
            system_prompt=CHECKER_SYSTEM_PROMPT,
            tools=[tool_get_blog],
            llm=Settings.llm
        )

NOTIFIER_SYSTEM_PROMPT = """
### ROLE
咱们是一个通知官。
### TASK
请根据提供的信息发送通知。
直接调用工具发送,不要解释咱们的行为。发送成功后回复“已发出”即可。
"""
notifier = ReActAgent(
            name="notifier",
            system_prompt=NOTIFIER_SYSTEM_PROMPT,
            tools=[tool_send_all],
            llm=Settings.llm
        )

相关标签: # 大模型实战 # Workflow # 事件驱动 # API调用 # 智能体