🤖

TypeScriptでGPT-3.5を使ってChatGPTクローンを作る1 - GPTで検索エージェント

2023/01/16に公開

OpenAI が提供している ChatGPT は非常に面白いですね。今年以後、GPTやChatGPT周りがさらに流行ると思います。

この記事は、TypeScriptでChatGPTクローンを作る第一弾です。長くなりすぎるため、この記事では、GPTを使った検索エージェントを実行するまでを取り上げます。

検索エージェントは「ぼっち・ざ・ろっくの作者は?」と尋ねたら検索エンジンとGPTを使って「はまじあき」という結果を生成できる技術です。

またこの記事や、続く記事でLangChainのプロンプトをあれこれ読み解いていこうと考えています。

筆者は機械学習の初心者であるため、間違ったことが書かれている可能性があります。間違いがあった場合は、ぜひご指摘いただけると幸いです。

なお、この記事では添削にChatGPTおよびGPT-3.5を使っています[1]

どうやってTypeScriptでChatGPTクローンを作るのか?

ChatGPTのようなプログラムは機械学習による自然言語処理を行なっています。自然言語処理に限らず、ほとんどの機械学習はPython + Pytorch(or TensorFlow)で実装されていると思っていいでしょう(筆者が去年から今年にかけて遊んだものはだいたいpytorchだった)。

最近、ChatGPTクローンを作るためのOSSのライブラリであるLangChainが一部の人たちで大人気です。LangChainはプロンプトと呼ばれる文章を生成し、それを大規模言語モデル(以下LLMと呼ぶ)に入力してChatGPTのようなものを作ったりできるライブラリです。

筆者は去年末に 手軽に作れるChatGPTクローンと本家ChatGPTを対決させてみた – WirelessWire News という記事でLangChainの存在を知り、年始あたりから npakaさんの記事大規模言語モデルと外部リソースとを融合させたアプリケーションを作ろう-langchainのご紹介- - Qiita を読んだり、LangChain を動かしたり、コードリーディングしたりしています。

この記事でも npaka さんの記事を色々と参考にしています。

LangChainもPythonで書かれていますが、機械学習のコードとは異なりとてもシンプルでコードリーディングも楽です。

また、GPTはAPIとして提供されているため、Pythonを使わなくてもGPTの超強力な言語処理を使用することができます。

ここまでで想像がついたかもしれません。LangChainの処理は非常にシンプルであり、LLMもAPI経由なためPythonである必然性がなく、同じようなものを好きな言語で好きなように作成することができます。

そこで冒頭で述べた通り、TypeScriptでChatGPTクローンを作ります。LangChainクローンとも言えます。

さまざまな応用例が考えられるかなと思います。

Denoを使う

DenoはTypeScriptファーストです。またDeno自体がフォーマッター・リンター・テストランナーなどを実装してるため、色々なパッケージのインストールや設定ファイルを用意しなくても良いという利点があります。

npmパッケージが使用可能になったため Deno を使って Node でも Deno でも動くライブラリを作る - Qiita で紹介されているようなフローを採用すればDeno向けに書いたコードをNode.js向けにビルドすることもできます。

筆者はCLIツールならDenoを最初に検討すべきだと考えています。Deno自体がバンドラやバイナリコンパイラ[2]も持っているためCLIツールとしてもとても使いやすくなっています。

今年か来年には、サーバーやその他の業務でもDenoが広く使用できるようになると予想しています。

そのため、この記事ではTypeScript runtimeとしてDenoを使います。

LLMを使った自然言語処理

自然言語処理は長い歴史を持つジャンルですが、Googleの Transformer という仕組み、BERTという画期的な大規模言語モデル(LLM)が登場し、それらに刺激を受けた各社のLLMが競争を繰り広げ、急激に進化してきています。最近はOpenAIのGPTシリーズが色々な意味で話題になっています。

LLMやTransformerについて理解するには 作ってわかる!自然言語処理AI とか BERT/GPT-3/DALL-E 自然言語処理・画像処理・音声処理 人工知能プログラミング実践入門 あたりの本を読むと良さそうです。前者の本はTransformerの仕組みについての理解が深まりますし、後者の本は自然言語処理などについての概要を掴むのに良いと思います。

ChatGPTはGPTというLLMを使用しています。GPTは、Text Completionという非常に使いやすい機能を持っており、入力された文章に続く文字列を推測し、確率的に文章の自動生成を行えます。

