(注:本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费)
如果框架和依赖的安装对你来说是场梦魇,那么你可能非常需要这篇教程和这个工具。
痛点
之前有 4 篇教程,我们都 提及了 fabric 这款工具。在这些教程里,我已经为你展示了如何用 fabric 实现以下功能:
有的小伙伴兴奋不已,也用得很舒服。但是,随着更多人的尝试,fabric 的问题也逐渐显现出来。
首先是安装设置比较困难,尤其是对于 Windows 用户来说。
有的小伙伴,甚至都准备上 vmware + Ubuntu 了。
fabric 在 Windows 上安装困难的这个问题,原本我以为随着时间推移会自然解决。因为 fabric 官方 Github 上面说了,会在几个星期内切换到 go 版本,安装会「异常简便」。
只不过,fabric 官方 5 月份宣布的消息,这都过去快俩月了,也没实现。很多 Windows 用户耐心余额明显不足。
好在官方既然给出了「几个星期」的时间表,我们总还有些盼头。可另外的一个问题,恐怕就连 fabric 切换到 go 语言版本后也没法解决—— fabric 虽然可以用管道链接的方式处理工作流,但是它更适合处理的是「上一个阶段的输出」直接成为「下一阶段的输入」这样的情况。如果你在某个阶段的输入,需要综合前面若干阶段的输出结果,那就比较麻烦了。
我在 上一次的文章里,采用 Python 编程的方式来处理解决。
但是,这里定义数据处理方法后,也不算是完事大吉。因为后面用户还需要采用 Python 代码形式来调用它们:
如果你没有 Python 基础知识,基本上也就不大可能自行去调整工作流的定义和顺序摆放,来适应自己的需求了。
我反思了一下,觉得大家更想要获得的是灵活简便定义、构建工作流的方式,而非一定要用某一款框架来实现。
所以,我花了些时间,重构了工作流运行的 Python 脚本。下面我给你演示一下,现在工作流的定义可以变成多么简单的样子。
样例
要设定工作流由哪些大语言模型来完成任务,具体执行什么操作,以及如何组织不同阶段的输入内容,你只需要按照下面的样式,给出定义。
这个 YAML 文件定义了一个文本处理工作流,包含三个连续的阶段(这里称为策略,strategy)。每个阶段使用特定模型处理文本,下一个阶段可以综合使用前导阶段的输出作为输入。
其实你看到它应该感觉眼熟。没错,它就是你在《如何用 AI 工作流实现高质量长文翻译?》一文中已经看到过的,使用反思式翻译的英译中工作流。
下面咱们详细说说:
第一个阶段:翻译
模型:
openrouter/google/gemini-flash-1.5
,使用 Google 的 Gemini Flash 1.5 模型进行处理。提示名称:
translate_cn
,这是用于中文翻译的指令模板。跟咱们之前 在这篇文章中设定的 没有区别。输入格式:
"{{text}}"
,直接使用用户输入的原始文本作为输入。输出名称:
translation
,翻译结果将被标记为 "translation" 供后续阶段使用。
第二个阶段:评价翻译
模型:
openrouter/anthropic/claude-3.5-sonnet
,使用 Anthropic 的 Claude 3.5 Sonnet 模型,它的思考、评价与规划能力更强。提示名称:
comment_cn_trans
,这是用于评论中文翻译的提示词。输入格式:包含原始文本和第一步的翻译结果。
输出名称:
reflection
,输出被标记为 "reflection",是对翻译的评价。
第三个阶段:改进翻译
模型:
openrouter/anthropic/claude-3.5-sonnet
,再次使用 Claude 3.5 Sonnet 模型。提示名称:
improved_trans_cn
,这是用于改进中文翻译的提示词。输入格式:包含原始文本、第一步的翻译结果和第二步的评论。
输出名称:
improvement
,输出被标记为 "improvement",是改进后的翻译。
另外,每个阶段的 output_name
都被存储,并在后续阶段的 input_format
中通过 {{名称}}
的方式引用。这允许工作流程中的每个步骤都能利用之前步骤的结果。
你看,就这么简单。比起把工作流的输入、输出和调用用 Python 形式来表示,这里用 YAML 的方式要方便许多。对普通用户来说,也更加容易理解和自行修改。
Python 脚本读取这个 YAML 后,会自动按顺序应用这些阶段来处理输入文本。脚本依然会自动处理长文本的分块、大语言模型和对应系统提示词调用、结果整合输出等细节,确保整个工作流程流畅执行。
类似地,咱们之前介绍过得音视频转写文本润色工作流,是这样的:
你看,在这里咱们可以方便地采用国产模型,包括零一万物的 Yi Large,以及通义千问的 Qwen2 等。这些国产模型目前更加便宜,可以有效降低你使用 AI 工作流的成本。
下面咱们来介绍一下安装与使用的方法。比起之前的方式,难度至少降低一个量级。
安装
你可以 到这个 GitHub 仓库 查看我为你制作的新项目详细信息。
https://github.com/wshuyi/workflows_with_litellm_pub
对了,别忘了给我点亮一颗星(在 GitHub 上加个 Star)。
你可以通过以下三种方式下载项目文件:
第一种方式是通过 Git 命令克隆仓库:
git clone https://github.com/wshuyi/workflows_with_litellm_pub.git
这种方式比较推荐。因为如果后续有更新,直接拉取更加容易。
第二种方式是从 Github 下载项目打包 ZIP 文件,地址是:
https://github.com/wshuyi/workflows_with_litellm_pub/archive/refs/heads/main.zip
第三种方式是从 Notion 页面下载:我已经将文件上传到了 Notion 页面,请你从这个链接下载。
https://wise-pullover-00f.notion.site/workflow-with-lite-0b1890f1ad364f53afe8afc1aa6da54b?pvs=4
下载解压后,你会看到如下的目录结构:
在我的例子中,解压后的文件夹路径是:/Users/wsy/Downloads/workflows_with_litellm_pub-main
。注意在后续的设置中,你需要根据自己的情况对应这个目录路径进行修改。
注意执行下列命令之前,请确保你已经安装并更新到最新版本的 Anaconda 或者 MiniConda。
进入终端,导航到这个文件夹:
cd /Users/wsy/Downloads/workflows_with_litellm_pub-main
然后执行以下命令:
pip install poetry
poetry install
看到如下提示,就表示应用依赖的安装设定成功了。
来执行以下命令:
cp .env.example .env
然后,使用任意编辑器打开 .env
文件,我这里以 macOS 和 Linux 上最常见的 nano 编辑器为例:
nano .env
在这里,你只需要将自己的 OpenRouter API Key 填写到第一行的等号后面,然后保存。如果你忘了 Openrouter 是怎么回事儿,请回顾参考这篇文章。
顺便说一下,我的脚本中调用的是 litellm (参考这篇文章),它支持各种不同大模型厂商。只是因为便捷,我这里以 Openrouter 为例进行示范。其实你也可以用它调用 OpenAI, Azure, Groq, Deepseek, Cohere …… 等等大语言模型,只需要在 .env
文件中,设定好自己对应的 API key 即可。
这样,设置工作就完成了。
对,在这个解决方案下,你根本不需要安装 Fabric。
当然你也可以将解压后的目录拖动到 Visual Studio Code 中来修改 .env
配置文件,这样会更加方便。
因为在 Visual Studio Code 中,显示会更加完整全面,不会隐藏配置文件。
在这里,你也可以看到子目录的结构。
例如,在 config
文件夹下,是我们预设的工作流。后续你可以把自己定义的工作流放到这个目录下。
而 patterns
文件夹中包含了 Fabric 官方的 patterns 和我个人设定的 patterns。现在你可以随意调用这些 patterns,也可以根据自己的需求来任意调整。
下面我们用一个例子,来看看如何使用它来执行 AI 工作流。
测试
假如咱们需要翻译一段中文到英文。
请你随便建立一个中文文本文件,例如我这里的例子叫做 /Users/wsy/Downloads/example_cn.md
。
内容看着眼熟吧?
没错,就是从咱们这篇文章开头部分截取出来的文字。