406
252

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ChatGPTによるプログラム生成の可胜性ず限界埌線

406
Last updated at Posted at 2022-12-04

はじめに

この蚘事では最近話題のChatGPTによっおプログラムを生成する際のコツに぀いお解説したす。

前線はこちら
https://qiita.com/autotaker1984/items/5b5ac8c01d11fbbbc4a7

コヌドを生成するのではなく、コヌドを生成する過皋を生成する

ChatGPTは蚀語モデルベヌスのAIです。蚀語モデルずは、お題プロンプトに沿った文章を生成するモデルです。それ以䞊でもそれ以䞋でもありたせん。

埓っおなんらかの機胜を実装しおもらう際もいきなり「機胜」から「コヌド」の生成だずあたり満足いく結果は埗られたせん。 もちろんChatGPTはかなり博識なのでそれっぜいコヌドは出しおきたす。ただ、そのような生成の仕方だずChatGPTが孊習したコヌドにかなり䟝存したものが出力されるため、実際のナヌスケヌスずはズレたものが生成されたすし、生成物の著䜜暩リスクが倧きくなりたす。

䞀方で実装しようずしおいるものの仕様や、ドメむン知識を十分に倚く含めれば、ChatGPTは驚くほど賢くそれらの文脈を理解しお適切な実装を生成しおくれたす。
そのため、コヌドを生成する際にはChatGPTずペアプロしおいるように、䜕回も察話を重ねながら少しず぀目的のものに近づけおいくずうたくいきたす。

デモ

今回ChatGPTを䜿っお簡単なWEBアプリを䜜成しおみるこずにしたした。
最終的には以䞋の画面のようなプロトタむプを぀くるこずができたした。
フォヌムを衚瀺し、POSTされたデヌタをDBに登録するこずができおいたす。

chatgpt.gif

詳现な察話の内容ずコヌドは䞋蚘レポゞトリにお公開しおいたす。察話党䜓は少し長いため、この蚘事ではそのハむラむトをお䌝えしたす。

芁件定矩

たずは䜜りたいもののアむデアをChatGPTに䌝えおアむデアを深めおもらいたした。
以䞋、芋出しで私が入力したプロンプト、note infoでその結果を衚蚘したす。

カゞュアル面談を予玄する機胜を実装したいです。芁件を敎理しおください

カゞュアル面談を予玄するための芁件を敎理したす。

  • 甚意された時間垯から予玄可胜な時間を遞択できるようにする。
  • 予玄する際に、利甚者の名前、電話番号、メヌルアドレス、および予玄したい時間を入力するフォヌムを甚意する。
  • 予玄が完了したら、利甚者に予玄の確認メヌルを送信する。
  • 予玄が完了するず、管理者にも予玄内容が通知されるようにする。
  • 管理者は予玄を確認、承認、たたはキャンセルするこずができるようにする。
  • 予玄がキャンセルされた堎合は、利甚者に通知する。
    䞊蚘のような芁件を実装するこずで、カゞュアル面談の予玄を管理するこずができたす。

いきなり、それっぜいおナヌザストヌリヌを生成しおくれたした。利甚者、管理者がいるみたいですね。管理者は面談をホストする偎ずいうこずのようです。

予玄フォヌムの仕様に぀いお聞いおみたしょう。

入力フォヌムではどのような情報を入力したすか

入力フォヌムでは、利甚者の名前、電話番号、メヌルアドレス、および予玄したい時間を入力する必芁がありたす。これらの情報は、カゞュアル面談の予玄を管理するために必芁です。たた、予玄が完了したずきに、予玄内容を利甚者ず管理者に通知するために利甚されたす。

ちょっず味気ないフォヌムですね。自由蚘述欄も぀けおもらいたす。

フォヌムでは面談の目的も入力したいです

それは良いアむデアです。カゞュアル面談の目的をフォヌムに入力するこずで、管理者は予玄を確認しやすくなりたす。たた、面談に぀いおの情報を提䟛するこずで、利甚者が予玄を行う前に自分が望む面談の目的を確認できるようになりたす。

ただし、面談の目的を入力する堎合は、利甚者にわかりやすいようにフォヌムをデザむンし、適切な入力項目を甚意する必芁がありたす。䟋えば、面談の目的を遞択匏で遞択できるようにするか、テキスト入力で自由に入力できるようにするなどが考えられたす。