LLMの中には、フリーで配布されているものもあります。それらは、十分な性能(グラフィックカード)があれば、ローカルで実行することもできます。ほとんどの場合はPythonで動作しますが、一部はRustなどでも動作します。

フリーで動作するLLMは秘密保持や費用削減などの観点で役立ちますが、筆者が rinna/japanese-gpt-1b · Hugging Faceabeja/gpt-neox-japanese-2.7b · Hugging Face などを試した限りでは、LangChainのプロンプトを処理できる性能(賢さ)はありませんでした。使い方次第では改善できるかもしれず、検証を続けようとは思っています。

とはいえ、近い将来には、GPTがなくてもローカルで動作するLLMで十分な性能を発揮するようになると思います。そうすれば、業務にも組み込みやすくなっているでしょう。

GPTは有料でAPIが提供されています。皆さんもChatGPTを楽しむためにアカウントを作成したかも知れませんが、その場合、最初の三ヶ月間に限り、無料のクレジット$18が付与されます。

GPTには、様々なタイプのモデルがあります。GPT-3やGPT-3.5などがあります。これらのモデルの違いについては OpenAI API で提供されている GPT-3モデル まとめ|npaka|note を読むとわかりやすいでしょう。

2023年1月現在、最もパワフルな GPT モデルのうちの一つである text-davinci-003 は、1000トークンあたり $0.02 の費用がかかります[3]

このトークンとは、LLMが処理するための最小の単位です。LLMは文字列をそのまま処理できないため、文字列をトークン(数字の配列)に変換するためにトークナイザを使用する必要があります。自然言語処理において、トークナイザは非常に重要な役割を担います。日本語においては、sentencepiece などが有名です。

GPTで使用されているトークンについては、Tokenizer に文字列を入力することで、トークン数を算出できます。日本語の場合は、大雑把に1文字1トークンと考えるといいでしょう。

GPTは、正確な文章を生成するために、足りるだけの文章や文脈を入力することが重要です。具体的には、入力文章に、質問やプロンプト、文章の一部などを提供することで、より質の高い文章を生成することができます。また、GPTは、学習済みのデータに基づいて文章を生成するため、特定のトピックやジャンルに関連する文章を入力することで、より適した文章を生成することができます。

https://beta.openai.com/examples には色々なプロンプトの例が載っています。以下に挙げるのはチャットボットのプロンプトです。

The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.

Human: Hello, who are you?
AI: I am an AI created by OpenAI. How can I help you today?
Human: I'd like to cancel my subscription.
AI:

一般的に英語のプロンプトでは性能が良いですが、各言語によっては性能に違いがあります。英語のプロンプトを入力すると、GPTは英語の回答を生成する可能性が高まりますので、日本語を使うために色々な工夫が必要かもしれません。

GPT3を使う

GPT APIを使うためのnpmパッケージはいくつかありますが、OpenAI公式が出しているopenaiパッケージをおすすめします。

また、APIキーが必要となるため、Deno の標準ライブラリで対応している dotenv を使って環境変数として読み込むようにしましょう。

OpenAIにログインして、アイコンをクリックし、メニューから「View API keys」を選択し、API Keyを作成しましょう。それを .env ファイルに記述して、OPENAI_API_KEY=xxxxxxx のように保存しましょう。

import "https://deno.land/std@0.171.0/dotenv/load.ts";
import { Configuration, OpenAIApi } from "npm:openai";

const apiKey = Deno.env.get("OPENAI_API_KEY")!;
const configuration = new Configuration({ apiKey });
const openai = new OpenAIApi(configuration);

const message = "ラーメンは健康にいい食べ物ですよね";
const prompt = `The following is a conversation with an AI assistant. The assistant is helpful, creative, clever.\nHuman: ${message}\nAI: `;

const gptResponse = await openai.createCompletion({
  model: "text-davinci-003",
  prompt,
  max_tokens: 256,
});

console.log(gptResponse.data);

というコードを書いて gpt.ts というファイルに保存して実行してみましょう。

deno run --allow-net --allow-env --allow-read gpt.ts

APIキーが正しくて、OpenAI GPT APIが落ちてなければ結果が帰ってくるはずです。

