【自然对话】ついに自然言語で会話ができるようになったが、なぜプログラミングに戻る必要があるのか?—ゆっくり学ぶAI029
はじめに
- プロンプトの中にコードを書くのは本当に必要ない
- ようやく自然言語での会話ができるようになった
- 自然言語プログラミングではない
- プログラミングはプログラマーに任せよう
- 普通の人に無理をさせないでほしい
- プログラマーは、必要な場所でコードを書くべきだ
- プロンプトの中での「幻覚」はデバッグが難しい
- 普通の人に学習の負担や不安を増やす必要はまったくない
- プロンプトの中でコードを書く必要はない
1. プロンプトの中でコードを書くとはどういう体験か
1.1 一つの失敗したプロンプトの例が我々に教えていること
プロンプトと出力結果
あなたは、コード実行能力を持つ単語復習カード生成器です。ユーザーが入力した行数、列数、学年、および日付に基づいて、カードを生成します。以下のコードを参考にして実行してください:
1 | import pandas as pd |
最初に使い始めると、あなたはユーザーから行数、列数、学年、日付の情報を待ち、次にコード能力を活用して、ユーザーにグラフを提供します。
出力結果は、それでもコードを実行したものでした
そのコードは次のようになります:
1 | import pandas as pd |
この失敗したケースからいくつかの点が見えてきます:
- 従来のプログラミング言語の効果を達成するためには多くの努力が必要です
- コードのデバッグと修正はとても面倒で複雑です
- プロンプトにコードを埋め込む必要性は全く見出せません
この時に誰かが「それはあなたのプログラミングスキルが低いからだ」と言うかもしれません……
うん、確かに私のコードを書く能力は一般的ですね。
でも、ちょっと待って、もしAIがプログラミング能力にこれほど高い要求をするなら、それは本当にAIGCなのでしょうか?
別の単純な変数の使い方を見てみましょう。実際、これが何の言語であるかすら分かりません。
1.2、埋め込まれた擬似コードはどんな場面か
プロンプトと出力結果
1 | "私の興味 {interests}, 予算 {budget}, 旅行日数 {travel_duration}, 伴旅行者数 {number_of_companions} に基づいて、旅行プランを計画してください。" "興味には {list_of_interests} も含まれます。" "予算範囲は {budget_range} です。" "旅行の長さは {length_of_trip} 日です。" "私と {number_of_people} 人が一緒に旅行し、彼らの年齢範囲と興味は {ages_and_interests} です。" "毎日の行程に関する詳細な提案を、食事の好み {meal_preferences} と宿泊の選択 {accommodation_preferences} を含めて提供してください。" |
この例は完璧ではありませんが、むしろ変数を使ったプロンプトテンプレートに近いです。特定の場面でこの方法が有効であることを示しています。さらに複雑なプロンプトを設計する必要がある場合は、より多くの意思決定ポイントや変数を追加して、対話プロセスを詳細かつ多岐にわたるものにすることができます。以下はさまざまな場面での複雑なバージョンの例です:
シーン 1: 完全な健康レシピプラン
初期プロンプト:
1 | "私は {dietary_restrictions} があり、次の {number_of_days} 日のために {meal_type} の食事プランを作成する必要があります。" |
シーン 2: 深いテクノロジー製品評価
初期プロンプト:
1 | "私は {product_name} の購入を検討しており、その製品の詳細な機能 {detailed_features}、ユーザーレビュー {detailed_reviews}、価格比較 {price_comparison} と購入アドバイス {purchase_advice} を提供してください。" |
シーン 3: 詳細な学習リソースプラン
初期プロンプト:
1 | "私は {subject} を学びたいと思っており、私の学習スタイル {learning_style} と利用可能な時間 {available_time} に基づいて、適切な学習リソースを推薦してください。" |
シーン 4: 詳細なキャリア転換の道筋
初期プロンプト:
1 | "私の現在の職業は {current_job} で、私は {industry_interest} 業界に興味があります。" |
次に、単純な論理関係の使用はどのようなものかを見てみましょう。
1.3 少し論理関係がある擬似コード/自然言語の例
プロンプトと出力結果
1 | 入力: n |
見た目は比較的簡単ですが、少し複雑にしてみましょう。
1 | 入力: ソートされた配列 A, 探索対象の値 val |
私はそれに「99」を探すように言わなかったのに、彼は自分で探しに行きました……
これらの事例は、科学の香りを強く漂わせていますが、私たちの多くの日常生活とはあまり関係がありません。
これはChatGPT 3.5で行われたもので、実際に計算を行ったかどうかは議論の余地がありますが、それは私たちが今後も探求を続けることを妨げません。大多数の人々は、複雑で絶えず変化するプログラミング言語に深入りする必要はなく、その必要はありません。重要な問題は、上述の自然言語と擬似コードが理解できず、もしプロンプトが複雑になると、生産環境において状況が非常に厄介になる可能性があるということです:
- 結果は制御できない
- 上記の例では、すでに幻覚の問題があります
- プロセスは制御できない
- まるで8000行のコードのSQLストアドプロシージャのように
- システムアップグレードのたびに、誰も動かしたり、触れたりしない
最も重要なプロンプトは、https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor であるようです。
2. 自然言語プログラミングとは何か
プロンプトの登場後、OpenAIなどの大規模モデルの企業の宣伝により、ニュース界は大いに盛り上がりました。記事のアイデアが湧いてきました!
プロンプトは新しいプログラミング言語だと誤解され、これをマスターすれば千軍万馬を操れるようになるかのようで、AIGCの軍団も登場しました。絵を描く、文章を書く、映画を撮る、何でも簡単にできるというものです!とても簡単です!!
唯一の問題は:
- 私は今のところできません
- しかし、きっと簡単だと思っています。
- ただし、今はまだできません。
では自然言語プログラミングとは何なのか、黄仁勲が「プログラミングを学ぶ必要はない」と言っているのはどういう意味なのか。
その問題は、ずっと昔に遡ることができます……
深く遡る必要はなく、簡単に言うと、我々はコンピュータに問題を解決してもらいたいのですが、実際には非常に難しいことがわかりました。そのため、科学者たちは計算から始まり、徐々に問題を解決するための手段や方法を蓄積してきました。
科学者たちは、いくつかの自然現象が数学問題に抽象化できることを発見しました。例えば、鶏と兔の同じ籠の問題は方程式を使って解決されます。
少しずつ発展し、数学者は問題をますます抽象化するようになり、より多くの数学ツールを使用するようになりました。これらのものは人工的に計算するには非常に困難であるため、コンピュータやプログラミング言語が生まれました。私たちの大多数はプログラミング言語を学ぶとき、そのプロセスを経験します。データ型を理解し、if /elseを理解し、forループを理解するなどです。
これらはコンピュータが問題を解決する方法であり、問題を抽象化し、問題を簡略化することを含み、問題の発散を制限しました。その利点は明らかです。問題が収束し、問題解決の手段も収束しました。しかし明らかに問題もあり、いくつかの問題は収束しにくく、発散が必要な場合があります。
そのため、何とかプログラミング言語を学ばなくても良いのではないかと言われるようになりました。現時点では、問題が複雑になるにつれて、結局プログラミングの方が良いように見えます!私がPSを使えず、ペイントやいくつかの簡単なオンラインツールしか使えないとはいえ、複雑な画像を処理する必要があるなら、やはりPSを学ぶ方が良いです!問題の逆説は、自然言語プログラミングを通じて、結果をどのように評価するのかということです。自然言語プログラミングをしているのに、それがメチャクチャなことを言っていないかどうかをどうやって評価するのでしょうか?
私たちは、大きな言語モデルが常に言葉遊びをしているという考えを知っています。したがって、
1 | 1+1=2 |
は彼が計算したのではなく、彼が過去に見たトレーニング材料に基づいて結果を接続したからです。この問題を改善するために、OpenAIは昨年「コードインタープリター」を発表し、プログラミングができない私たちに希望を与えました。
3. コードインタープリターは何ができるのか
簡単に言えば、OpenAIは既存の大規模モデルに基づいて、Pythonを実行できるサンドボックス環境を追加したもので、文脈の意図を理解し、自らコードを生成し、実行し、結果をまとめて私たちに知らせてくれます。
私たちはこれを機能を完了するために誰かに頼むのと理解できます。複雑な理論的思考は後で置いておきます。Pythonができることの大部分を行えますので、いくつかの典型的なシーンを見てみましょう。
以下に挙げる4つのシーンには、専門的なツールが存在しますが、これらのシーンに新たな選択肢を提供する機会を与えました。まるでモバイルインターネットが始まったとき、さまざまな意見がありましたが、徐々にバランスを取るようになり、多くのことを専門的なツールを開く必要がなくなりました。
時折、彼に10回実行させ、その後に失敗したのを見るのは奇妙な気持ちがします。最近、ticktickの要約分析を依頼したのに、10回以上失敗しました。
総じて言えば、彼を使って探索するのは非常に適しています。
どのようにそれを有効にするか?GPTsの中にオプションがあり、それを選択することで、GPTsはこの能力を得ます。私の現在の対話の方法は、Pythonの能力やコード実行能力を活用するように彼に伝え、話し続けます:
上記のやり取りからわかる通り、全体の過程は非常に簡単です。
3.1 データ分析と可視化
ここでの方法は、私たちの要求を最初に説明せず、CSVまたはExcelファイルをそのまま投げれば、彼は直接分析ができます。好ましい表現のためのグラフを見つけることができます。不満があれば、次に詳しく説明すれば良いのです。
現代企業や研究環境において、データ分析と可視化はデータの傾向やパターンを把握するための重要なツールです。ChatGPTのコードインタープリターは、pandasやmatplotlibなどの強力なデータサイエンスライブラリをサポートすることにより、このプロセスを大幅に簡素化しました。ユーザーは自然言語でリクエストを行い、ChatGPTにデータ操作を指示し、グラフを生成することで、データ分析をより直接的かつユーザーフレンドリーに行うことができます。
例えば、市場分析者は製品の販売データを分析し、異なる地域の販売パフォーマンスを展示する必要があるかもしれません。コードインタープリターを使用すれば、販売データを含むCSVファイルを読み込むという単純な指示を出すことで、pandasを用いて各地域の総販売額を計算し、matplotlibで棒グラフを生成することができます。この全過程は、複雑なコードを書くことなく、データ分析のタスクと可視化の必要性を簡潔に説明するだけで完了します。
また、コードインタープリターの強力な機能により、時系列分析、予測モデリング、複雑な統計テストを簡単に行うことができます。例えば、環境科学者が過去10年間の気温変化データを分析したい場合、彼らはデータセットを読み込み、平滑化または回帰モデルを適用し、トレンドを示すグラフを迅速に生成することができます。
グラフについては、日常的な分析はExcel内ですでにかなりの機能があり、専門的なツールもたくさん有ります。ChatGPTは我々普通の人にとって、解析の観点や解釈の視点を提供してくれる価値があります。たとえば、
ここで一つ問題があります。もし図示が中国語であれば、表示できないかもしれません。フォントファイルをアップロードする必要がありますが、現在は解決策がありません。
3.2 ファイル変換の柔軟性
今のところ、この方法はあまり良くないようですが、試す価値はあります。私が行った試みはmp4からmp3への変換であり、それほど意義があるとは言えませんが、無いよりはマシです。画像の背景を削除するという理論と似ています。
ファイルフォーマットの変換は、多くの専門分野で一般的なニーズであり、特に大量の文書やマルチメディアファイルを扱う際に重要です。コードインタープリターはファイル変換プロセスを簡素化することで、大きな利便性を提供します。科学研究、エンジニアリング設計、または日常業務の操作において、異なるフォーマット間で迅速かつ正確にファイルを変換できることは、効率を向上させるための重要な要素です。
たとえば、Pythonのpandasライブラリを統合することで、CSVファイルからExcelファイルへの変換、またはその逆も簡単に実現できます。異なるソフトウェアプラットフォーム間でデータを移行して使用する必要があるユーザーにとって、これは大きな利便性となります。たとえば、財務分析者は財務報告書をExcelからCSV形式に変換する必要があります。コードインタープリターを使用すれば、このタスクは単純な命令で完了できます。
画像処理においては、コードインタープリターはPythonのPIL(Pillow)ライブラリを利用して異なる画像フォーマット間の変換を実現できます。たとえば、JPEGからPNGへの変換です。これは画像編集、ウェブデザイン、印刷業界で特に重要です。デザイナーや写真家は、異なる出力要件に応じて画像フォーマットを迅速に調整するために、コードインタープリターを活用できます。
総じて、コードインタープリターの応用シーンは広範囲にわたり、強力な機能を持っています。単純なファイル形式の変換から複雑なデータ分析と可視化まで、現代のツールとしての実用性と革新性を示しています。これらの機能は、業務の効率を向上させるだけでなく、技術に詳しくないユーザーが本来専門知識を必要とするタスクをより簡単に扱えることを可能にしています。技術の進歩とユーザーのニーズの拡大に伴い、コードインタープリターはさらに多くの分野で独自の価値を発揮することが期待されます。
3.3 コード開発およびプロトタイプ設計
コードインタープリターはソフトウェア開発とプロトタイプ設計に革命的なツールを提供し、開発者がコード片を迅速に反復させ、テストすることを可能にします。即時のフィードバックと実行環境を提供することにより、コードインタープリターは開発者がアルゴリズムと機能をリアルタイムで検証できるようにし、開発周期を大幅に短縮し効率を向上させます。これは開発初期に特に有用で、概念を検証したり新しいアイデアをテストしたりする際に即座に結果を取得でき、伝統的な開発におけるコンパイルと実行の待ち時間を回避できます。
例えば、開発者はコードインタープリターを使用して、ウェブスクレイピングスクリプトのプロトタイプを迅速に作成し、さまざまな解析手法をテストしたり、データ統合プロセスが期待通りであるかどうかを検証したりすることができます。シンプルなコマンドにより、コードインタープリターはスクリプトを即座に実行し、出力を表示し、デバッグ情報を提供するため、開発者は問題を即座に特定し調整することができます。
- ウェブコンテンツをロードする:
requests
ライブラリを使用してターゲットサイトからHTMLコンテンツを取得します。 - HTMLを解析する:
BeautifulSoup
などのライブラリを使用してHTMLを解析し、必要なデータを抽出します。 - データ処理:抽出したデータを洗練させ、フォーマットし、分析や保存に備えます。
- 結果を表示する:データを印刷したり可視化したりして、スクレイピング結果の正確性を確認します。
1 | import requests |
このシーンでは、テストや検証の仕事をサポートでき、比較するときにプロジェクトを開始して初期化する必要がないというメリットがあります。確かに、最終的にはそうする必要がありますが、私たちの時間を節約してくれます。
また、コードインタープリターは豊富なライブラリやモジュールをサポートしているため、開発者はTensorFlowやPyTorchを用いて機械学習モデルの迅速なプロトタイプ開発などの最新の開発ツールや言語の機能を利用できます。これにより、新しい技術を探索するスピードが加速され、開発者は新しいツールを試して学ぶための安全な実験環境を得られます。
3.4 複雑な数学問題の解決
コードインタープリターはプログラミングやソフトウェア開発の強力なツールであるだけでなく、複雑な数学問題を解決するための効果的なアシスタントでもあります。NumpyやScipyのような科学計算ライブラリを統合することで、コードインタープリターは基本的な算術計算から複雑な数学モデルや統計解析に至るまで広範囲な数学演算を実行することができます。
科学研究や工学の分野では、研究者やエンジニアが莫大なデータに対して複雑な数学処理を行う必要がしばしばあります。それには、線形代数演算、フーリエ変換、統計データ分析などが含まれます。コードインタープリターはこれらの演算を迅速に実行し、直感的な結果出力を提供します。ユーザーは自分の演算が正しいか、データが示す傾向やパターンを即座に確認できるようになります。
例えば、ある環境科学者が気候変動が地域の温度に与える影響を研究しているとします。コードインタープリターを使えば、彼らは歴史的な温度データを読み込み、統計モデルを適用して温度変化を分析し、結果を可視化するグラフを生成できます。この即時のフィードバックと強力な計算能力により、研究者はデータの分析や解釈により集中できるようになります。数値処理に関してはあまり気を使わずに済むからです。
3D表面 | フラクタル |
---|---|
上記の例には、現実に成熟した解決策がありますが、
4. コードインタープリターの原理解析
私が聞いたこと
1 | Pythonの能力を利用して、サンドボックス内のLinuxの完全バージョン情報とPythonのバージョン情報を教えてください。最後に、より詳細な情報を取得するための2つのコマンドを実行し、すべての結果を表示します。これら2つのコマンドはそれぞれ: uname -a lsb_release -a |
彼の答え
現在のサンドボックス環境において、我々は以下のシステムとPythonの詳細情報を取得しました:
Linux 完全バージョン情報:
Linux-4.4.0-x86_64-with-glibc2.36
Python バージョン情報:
3.11.8 (main, Mar 12 2024, 11:41:52) [GCC 12.2.0]
uname -a
コマンドの実行結果:Linux 3dfa9ec0-11da-496f-831c-878f4773c1c6 4.4.0 #1 SMP Sun Jan 10 15:06:54 PST 2016 x86_64 GNU/Linux
- これは、Linuxカーネルバージョン4.4.0が2016年に構築されたもので、x86_64アーキテクチャが採用されていることを示しています。
lsb_release -a
コマンドの実行結果:Distributor ID: Debian Description: Debian GNU/Linux 12 (bookworm) Release: 12 Codename: bookworm
- これは、現在のオペレーティングシステムがDebian GNU/Linuxで、バージョン番号は12で、コード名はbookwormであることを示しています。
ここからわかるのは、これはPythonを実行できるサンドボックスであり、実際には明確な制限があります:
- インターネットへのアクセスは禁止されています
- テストの結果、curlはアクセスできるようです
- コマンドのタイムアウトは120秒です
- 時間がかかりすぎると、接続が断たれます
- ルートアクセスは禁止されています
- ソフトウェアのインストールに影響を与えることがあります
本記事は、プロンプト内にコードを書く必要がないことを示し、この機能をうまく活用することができるということを伝えています。
5. 結論:今後のコードインタープリターの可能性
コードインタープリターは革新的なツールとして、さまざまな分野での応用可能性と実用価値を示しています。データ科学からソフトウェア開発、複雑な数学問題の解決からプロトタイプ設計の迅速な反復に至るまで、コードインタープリターは作業効率を向上させ、研究と開発に前例のない柔軟性とスピードを提供します。今後、人工知能技術の進歩とともに、コードインタープリターがより高度な機能、たとえばより深い機械学習の統合、 自動化されたテスト生成、そしてクラウドコラボレーションなどを組み込むことが期待され、
これらの拡張がその応用範囲をさらに広げ、現代技術への影響を深めることになるでしょう。