Open24

プロンプトのテンプレート用の言語がほしい

podhmopodhmo

スマホからの直打ちは厳しくなってきた。
なのでプロンプトのテンプレートを管理する必要が出てきた。markdownの範囲で記述できると嬉しい。

  • ドキュメント全体の解析
  • 変数定義部分の解析
podhmopodhmo

ドキュメント全体の解析

(後で詳しく)

要件を書いてみる

  • 章タイトルを名前として管理すると良い
  • 通常の文章部分はdescriptionとして使う
  • プロンプトはコードブロックで表す
  • チャット形式のものにも対応できると嬉しい
  • 変数展開も利用できると嬉しい
podhmopodhmo

たとえばのテンプレートの用例を挙げておきたい

podhmopodhmo

変数にしたい

  • 名前: podhmo氏
  • 文章内容:
この思考をそのまま文章にしたいです。筆者は脳内での思考や熟考が好きな表現巧みな存在だとしてください。自分自身の思考の追体験を読者にさせたいとします。元々のpodhmo氏の投稿及びわたしやgrokやあなたとの対話の存在を知らない人に伝わるようにしてください。

2つのバージョンを作ってください。1000文字から2000文字程度あれば良いでしょう。

- podhmo氏の使う語彙をそのまま使い適切に脚注を加えるバージョン
- 文中で言葉の定義を紐解いて一つの文章を作るバージョン

それぞれの文章の段落には章タイトルをつけてください。章タイトルには先頭にemojiをつけてください。またコピペしやすいようにmarkdownのブロックの形で出力してください。

はじまりは孤独な生活が長くなったことによる思考の様式の変化という体ぇ始めてください(ディベートを外化するか内化するかというスタンスの違いにも現れます。つまりこれは脳内で全部やってしまおうとすることによるリソース不足の話なのです)。

普通の人々に触れるタイミングで思考リソースの節約の為の使い分けだけではなく一つの役割だと明示しその一つの役割に徹することが出来てる点も考慮してください。

そしてこの文章を書くに渡り私はまともな人ではない。つまり一般的な人ではないという諦観に似た感情がこの文章を作らせたという感じで終わらせてください。
podhmopodhmo

コピペしやすいようにmarkdownのコードブロックで出力という表現を入れたいがこれは変数にはならない。単にテンプレートに入れれば良いだけかも。

podhmopodhmo

markdown全体を考えると無視する部分とかも用意したい? トップレベルの指定のようなものが定義できれば良いかも(デフォルトは #/

## タイトル

ここの文章がdescriptionに

```prompt
// 名前
name := 'foo'
content := undefined
-----
あなたは{{name}}さんとして議論に参加してください。

{{content}}

回答はコピペしやすいようにmarkdownのコードブロックで出力してください。
```

ここはどうしよう?

podhmopodhmo

1つのファイルで複数のプロンプト例を管理したい。

podhmopodhmo

実はコードブロックを利用することを考えるとバッククォートを4つにした方が良いかも?

podhmopodhmo

あるいはこういう感じで埋め込む? yaml headerのような形に合わせると厳しいんだろうか?

---
title: This is a test.
description: Once upon a time ...
---

# Title of my great post
Lorem ipsum dolor...
podhmopodhmo

実際のところmarkdownで攻めるなら表を使うべきかもしれない。

name value
name John Doe
description 人の名前
| name | value |
| :--- | :--- |
| name | John Doe |
| description | 人の名前 |
podhmopodhmo

対話

チャット用な形のものも擬似的に復元したいと思う。これはai studioからexportされるスクリプトを真似てやれば良い( 全部渡す)。

ポイントは以下2つ?

  • 複数のプロンプトをどう扱うか?
  • 応答を変数の中に閉じ込めることは可能か?
podhmopodhmo

複数のプロンプトは単にコードブロックが複数あるということで良いと思う。中間の文章などをどう扱うか?

ここはdescriptionで良いだろう

```prompt

```

ここの文章はどうする?( 2番目のプロンプトの説明?)
```prompt

```
ここは?

あと一つ目で使った変数をそのまま2つ目でも使えるべき?

podhmopodhmo

jinja2とかではだめなのか?という視点はある( テキストを生成するすることはできるがそれをどのように辿るかは明記されてない )

podhmopodhmo

変数定義部分の解析

こちらも使用を考えてみる

  • 変数定義をしたい
  • 複数行文字列をサポートしたい
  • 変数展開をサポートしたい
  • コメントをdescriptionとして利用したい
  • 細々とした要望
    • markdownのコードブロックを壊さない形式
    • 複数行文字列の中でJSONをエスケープ無しで記述したい

どのような値を保持したいか?

  • 名前
  • デフォルト値
  • description
  • required
podhmopodhmo

軽く考えたgrok

https://x.com/i/grok/share/X44Af70Mr19QwmuQSDwDchRci

以下のような感じで使う

// ユーザー名(デフォルト値)
name := 'foo'

// ユーザーID(必須)
user_id := undefined

// あいさつとJSONデータ
greeting := '''
こんにちは
{{name}} さん
ID: {{user_id}}
\{{\name}} はエスケープ
{"key": "value"}
'''

📝 undefined はrequiredを表す

podhmopodhmo

独特なこだわり。

  • MarkdownとJSONの文法と衝突しない(コードブロック```、見出し#、リスト-/、強調/_、リンク、水平線---、JSONの{}/:回避)。
  • シングルクォート('と''')でJSONリテラルを自然に埋め込める(ダブルクォート"と区別)。
  • JavaScriptのコード感を強調(//コメント、{{name}}展開、:=代入)。
  • 変数展開エスケープはバックスラッシュ({{name}})。
  • undefinedでテンプレートエンジンの必須項目を表現(デフォルト値は文字列)。
  • シンプルな文法(変数定義のみ、letなし)。
podhmopodhmo

日記

podhmopodhmo

grokに任せて作業をしてたのだけれど結局デバッグは自分でやってしまった。

podhmopodhmo

2025-04-29

パッケージ構成が悩ましい。すぐに./varlangディレクトリを切ってしまった。
あと、docsディレクトリを作り始めた。
実行可能なスクリプトを置いておく必要がある。いつもなら./commandsとかなのだけれど、denoで実行することを考えると./runとかのほうがきれいな気がした。試しに使ってみる。

何をmod.tsにおくかつまり何をexportしておくのかが曖昧かもしれない。あとクラス名が悩ましい。goっぽい規則でprefixをつけないわけじゃない気がする。

podhmopodhmo

2025-05-06

GWになにかするつもりだったけれど何も手がつけられなかった

podhmopodhmo

2025-05-07

少しだけ作業が進んだ。

  • プロンプトの定義を抽出する部分の処理を書いた
    • testを書いていない
    • 適用する処理がまだ
  • run/main.tsをmain.tsに移動してフラットなところにあったファイルをlib/に移動した
    • 💭prompt-libという名前は不適切かもしれない