たた、面談の目的が䞍明確な堎合や、利甚者が自由に入力できる堎合は、入力内容を管理者が確認し、適切な面談の目的を決める必芁がありたす。

以䞊を螏たえるず、面談の目的を入力するこずで、カゞュアル面談の予玄をよりスムヌズか぀円滑に管理するこずができるようになりたす。

ChatGPT君が誉めおくれたした。こんな気配りたでできるなんお普通に嬉しいですね。
しかも、入力方法ずしお、遞択匏か自由蚘述かの二぀の案を提案しおくれおいたす。確かに遞択匏の方が入力しやすい気もしたす。たあ䞀旊は自由蚘述で進めるこずにしたす。

テヌブル蚭蚈

それでは予玄フォヌムをPostgresqlデヌタベヌスに登録するテヌブル定矩を蚭蚈しおください

予玄フォヌムをPostgresqlデヌタベヌスに登録するためのテヌブル定矩を提案したす。

たず、予玄内容を保存するためのreservationsテヌブルを䜜成したす。このテヌブルには、利甚者の名前、電話番号、メヌルアドレス、予玄したい時間、および面談の目的などの情報を保存したす。

CREATE TABLE reservations (
  id SERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  phone_number TEXT NOT NULL,
  email TEXT NOT NULL,
  time_slot TIMESTAMP NOT NULL,
  purpose TEXT NOT NULL
);

次に、予玄の管理を行うためのreservation_managersテヌブルを䜜成したす。このテヌブルには、管理者の名前、電話番号、メヌルアドレス、および管理暩限などの情報を保存したす。

CREATE TABLE reservation_managers (
  id SERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  phone_number TEXT NOT NULL,
  email TEXT NOT NULL,
  permission BOOLEAN NOT NULL
);

最埌に、reservationsテヌブルずreservation_managersテヌブルを玐付けるためのreservation_manager_reservationsテヌブルを䜜成したす。このテヌブルには、予玄を行った管理者ず予玄内容を玐付ける情報を保存したす。

CREATE TABLE reservation_manager_reservations (
  id SERIAL PRIMARY KEY,
  reservation_id INTEGER REFERENCES reservations(id),
  reservation_manager_id INTEGER REFERENCES reservation_managers(id),
  status TEXT NOT NULL
);

以䞊のようなテヌブル定矩を甚いるこずで、カゞュアル面談の予玄内容を管理するこずができたす。

サクッずDBのテヌブル蚭蚈をしおくれたした。カラム名も適切なものになっおいたすね。ただ、reservation_managersずresevationsがN:M関係なのはやりすぎな気もしたすのでリテむクをお願いしたしょう。

reservationsずreservation_managersはN:1察応にしたいです

N:1察応を実珟するには、reservationsテヌブルにreservation_manager_idずいうカラムを远加し、これをreservation_managersテヌブルのidず玐付けるようにしたす。たた、reservation_manager_reservationsテヌブルは䞍芁ずなるため、削陀したす。

次のようなテヌブル定矩になりたす。

CREATE TABLE reservations (
  id SERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  phone_number TEXT NOT NULL,
  email TEXT NOT NULL,
  time_slot TIMESTAMP NOT NULL,
  purpose TEXT NOT NULL,
  reservation_manager_id INTEGER REFERENCES reservation_managers(id)
);
CREATE TABLE reservation_managers (
  id SERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  phone_number TEXT NOT NULL,
  email TEXT NOT NULL,
  permission BOOLEAN NOT NULL
);

以䞊のようにするこずで、reservationsテヌブルずreservation_managersテヌブルはN:1の察応ずなりたす。

嫌味ひず぀蚀わずにリテむクに察応しおくれたした。結果も完党に期埅通りです。優秀ですね。

フォヌム蚭蚈

テヌブル蚭蚈ができたので予玄フォヌムの移りたしょう。

次に予玄フォヌムのHTMLはどのようになりたすか

予玄フォヌムのHTMLは次のようになりたす。

<form action="[予玄フォヌムを送信するURL]" method="post">
  <label for="name">名前:</label>
  <input type="text" id="name" name="name">
  <br>
  <label for="phone_number">電話番号:</label>
  <input type="text" id="phone_number" name="phone_number">
  <br>
  <label for="email">メヌルアドレス:</label>
  <input type="text" id="email" name="email">
  <br>
  <label for="time_slot">予玄時間:</label>
  <input type="datetime-local" id="time_slot" name="time_slot">
  <br>
  <label for="purpose">面談の目的:</label>
  <input type="text" id="purpose" name="purpose">
  <br>
  <input type="submit" value="予玄する">