{
  id: "xxxxxx",
  object: "text_completion",
  created: 1673436899,
  model: "text-davinci-003",
  choices: [
    {
      text: "ラーメンは、肉類や野菜など素材が多様なため、栄養の健康維持には大変有益です。ただし、かなり油っぽく、塩分も多いなどの注意も必要です。",
      index: 0,
      logprobs: null,
      finish_reason: "stop"
    }
  ],
  usage: { prompt_tokens: 53, completion_tokens: 106, total_tokens: 159 }
}

「ラーメンは健康にいい食べ物ですよね」と投げたら「ラーメンは、肉類や野菜など素材が多様なため、栄養の健康維持には大変有益です。ただし、かなり油っぽく、塩分も多いなどの注意も必要です。」と帰ってきます。素晴らしい会話能力だと思いませんか?[4]

The following is a conversation with an AI assistant. The assistant is helpful, creative, clever.\nHuman: ${message}\nAI: という文字列は先ほども出てきたプロンプトです。

今回は省略していますが、Human: xxxxx\nAI: xxxxxx\n のように会話の履歴を差し込むことで、文脈に沿った文章を生成できます。ChatGPTでも会話の流れを記憶してるかのように振る舞いますよね。

利用料金は、使用量によって異なりますが、個人で遊ぶ程度であれば、非常に安く済むでしょう。筆者は1月に入ってから結構遊んでいますが$1にも満たないです。

検索できるエージェントを作る

今のところGPTのモデル学習には莫大なお金と時間がかかるため、リアルタイムな話題には追従できないという問題があります。2023年1月現在提供されているChatGPTおよびGPTは2021年時点での学習データをもとにしているため、2022年以降の最新情報には対応できません。

それに対処するために、検索エンジンを使うというアイデアがあります[5]

さて、冒頭で紹介したLangChainの登場です。

LangChainでは エージェント と呼ばれるコードがLLMに入力するプロンプトを生成します。この時、使用可能なツールをプロンプトで列挙します。このようなツールの中にはGoogle検索などがあります。

これを行うプロンプトは

const question = "ぼっち・ざ・ろっくの作者の名前";

const prompt = `Answer the following questions as best you can. You have access to the following tools:

Google Search: A wrapper around Google Search. Useful for when you need to answer questions about current events. Input should be a search query.

Use the following format:

Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [Google Search]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question

Begin!

Question: ${question}
Thought:`

です。これは実際に LangChain で使われているものと同じものです。

Use the following format: で例示してる書式に従ってくれるなら Observation: もしくは Final Answer: が帰ってくるまで GPT API を叩き続ければ良いはずです。

const gptResponse = await openai.createCompletion({
  model: "text-davinci-003",
  prompt,
  temperature: 0.6,
  max_tokens: 256,
  stop: ["Observation: "],
})

temperature はランダム度とかそんな感じのパラメータです。 max_tokens は生成される最大トークン数です。 stop は対象の文字列が生成されたらそこで終わりにするというものです。

参考: GPTのtemperatureとは何なのか - Qiita

他にも色々とパラメータがあり、このパラメータ指定によって生成される文章が大きく影響を受けるので色々と実験してみるといいでしょう。

 作者の名前を探す必要がある
Action: Google Search
Action Input: "ぼっち・ざ・ろっくの作者"

さて、結果の文章はこれです。 Thought: の続きとして生成されているので、例文で示されてる書式に沿って文章が生成されていることがわかります。

今回は、与えられたツールがGoogle検索だけなので、当たり前のように見えるかもしれませんが、LLMが書式を推論し、それに沿って文章を生成するためには、LLMの性能が大きく影響します。残念ながら、フリーで公開されているGPT-2相当のモデルでは、このような綺麗な文章を生成することはできないようです。

さて、プロンプトに沿って Question/Tought/Action/Action Input と言う工程を経て、「ぼっち・ざ・ろっくの作者」のキーワードで Google Search をしたいと言い出したので、Google検索をもとに Observation: を生成してあげましょう。

このような思考の筋道を立てるようなプロンプトに興味がある人は Chain of Thought とか 自問自答することで正解を導きだすAI!Self-ask とか REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS とか MRKL Systems とかを読むと良いでしょう。

LangChainのエージェントでは MRKL, ReAct, Self Ask With Search などが実装されています。難しいコードではないので、ぜひコードリーディングをしたり、実際に動かしてみて、プロンプトを研究してみてください。[6]

