humanscript
一种真正自然的脚本语言
humanscript 是一个智能解释器。它可以使用大型语言模型推断以自然语言编写的命令背后的意义。人类可书写的命令会被转换成代码,并立即执行。没有预定义的语法,humanscripts 只需说出想要发生的事情,当你执行它们时,这些事情就会发生。
humanscript 智能解释器支持多种 LLM 后端。它可以与云托管的 LLM(如 OpenAI 的 GPT-3.5 和 GPT-4)一起使用,也可以与本地运行的开源 LLM(如 Llama 2)一起使用。
示例
这是一个名为 tidy-screenshots
的 humanscript。它会将一个未整理的截图目录,根据截图的日期,整理到相应的子目录中。
#!/usr/bin/env humanscript
循环遍历 $HOME/Screenshots 目录下的所有文件(忽略子目录)
将每个文件移动到一个名称格式为 年-月 的子目录中
任务运行时显示一个 ASCII 加载旋转图标
显示移动了多少文件
显示每个子目录的大小
它可以像其他脚本一样执行。
$ ./tidy-screenshots
Moved 593 files.
364K 2023-08
2.3M 2023-02
5.4M 2022-09
5.8M 2023-03
6.9M 2022-07
7.4M 2023-04
10M 2023-01
12M 2022-01
13M 2022-10
14M 2022-03
16M 2022-11
16M 2022-12
18M 2022-02
19M 2021-11
20M 2021-12
23M 2021-09
23M 2022-05
28M 2023-07
30M 2022-04
30M 2023-05
30M 2023-06
35M 2022-06
38M 2021-10
66M 2022-08
该 LLM 在运行时将 humanscript 翻译为以下 bash 脚本。
#!/usr/bin/env bash
spinner() {
local i sp n
sp='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏'
n=${#sp}
while sleep 0.1; do
printf "%s\r" "${sp:i++%n:1}"
done
}
spinner &
spinner_pid=$!
moved_count=0
for file in "$HOME/Screenshots"/*; do
if [ -f "$file" ]; then
dir="$HOME/Screenshots/$(date -r "$file" "+%Y-%m")"
mkdir -p "$dir"
mv "$file" "$dir"
((moved_count++))
fi
done
kill "$spinner_pid"
echo "Moved $moved_count files."
du -sh "$HOME/Screenshots"/* | sed "s|$HOME/Screenshots/||"
在解释过程中,代码会被逐行输出并执行,因此不必在解释完成前阻塞执行。首次运行时生成的代码会被缓存,后续运行时将立即执行,避免重新解释。
你可以在这里看到它的实际效果:
使用方法
安装 humanscript
你可以通过 Docker 在沙盒环境中运行 humanscript:
docker run -it lukechilds/humanscript
或者你可以使用 Homebrew 直接在你的系统上进行本地安装:
brew install lukechilds/tap/humanscript
或者通过下载此仓库,手动安装并将 humanscript
复制/软链接到你的 PATH。
如果你在未使用沙盒环境的情况下运行 humanscript,请务必小心。智能解释器有时会做出一些奇怪甚至危险的行为。根据经验,除非你愿意在周六晚上凌晨2点进行系统恢复,否则你应该至少在最初运行 humanscripts 时设置
HUMANSCRIPT_EXECUTE="false"
,这样你可以在执行之前检查生成的代码。
编写和执行 humanscript
humanscript 已配置为默认使用 OpenAI 的 GPT-4,你只需添加你的 API 密钥。
我们需要将其添加到 ~/.humanscript/config
mkdir -p ~/.humanscript/
echo 'HUMANSCRIPT_API_KEY="<your-openai-api-key>"' >> ~/.humanscript/config
现在你可以创建一个 humanscript 并使其可执行。
echo '#!/usr/bin/env humanscript
print an ascii art human' > asciiman
chmod +x asciiman
接着执行它。
./asciiman
O
/|\
/ \
配置
所有环境变量都可以添加到 ~/.humanscript/config
中,以便全局应用于所有 humanscripts:
$ cat ~/.humanscript/config
HUMANSCRIPT_API_KEY="sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
HUMANSCRIPT_MODEL="gpt-4"
或者可以在每个脚本中单独设置:
$ HUMANSCRIPT_REGENERATE="true" ./asciiman
HUMANSCRIPT_API
默认值:https://api.openai.com/v1
遵循 OpenAI 的 Chat Completion API 的服务器。
有许多本地代理实现了此 API,以便在本地运行的 LLM 之前使用,例如 Llama 2。LM Studio 是一个不错的选择。
HUMANSCRIPT_API="http://localhost:1234/v1"
HUMANSCRIPT_API_KEY
默认值:unset
发送到 LLM 后端的 API 密钥。仅在使用 OpenAI 时需要。
HUMANSCRIPT_API_KEY="sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
HUMANSCRIPT_MODEL
默认值:gpt-4
用于推理的模型。
HUMANSCRIPT_MODEL="gpt-3.5"
HUMANSCRIPT_EXECUTE
默认值:true
humanscript 智能解释器是否应自动即时执行生成的代码。
如果为 false,则不会执行生成的代码,而是将其输出到标准输出。
HUMANSCRIPT_EXECUTE="false"
HUMANSCRIPT_REGENERATE
默认值:false
humanscript 智能解释器是否应重新生成缓存的 humanscript。
如果为 true,humanscript 将重新解释并替换缓存条目。由于 LLM 具有非确定性,每次重新解释 humanscript 时,你将获得相似但略有不同的输出。
HUMANSCRIPT_REGENERATE="true"
许可证
MIT © Luke Childs