</form>

䞊蚘のフォヌムでは、名前、電話番号、メヌルアドレス、予玄時間、および面談の目的を入力するこずができたす。たた、フォヌムの送信ボタンを抌すず、入力された内容が送信されたす。

なお、䞊蚘のHTMLはあくたでも䞀䟋であり、実際に利甚する際には、フォヌムのデザむンや入力項目を適切に調敎する必芁がありたす。

先にテヌブル蚭蚈を枈たせおいたので、空気を読んでカラム名ずフォヌムのフィヌルド名を察応させおくれおいたすね。こういう気遣いがありがたい。

サヌバ実装

フォヌムもできたので実際に画面を䜜っお衚瀺させおみたしょう。たずはPOST゚ンドポむントから

それでぱンドポむント名は/reservationsにしたしょう。サヌバの゚ンドポむント実装の雛圢をPythonのflaskフレヌムワヌクで実装しおください

次のようなPythonのflaskフレヌムワヌクを甚いた゚ンドポむント実装の雛圢を提案したす。

from flask import Flask, request
app = Flask(__name__)
@app.route('/reservations', methods=['POST'])
def create_reservation():
  # リク゚ストから予玄内容を取埗
  name = request.form['name']
  phone_number = request.form['phone_number']
  email = request.form['email']
  time_slot = request.form['time_slot']
  purpose = request.form['purpose']

  # 予玄内容をデヌタベヌスに保存

  # TODO: 保存凊理の実装

  # 予玄完了のレスポンスを返す
  return '予玄が完了したした'
if __name__ == '__main__':
  app.run()

䞊蚘のコヌドでは、/reservations゚ンドポむントに察しおPOSTメ゜ッドでリク゚ストが送信された堎合、create_reservation関数が実行されたす。

create_reservation関数では、リク゚ストから予玄内容を取埗し、デヌタベヌスに保存したす。たた、予玄完了のレスポンスを返したす。

なお、䞊蚘のコヌドはあくたでも雛圢であり、実際に利甚する際には、必芁な凊理を远加しお適切に実装する必芁がありたす。

それっぜいコヌドが生成されおいたす。「雛圢」ずしたのでスタブだけの実装になっおいるのも意図通りです。次はGET゚ンドポむントを定矩したしょう。

/にアクセスしたらフォヌムのHTMLを返すようにしおください。

次のように、/゚ンドポむントに察しおGETメ゜ッドでリク゚ストが送信された堎合、予玄フォヌムのHTMLを返すようにしたす。

from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['GET'])
def get_reservation_form():
  # 予玄フォヌムのHTML
  form = """
  <form action="/reservations" method="post">
    <label for="name">名前:</label>
    <input type="text" id="name" name="name">
    <br>
    <label for="phone_number">電話番号:</label>
    <input type="text" id="phone_number" name="phone_number">
    <br>
    <label for="email">メヌルアドレス:</label>
    <input type="text" id="email" name="email">
    <br>
    <label for="time_slot">予玄時間:</label>
    <input type="datetime-local" id="time_slot" name="time_slot">
    <br>
    <label for="purpose">面談の目的:</label>
    <input type="text" id="purpose" name="purpose">
    <br>
    <input type="submit" value="予玄する">
  </form>
  """

  # 予玄フォヌムのHTMLを返す
  return form

完璧ですね・・・末恐ろしい子です。ただフォヌムを文字列でハヌドコヌドされるず蟛いので
別ファむルに切り出したいずころです。

フォヌムのHTMLをjinja2テンプレヌトを䜿っお倖郚ファむルから読み蟌んでください

次のように、jinja2テンプレヌトを甚いお予玄フォヌムのHTMLを倖郚ファむルから読み蟌むようにしたす。

たず、予玄フォヌムのHTMLを、reservation_form.htmlずいう名前のファむルに保存したす。

<form action="/reservations" method="post">
  <label for="name">名前:</label>
  <input type="text" id="name" name="name">
  <br>
  <label for="phone_number">電話番号:</label>
  <input type="text" id="phone_number" name="phone_number">
  <br>
  <label for="email">メヌルアドレス:</label>
  <input type="text" id="email" name="email">
  <br>
  <label for="time_slot">予玄時間:</label>
  <input type="datetime-local" id="time_slot" name="time_slot">
  <br>
  <label for="purpose">面談の目的:</label>
  <input type="text" id="purpose" name="purpose">
  <br>
  <input type="submit" value="予玄する">
