在 shebang 行中使用 LLM
Simon Willison··作者 Simon Willison
关键信息
这些示例依赖于 `#!/usr/bin/env -S llm -f` 和 `#!/usr/bin/env -S llm -T llm_time -f`,其中 `env -S` 允许在 shebang 中传递多个参数。更高级的例子使用 `llm -t`、YAML 模板、`gpt-5.4-mini` 模型,以及 `add` 和 `multiply` 这类模型可以调用的 Python 函数工具。
资讯摘要
Simon Willison 发布了一篇简短的 TIL,介绍如何在脚本的 shebang 行里使用 LLM,这个灵感来自 Hacker News 上一条评论:如果你足够大胆,现在甚至可以把 shebang 放进英文文本文件里。受此启发,他开始探索如何用 `llm` 命令行工具把这种写法真正做出来。最简单的例子是 `#!/usr/bin/env -S llm -f`,然后直接在文件正文里写英文提示词,例如让模型生成一只骑自行车的鹈鹕的 SVG。
接着他展示了如何通过加入 `-T llm_time` 来引入工具调用,让提示词可以要求模型写一首包含当前准确时间的俳句。随后,他演示了更高级的 YAML 模板模式:使用 `llm -t`,声明模型、设置“使用工具进行计算”的 system 指令,并定义 `add` 和 `multiply` 这样的 Python 函数。运行 `./calc.sh 'what is 2344 * 5252 + 134' --td` 时,脚本会打印工具调用过程,并给出最终的算术结果。最后,他还提示读者去看完整 TIL 中一个更复杂的例子,那里使用 Datasette SQL API 来回答他博客内容相关的问题。

资讯正文
【TIL:】在脚本的 shebang 行中使用 LLM
Kim_Bruning 在 Hacker News 上说:
“但说真的,你现在可以在英文文本文件上加上 shebang 了(如果你足够大胆的话)[...]”
这启发我去看看,如何用 <a href="https://llm.datasette.io/en/stable/">LLM</a> 正好做到这一点。最简单的方式是利用 <a href="https://llm.datasette.io/en/stable/fragments.html">LLM fragments</a>:
<pre><code>#!/usr/bin/env -S llm -f
Generate an SVG of a pelican riding a bicycle
</code></pre>
不过,你也可以使用 <code>-T name_of_tool</code> 选项来加入 <a href="https://llm.datasette.io/en/stable/tools.html">工具调用</a>:
<pre><code>#!/usr/bin/env -S llm -T llm_time -f
Write a haiku that mentions the exact current time
</code></pre>
或者,甚至可以直接执行定义了额外工具的 YAML 模板,这些工具是 Python 函数:
<pre><span class="pl-c"><span class="pl-c">#</span>!/usr/bin/env -S llm -t</span>
<span class="pl-ent">model</span>: <span class="pl-s">gpt-5.4-mini</span>
<span class="pl-ent">system</span>: <span class="pl-s">|</span>
<span class="pl-s"> Use tools to run calculations</span>
<span class="pl-s"></span><span class="pl-ent">functions</span>: <span class="pl-s">|</span>
<span class="pl-s"> def add(a: int, b: int) -> int:</span>
<span class="pl-s"> return a + b</span>
<span class="pl-s"> def multiply(a: int, b: int) -> int:</span>
<span class="pl-s"> return a * b</span></pre>
然后:
<pre><code>./calc.sh 'what is 2344 * 5252 + 134' --td
</code></pre>
输出如下(感谢 <code>--td</code> 工具调试选项):
<pre><code>Tool call: multiply({'a': 2344, 'b': 5252})
12310688
Tool call: add({'a': 12310688, 'b': 134})
12310822
2344 × 5252 + 134 = **12,310,822**
</code></pre>
阅读完整的 TIL,了解<a href="https://til.simonwillison.net/llms/llm-shebang#templates-with-tools">一个更复杂的示例</a>,其中使用 Datasette SQL API 来回答关于我博客内容的问题。
标签:<a href="https://simonwillison.net/tags/llm">llm</a>,<a href="https://simonwillison.net/tags/llm-tool-use">llm-tool-use</a>,<a href="https://simonwillison.net/tags/llms">llms</a>,<a href="https://simonwillison.net/tags/ai">ai</a>,<a href="https://simonwillison.net/tags/generative-ai">generative-ai</a>
来源与参考
收录于 2026-05-12