🚀

営業職が Teams Bot を半日で作れたので、プログラミング初心者の ChatGPT の頼り方を考えてみた

2023/04/09に公開

はじめに

未経験のC# を使って、(自分的には)爆速で ChatGPT と連携する Teams Bot を開発できたので、その過程でどのように ChatGPT を頼ったかをまとめてみる。結論を先に述べてしまうと、初学者がつまづきやすい環境構築やデバッグ作業がめちゃめちゃ楽になった。僕は何度もプログラミングを学ぼうとして挫折をしてきたので、過去プログラミングに挫折した人に届けば嬉しい。

筆者のスペック

  • クラウド営業
  • 実務でのプログラミング経験なし
  • HTML/CSS/Javascript は Progate の中級コースまで一通りやっている
  • Solidity は過去ハッカソンに出場したことがある
  • 仕事柄、一般的なネットワーク基礎やインフラ基礎の本は読んでいる。「なぜネットワークはつながるのか」など
  • ChatGPT を課金している(筆者最大のスペック)

*なお、このブログに登場する GPTさんは GPT-4 を指している

作った Bot の概要

シンプルにブラウザ遷移が面倒なので、会社の Teams から Bot として ChatGPT と直接話せたらいいな、と思って作り始めた。Slackでも同じようなことができそうだったし、Microsoft 公式から Teams チャネルとのつなげ方も出ていたので、Bot でもできるだろうと軽い気持ちで手を動かした。

使ったもの

  • Bot Framework Composer(Microsoft Bot Framework ベースのボットアプリケーションを GUI で開発できるツール)
  • Microsoft Azure
  • Microsoft Teams

やったこと

  1. OpenAPI と連携した Bot を開発する
  2. BotをAzureにホストする
  3. Bot を Teams に繋げる


結構便利だ

Microsoft 製品の連携が凄く、2,3 はGPTさんに頼らずともワンクリックで実現できたので、主に 1 についてどう ChatGPT を頼ったかを記していく。

「何からググれば良いのかわからない」を解決してくれる

プログラミング初学者の辛いところはフレームワークや開発手法を知らないので、何から始めたらよいのかわからないことだ。たまたま似たような実装をネットで発見できればラッキーだが、それを判別する能力がない場合もある。 我々初学者はまずふんわりとでも良いので、GPTさんにやりたいことをとりあえず投げてしまうがいいと思う。

上述の「やったこと」と一丁前に書いた項目は ChatGPT が教えてくれたものだ。全て鵜呑みにするのはお勧めしないが、作業の全容やググるべきキーワードを知るには大変有用だと思う。まずはこのキーワードを基に公式ドキュメントやチュートリアルなどを検索するのがおすすめ。言語やフレームワークを使ってできることがあらかじめイメージできる状態だと、公式ドキュメントの内容もいつもより頭に入ってくると思う。

元ドキュメントなどを辿ると、Teams Bot を作成するには Microsoft Bot Framework SDK を活用する方法と Bot Framework Composer という Microsoft 社のフレームワークを使う2種類の方法があるとわかった。

どちらを使えば良いのかわからなかったので、これも聞いてみた。

GPTさんに聞いたらとりあえず Bot Framework Composer から試した方がよさそうだった。まあできなかったら SDK の方を使ってみようという気持ちであまり考えすぎずに臨んだ。

ChatGPT の得意①:環境構築構築

プログラミング初学者をふるいにかける第一関門として知られている開発環境の用意だが、これも GPTさんに頼る。

全くわからないときは、「5歳児でもわかるように説明して」というと一手一手説明してくれるので、詰まったときはおすすめ。

自分はこの粒度のプロンプトで問題なかったが、自分の使っている OS、参照しているWebサイトなどをプロンプト文に入れるとより正確な案内をしてくれるのだろうと思う。

ChatGPT の得意②:プログラミング言語の概念・記法解説

環境設定が終わったら、公式ドキュメントと基礎的なチュートリアルを眺めるようにした。わからない語句やフレーズは 公式ドキュメント > 公式ドキュメントを基に GPTさんに聞く、で大体解決した。

コード自体を GPTさんに生成してもらうのも良いのだが、公開ソースコードを丸パクリした結果、その中身が理解できておらず、エラー解消にめちゃめちゃ苦労した過去の経験があったので、骨組は極力自分で作ることにした。

下記を参照した。
Ben Brown explains how he built a Weather Bot with Composer

Bot Framework Composer はC#が規定なのだが、C#は Progate でも触ったことがなかったので理解に苦労した。ただ、この辺りは GPTさんの得意分野で、とてもわかりやすく説明してくれた。