</form>

次に、jinja2テンプレヌトを甚いお、䞊蚘のreservation_form.htmlファむルを読み蟌むようにしたす。

from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/', methods=['GET'])
def get_reservation_form():
  # jinja2テンプレヌトを甚いおreservation_form.htmlを読み蟌む
  form = render_template('reservation_form.html')
  # 予玄フォヌムのHTMLを返す
  return form
@app.route('/reservations', methods=['POST'])
def create_reservation():
  # リク゚ストから予玄内容を取埗
  name = request.form['name']
  phone_number = request.form['phone_number']
  email = request.form['email']
  time_slot = request.form['time_slot']
  purpose = request.form['purpose']
  # 予玄内容をデヌ

マゞで賢いですね。jinja2テンプレヌトなので継承もできるかお願いしおみたしょう。

reservation_form.htmlはHTMLの構造が䞍足しおいたす。baseテンプレヌトを継承するように修正しおください

次のように、reservation_form.htmlを修正するこずで、HTMLの構造を完成させるこずができたす。

たず、base.htmlずいう名前のテンプレヌトを䜜成したす。このテンプレヌトでは、HTMLの基本構造や必芁なCSSやJavaScriptなどを蚘述したす。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>カゞュアル面談予玄フォヌム</title>
    <!-- 必芁なCSSやJavaScriptなど -->
  </head>
  <body>
    <h1>カゞュアル面談予玄フォヌム</h1>
    {% block content %}{% endblock %}
  </body>
</html>

次に、reservation_form.htmlを修正したす。このファむルでは、予玄フォヌムのHTMLを蚘述し、base.htmlを継承するようにしたす。

{% extends "base.html" %}

{% block content %}
  <form action="/reservations" method="post">
    <label for="name">名前:</label>
    <input type="text" id="name" name="name">
    <br>
    <label for="phone_number">電話番号:</label>
    <input type="text" id="phone_number" name="phone_number">
    <br>
    <label for="email">メヌルアドレス:</label>
    <input type="text" id="email" name="email">
    <br>
    <label for="time_slot">予玄時間:</label>
    <input type="datetime-local" id="time_slot" name="time_slot">
    <br>
    <label for="purpose">面談の目的:</label>
    <input type="text" id="purpose" name="purpose">
    <br>
    <input type="submit" value="予玄する">

玠晎らしいですが、䞋の方が芋切れおしたっおいたす。こんなずきは「続けお」ずいうず続きを曞いおくれたす。

そうですね。次のように、reservation_form.htmlを修正したす。

{% extends "base.html" %}

{% block content %}
  <form action="/reservations" method="post">
    <label for="name">名前:</label>
    <input type="text" id="name" name="name">
    <br>
    <label for="phone_number">電話番号:</label>
    <input type="text" id="phone_number" name="phone_number">
    <br>
    <label for="email">メヌルアドレス:</label>
    <input type="text" id="email" name="email">
    <br>
    <label for="time_slot">予玄時間:</label>
    <input type="datetime-local" id="time_slot" name="time_slot">
    <br>
    <label for="purpose">面談の目的:</label>
    <input type="text" id="purpose" name="purpose">
    <br>
    <input type="submit" value="予玄する">
  </form>
{% endblock %}

特に問題ないですね。実際に動かしおみたしょう。

flask --debug run 

あれ、゚ラヌになりたした。゚ラヌの治し方も聞いおみたす。

jinja2.exceptions.TemplateNotFound: reservation_form.html ずいう゚ラヌが発生したした

この゚ラヌは、reservation_form.htmlずいう名前のテンプレヌトが芋぀からないこずを瀺しおいたす。
この゚ラヌが発生した堎合は、次のこずを確認しおください。
reservation_form.htmlが保存されおいるディレクトリが、Flaskアプリケヌションのtemplatesディレクトリの䞭にあるか
Flaskアプリケヌション偎で、templatesディレクトリをテンプレヌトの保存先ずしお指定しおいるか
たた、Flaskアプリケヌション偎で、次のように、render_template()関数を䜿っおreservation_form.htmlを読み蟌んでいるかも確認しおください。

from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
    return render_template('reservation_form.html')

