【Agent】【workflow】17.Self-Discover工作流分析
案例目标本案例展示了如何使用LlamaIndex工作流实现SELF-DISCOVER算法。SELF-DISCOVER是一种自动发现推理结构的方法它能够根据任务需求自动选择、调整和组合推理模块形成针对特定任务的推理结构然后使用该结构解决任务。SELF-DISCOVER包含两个主要阶段第一阶段SELECT从预定义的推理模块中选择相关子集ADAPT将选定的推理模块调整适应特定任务IMPLEMENT为任务生成推理结构第二阶段使用生成的推理结构解决任务并生成答案技术栈与核心依赖llama-index- 核心框架提供工作流和提示模板功能llama-index-llms-openai- OpenAI语言模型集成OpenAI GPT-4o- 用于推理模块选择、调整和任务解决的LLMPromptTemplate- 用于格式化各种提示模板环境配置# 安装LlamaIndex pip install -U llama-index # 设置OpenAI API密钥 import os os.environ[OPENAI_API_KEY] 案例实现SELF-DISCOVER工作流程选择推理模块 → 调整推理模块 → 创建推理结构 → 生成最终答案1. 定义推理模块和提示模板首先定义39个推理模块涵盖问题解决的各个方面from llama_index.core.prompts import PromptTemplate _REASONING_MODULES [ 1. How could I devise an experiment to help solve that problem?, 2. Make a list of ideas for solving this problem, and apply them one by one to the problem to see if any progress can be made., # ... 更多推理模块 39. Lets make a step by step plan and implement it with good notation and explanation., ] _REASONING_MODULES \n.join(_REASONING_MODULES) # 定义四个关键提示模板 SELECT_PRMOPT_TEMPLATE PromptTemplate( Given the task: {task}, which of the following reasoning modules are relevant? Do not elaborate on why.\n\n {reasoning_modules} ) ADAPT_PROMPT_TEMPLATE PromptTemplate( Without working out the full solution, adapt the following reasoning modules to be specific to our task:\n{selected_modules}\n\nOur task:\n{task} ) IMPLEMENT_PROMPT_TEMPLATE PromptTemplate( Without working out the full solution, create an actionable reasoning structure for the task using these adapted reasoning modules:\n{adapted_modules}\n\nTask Description:\n{task} ) REASONING_PROMPT_TEMPLATE PromptTemplate( Using the following reasoning structure: {reasoning_structure}\n\nSolve this task, providing your final answer: {task} )2. 定义工作流事件定义三个事件类用于在工作流的不同步骤之间传递数据from llama_index.core.workflow import Event class GetModulesEvent(Event): 获取模块事件 task: str modules: str class RefineModulesEvent(Event): 精炼模块事件 task: str refined_modules: str class ReasoningStructureEvent(Event): 创建推理结构事件 task: str reasoning_structure: str3. 实现SelfDiscoverWorkflow创建SelfDiscoverWorkflow类包含四个主要步骤from llama_index.core.workflow import ( Workflow, Context, StartEvent, StopEvent, step, ) from llama_index.core.llms import LLM class SelfDiscoverWorkflow(Workflow): Self discover workflow. step async def get_modules(self, ctx: Context, ev: StartEvent) - GetModulesEvent: 获取模块步骤 # 获取输入数据将llm存储到ctx task ev.get(task) llm: LLM ev.get(llm) if task is None or llm is None: raise ValueError(task and llm arguments are required.) await ctx.store.set(llm, llm) # 格式化提示并从LLM获取结果 prompt SELECT_PRMOPT_TEMPLATE.format( tasktask, reasoning_modules_REASONING_MODULES ) result llm.complete(prompt) return GetModulesEvent(tasktask, modulesstr(result)) step async def refine_modules(self, ctx: Context, ev: GetModulesEvent) - RefineModulesEvent: 精炼模块步骤 task ev.task modules ev.modules llm: LLM await ctx.store.get(llm) # 格式化提示并获取结果 prompt ADAPT_PROMPT_TEMPLATE.format( tasktask, selected_modulesmodules ) result llm.complete(prompt) return RefineModulesEvent(tasktask, refined_modulesstr(result)) step async def create_reasoning_structure(self, ctx: Context, ev: RefineModulesEvent) - ReasoningStructureEvent: 创建推理结构步骤 task ev.task refined_modules ev.refined_modules llm: LLM await ctx.store.get(llm) # 格式化提示获取结果 prompt IMPLEMENT_PROMPT_TEMPLATE.format( tasktask, adapted_modulesrefined_modules ) result llm.complete(prompt) return ReasoningStructureEvent( tasktask, reasoning_structurestr(result) ) step async def get_final_result(self, ctx: Context, ev: ReasoningStructureEvent) - StopEvent: 从推理结构事件获取最终结果 task ev.task reasoning_structure ev.reasoning_structure llm: LLM await ctx.store.get(llm) # 格式化提示获取结果 prompt REASONING_PROMPT_TEMPLATE.format( tasktask, reasoning_structurereasoning_structure ) result llm.complete(prompt) return StopEvent(resultresult)4. 运行工作流创建工作流实例并运行任务from llama_index.llms.openai import OpenAI from IPython.display import display, Markdown # 创建工作流和LLM实例 workflow SelfDiscoverWorkflow() llm OpenAI(gpt-4o) # 定义任务 task Michael has 15 oranges. He gives 4 oranges to his brother and trades 3 oranges for 6 apples with his neighbor. Later in the day, he realizes some of his oranges are spoiled, so he discards 2 of them. Then, Michael goes to the market and buys 12 more oranges and 5 more apples. If Michael decides to give 2 apples to his friend, how many oranges and apples does Michael have now? # 运行工作流并显示结果 result await workflow.run(tasktask, llmllm) display(Markdown(str(result)))案例效果本案例实现的SELF-DISCOVER工作流能够自动为复杂问题生成结构化的推理过程并得出准确答案。对于给定的数学问题关于橙子和苹果的数量计算系统执行了以下步骤选择相关推理模块从39个预定义模块中选择了与问题解决相关的模块如如何将问题分解为更小的部分和让我们一步步思考等。调整推理模块将选定的通用模块调整为适合当前具体任务的形式。创建推理结构基于调整后的模块创建了一个结构化的推理框架指导如何解决这个数学问题。生成最终答案使用推理结构逐步解决问题计算出Michael现在有18个橙子和9个苹果。最终结果不仅给出了正确答案还展示了详细的推理过程包括每一步的计算和解释使整个解决方案透明且易于理解。这种结构化的方法特别适合解决需要多步骤推理的复杂问题。案例实现思路模块化推理设计将问题解决过程分解为可重用的推理模块每个模块专注于特定的推理方法或策略。自适应选择机制利用LLM的语义理解能力根据任务描述自动选择最相关的推理模块。动态调整与组合将选定的通用推理模块调整适应特定任务并组合成针对该任务的推理结构。结构化推理流程通过生成的推理结构指导问题解决过程确保推理的逻辑性和完整性。事件驱动架构使用LlamaIndex工作流的事件驱动模型通过定义GetModulesEvent、RefineModulesEvent和ReasoningStructureEvent等事件实现步骤间的数据传递。扩展建议领域特定推理模块为特定领域如数学、科学、法律等创建专门的推理模块提高在专业领域的表现。动态模块学习实现从成功案例中学习新推理模块的能力不断扩展推理模块库。多模态推理支持扩展支持图像、表格等多模态输入为每种模态设计专门的推理模块。推理结构评估添加推理结构质量评估机制根据历史表现选择更有效的推理结构。交互式推理优化允许用户参与推理过程提供反馈或指导优化推理结构。推理路径可视化实现推理过程的可视化展示帮助用户理解问题解决路径。并行推理探索对于复杂问题同时探索多个不同的推理路径并选择最佳结果。总结SELF-DISCOVER工作流是一种创新的自动推理方法它通过模拟人类问题解决过程中的模块化思维实现了针对不同任务的自动推理结构发现。本案例展示了如何使用LlamaIndex工作流框架实现这一算法包括推理模块定义、事件设计、工作流步骤实现和任务执行等关键环节。与传统的固定推理方法相比SELF-DISCOVER具有更强的适应性和灵活性能够根据任务特点自动调整推理策略。这种设计特别适合处理需要多步骤推理的复杂问题如数学问题解决、逻辑推理和决策分析等。该实现的核心价值在于其模块化和自适应特性开发者可以通过扩展推理模块库和优化选择策略进一步提高系统在特定领域的表现。此外工作流的事件驱动架构使得整个过程清晰可控便于调试和优化。SELF-DISCOVER代表了AI推理系统的一个重要发展方向即从固定规则向自适应、模块化推理的转变有望在复杂问题解决、教育辅导和决策支持等领域发挥重要作用。

