资讯动态

【Agent】【workflow】17.Self-Discover工作流分析

发布时间:2026/10/18 4:27:17 来源:尧图企业网站定制
案例目标本案例展示了如何使用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推理系统的一个重要发展方向即从固定规则向自适应、模块化推理的转变有望在复杂问题解决、教育辅导和决策支持等领域发挥重要作用。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