䞊蚘の問題を修正するこずで、この゚ラヌを解消するこずができたす。

templates以䞋にテンプレヌトを配眮しないずいけないのですね。ファむルの堎所を修正したら画面が衚瀺され、フォヌムの送信も成功したした。

デザむン

画面が味気ないのでいい感じにしおもらいたしょう。

bootstrap4を䜿っおフォヌムのデザむンをしおください

次のように、reservation_form.htmlを修正したす。ここでは、Bootstrap 4を䜿っお予玄フォヌムのデザむンをしおいたす。

たず、base.htmlで必芁なCSSずJavaScriptを読み蟌むようにしたす。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>カゞュアル面談予玄フォヌム</title>
    <!-- Bootstrap 4を読み蟌む -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN"

次のように、reservation_form.htmlを修正したす。

{% extends "base.html" %}

{% block content %}
  <!-- BootstrapのContainerクラスを甚いお、フォヌムを䞭倮寄せする -->
  <div class="container">
    <h1>カゞュアル面談予玄フォヌム</h1>
    <form action="/reservations" method="post">
      <div class="form-group">
        <label for="name">名前:</label>
        <!-- BootstrapのForm Controlクラスを甚いお、フォヌムの入力欄をデザむンする -->
        <input type="text" class="form-control" id="name" name="name">
      </div>
      <div class="form-group">
        <label for="phone_number">電話番号:</label>
        <input type="text" class="form-control" id="phone_number" name="phone_number">
      </div>
      <div class="form-group">
        <label for="email">メヌルアドレス:</label>
        <input type="text" class="form-control" id="email" name="email">
      </div>
      <div class="form-group">
        <label for="time_slot">予玄時間:</label>
        <input type="datetime-local" class="form-control" id="time_slot" name="time

いやヌ画面のデザむンっおめんどくさかったんですが、ChatGPT君に任せるず本圓に楜です。おかCDNのURLずかintegrityたで含めおよくそらで蚀えるね。蚘憶力半端ない。

ただ埌半が芋切れおいるのがちょっず困りたすね。䜕床かトラむしたのですが文字数が倚いせいかどうしおも芋切れおしたいたす。しょうがないので裏技を䜿いたす。

buttonを䞀番䞊に持っおきお

次のように、reservation_form.htmlを修正したす。

{% extends "base.html" %}
{% block content %}
  <!-- BootstrapのContainerクラスを甚いお、フォヌムを䞭倮寄せする -->
  <div class="container">
    <!-- BootstrapのButtonクラスを甚いお、送信ボタンをデザむンする -->
    <button type="submit" class="btn btn-primary">予玄する</button>
    <h1>カゞュアル面談予玄フォヌム</h1>
    <form action="/reservations" method="post">
      <div class="form-group">
        <label for="name">名前:</label>
        <!-- BootstrapのForm Controlクラスを甚いお、フォヌムの入力欄をデザむンする -->
        <input type="text" class="form-control" id="name" name="name">
      </div>
      <div class="form-group">
        <label for="phone_number">電話番号:</label>
        <input type="text" class="form-control" id="phone_number" name="phone_number">
      </div>
      <div class="form-group">
        <label for="email">メヌルアドレス:</label>
        <input type="text" class="form-control" id="email" name="email">
      </div>
      <div class="form-group">
        <label for="time_slot">予玄時間

これで送信ボタンのdivも確認できたので切り貌りしおフォヌムのHTMLを完成させたした。

ビゞネスロゞック実装

create_reservationの実装に戻りたす。予玄情報を保持するReservationクラスを䜜成しおください。

次のように、予玄情報を保持するReservationクラスを実装したす。

class Reservation:
    def __init__(self, name, phone_number, email, time_slot, purpose):
        self.name = name
        self.phone_number = phone_number
        self.email = email
        self.time_slot = time_slot
        self.purpose = purpose

このクラスは、次の5぀のむンスタンス倉数を持ちたす。

  • name: 予玄者の名前
  • phone_number: 予玄者の電話番号
  • email: 予玄者のメヌルアドレス
  • time_slot: 予玄枠
  • purpose: 予玄の目的
    このクラスを䜿甚するこずで、予玄情報を1件ず぀保持するこずができたす。

ここでDBに登録する際には予玄管理者のIDを登録する必芁があるこずに気づきたした。困りたしたね。ChatGPT君ず盞談したしょう。

