
Dify搭建工作流增强LLM逻辑能力
前段时间 openai 发布了草莓🍓模型 o1,测试了它的逻辑推理能力,真的很强!我让它做了今年高考数学前 5 道选择题(先转成 markdown 格式然后给大模型),不出一会儿咔咔咔输出了解题过程和全部正确的答案!gpt-4o 的话就很不稳定,虽然每次都会做对 2~3 道题,但是飘忽不定!本文我们参考 B站【AI 学长小林】的视频,通过 Dify 搭建一个工作流“低仿”一下 o1,也可以让常规的 LLM 获得推理能力的增强。
准备
因为本文我们使用 Dify 搭建工作流,所以需要有 Dify 可用,有两种方式:
- 使用 Dify 官方版:https://dify.ai/zh
- 使用 Dify 自部署的社区版:参考 Docker Compose 部署 自行部署(需要我们自备可调用的 LLM API);
Dify 支持的 API 提供商有很多,可自行选择,我用的 OpenRouter 、OpenAI 官方和 SiliconFlow 的 API,其中 SiliconFlow 对国内访问比较友好,OpenRouter 支持的大模型最多。
基本思路
搭建工作流
按照上面的思路,添加工作流节点逐步搭建。
任务拆解
使用 LLM 节点,提示词如下:
1你是一个能够进行详细、逐步思考的AI助手。收到问题后,不要直接给出答案,而是通过分步推理将问题拆分出相应的解题步骤,只需给出步骤的名称和任务描述,不要自行解答,至少要保证有 3 个步骤。
步骤提取
使用 LLM 节点。
提取参数
设置提取参数变量为 steps。
指令
提示词如下:
提取内容中的步骤数组,示例如下:
1 2 3 4 5 6 7 8 9 10 11[ { "name": "步骤名称", "content": "任务描述" }, { "name":"步骤名称", "content":"任务描述" }, ... ]
【】包裹的内容,在搭建工作流的时候使用对应变量替代。
迭代任务
迭代任务中,需要解析任务和执行任务,解析任务的作用是得到只包含步骤名称和步骤描述的字典,一般采用执行代码节点,执行任务使用 LLM。
解析任务
输入变量
设置为 迭代任务的遍历对象变量。
代码
1 2 3 4def main(step) -> dict: # 清洗得到只包含步骤名称和内容的字典 step_name = step['name'] step_content = step['content'] return { 'name': step_name, 'content': step_content }
输出变量
- content:String 类型
- name:String 类型
执行任务
提示词如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22## 问题 """ 【放上最初问题】 """ ## 任务背景 这是工作流中的一个环节,前面的工作流流程会将问题拆分出 N 个步骤。 ## 任务 根据问题拆分出的步骤,解答指定步骤的任务,本轮任务名称:【步骤名称】,任务描述:【步骤描述】 ## 初始化 不必回答整个问题,分析解答这个步骤的问题即可。 ## 输出 采用 Markdown 输出解答,示例如下: - 【步骤名称】:【步骤解答】
【】包裹的内容,在搭建工作流的时候使用对应变量替代。
合并结果
使用模板转换功能。
输入变量
设为迭代任务中的输出。
代码
1{{ step_answer | join("\n")}}
归纳答案
使用 LLM 节点,提示词
1 2 3 4 5 6 7## 原问题 """【问题】""" ## 任务 检查原问题,并归纳以下分析(请注意可能会出错,发现错误请进行纠正),最后给出问题最终答案。 【合并结果输出】
【】包裹的内容,在搭建工作流的时候使用对应变量替代。
回复
1 2 3 4 5## 问题分析步骤 【合并结果输出】 ## 最终解答 【归纳答案输出】
【】包裹的内容,在搭建工作流的时候使用对应变量替代。
可以看到我们上面选择的都是 gpt-4o-mini 模型,搭建好的工作流如下:
你也可以点击链接下载我已经搭建好的工作流,只需更换你使用的模型即可:
https://storage.5km.host/llm2o1.yml
测试
我们使用下面三个问题测试效果(这三个问题直接问模型的话通常不会得到正确答案):
- 9.11 和 9.8 哪个数字大?【 正确答案:9.8>9.11】
- Strawberry 有几个字母 r?【正确答案:3 个字母 r】
- 这是中国2024年9月9日(星期一)开始到10月13日的放假调休安排:上6休3上3休2上5休1上2休7再上5休1。请你告诉我除了我本来该休的周末,我因为放假多休息了几天?【正确答案:4 天】
我们先试试 gpt-4o 回答,这次是全错:
我们使用工作流测试一下,经过测试发现全用 gpt-4o-mini 不能全部答对,但已经提升推理能力了,除了 任务提取 节点把其他的 LLM 节点都换成 gpt-4o 就稳定答对了:
PS:很奇怪的是,之前 LLM 节点都采用 qwen2.5-72B 模型也能稳定答对的,但是隔一段时间竟然不能稳定全答对了😂。
英文版
我也制作了一个英文版本的工作流。
欢迎使用:https://storage.5km.host/llm2o1.en.yml