どれも基本的には、筋道立てて思考をトレースさせるためのプロンプトとして使われていますが、例を与えたり、いろいろな工夫を施していて面白くなっています。ChatGPTも同様のテクニックを使っていると推測されます。

今回筆者が使ったプロンプトは MRKL です。

Google カスタム検索API

Google Custome Search API を使えば、Google 検索を API で叩くことができます。詳しい手順は、LangChain の Googleカスタム検索 連携を試す|npaka|note を参照してください。検索エンジンID と API キーを取得できればOKです。

.env にAPIキーを GOOGLE_API_KEY=xxxx として設定して、同様に検索エンジンIDを GOOGLE_CSE_ID=xxxx で設定します。

公式が出しているnpmとして @googleapis/customsearch パッケージがありますが、使い方に関して情報が少なく、Weekly Downloadsも少ないので不安が残ります。もっといいライブラリをご存知の方教えていただけると幸いです。

import "https://deno.land/std@0.171.0/dotenv/load.ts";
import { customsearch_v1 } from "npm:@googleapis/customsearch";

const apiKey = Deno.env.get("GOOGLE_API_KEY")!;
const engineId = Deno.env.get("GOOGLE_CSE_ID")!;

const customSearch = new customsearch_v1.Customsearch({
  auth: apiKey,
});

const search = async (query: string) => {
  const res = await customSearch.cse.list({
    cx: engineId,
    q: query,
  });
  return res.data.items?.reduce((prev, item) => {
    if (item.snippet) {
      return prev + item.snippet;
    } else {
      return prev;
    }
  }, "");
};

const res = await search("ぼっち・ざ・ろっくの作者");
console.log(res);

さて、これを実行すると以下のようになります。

まんがタイムきららMAXで『ぼっち・ざ・ろっく!』載せてもらってます ⑤巻発売中。アニメ2022年10~12月放送してました。バンド大好き!アニメ公式.『ぼっち・ざ・ろっく!』(BOCCHI THE ROCK!)は、はまじあきによる日本の4コマ漫画。『まんがタイムきららMAX』(芳文社)にて、2018年2月号から4月号までゲスト連載 ...Feb 27, 2019 ... ぼっち×女子高生×バンドという異色の組み合わせが話題の『ぼっち・ざ・ろっく!』。作者・はまじあき先生の、ロックすぎるインタビューをお届けし ...Nov 29, 2022 ... その筆頭といえるのが、アニメが今期最大級の注目作となっている『ぼっち・ざ・ろっく』の作者、はまじあきであろう。もともとはまじは「ちゃお」で ...スタッフ ; 原作:はまじあき ; 監督:斎藤圭一郎 ; シリーズ構成・脚本:吉田恵里香 ; キャラクターデザイン・総作画監督:けろりら ; ライブディレクター:川上雄介 ...Dec 31, 2022 ... 今期のアニメーション界の話題を席巻する作品になった、はまじあきの4コマ漫画『ぼっち・ざ・ろっく!』。 ... 「陰キャならロックをやれ!」という ...【LIVE映像】結束バンド「星座になれたら」LIVE at 秀華祭/ 「ぼっち・ざ・ろっく!」劇中曲 · アニプレックス チャンネル. アニプレックス チャンネル.Dec 30, 2022 ... 同人誌即売会「コミックマーケット101」(C101)が東京ビッグサイトで開催。1日目となる12月30日に、人気アニメ「ぼっち・ざ・ろっく!Oct 27, 2022 ... はまじあき「ぼっち・ざ・ろっく!」を題材にした「ぼっち・ざ・ろっく!アンソロジーコミック」第1弾が、本日10月27日に芳文社から発売された。Dec 31, 2022 ... 『ぼっち・ざ・ろっく!』作者・はまじあきインタビュー「 ぼっちちゃんの性格は、私自身の投影です(笑)」 ... 『ぼっち・ざ・ろっく!』は秀逸なセリフ、 ...

Google検索ができたので、先ほどのGPTのプロンプトに手動でここまで得られた結果を追加した上で、GPT APIを再度投げてみましょう。

const question = "ぼっち・ざ・ろっくの作者の名前";