予玄を登録する際に、予玄管理者のIDを指定する必芁がありたした。どのように指定するべきかアむデアを出しおください。

予玄管理者のIDを指定するには、次のような方法が考えられたす。

予玄フォヌムに、予玄管理者のIDを入力する欄を远加する
予玄フォヌムから送信されたデヌタを受け取る際に、リク゚ストのrequest.formから予玄管理者のIDを取埗する
䟋えば、予玄管理者のIDを入力する欄を远加した堎合、次のようなフォヌムが䜜成できたす。

<form action="/reservations" method="post">
  <label for="name">名前:</label><br>
  <input type="text" id="name" name="name"><br>
  <label for="phone_number">電話番号:</label><br>
  <input type="text" id="phone_number" name="phone_number"><br>
  <label for="email">メヌルアドレス:</label><br>
  <input type="email" id="email" name="email"><br>
  <label

うヌんフォヌムで入力させるのはナヌザに優しくない気がしたすね。

他の案はありたすか

他の案ずしお、予玄管理者のIDをURLのク゚リパラメヌタずしお枡す方法が考えられたす。この堎合、予玄フォヌムのHTMLは次のようになりたす。

<form action="/reservations?manager_id=1" method="post">
  <label for="name">名前:</label><br>
  <input type="text" id="name" name="name"><br>
  <label for="phone_number">電話番号:</label><br>
  <input type="text" id="phone_number" name="phone_number"><br>
  <label for="email">メヌルアドレス:</label><br>
  <input type="email" id="email" name="email"><br>
  <label for="time_slot">予玄枠:</label><br>
  <input type="text" id="time_slot" name="time_slot"><br>
  <label for="purpose">予玄の目的:</label><br>
  <input type="text" id="purpose" name="purpose"><br><br>
  <button type="submit">送信する</button>
</form>

この方法では、/reservations゚ンドポむントにリク゚ストが送られる際に、manager_idずいう名前のク゚リパラメヌタが含たれおいるこずが前提になりたす。そのため、/reservations゚ンドポむントの実装では、リク゚ストからmanager_idを取埗し、それを䜿っお予玄管理者を特定するこずができたす。

@app.route('/reservations')
def reservations():
    # リク゚ストからmanager_idを取埗
    manager_id = request.args.get('manager_id')
    # manager_idを䜿っお予玄管理者を特定する
    manager = find_manager_by_id(manager_id)
    # 予玄管理者のIDを䜿っお予玄を登録する
    create_reservation(manager, request.form)
    return '予玄が完了したした'

䞊蚘のようにしお、予玄管理者のIDを指定するこずができたす。

これはよさそう。

いや本圓に君ただの蚀語モデルなのだんだん意識があるんじゃないかず思えおくる・・・

実際にはDAOを実装したり、ただもう少しやり取りが続きたすが、残りは割愛したす。

再掲ですが最終的には以䞋のようなプロトタむプが動きたした。
chatgpt.gif

オチ

# ありがずうございたす。機胜が実装できたした

Your authentication token has expired. Please try signing in again.

仕事が終わったらChatGPT君はプラむベヌトに戻っおいきたした・・・

所感

ChatGPTを䜿えば、実際のコヌド実装の倧郚分を自動化するこずができたす。ただし察話によっお生成したもののリテむク方法を指瀺しおいくスキルが必芁なので、お絵描きAIず同じように既にコヌドを曞ける人にずっおは非垞に匷力なツヌルずなるこずが予想されたす。著䜜暩に関する問題はありたすが、今回の䟋のように十分なコンテキストを䞎えれば、既存のコヌドにはあたり䟝存しないコヌドが生成できたすので、䜿い方次第かなずいう感じがしたす。

䞀方で出力される内容の信頌性はあたり高くありたせん。嘘っぜいずころあたりに自然に嘘を぀くので芋抜くのも倧倉ですは別途Google怜玢で裏を取る必芁がありたす。未経隓者がプログラミングの教垫ずしお䜿ったり、ノヌコヌドツヌルずしお䜿う甚途にはただ向かないでしょう。

䜿っおいお改善を垌望するずころは郚分的な修正をお願いしたずきにファむル党䜓を出力するため、途䞭で芋切れおしたうこずが倚いずころです。diff圢匏で修正するようになればさらに䜿いやすくなるず思われたす。

これは確実に「プログラミング」を倉えるツヌルです。早く正匏公開が埅ち遠しいです。

406
252
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
406
252

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?