こんな感じ。一旦概念はフワッとわかればよしとした。

記法についても教えてくれる。新しい言語でない限り、これは GPTさんが一番得意な部分な気がした。自分で調べようとすると結構時間がかかるんですよね。

ChatGPT の得意③:デバッグ

個人的にデバッグが一番助かった。ChatGPT登場以前は、エラーメッセージが表示されると、エラーメッセージをググり、同じ症状を Stackoverflow などで探し、自分の環境で再現する、というのが一般的なデバッグ作業だった。

Stackoverflow はとても便利な情報収集ツールだが、同じエラーメッセージに苦しんでいる仲間を見つけても、実装環境やモジュールのバージョンが自分と違う場合は多い。この差分を理解できない/調査する術がわからないのが、プログラミング初学者の辛いところである。

僕は Bot の OpenAI API を呼び出すところで、エラーを吐かれていたが、僕が Bot Framework Composer を使っていることも全て記憶している GPT さんは、適格なデバッグアドバイスをくれる。

デバッグ作業として与えられているタスクが何かわからないときは聞き返せる。

また、エラーメッセージと共に、自分のコードをそのまま ChatGPT に貼ってしまえば更に的確なアドバイスをくれる。


この時僕はサンプルドキュメントの API Key を貼っているが、念のため伏せておく。

「ここはあってそうだね」「ここは間違ってそう」 とエンジニアの友達みたいな感じで応答してくれるのが有難い。なお、コードを記載するときに API Key などは伏せてはるように注意。

このような具合に、以前であれば3時間頭を悩ませた末にエンジニアの友達に質問することで解決していたエラーメッセージが爆速で解決するようになった。エラーメッセージとにらめっこする時間がほとんどだった僕の開発体験が劇的に変わっていった。

もっと複雑なシステムではこうシンプルにいかないだろうが、Bot Framework Composer のように少ないコード量で動かせる開発フレームワークへの敷居が一気に下がったように感じた。

プログラミング初学者へのおすすめプロンプト集

上記の僕と GPT さんの会話では英語のものと日本語のものが入り混じっていたが、英語アレルギーがなければ基本的に英語での会話をおすすめする。正確だし、トークン数も消費しないし、個人的には、英語のGPTさんの方が明るいトーンで応対してくれるのでやる気が出る。

僕は下記のように分けて話しかけていた。

聞きたいことが抽象的概念の場合 > 日本語
聞きたいことに開発手法や記法など明確な答えがありそうな場合 > 英語

色々な人がおすすめプロンプト集を公開しているので、片っ端から試してみるのが良いと思う。自分はこの方を参照した。

多用したプロンプトを幾つかシェアしておく。

やりたいことを伝えて、開発方法をざっくりと理解する。

プロンプト: 
あなたは、プロのエンジニアです。
以下の制約条件をもとに、【作りたい機能など】方法を出力してください。 
# 制約条件: 【使いたいツール、言語、価格の制約などを入れよう】 

環境構築

プロンプト:
あなたは、プロのエンジニアです。
私は【作りたい機能など】を開発したいです。
以下の前提を元に開発環境の構築に必要な作業を step by step で教えてください。
前提: 【使いたいツール、言語、価格の制約などを入れよう】 

指定した記事を基に開発方法を教えてもらう

プロンプト①:
以下のテキストを要約し、最も重要なポイントを箇条書きにまとめてください。
テキスト: """【テキスト】""" 

ここに差し込むのはWebサイトのURLでも良いが、URLだと精度が少し落ちる印象

プロンプト②: 
あなたは、プロのエンジニアです。
私は【作りたい機能など】を実現したいのですが、先ほどの記事の内容を踏まえてアドバイスをしてください。

あえてプロンプトを二つに分けることで、GPTさんが段階的な思考が可能になり、解答精度が高くなる。プロンプトエンジニアリング手法の一種で、Chain-of-Thoughtと言われるものだ。

プログラミング言語の概念の理解

プロンプト(例): 
C# におけるプロパティとは何ですか?5歳児にわかるように説明してください。

プログラミング言語の記法の理解

プロンプト(例):
C#の下記の記法を10歳の子供にわかるように説明してください 
"${user.data}" 

デバッグ

プロンプト① 
Below is my code for sending HTTP Request using Bot Framework Composer 
"【コードをコピペ】" 

これだけでも記法やヘッダー情報が足りなければ教えてくれる

プロンプト②
I am getting the error message below. 
Can you help me figure out what is wrong?  
"【エラーメッセージをコピペ】"

以上! Happy Coding!(by GPTさん)

Discussion