相关新闻

diagram-design:从随手画到系统化图表设计实战指南

diagram-design:从随手画到系统化图表设计实战指南

1. 从一张草图到一套系统:diagram-design 到底在解决什么问题第一次看到 “diagram-design” 这个标题,很多人会以为它只是教你怎么画图——选个模板、拖几个框、连几条线,导出 PNG 就完事了。但真正做过技术方案、写过设计文档、给团队讲过架…

2026/10/18 4:27:30 阅读更多 →
自然梯度法:策略优化中的KL约束与单调提升保障

自然梯度法:策略优化中的KL约束与单调提升保障

1. 项目概述:自然梯度法不是“更快的梯度下降”,而是策略优化的保底机制自然梯度法(Natural Gradient Descent)在强化学习中常被误读为“梯度下降的升级版”——就像把普通自行车换成电动助力车,只是跑得更快。这种理解…

2026/10/18 4:26:30 阅读更多 →
Java 后端最优 PDF 导出方案:jquick-pdf 项目引入与快速测试

Java 后端最优 PDF 导出方案:jquick-pdf 项目引入与快速测试

Java 后端最优 PDF 导出方案:jquick-pdf 项目引入与快速测试 官网示例: FORMULAS 示例页:https://www.jquick.org/jquick-pdf/#demo-biz16github 地址:https://github.com/paohaijiao/jquick-pdf 引入 一个 PDF 导出接口通常从“…

