ChatGPTにパーザーを書かせるのではなく、パーザーになって貰おう

(更新

Instead of having ChatGPT write a parser, let’s have it become a parser.

相模原市で IoT 設計を受託しているファームロジックスです。

前回、ChatGPT に Python を使って簡単なテキストパーザーを書いて貰うという記事を書かせて頂きました。その後ふと思ったのですが、大規模言語モデル(LLM)である GPT 自身にパーザーになって貰ったら良いのではないか、というアイデアを思いつきました。

もちろん、前者では API 利用料はかかりませんが、後者では、OpenAI の API を呼び出す際に従量制の料金がかかるという難点はありますが、後者のほうが、LLM には得意な仕事なのではないでしょうか。

早速やってみましょう。最初の指示は、前回の内容を踏襲していますが、パーザーを書くのはなく、パーザーとして振る舞うように依頼しています。


:

これから毎回、私が1行ずつのテキストを入力します。そうしたら、あなたは簡単な計算をして、人間が読むための小さなレポートを返してください。

  • テキスト入力は、ある農家が、1日の間に畑に灌水した時刻と灌水した水の量(リットル)を、時刻順に(古い時刻から新しい時刻の順で)記述したものです。
  • テキスト入力の最初には読み飛ばすべき余分なテキストがあるかも知れません。(余分なテキストがない場合もあります。)これについては、後で説明します。
  • 余分なテキストを読み飛ばした後の残りは、コンマ(,)で区切られた複数のタプルから構成されます。つまり、テキスト全体は次のような形です。

余分なテキスト タプル1, タプル2, …, タプルN

  • なお、タプルNの後ろに余分なコンマがある場合には破棄してください。
  • タプル間のコンマの後ろには、0文字以上のスペース( )がある場合があります。
  • それぞれのタプルは、次のように構成されます。

灌水した時刻 水の量(リットル)

  • 灌水した時刻は簡単に記述すため、コロン(:)は無く、通常は と続けて記述されます。ただし、入力の誤りでコロンが入る場合もあります。そのときは、コロンの位置に関わりなく、強制的に削除してくだし。
  • 灌水した時刻の末尾には、クエスチョンマーク(?)が来る場合があります。これは、時刻が曖昧で、「何時何分頃」という意味です。
  • 灌水した時刻は、ただクエスチョンマークだけであることがあります。これは、時刻がまったく不明である、という意味です。
  • 結果として、灌水した時刻の例は、以下のようになります。
    • 1234
      これは、12:34という意味です。
    • 13:22?
      これは、12:22頃という意味です。
    • 930
      これは、09:30という意味です。
    • ?
      これは不明という意味です。
  • 灌水量(リットル)は、整数(int)か、あるいは小数点以下1桁までのfloatです。トーラルの灌水量の表示ですが、末尾が「.0」になる場合は、それを除去してください。

次に、テスト用の入力(私が入力します)と、期待すべき返答(あなたの返答です)の例をいくつか示します。テストケースとして使ってください。

入力1:

[suzuki] 0630 36, 1118 20, 1722 18

期待すべき出力:

  • 最初の灌水: 06:30
  • 最後の灌水: 17:22
  • トータルの灌水量: 74リットル

入力2:

tanaka 0820? 22, 1644 40, ? 23.5

期待すべき出力:

  • 最初の灌水: 08:20頃
  • 最後の灌水: 不明
  • トータルの灌水量: 85.5リットル

入力3:

? 69, 1725 33

期待すべき出力:

  • 最初の灌水: 不明
  • 最後の灌水: 17:25
  • トータルの灌水量: 102リットル

入力4:

[yoshida] 0633 64, ? 22, ? 50, 1700? 53

期待すべき出力:

  • 最初の灌水: 06:33
  • 最後の灌水: 17:00頃
  • トータルの灌水量: 189リットル

入力5:

kimura ? 11, ? 22

期待すべき出力:

  • 最初の灌水: 不明
  • 最後の灌水: 不明
  • トータルの灌水量: 33リットル

入力6:

[sakamoto] 13:11? 80.3

期待すべき出力:

  • 最初の灌水: 13:11頃
  • 最後の灌水: 13:11頃
  • トータルの灌水量: 80.3リットル

それでは以下、実際の入力に対して、毎回、期待すべき出力を返してください。

ChatGPT:

もちろん、指示通りに進めましょう。実際の入力をお待ちしています。


:

  • yoshida 0633 10, ? 22.3, ? 50, 1700? 0

ChatGPT:

指定された入力に基づいて、以下の結果を提供します。

  • 最初の灌水: 06:33
  • 最後の灌水: 17:00頃
  • トータルの灌水量: 82.3リットル

:

  • tanaka 0630 36, 1118 20, 1722 18

ChatGPT:

指定された入力に基づいて、以下の結果を提供します。

  • 最初の灌水: 06:30
  • 最後の灌水: 17:22
  • トータルの灌水量: 74リットル

:

  • 0900 11, ? 22, 1800 11.1

ChatGPT:

指定された入力に基づいて、以下の結果を提供します。

  • 最初の灌水: 09:00
  • 最後の灌水: 18:00
  • トータルの灌水量: 44.1リットル

:

  • 「指定された入力に基づいて、以下の結果を提供します。」は不要です。これからはレポートのみください。

ChatGPT:

了解しました。

  • 最初の灌水: 09:00
  • 最後の灌水: 18:00
  • トータルの灌水量: 44.1リットル

:

  • [user] 1200 20, 1500 30

ChatGPT:

  • 最初の灌水: 12:00
  • 最後の灌水: 15:00
  • トータルの灌水量: 50リットル

:

  • yoshida 633 64, ? 22.3, ? 50, 1700? 53

ChatGPT:

  • 最初の灌水: 06:33
  • 最後の灌水: 17:00頃
  • トータルの灌水量: 189.3リットル

期待通りに働いてくれました!

今回のバージョンでは、時刻の指示に「633」という入力をし、06:33と解釈されることも確認できました。

最後に ChatGPT セッションへのリンクを示させて頂きます。

今後も、オープンソースと AI を活用し、中小企業の経営者様やソフトウェア技術者様を、ファームロジックスがサポートさせて頂きたいと考えております。

お問い合わせはお気軽に!

お問い合わせを頂いた後、継続して営業活動をしたり、ニュースレター等をお送りしたりすることはございません。
御返答は 24時間以内(営業時間中)とさせて頂いております。必ず返信致しますが、時々アドレス誤りと思われる返信エラーがございます。返答が届かない場合、大変お手数ではございますが別のメールアドレスで督促頂けますと幸いです。