项目地址: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。

1
2
3
4
5
$ 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/

1
echo "你是什么模型"|fabric --pattern ai --stream

还可以使用剪切板内容提问,网站上给出的是 pbpaste 是 mac 系统使用剪切板的方法,我在 linux 中使用以下方法读取剪切板内容。

1
2
$ echo "Hello, world!" | xsel --clipboard --input # 复制
$ xclip -o -selection clipboard # 粘贴

4 具体示例

4.1 创建常用提示

编辑 $HOME/.config/fabric/patterns/xy_sum_trans/system.md,示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 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 系统,从剪切板读取内容

1
$ 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 这样的提示工程项目相结合,轻松实现更多功能。