2026/10/18 4:26:30 阅读更多 →

最新新闻

Cursor+StageWise分阶段提示法:用主动提示词重做定价卡片

Cursor+StageWise分阶段提示法:用主动提示词重做定价卡片

1. 这套组合到底在折腾什么定价卡片这个东西,做过前端或者产品页的人都不陌生。三列布局、中间那列高亮、顶部挂个“推荐”角标、底下罗列功能清单、最下面放个行动按钮——这套模板在SaaS落地页、会员订阅页、工具类产品的付费墙里被用了几百万遍。问题是&#xff…

2026/10/18 5:17:39 阅读更多 →
Python第一次作业全攻略:从环境搭建到报错排查

Python第一次作业全攻略:从环境搭建到报错排查

1. 先想清楚:第一次作业到底在考什么我见过不少同学拿到“Python第一次作业”时,第一反应是慌。其实真没必要。第一次作业几乎不考算法,更不会让你写出什么高深的东西。它真正想验证的,是三件很基础的事:环境能不能跑起…

2026/10/18 5:17:39 阅读更多 →
K8s单节点集群扩容实战:二进制部署master2与nginx+keepalived高可用架构

K8s单节点集群扩容实战:二进制部署master2与nginx+keepalived高可用架构

先说场景吧。很多团队搞 Kubernetes 集群,第一步通常都是拿一台机器把单节点的集群先跑起来,组件全部用二进制装好、证书手动签好,验证业务没问题之后,才回过头来想生产环境和灾备的事:万一这台 master 挂了怎么办&…

2026/10/18 5:17:39 阅读更多 →
风光储氢系统协调控制与Simulink仿真建模实战

风光储氢系统协调控制与Simulink仿真建模实战

1. 这个模型到底在解决什么问题先说结论:这根本不是一套"能发电又能制氢"的演示品,而是一个面向新能源制氢场景的系统级协调控制方案。核心目标就一句话——让风光这种靠天吃饭的不稳定电力,喂给一个很挑食的PEM电解槽,…

2026/10/18 5:17:39 阅读更多 →
RenoDX 安装配置教程:从克隆仓库到出 addon 文件,4 步完成

RenoDX 安装配置教程:从克隆仓库到出 addon 文件,4 步完成

RenoDX 安装配置教程:从克隆仓库到出 addon 文件,4 步完成 【免费下载链接】renodx Renovation Engine for DirectX Games 项目地址: https://gitcode.com/GitHub_Trending/re/renodx RenoDX(Renovation Engine for DirectX Games&…

2026/10/18 5:17:39 阅读更多 →
推荐一本钱币银元鉴定最实用的书

推荐一本钱币银元鉴定最实用的书

家人们,在钱币收藏这个领域,大家是不是经常遇到各种头疼的问题?像新手入门时完全摸不着头脑,不知道从哪开始学起;经常看币的玩家也会碰到边齿鉴定、版别区分这些难题;藏家和资方投资银元时,又怕…

2026/10/18 5:16:39 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →