项目地址:https://github.com/danielmiessler/fabric
1 引言
目前 fabric 已经获得了 5.3K Star,其中上周获得了 4.2K,成为了上周热榜的第二名(第一名是免费手机看电视的 Android 工具),可以算是爆款应用了。
其原因可能是 fabric 打到大家的痛点:不是工具不够好,是用起来这工作流太不顺畅了,比如想用一个提示,连找带贴弄了半天,打断了当前思路……
因为我多数时间是让大模型帮我解决具体问题,而不是聊天,好像也没听说谁每天都和它聊两小时的。所以,fabric 可能是我用过的最舒服的大模型封装工具。虽然技术含量并不是特别高,但是使用起来非常方便。别人都在考虑如何做得大而全,这位作者却想着如何解决最核心、最常见的问题,思考问题的角度比较独特。
它具有以下特点:
- 命令行操作,几乎没有学习成本,便于安装,使用、集成。
- 封装了最为常用的几个功能。
- 把复杂问题分解为多步处理。
- 配置文件和输出均使用 markdown 格式,易于阅读。
- 设计结构,便于管理多种提示。
2 功能
Fabric 的核心功能是调用大型模型,并帮助人们收集和整合提示。它将解决一种问题对应的提示称为模式 pattern。
3 代码分析
项目非常简单,包含 370 行 Python 代码,外加 2072 行 Markdown Prompt。
$ git clone https://github.com/danielmiessler/fabric
$ cd fabric/client
$ pip install -r requirements.txt
$ echo "export PATH=$PATH:$(pwd)" >> ~/.bashrc
$ ./fabric --setup
输入 OPEN_API_KEY 之后,会下载最新的提示文件到:$HOME/.config/fabric/patterns/
echo "你是什么模型"|fabric --pattern ai --stream
还可以使用剪切板内容提问,网站上给出的是 pbpaste 是 mac 系统使用剪切板的方法,我在 linux 中使用以下方法读取剪切板内容。
$ echo "Hello, world!" | xsel --clipboard --input # 复制
$ xclip -o -selection clipboard # 粘贴
4 具体示例
4.1 创建常用提示
编辑 $HOME/.config/fabric/patterns/xy_sum_trans/system.md,示例如下:
# IDENTITY and PURPOSE
You are an expert content summarizer and translator. You take content in and output a Markdown formatted summary using the format below.
# OUTPUT SECTIONS
- 翻译成中文
- 将生涩的语言转换成浅显易懂
- 概括总结成两句话
# OUTPUT INSTRUCTIONS
- Create the output using the formatting above.
- You only output human readable Markdown.
- Output numbered lists, not bullets.
- Do not output warnings or notes—just the requested sections.
- Do not start items with the same opening words.
# INPUT:
INPUT:
4.2 使用常用提示
我使用 Linux 系统,从剪切板读取内容
$ xclip -o -selection clipboard|fabric --pattern xy_sum_trans --stream
4.3 注意
- 默认使用 gpt-4-1106-preview,相对 gpt3.5 要贵一些,可在代码 client/utils.py 中替换成 3.5;另外,也可以在这里替换成其它中转服务。
- 输出可能英文,如果需要中文回答,需要修改 pattern 或者在代码中指定用中文回答。
5 使用感受
- 如果用聊天界面提问,会把之前的聊天记录也传给 gpt,而翻译,润色这类功能不需要传入上下文,从而造成了浪费。使用fabric能很好地解决这一问题。
- 该工具的底层逻辑是把相对复杂的工作拆成多步处理,像 gpt-4 这类工具,一次调用,往往不能满足太多要求,拆成多步后效果会好得多;即使出问题,也知道问题出在哪步。用了才知真的好,确实是对大脑的减负。
- 我一直不太习惯用图形聊天界面,感觉很受限制,常常拖来拖去地翻找,保存内容也比较麻烦,更别说从其它工具调用了。另外,想用一个提示,还要从其它工具搜索,再粘过来,非常麻烦。
- 在学术论文方面,我试用 gpt-3.5 和 gpt-4,正常时效果差不多,但有时 gpt3.5 常常生成完全不对的回答(我试验约占 1/4),gpt3.5 的费用 gpt4 是 1/10,建议略改下代码交叉使用。
- 可以把常用的 prompt 加入 pattern,或者与 awesome-chatgpt-prompts-zh 这样的提示工程项目相结合,轻松实现更多功能。