const prompt = `Answer the following questions as best you can. You have access to the following tools:

Google Search: A wrapper around Google Search. Useful for when you need to answer questions about current events. Input should be a search query.

Use the following format:

Question: the input question you must answer
Thought: you should always think about what to do\nAction: the action to take, should be one of [Google Search]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question

Begin!

Question: ${question}
Thought: 作者の名前を探す必要がある
Action: Google Search
Action Input: "ぼっち・ざ・ろっくの作者"
Observation: まんがタイムきららMAXで『ぼっち・ざ・ろっく!』載せてもらってます ⑤巻発売中。アニメ2022年10~12月放送してました。バンド大好き!アニメ公式.『ぼっち・ざ・ろっく!』(BOCCHI THE ROCK!)は、はまじあきによる日本の4コマ漫画。『まんがタイムきららMAX』(芳文社)にて、2018年2月号から4月号までゲスト連載 ...Feb 27, 2019 ... ぼっち×女子高生×バンドという異色の組み合わせが話題の『ぼっち・ざ・ろっく!』。作者・はまじあき先生の、ロックすぎるインタビューをお届けし ...Nov 29, 2022 ... その筆頭といえるのが、アニメが今期最大級の注目作となっている『ぼっち・ざ・ろっく』の作者、はまじあきであろう。もともとはまじは「ちゃお」で ...スタッフ ; 原作:はまじあき ; 監督:斎藤圭一郎 ; シリーズ構成・脚本:吉田恵里香 ; キャラクターデザイン・総作画監督:けろりら ; ライブディレクター:川上雄介 ...Dec 31, 2022 ... 今期のアニメーション界の話題を席巻する作品になった、はまじあきの4コマ漫画『ぼっち・ざ・ろっく!』。 ... 「陰キャならロックをやれ!」という ...【LIVE映像】結束バンド「星座になれたら」LIVE at 秀華祭/ 「ぼっち・ざ・ろっく!」劇中曲 · アニプレックス チャンネル. アニプレックス チャンネル.Dec 30, 2022 ... 同人誌即売会「コミックマーケット101」(C101)が東京ビッグサイトで開催。1日目となる12月30日に、人気アニメ「ぼっち・ざ・ろっく!Oct 27, 2022 ... はまじあき「ぼっち・ざ・ろっく!」を題材にした「ぼっち・ざ・ろっく!アンソロジーコミック」第1弾が、本日10月27日に芳文社から発売された。Dec 31, 2022 ... 『ぼっち・ざ・ろっく!』作者・はまじあきインタビュー「 ぼっちちゃんの性格は、私自身の投影です(笑)」 ... 『ぼっち・ざ・ろっく!』は秀逸なセリフ、 ...
`;

このプロンプトを投げると次のような結果が帰ってきます。

{
  id: "xxxxxx",
  object: "text_completion",
  created: 1673775964,
  model: "text-davinci-003",
  choices: [
    {
      text: "Thought: はまじあきが作者であることが分かった\nFinal Answer: はまじあき",
      index: 0,
      logprobs: null,
      finish_reason: "stop"
    }
  ],
  usage: { prompt_tokens: 1267, completion_tokens: 35, total_tokens: 1302 }
}

Final Answer: はまじあき を得られました。素晴らしいですね。

GPT APIを投げるソースの最終形

import "https://deno.land/std@0.171.0/dotenv/load.ts";
import { Configuration, OpenAIApi } from "npm:openai";

const apiKey = Deno.env.get("OPENAI_API_KEY")!;
const configuration = new Configuration({ apiKey });
const openai = new OpenAIApi(configuration);

const question = "ぼっち・ざ・ろっくの作者の名前";

