在 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 来回答他博客内容相关的问题。

在 shebang 行中使用 LLM

资讯正文

【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) -&gt; int:</span>

<span class="pl-s"> return a + b</span>

<span class="pl-s"> def multiply(a: int, b: int) -&gt; 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>

来源与参考

  1. 原始链接
  2. TIL: Using LLM in the shebang line of a script

收录于 2026-05-12