大規模な言語モデルを活用してコードを生成することは、人生を変える一つの方法ですが、ソフトウェア開発プロセスについて彼らと対話することも同様に重要です。 Jon Udell は、大規模言語モデルがプログラマーにもたらす価値を探求し続けています。 Let's Talk: 会話型ソフトウェア開発からの翻訳。 非常に成功する AI ChatGPT インタラクションを開始するためのヒントを紹介します。 通行人の意見プロンプトは、私が思い描いた bash スクリプトを意図的に簡略化したものです。元のヒントでもサンプル出力を提供するつもりでしたが、忘れてしまいました。振り返ってみると、出力を提供せず、ChatGPT が最初にスクリプト自体に集中できるようにした方がよかったかもしれません。その観察結果には次のようなものがあります。 これは、コーディング中に LLM から暗黙的に知識を獲得する方法の良い例です。私は以前から bash の strict モードについて多少の知識を持っていましたが、それは不完全でした。そこで、私たちは少し立ち止まってこのトピックについて検討し、知識を深め、デバッグには他の -o パラメータ、特に -x (xtrace) と -n (noexec) の使用を検討するようにメモしました。私たちはまだ実際の課題に取り組み始めたばかりですが、このちょっとした回り道自体に価値があります。 JSONについて話しましょうここで戻ってサンプル出力を示します。 別のシナリオでは、この JSON 出力のフォーマットを最適化するために時間を費やす可能性があります。しかし、LLM はコンパイラやインタープリタと同様に、その点を気にしません。さらに良いことに、従来の JSON フォーマッタがパニックを起こすような構文も許容します。上記の例をレガシーフォーマッタに貼り付けると、2 つの問題が発生します。まず、中括弧がないと有効な JSON ではありません。 2 番目に、tickets_list の値は JSON の文字列化された表現であるため、JSON オブジェクトではなく文字列になります。驚くべきことに、LLM はあなたの意図を「理解」し、適切に応答します。 これは非常に些細なことですが、ワークフローに影響を与え、高度な機能のために確保しておくべき認知リソースを無駄にする可能性があります。この時点で、私は説明可能性テストと呼んでいるものも実行します。LLM は、1) コード スニペットを中括弧で囲む必要があること、2) ネストされた値を解析する必要があることを説明していますか?結果は次のとおりです。
これは私にとって興味深いことでした。なぜなら、Copilot Chat が OpenAI を使用し、Cody が Anthropic を使用していることは知っていたものの、必ずしも明らかではなかったからです。それぞれのチャット インターフェイスには、基盤となる LLM から取得される応答とは異なる応答を行うためのプロンプトが強化されています。しかし、この場合、ツールはそれぞれのインターフェースと一貫して動作するようです。 テスト戦略について話し合いましょうChatGPT の set -euo pipefail に関する観察は、私たちが検討できる多くの方向性の 1 つにすぎませんが、私は会話を目の前のタスク、つまり元のヒントに含めたテスト スクリプトの改良に戻しました。このスクリプトは Freshdesk チケット システムの出力をテストします。単純なテストでは、テスト対象のツールが Freshdesk の API を呼び出して 0 個を超えるチケットを返すことができるかどうかをチェックするだけです。より良いテストとはどのようなものでしょうか? ChatGPT の推奨事項には、優先度とステータスが期待値と一致していること、空の値または長いリストを含むチケットが適切に処理されていること、すべての日付フィールドが存在し、有効な日付が含まれていることを確認することが含まれます。 私は最後のアプローチを選択し、ChatGPT はそれに応じてテスト スクリプトを変更しました。これには、日付に一致する正規表現を記述し、各チケットの日付フィールドのセットをループして、その正規表現を適用する必要があります。これは複雑すぎると感じたので、1 つの日付フィールド created_at のみをチェックするようにスコープを制限するように依頼しました。これでもまだ複雑すぎるように感じるので、ループを削除し、単一のチケットの有効期限をチェックするだけのテストに簡略化します。それから次の話題に移りました。 テストスイートにテストを展開する方法について議論しましょうテストする必要があるユースケースは次のとおりです。
私は bash 関数をほとんど使用しませんが、ここでは役に立つかもしれないと思ったので、6 つのテスト ケースに対応する 6 つの関数に bash スクリプトを構造化した返信を見て嬉しく思いました。 「良さそうですね」と私は言いました。「最初のテストを含めて、このように構成された完全なビルドをください。」 この時点で、私の横で見ていた同僚は、LLM では「お願いします」や「ありがとう」を使うと良い結果が得られるのではないかと考えました。これは私にはわかりません!ただ気持ちいいからやるだけ。これは危険な擬人化ですか?多分。しかし、たとえ彼らが人間でなかったとしても、私のアシスタントをいじめることに何のメリットもないと思います。 その後、同じ同僚がテーブルからテストを実行するための代替戦略について質問しました。私たちはこう尋ねました: 回答では、利点 (保守性、再利用性、並列実行、一貫したログ記録、明確さ) と欠点 (追加のオーバーヘッド、複雑さ、移行時間、学習曲線) が挙げられました。最後に、次の要約で終わります。 私たちはまだラピッドプロトタイピング段階にあり、このテスト戦略に長期的な投資をする準備ができていないため、緩やかに機能させることにしました。しかし、私たちは全員、別のアプローチについて数分間検討することは価値があると感じました。 チケットIDを保持する方法について議論しましょう次に記述するテストは、チケットを作成するためのテストです。 ChatGPT では、チケットの読み取り、更新、およびチケットへのコメント追加の機能をテストするために、他のテストで使用するためにチケットの ID を保存することを推奨しています。そして、ID をファイルに保存する関数を記述します。これにより、ファイルと変数間の保存のトレードオフを評価する必要があることが疑問に思いました。以下は、表形式で修正された回答の要約です (ChatGPT に感謝)。
そして、次のような結論を付け加えました。 ファイルベースの代替案については検討すらしていません。 ChatGPT がそのアプローチを採用したとき、私はさまざまなオプションのトレードオフを検討し、議論するようになりました。結局、LLM を使用する前とまったく同じことをしたので、この回り道は不要だったのでしょうか?私はそうは思わない。代替案を検討することは常に価値があります。この回り道にはほとんど時間がかかりませんでしたし、最終的に私がやったことは変わりませんでしたが、そのプロセスは価値があると感じました。 get_ticket 関数のテストを書いているときにも同様のやり取りがありました。取得したチケット ID が保存したものと一致するかどうかを確認するだけで十分ですか? ChatGPT は、効率性と徹底性の間に微妙な境界線を引き、より徹底した検査のオプションをリストし、基本的なスモーク テストでは効率性を優先することが理にかなっていることを示唆しています。繰り返しますが、より簡単なことを行う方法は既に知っているので、これによって何も変わることはありません。しかし、私たちが確かにスモークテストを行っていることはわかっていましたが、それを声に出して言うことは役に立ちました。 バッシュについて話しましょうここでは、結果を劇的に変える相互作用があります。テスト スイートに 3 番目のテストを追加しましたが、実行したのは最初の 2 つだけです。何が悪かったのでしょうか?デバッグのプロセスは LLM を使用する前と同じですが、ChatGPT はコードに print ステートメントをより速く挿入できるため、はるかに高速です。この力ずくの試行錯誤のアプローチを何度か試した後も、2 番目のテストに合格できませんでした。 そこで、「set -euo pipefail をオフにするのは意味があるだろうか?」という疑問が浮かびました。これを実行すると、スクリプトは完全に実行されました (つまり、6 つのテストがすべて実行されました)。ただし、成功するはずだった 2 番目のテストは失敗しました。その時、私は気づきました。私はこう尋ねました。「test_create_ticket から $TICKET_ID を返すべきですか?」 ChatGPT は、私が読んだことはあったが、遭遇したことのない動作を思い出させました。 ああ、神様!それは正しい!この関数は、作成されたチケットの値をグローバル変数に設定し、厳密モードを有効なままにして早期終了を回避するために 0 を返す必要があります。それが最終的な突破口でした。その後、すべてが順調に進みました。 ラバーダックが話すとき私は、この投稿シリーズの最初のテーマである「ゴム製のアヒルが話すとき」に何度も戻ってきます。声に出して考えることは常に役に立ちます。理想的には、人間のパートナーと一緒にこれを行うことができます。ゴム製のアヒルは代用品としては不十分ですが、何もないよりはましです。 LLM と話すことはこれらのオプションのいずれとも似ておらず、まったく別のものです。私たちは皆、それがどのように機能するかを理解しようとしています。 LLM にコードを書いてもらうと、魔法のようにコードが現れるのでしょうか?これは明らかに人生を変える出来事です。共同で書いたコードについて LLM に相談しますか?これも、あまり目立たないけれども、同様に人生を変えるほどの重大なことだと思います。 |
<<: 実証済みの分析戦略でデータの潜在能力を最大限に引き出します
>>: Douyin のクラウドネイティブ ベクトル データベースが「非主流」から「ニューノーマル」へと進化
ハイパースケール パブリック クラウドの台頭、複数のハイブリッド クラウド導入戦略の出現、アプリケー...
Linodeはどうですか? Linode Japanはどうですか?日本の大阪Linodeはどうですか...
「統合」と「同盟」は2013年の中国インターネットのキーワードであり、その背後にはモバイルインターネ...
「女三人寄れば文殊の知恵」ということわざがあるように、女友達はおしゃべりが好きで上手で、生活の些細な...
初心者はテクニックを使って遊びます。達人は道で遊びます。道とは何でしょうか? 道は口で言うことはでき...
現地時間2018年10月8日から10日にかけて、コンピュータサイエンスコミュニティにおける世界で最も...
9月19日、2018年杭州雲奇大会で杭州シティブレイン2.0が正式にリリースされました。管轄区域は2...
tmzvps.com はこれまでずっと比較的価格が高く、主にマネージド VPS を提供しています。現...
今日私がお勧めする Windows VPS は、実は秘密ではありません。そうです、有名で人気のある ...
servercheap.net は、新しい KVM 仮想 VPS で、coresite のシカゴ デ...
2013 年の新しい Baidu アルゴリズムと新たな課題に直面して、どのように最適化すればよいので...
SEO 最適化を行うすべてのウェブマスターにとって、多大な忍耐と努力が必要です。当社のウェブサイトの...
エコノミック・ボイスによると、グループ購入業界は2012年に200億元規模に達するだろう。これは、M...
なぜ EIG グループを紹介すべきなのか、また EIG グループが何をしているのかを尋ねる友人もいる...
[[287071]]水が石を削り取るには10年という十分な時間がある。 IBM、Oracle、EMC...