スクリプトのシェバング行に大規模言語モデルを使用する
Simon Willison は、LLM ツールをシェブング(#!)行に埋め込むことで、テキストファイルやスクリプトから直接複雑な計算やツール呼び出しを実行できる新しい開発パターンを紹介している。
キーポイント
LLM をシェブングとして利用する基本構文
#!/usr/bin/env -S llm -f の形式で、スクリプトの先頭にプロンプトを記述し、実行時に LLM が直接レスポンスを生成するシンプルな手法を紹介している。
ツール呼び出し機能の統合
-T オプションや YAML テンプレートを使用することで、LLM に現在時刻の取得や Python 関数(足し算・掛け算など)の実行権限を与え、複雑なタスクを自動化できる。
YAML ベースのカスタムツール定義
スクリプト内で YAML 形式でモデル設定やシステムプロンプト、そして Python 関数として定義された追加ツールを直接記述し、柔軟な拡張性を確保する例を示している。
影響分析・編集コメントを表示
影響分析
この記事は、LLM の利用形態を「対話型チャット」から「スクリプト内埋め込み型」へと拡張する可能性を示しており、開発者のワークフローにおける AI ツールの統合コストを劇的に下げる革新的なアプローチです。特に、YAML を介した動的ツール定義機能は、複雑なロジックを持つ自動化スクリプトの作成をより直感的かつ保守容易にするため、実務現場での採用が期待されます。
編集コメント
シェブングに LLM を埋め込むという発想は、開発者の日常業務を AI で補完する「インテリジェンスの透明化」の好例です。複雑なツール定義を YAML で記述できる点は、スクリプトの可読性と拡張性を両立させる優れた設計と言えます。
Kim_Bruning 氏 Hacker News で:
でも本気で言えば、今や英語のテキストファイルにもシェバングを記述できるようになりました(十分に勇敢であれば)[...]
これに触発されて、LLM を用いてまさにそれを行うためのパターンを探ってみました。最もシンプルな例がこちらで、LLM フラグメントの機能を利用しています:
#!/usr/bin/env -S llm -f
ペリカンが自転車に乗っている SVG を生成してください
また、-T name_of_tool オプションを使用して ツール呼び出し も組み込むことができます:
#!/usr/bin/env -S llm -T llm_time -f
現在の正確な時刻を言及した俳句を書いてください
あるいは、追加のツールを Python 関数として定義する YAML テンプレートを直接実行することも可能です:
#!/usr/bin/env -S llm -t
model: gpt-5.4-mini
system: |
ツールを使用して計算を実行してください
functions: |
def add(a: int, b: int) -> int:
return a + b
def multiply(a: int, b: int) -> int:
return a * b
その後:
./calc.sh '2344 * 5252 + 134 はいくつですか' --td
と実行すると(この --td ツールデバッグオプションのおかげで)、以下のような出力が得られます:
ツール呼び出し:multiply({'a': 2344, 'b': 5252})
12310688
ツール呼び出し:add({'a': 12310688, 'b': 134})
12310822
2344 × 5252 + 134 = 12,310,822
ブログのコンテンツに関する質問に答えるために Datasette SQL API を使用した、より複雑な例については、こちら の TIL 全文をお読みください。
Tags: llm, llm-tool-use, llms, ai, generative-ai
原文を表示
TIL: Using LLM in the shebang line of a script
Kim_Bruning on Hacker News:
But seriously, you can put a shebang on an english text file now (if you're sufficiently brave) [...]
This inspired me to look at patterns for doing exactly that with LLM. Here's the simplest, which takes advantage of LLM fragments:
#!/usr/bin/env -S llm -f
Generate an SVG of a pelican riding a bicycle
But you can also incorporate tool calls using the -T name_of_tool option:
#!/usr/bin/env -S llm -T llm_time -f
Write a haiku that mentions the exact current time
Or even execute YAML templates directly that define extra tools as Python functions:
#!/usr/bin/env -S llm -t
model: gpt-5.4-mini
system: |
Use tools to run calculations
functions: |
def add(a: int, b: int) -> int:
return a + b
def multiply(a: int, b: int) -> int:
return a * bThen:
./calc.sh 'what is 2344 * 5252 + 134' --td
Which outputs (thanks to that --td tools debug option):
Tool call: multiply({'a': 2344, 'b': 5252})
12310688
Tool call: add({'a': 12310688, 'b': 134})
12310822
2344 × 5252 + 134 = **12,310,822**
Read the full TIL for a more complex example that uses the Datasette SQL API to answer questions about content on my blog.
Tags: llm, llm-tool-use, llms, ai, generative-ai
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み