yytypescript / book

TypeScriptの入門書『サバイバルTypeScript』
https://typescriptbook.jp
946 stars 103 forks source link

ChatGPTを用いてTypeScriptの質問ができるチャットボットを作りませんか? #732

Closed suin closed 6 months ago

suin commented 1 year ago

どうやってGPTにサバイバルTypeScriptのコンテンツを参照させたらいいか?

GPT搭載のチャットボットSaaSでも可

suin commented 1 year ago

着手可になるまでに必要なこと

t-yng commented 1 year ago

試しに調査してプロトタイプ作ってみます。🙌🏻

hayashi-ay commented 1 year ago

MDNのAI Help機能の仕組みが参考になりそう。 すべての記事に対して生成したembeddingsをSupabaseでホストしているPostgreSQLに格納していて、質問に関連した記事を取得してくる。その次に、OpenAIのAPIを叩いて最終的な回答を取得する。

https://developer.mozilla.org/en-US/blog/introducing-ai-help/#under_the_hood

hayashi-ay commented 1 year ago

一方でコンテンツの出し方およびクオリティに問題があるとAI Explain機能みたいにぷち炎上しそう。

https://developer.mozilla.org/en-US/blog/ai-explain-postmortem/

suin commented 1 year ago

参考情報ありがとうございます!読んでみます!

t-yng commented 1 year ago

試しにサンプルコードを使って「読んで学ぶTypeScript > 文」の記事を対象にBOTを構築してみました。 https://github.com/yytypescript/chat-bot

質問:

unkown型とany型の違いを教えてください。

回答:

unknown型とany型の違いは、以下の点です。

1. 代入の制約: any型はどのような型の変数にも代入できますが、unknown型の値は具体的な型への代入ができません。具体的な型が不明な場合に使用されます。

2. 型安全性: unknown型は型安全なany型とも言われます。unknown型の値は、具体的な型が不明なため、そのままではプロパティへのアクセスやメソッドの呼び出しができません。一方、any型は型安全性が低く、どのような操作でも許可されます。

3. プロパティへのアクセスとメソッドの呼び出し: unknown型の値は、プロパティへのアクセスやメソッドの呼び出しも許されません。一方、any型ではこれらの操作が許可されます。

unknown型は、具体的な型が不明な場合に使用され、型安全性を保つための制約があります。一方、any型は型安全性が低く、どのような操作でも許可されるため、注意が必要です。
suin commented 1 year ago

TypeScriptコアチームからこんなのも出てる!

https://microsoft.github.io/TypeChat/

t-yng commented 7 months ago

こちら、GPTsを使って改めて色々と実験しています。🤖

それっぽい回答は得られているのですが、参考情報のURLを提供させるといくつか課題がある状態です。

現状の課題

プロンプト

あなたはTypeScriptに関する質問を回答するエージェントです。

質問者のTypeScriptに関する質問に対して、docs.csvに含まれるデータに基づいて回答をしてください。

また、回答の最後にdocs.csvに含まれるデータに基づいて、質問に関連するページURLとタイトルを追記してください。URLは絶対に推測しないでください。

## URL表示について
・URLはMakrdown形式を使用せずに、タイトルとハイパーリンクを直接表示してください。

## docs.csvについて
docs.csvはサバイバルTypeScriptと呼ばれるOSSのドキュメントの情報をページごとにまとめたCSVファイルです。
・url: ページのURL
・title: ページのタイトル
・content: ページの本文

実行結果

image

t-yng commented 7 months ago

GPTs作ってみました。🤖

↓限定リンク https://chat.openai.com/g/g-EzVTRSzR7-sabaibarutypescript

image

t-yng commented 7 months ago

GPTsとして公開されたので、このISSUEはクローズにします。🙌🏻 https://chat.openai.com/g/g-EzVTRSzR7-sabaibarutypescript image

suin commented 7 months ago

すごい! image

hayashi-ay commented 7 months ago

ChatGPT Plusでないと使えないんですね 😢

image
suin commented 7 months ago

URLがハルシネーション起こしてしまう問題に気づきました。致し方ないかもですが🥹

CleanShot 2024-03-08 at 20 34 59 png CleanShot 2024-03-08 at 20 36 15 png

t-yng commented 7 months ago

@hayashi-ay そうなんですよね。。。😭

現状、GPTsが有料プラン限定なので、全員に広く使ってもらおうとすると自前でインターフェース用意してAPI経由で機能を提供する必要がありますね

suin commented 7 months ago

一旦公開して、次のステップでAPI経由にしても良さそうですね

t-yng commented 6 months ago

URLのハルシネーション問題は、厳密に文脈データに基づいて回答するようにプロンプトを調整したら、発生確率は減らせるのですが、その分関連情報を見つけれないと言われる可能性が高くなってしまうので、精度のトレードオフはありました🙋🏻‍♂️

プロンプト改善は別途ISSUEとして改善していきたいですね❤️

プロンプトの例

質問者のTypeScriptに関する質問に対して、docs.jsonに含まれるデータに基づいて回答をしてください。

また、質問に関連するページの情報のurlとtitleを、docs.jsonに基づいて追記してください。urlはdocs.jsonに含まれるものだけを使用してください。

image