👋

ChatGPT-4への指示にJavaScriptを使う 【プロンプト付き】

2023/03/19に公開

ChatGPT-4は自然言語とプログラミング言語を区別していないのでは?

前回「ChatGPT-4でVSCode Extensionを作る」という記事を書きました。
https://zenn.dev/u_motion_tech/articles/51ea32e5d43d6e

ChatGPT-4との対話で実際に動作するVSCode Extensionを開発したのですが、この作業をする中で「ひょっとして、ChatGPT-4は自然言語とプログラミング言語を区別していないのでは?」という仮説を持ちました。

ChatGPTは自然言語でのやりとりにおいて言語の違いを区別しておらず、日本語のやりとりに突然英語での質問を混ぜても自然にやりとりを継続します。実はプログラミング言語も英語や日本語などと同列に扱われているのではないかと感じたのです。

JavaScriptでChatGPTに指示できる?

これが正しければ、ChatGPTに例えばJavaScriptで指示を出すことができるようになります。
早速検証してみたところ、やはりというか驚くべき結果になりました。

使用したプロンプト

下記の【JavaScriptコード】に示すmarkdownToMermaidを使って【入力】のmarkdownをMermaid.jsのコードに変換してください

【入力】
# ChatGPT 株式会社
## 開発部門
### バックエンド開発部
#### DB 開発部
##### SQL デザイン課
###### メンバー
- エンジニア一号
- エンジニア二号
##### Index せってい課
###### メンバー
- エンジニア三号
- エンジニア四号
#### サーバ開発部
- エンジニア五号
- エンジニア六号
#### SRE 部
### フロントエンド開発部
## 営業部門
### 第一営業部
### 第二営業部

【JavaScriptコード】
function markdownToMermaid(markdown) {
  const lines = markdown.split('\n');
  let mermaidCode = 'graph TD\n';
  const idCounter = {};
  const parents = [];
  let inList = false;

  lines.forEach(line => {
    const headingLevel = line.match(/^#+/)?.[0]?.length;
    if (!headingLevel) {
      if (line.startsWith('-')) {
        const name = line.slice(1).trim();
        const englishName = name.replace(/[^a-zA-Z0-9]/g, '');
        idCounter[englishName] = (idCounter[englishName] || 0) + 1;
        const id = `${englishName}_${idCounter[englishName]}`;
        const parentId = parents[parents.length - 1];

        mermaidCode += `  ${id}("${name}")\n`;
        mermaidCode += `  ${parentId} --> ${id}\n`;
        inList = true;
      }
      return;
    }

    if (inList) {
      parents.pop();
      inList = false;
    }

    const name = line.slice(headingLevel + 1).trim();
    const englishName = name.replace(/[^a-zA-Z0-9]/g, '');
    idCounter[englishName] = (idCounter[englishName] || 0) + 1;
    const id = `${englishName}_${idCounter[englishName]}`;

    mermaidCode += `  ${id}("${name}")\n`;
    if (headingLevel > 1) {
      const parentId = parents[headingLevel - 2];
      mermaidCode += `  ${parentId} --> ${id}\n`;
    }
    parents[headingLevel - 1] = id;
  });

  return mermaidCode;
}

結果

先程のプロンプトを入力すると、こんなレスポンスが返ってきました。

あれ?結局コードを出力するだけかな?と思いましたが、その後にちゃんと「結果」も出力されました。


ChatGPT-4にはJavaScriptインタプリタの機能はないはずですが、きちんと実行結果も出力されました。
この結果をMermaid.jsでレンダリングすると、こうなります(Zennに直接Mermaid.jsのコードを貼り付けています)。

ChatGPT-4の指示にプログラミング言語を混ぜても、ちゃんと理解する

「プロンプト・エンジニアリング」が盛んに研究された結果、指示内容が高度化してもはやプログラミング言語のような手法も使われるようになってきています。
そんな中で既存の「JavaScript」などのプログラミング言語が、ライブラリ的に指示に使えることが分かってきました。

今後は「ChatGPT-4向け」のパッケージ・モジュールが開発されて行くのではないでしょうか?

エンジニアにとっても、使い慣れた言語で指示を出せることや、ループなど複雑な指示をよりそれに特化したフォーマットで指示できることは、朗報と言えるのではないでしょうか。

おまけ

入力をアップデート

入力の内容を変えてもちゃんと動作するでしょうか?

出力されたMermaid.jsのコードはこちらです。

自然言語でエンティティの移動を指示

自然言語でエンティティを追加

お約束なので削除も

ツリーの一部を削除したのですが、削除された「indexせってい課」に所属していたメンバーも一緒に削除されています。

Discussion