const prompt = `Answer the following questions as best you can. You have access to the following tools:

Google Search: A wrapper around Google Search. Useful for when you need to answer questions about current events. Input should be a search query.

Use the following format:

Question: the input question you must answer
Thought: you should always think about what to do\nAction: the action to take, should be one of [Google Search]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question

Begin!

Question: ${question}
Thought: 作者の名前を探す必要がある
Action: Google Search
Action Input: "ぼっち・ざ・ろっくの作者"
Observation: まんがタイムきららMAXで『ぼっち・ざ・ろっく!』載せてもらってます ⑤巻発売中。アニメ2022年10~12月放送してました。バンド大好き!アニメ公式.『ぼっち・ざ・ろっく!』(BOCCHI THE ROCK!)は、はまじあきによる日本の4コマ漫画。『まんがタイムきららMAX』(芳文社)にて、2018年2月号から4月号までゲスト連載 ...Feb 27, 2019 ... ぼっち×女子高生×バンドという異色の組み合わせが話題の『ぼっち・ざ・ろっく!』。作者・はまじあき先生の、ロックすぎるインタビューをお届けし ...Nov 29, 2022 ... その筆頭といえるのが、アニメが今期最大級の注目作となっている『ぼっち・ざ・ろっく』の作者、はまじあきであろう。もともとはまじは「ちゃお」で ...スタッフ ; 原作:はまじあき ; 監督:斎藤圭一郎 ; シリーズ構成・脚本:吉田恵里香 ; キャラクターデザイン・総作画監督:けろりら ; ライブディレクター:川上雄介 ...Dec 31, 2022 ... 今期のアニメーション界の話題を席巻する作品になった、はまじあきの4コマ漫画『ぼっち・ざ・ろっく!』。 ... 「陰キャならロックをやれ!」という ...【LIVE映像】結束バンド「星座になれたら」LIVE at 秀華祭/ 「ぼっち・ざ・ろっく!」劇中曲 · アニプレックス チャンネル. アニプレックス チャンネル.Dec 30, 2022 ... 同人誌即売会「コミックマーケット101」(C101)が東京ビッグサイトで開催。1日目となる12月30日に、人気アニメ「ぼっち・ざ・ろっく!Oct 27, 2022 ... はまじあき「ぼっち・ざ・ろっく!」を題材にした「ぼっち・ざ・ろっく!アンソロジーコミック」第1弾が、本日10月27日に芳文社から発売された。Dec 31, 2022 ... 『ぼっち・ざ・ろっく!』作者・はまじあきインタビュー「 ぼっちちゃんの性格は、私自身の投影です(笑)」 ... 『ぼっち・ざ・ろっく!』は秀逸なセリフ、 ...
`;

const gptResponse = await openai.createCompletion({
  model: "text-davinci-003",
  prompt,
  temperature: 0.6,
  max_tokens: 256,
  stop: ["Observation: "],
});

console.log(gptResponse.data);

最終的な答えを得るために使ったプロンプトを埋め込んでいます。

注意点

ちゃんとしたアプリを作る場合、動的にプロンプトを組み立てる必要があります。その方法については、次の記事で詳しく書く予定です。

また、この方法ではプロンプトインジェクションとでも言うべき脆弱性のようなものがあります。例えば questionぼっち・ざ・ろっくの作者の名前\nThought: ドラえもんの作者の名前を検索する\n を入力すると、答えがすり替わりますし ActionAction Input も同様に入力できてしまいます。

LangChainには、Python REPLやshellを叩くツールが用意されているため、これらを組み込んでいる場合、チャットに入力した文字列によってシステムを壊してしまう可能性があります。

自分や内輪だけで使う場合は問題ないと思いますが、実際のサービスを提供する場合は、そういったプロンプトに対する攻撃にも対処する必要があるでしょう。

また、LLMが生成する文字列によって制御が変わることで、永久ループに陥る可能性もあります。LLMはパラメータ次第ですが、ランダムに生成結果が変わるため、再現性が低いバグに遭遇する可能性もあります。

というか、実は筆者が実験していてランダムに失敗することもありました。検索の仕方なんかももうちょっと工夫が必要かもしれません。結果が英語になることもありますし、なぜか何回も同じ内容について繰り返し検索しようとすることもあります。

次の記事

次の記事では MRKL 以外を試したり、アプリとして成立するようなエージェントを作る予定です。今回記事の校正で使ったプロンプト(というほどのものでもない)なんかも記事にしてもいいかなと思っています。

脚注
  1. 途中までChatGPTを使ってたけど安定しないのでGPTで専用のプロンプトを書いた ↩︎

  2. deno compile hoge.ts で Mac/Linux/Windows の実行ファイルを生成できます。 ↩︎

  3. なお、今回の記事の内容は text-davinci-003 以外のモデルでは動作しないと思います。 ↩︎

  4. ちなみに「いいえ、ラーメンは不健康な食べ物です」と塩対応されることも多いです。 ↩︎

  5. ChatGPT様にご指摘いただきましたが「信頼性や正確性は保証されないため、時事ネタに対応する際は、検索結果だけではなく、信頼できる情報源から確認することが望ましいです。」だそうです。 ↩︎

  6. TypeScript使いには、多分馴染み深いウェブGUIライブラリのReactとは無関係です・・・。名前空間とかググラビリティとか・・・。 ↩︎

Discussion