(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025041568
(43)【公開日】2025-03-26
(54)【発明の名称】大規模言語モデルと対話するためのプログラミング言語
(51)【国際特許分類】
G06F 8/30 20180101AFI20250318BHJP
【FI】
G06F8/30
【審査請求】未請求
【請求項の数】20
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024158275
(22)【出願日】2024-09-12
(31)【優先権主張番号】18/367,798
(32)【優先日】2023-09-13
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVASCRIPT
2.3GPP
3.QRコード
4.JAVA
(71)【出願人】
【識別番号】300015447
【氏名又は名称】エスアーペー エスエー
【住所又は居所原語表記】Dietmar-Hopp-Allee 16, 69190 Walldorf, Germany
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100188558
【弁理士】
【氏名又は名称】飯田 雅人
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(72)【発明者】
【氏名】デイヴィッド・カンツ
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BC12
5B376BC31
5B376BC63
(57)【要約】
【課題】大規模言語モデルと対話するためのプログラミング言語を提供すること。
【解決手段】一例では、インターフェースを提供するソフトウェアパッケージが提供され、このインターフェースは、そのソフトウェアが実行されたときに、ユーザが、大規模言語モデル(LLM)に送出されるプロンプトに文脈情報を追加してLLMと対話するようにインターフェースに指示するスクリプト言語を使用して、自然言語プロンプトを提供できるようなものである。次いで、インターフェースは、LLMによって生成されたプログラミングコードを抽出し、評価することもでき、それによって、ユーザが編集および/またはコピー/ペーストする必要なく、生成されたコードがソフトウェアパッケージ内で直ちに使用されることが可能になる。
【選択図】なし
【特許請求の範囲】
【請求項1】
少なくとも1つのハードウェアプロセッサと、
命令を記憶するコンピュータ可読媒体とを備え、前記命令が、前記少なくとも1つのハードウェアプロセッサによって実行されると前記少なくとも1つのハードウェアプロセッサに、
スクリプト言語インターフェースによって、ソフトウェアプログラミングコード内のあるコマンドを識別することであって、前記コマンドがスクリプト言語インターフェースライブラリ内に定義されている、識別すること、
前記コマンドを自然言語プロンプトのユーザ部分に変換すること、
前記自然言語プロンプトに、事前定義のシステム部分を追加すること、
前記自然言語プロンプトを大規模言語モデル(LLM)に送出して、前記自然言語プロンプトに基づいて、第1のプログラミング言語で書かれた第1のソフトウェアコード片を生成すること、
前記第1のソフトウェアコード片を、前記第1のプログラミング言語の検証関数を使用して検証すること、および
前記第1のソフトウェアコード片を前記ソフトウェアプログラミングコードに挿入すること
を含む動作を実施させる、システム。
【請求項2】
前記コマンドが、所望のプログラミングコード片について自然言語で説明された自然言語部分と、1つまたは複数のテスト関数とを含む、請求項1に記載のシステム。
【請求項3】
前記動作が、
前記第1のソフトウェアコード片に対して前記1つまたは複数のテスト関数を実行すること
をさらに含み、
前記挿入することが、前記第1のソフトウェアコード片が前記1つまたは複数のテスト関数の全てに合格したとの判定に応答して実施される、
請求項2に記載のシステム。
【請求項4】
前記第1のソフトウェアコード片が前記検証関数に失敗したとの判定に応答して、前記自然言語プロンプトを前記LLMに再送出することによって、前記第1のソフトウェアコード片を再生成する、請求項1に記載のシステム。
【請求項5】
前記第1のソフトウェアコード片が前記1つまたは複数のテスト関数のうちの1つまたは複数に失敗したとの判定に応答して、前記自然言語プロンプトを前記LLMに再送出することによって、前記第1のソフトウェアコード片を再生成する、請求項3に記載のシステム。
【請求項6】
前記動作が、
前記コマンドのハッシュを、前記コマンドにハッシュ関数を適用することによって生成することと、
前記ハッシュおよび前記第1のソフトウェアコード片をファイルシステムキャッシュ内に保存することと
をさらに含む、請求項1に記載のシステム。
【請求項7】
前記動作が、
スクリプト言語インターフェースによって、ソフトウェアプログラミングコード内の第2のコマンドを識別することと、
前記第2のコマンドのハッシュを、前記コマンドに前記ハッシュ関数を適用することによって生成することと、
前記第2のコマンドの前記ハッシュが前記ファイルシステムキャッシュ内に収容されているかどうかを判定することと、
前記第2のコマンドの前記ハッシュが前記ファイルシステムキャッシュ内に収容されているとの判定に応答して、前記コマンドを第2の自然言語プロンプトのユーザ部分に変換して前記第2の自然言語プロンプトを前記LLMに送出するのではなく、前記第1のソフトウェアコード片を前記ファイルシステムキャッシュから取り出して、前記第1のソフトウェアコード片を前記ソフトウェアプログラミングコードに挿入することと
をさらに含む、請求項6に記載のシステム。
【請求項8】
スクリプト言語インターフェースによって、ソフトウェアプログラミングコード内のあるコマンドを識別するステップであって、前記コマンドがスクリプト言語インターフェースライブラリ内に定義されている、ステップと、
前記コマンドを自然言語プロンプトのユーザ部分に変換するステップと、
前記自然言語プロンプトに、事前定義のシステム部分を追加するステップと、
前記自然言語プロンプトを大規模言語モデル(LLM)に送出して、前記自然言語プロンプトに基づいて、第1のプログラミング言語で書かれた第1のソフトウェアコード片を生成するステップと、
前記第1のソフトウェアコード片を、前記第1のプログラミング言語の検証関数を使用して検証するステップと、
前記第1のソフトウェアコード片を前記ソフトウェアプログラミングコードに挿入するステップと
を含む、方法。
【請求項9】
前記コマンドが、所望のプログラミングコード片について自然言語で説明された自然言語部分と、1つまたは複数のテスト関数とを含む、請求項8に記載の方法。
【請求項10】
前記第1のソフトウェアコード片に対して前記1つまたは複数のテスト関数を実行するステップ
をさらに含み、
前記挿入するステップが、前記第1のソフトウェアコード片が前記1つまたは複数のテスト関数の全てに合格したとの判定に応答して実施される、
請求項9に記載の方法。
【請求項11】
前記第1のソフトウェアコード片が前記検証関数に失敗したとの判定に応答して、前記自然言語プロンプトを前記LLMに再送出することによって、前記第1のソフトウェアコード片を再生成する、請求項8に記載の方法。
【請求項12】
前記第1のソフトウェアコード片が前記1つまたは複数のテスト関数のうちの1つまたは複数に失敗したとの判定に応答して、前記自然言語プロンプトを前記LLMに再送出することによって、前記第1のソフトウェアコード片を再生成する、請求項10に記載の方法。
【請求項13】
前記コマンドのハッシュを、前記コマンドにハッシュ関数を適用することによって生成するステップと、
前記ハッシュおよび前記第1のソフトウェアコード片をファイルシステムキャッシュ内に保存するステップと
をさらに含む、請求項8に記載の方法。
【請求項14】
スクリプト言語インターフェースによって、ソフトウェアプログラミングコード内の第2のコマンドを識別するステップと、
前記第2のコマンドのハッシュを、前記コマンドに前記ハッシュ関数を適用することによって生成するステップと、
前記第2のコマンドの前記ハッシュが前記ファイルシステムキャッシュ内に収容されているかどうかを判定するステップと、
前記第2のコマンドの前記ハッシュが前記ファイルシステムキャッシュ内に収容されているとの判定に応答して、前記コマンドを第2の自然言語プロンプトのユーザ部分に変換して前記第2の自然言語プロンプトを前記LLMに送出するのではなく、前記第1のソフトウェアコード片を前記ファイルシステムキャッシュから取り出して、前記第1のソフトウェアコード片を前記ソフトウェアプログラミングコードに挿入するステップと
をさらに含む、請求項13に記載の方法。
【請求項15】
命令を記憶する非一時的なマシン可読媒体であって、前記命令が、1つまたは複数のプロセッサによって実行されると前記1つまたは複数のプロセッサに、
スクリプト言語インターフェースによって、ソフトウェアプログラミングコード内のあるコマンドを識別することであって、前記コマンドがスクリプト言語インターフェースライブラリ内に定義されている、識別することと、
前記コマンドを自然言語プロンプトのユーザ部分に変換することと、
前記自然言語プロンプトに、事前定義のシステム部分を追加することと、
前記自然言語プロンプトを大規模言語モデル(LLM)に送出して、前記自然言語プロンプトに基づいて、第1のプログラミング言語で書かれた第1のソフトウェアコード片を生成することと、
前記第1のソフトウェアコード片を、前記第1のプログラミング言語の検証関数を使用して検証することと、
前記第1のソフトウェアコード片を前記ソフトウェアプログラミングコードに挿入することと
を含む動作を実施させる、非一時的なマシン可読媒体。
【請求項16】
前記コマンドが、所望のプログラミングコード片について自然言語で説明された自然言語部分と、1つまたは複数のテスト関数とを含む、請求項15に記載の非一時的なマシン可読媒体。
【請求項17】
前記動作が、
前記第1のソフトウェアコード片に対して前記1つまたは複数のテスト関数を実行すること
をさらに含み、
前記挿入することが、前記第1のソフトウェアコード片が前記1つまたは複数のテスト関数の全てに合格したとの判定に応答して実施される、
請求項16に記載の非一時的なマシン可読媒体。
【請求項18】
前記第1のソフトウェアコード片が前記検証関数に失敗したとの判定に応答して、前記自然言語プロンプトを前記LLMに再送出することによって、前記第1のソフトウェアコード片を再生成する、請求項15に記載の非一時的なマシン可読媒体。
【請求項19】
前記第1のソフトウェアコード片が前記1つまたは複数のテスト関数のうちの1つまたは複数に失敗したとの判定に応答して、前記自然言語プロンプトを前記LLMに再送出することによって、前記第1のソフトウェアコード片を再生成する、請求項17に記載の非一時的なマシン可読媒体。
【請求項20】
前記動作が、
前記コマンドのハッシュを、前記コマンドにハッシュ関数を適用することによって生成することと、
前記ハッシュおよび前記第1のソフトウェアコード片をファイルシステムキャッシュ内に保存することと
をさらに含む、請求項15に記載の非一時的なマシン可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本書は一般に、コンピュータシステムに関する。より詳細には、本書は、大規模言語モデル(LLM)の使用に関する。
【背景技術】
【0002】
LLMとは、人間の言語を理解し生成するように大量のデータセットに対してトレーニングされた人工知能(AI)システムを指す。これらのモデルは、モデルが質問に答え、会話し、テキストを生成し、さまざまな言語関連のタスクを実施することのできるような形で、自然言語を処理し理解するように設計される。
【発明の概要】
【課題を解決するための手段】
【0003】
本開示は、同様の参照符号が類似の要素を示す添付の図面の図中に、限定ではなく例として示されている。
【図面の簡単な説明】
【0004】
【
図1】例示的な一実施形態による、ソフトウェアプログラミングコードを自動的に生成するためのシステムを示すブロック図である。
【
図2】例示的な一実施形態による、ソフトウェアプログラミングコードの一部分を自動的に生成するための方法を示すフロー図である。
【
図3】上述したデバイスのうちのいずれか1つまたは複数上にインストールすることのできるソフトウェアのアーキテクチャを示すブロック図である。
【
図4】例示的な一実施形態による、コンピュータシステムの形態をとるマシンであって、本明細書において論じる方法のうちのいずれか1つまたは複数をマシンに実施させるための命令のセットがその中で実行されることの可能な、マシンの概略図である。
【発明を実施するための形態】
【0005】
次に続く説明では、例示的なシステム、方法、技法、命令シーケンス、およびコンピューティングマシンプログラム製品について論じる。以下の説明では、説明を目的として、本主題のさまざまな例示的な実施形態の理解をもたらすために多数の具体的詳細が記載される。しかし、これらの具体的詳細なしでも本主題のさまざまな例示的な実施形態を実践できることが、当業者には明白となろう。
【0006】
新規のソフトウェアアプリケーションを作成するためにプログラミングコードを生成することには、手間と時間がかかることがある。LLMは、コンピュータモデルが自然言語のユーザプロンプトに基づいてプログラミングコードを作成できるようにすることによって、このプロセスを大いに高速化する機会をもたらす。しかし、LLMを使用してプログラミングコードを作成する場合、技術的な問題に遭遇する。具体的には、生成されたコードには一般に、ユーザが手作業により繰り返し修正しなければならないエラーがあり、多くの場合それは、コードをユーザの意図によりよく適したものにする、または所望のプログラミング言語の構文に適合したものにするのに役立つ文脈情報を、LLMが利用できないためである。さらに、生成されたコードを使用するには、ユーザによる多数のコピーおよびペーストが必要となる。
【0007】
例示的な一実施形態では、インターフェースを提供するソフトウェアパッケージが提供され、このインターフェースは、そのソフトウェアが実行されたときに、ユーザが、LLMに送出されるプロンプトに文脈情報を追加してLLMと対話するようにインターフェースに指示するスクリプト言語を使用して、自然言語プロンプトを提供できるようなものである。次いで、インターフェースは、LLMによって生成されたプログラミングコードを抽出し、評価することもでき、それによって、ユーザが編集および/またはコピー/ペーストする必要なく、生成されたコードがソフトウェアパッケージ内で直ちに使用されることが可能になる。
【0008】
情報を生成するために使用されるLLMは一般に、生成人工知能(GAI)モデルと呼ばれる。GAIモデルは、generative pre-trained transformer(GPT)モデルまたは双方向エンコーダとして実装することができる。GPTモデルは、自然言語などの系列データの処理に秀でた一種の深層ニューラルネットワークであるトランスフォーマアーキテクチャを使用する、一種の機械学習モデルである。
【0009】
双方向エンコーダは、入力系列が順方向と逆方向の2方向に処理される、一種のニューラルネットワークアーキテクチャである。順方向では、系列の初めから開始し、入力を一度に1トークンずつ処理し、一方、逆方向では、系列の終わりから開始し、入力を逆順に処理する。
【0010】
双方向エンコーダは、入力系列を両方向に処理することによって、単語間のより多くのコンテキスト情報および依存関係を捕捉して、より良好な性能をもたらすことができる。
【0011】
双方向エンコーダは、双方向長短期記憶(BiLSTM)モデルまたはBERT(Bidirectional Encoder Representations from Transformers)モデルとして実装することができる。
【0012】
各方向は、それ自体の隠れ状態を有し、最終出力は、これら2つの隠れ状態の組合せである。
【0013】
長短期記憶(LSTM)は、一種の再帰型ニューラルネットワーク(RNN)であり、系列データ内の長期依存関係の学習を困難にすることのある、従来のRNNにおける勾配消失問題を克服するように設計されたものである。
【0014】
LSTMは、セル状態を含み、セル状態は、時間にわたって情報を格納する記憶としての働きをする。セル状態は、入力ゲート、忘却ゲート、および出力ゲートの3つのゲートによって制御される。入力ゲートは、セル状態に新たな情報がどれだけ追加されるかを決定し、一方、忘却ゲートは、古い情報がどれだけ破棄されるかを決める。出力ゲートは、セル状態のうちのどれだけが出力を計算するために使用されるかを決定する。各ゲートは、シグモイド活性化関数によって制御され、シグモイド活性化関数は、0から1の間の値を出力し、この値が、ゲートを通過する情報の量を決定する。
【0015】
BiLSTMでは、順方向と逆方向に別々のLSTMがある。各時間ステップにおいて、順方向LSTMセルと逆方向LSTMセルが、現在の入力トークン、および以前の時間ステップからの隠れ状態を受け取る。順方向LSTMは、入力トークンを左から右に処理し、一方、逆方向LSTMは、入力トークンを右から左に処理する。
【0016】
各時間ステップにおける各LSTMセルの出力は、入力トークンと、以前の隠れ状態との組合せであり、それにより、モデルが、入力トークン間の短期依存関係と長期依存関係の両方を捕捉することが可能になっている。
【0017】
BERTは、トランスフォーマとして知られるモデルの双方向トレーニングを、言語モデリングに適用する。これは、テキスト系列を左から右に、または右から左に調べていた従来技術の解決策とは対照的である。双方向にトレーニングされた言語モデルは、単一方向言語モデルよりも言語のコンテキストおよび流れを深く認識する。
【0018】
より具体的には、このトランスフォーマエンコーダは、情報の系列全体を一度で読み取り、したがって、双方向であると見なされる(が、それは実際には無方向であるとも言えよう)。この特徴により、モデルが、1つの情報のコンテキストをその周囲全てに基づいて学習することが可能になる。
【0019】
他の例示的な実施形態では、敵対的生成ネットワーク(GAN)実施形態を使用することができる。GANは、新たな例を生成するようにトレーニングされた生成器モデルと、例を本物と生成物のどちらかに分類しようとする識別器モデルの、2つのサブモデルを有する、教師あり機械学習モデルである。2つのモデルは、(ゲーム理論によるゼロサムゲームを使用して)敵対的に一緒にトレーニングされ、それは識別器モデルがおよそ半分の時間騙されるまで続き、識別器モデルがおよそ半分の時間騙されるとはすなわち、生成器モデルがもっともらしい例を生成している、ということである。
【0020】
生成器モデルは、固定長のランダムベクトルを入力としてとり、当該のドメインにおけるサンプルを生成する。このベクトルはガウス分布からランダムに取り出され、生成プロセスの種を与えるためにこのベクトルが使用される。トレーニング後、この多次元ベクトル空間内の点は、データ分布の圧縮表現を形成して、問題ドメイン内の点に対応するようになる。このベクトル空間は、潜在空間、または潜在変数から成るベクトル空間と呼ばれる。潜在変数、または隠れ変数は、あるドメインにとって重要であるが直接観察できない変数である。
【0021】
識別器モデルは、このドメインからの例を入力としてとり(本物または生成物)、本物か偽物(生成物)かの2値クラスラベルを予測する。
【0022】
生成モデリングは、教師なし学習問題であるが、GANアーキテクチャの巧妙な特性は、生成モデルのトレーニングが教師あり学習問題として枠付けされるというものである。
【0023】
2つのモデル(生成器と識別器)は、一緒にトレーニングされる。生成器は、サンプルのバッチを生成し、これらとドメインからの本物の例とが識別器に提供され、本物か偽物かに分類される。
【0024】
次いで、識別器は、本物のサンプルと偽物のサンプルを次ラウンドで識別するのが上達するように更新され、重要なことには、生成器は、生成されたサンプルが識別器をどれだけうまく騙したかに基づいて更新される。
【0025】
別の例示的な実施形態では、GAIモデルが変分オートエンコーダ(VAE)モデルである。VAEは、入力データを、潜在コードと呼ばれるより低次元の表現に圧縮するエンコーダネットワークと、潜在コードから新たなデータを生成するデコーダネットワークとを備える。
【0026】
GAIモデルの形態にかかわらず、GAIモデルは生成分類器を含み、生成分類器は、例えばナイーブベイズ分類器として実装することができる。
【0027】
本解決策は、どんなタイプのGAIモデルとも機能するが、特にGPTモデルとともに使用される一実装形態について説明される。そのような一実装形態では、インターフェースによって提供されるプログラミング言語はPromptScriptと呼ばれることがあり、というのもそれはプロンプトを介してGPTモデルと対話するように設計されており、またそれはスクリプト言語であるためである。いくつかの例示的な実施形態では、このスクリプト言語を、JavaScriptなど、既存のスクリプト言語の上に構築することができるが、それは必須ではない。
【0028】
さらに、例示的な一実施形態では、スクリプト言語(例えばPromptScript)で書かれた同一の自然言語プロンプトが後に提供された場合に、コードを再度生成されるように求めるのではなく、以前に生成されたコードをキャッシュから取り出して利用でき、それにより、プロンプトの将来的な呼出しの実行が大いに高速化するように、生成されたコードをキャッシュするキャッシュメカニズムが導入される。
【0029】
本解決策はまた、どんなタイプのアプリケーションディベロッパソフトウェアとも機能する。
【0030】
クラウドコンピューティングは、共用コンピュータ処理リソースおよびデータをコンピュータおよび他のデバイスにオンデマンドで提供する、インターネットベースのコンピューティングと説明することができる。ユーザは、それぞれのセッションを確立することができ、その間、処理リソースおよび帯域幅が利用される。セッションの間、例えば、ユーザは、構成可能なコンピューティングリソース(例えばコンピュータネットワーク、サーバ、記憶領域、アプリケーション、およびサービス)の共用プールへのオンデマンドアクセスを提供される。コンピューティングリソースは、ユーザの要求を満たすようにプロビジョニングおよび解放される(例えばスケーリングされる)ことが可能である。
【0031】
クラウドプラットフォームにおける一般的なアーキテクチャには、サービス(マイクロサービスとも呼ばれる)が含まれ、それは、サービス指向アーキテクチャ(SOA)において人気を博してきた。そのようなSOAでは、アプリケーションは、複数の独立したサービスから成る。これらのサービスは、クラウドプラットフォーム内でデプロイおよび管理され、クラウドインフラストラクチャの上でランされる。いくつかの例では、サービスベースのアプリケーションは、アプリケーションプログラミングフレームワークを使用して作成および/または拡張することができる。例示的な一実施形態では、作成されたソフトウェアサーバがサービスを実装する。
【0032】
図1は、例示的な一実施形態による、ソフトウェアプログラミングコードを自動的に生成するためのシステム100を示すブロック図である。ここで、アプリケーション開発サーバ102は、アプリケーション開発クライアント104などの1つまたは複数のクライアントがウェブサービス用のODataサーバなどのソフトウェアサーバを作成し管理することを可能にする、サーバを提供するものである。アプリケーション開発クライアント104は一般に、アプリケーション開発サーバ102を制御して、アプリケーションを第1のプログラミング言語を使用して作成するために使用され、アプリケーション開発クライアント104は、ユーザがソフトウェアアプリケーション106を作成するところとすることができる(ただしそのような場合、ソフトウェアアプリケーション106は一般に、バックアップとしてかつ/または他のユーザがそれを編集できるように、アプリケーション開発サーバ102にも格納されることになる)。しかし、この態様は限定するものではなく、いくつかの例示的な実施形態では、ソフトウェアアプリケーション106は、アプリケーション開発サーバ102上にのみ作成される。コンパイルまたは解釈されるまでは基本的にプログラミング言語の形態をとるソフトウェアアプリケーション106は一般に、プログラミング言語専用ファイル110を含んだライブラリ108を含む。例えば、ユーザがアプリケーション開発クライアント104を使用して、JavaScriptで書かれたアプリケーションを作成したいと望む場合、プログラミング言語専用ファイルはJavaScriptライブラリである。
【0033】
例示的な一実施形態では、ユーザがそれでプログラムを作りたいと望む、ここではJavaScriptであるプログラミング言語の上に、専用のプログラミング言語が追加され、したがって、ここではPromptScriptパッケージ112と呼ばれるインターフェースパッケージが、ライブラリ108内のプログラミング言語専用ファイル110内に含まれる。PromptScriptパッケージ112は、本明細書において説明するLLMプログラミング言語インターフェースを作成し実行するのに必要な全てのファイルを含む。
【0034】
したがって、PromptScriptパッケージ112は、実行されると、PromptScriptインターフェース114を起動し、ユーザは、PromptScriptインターフェース114と通信して、LLM116を使用してアプリケーションコードを生成することができる。
【0035】
先に述べたように、LLM116によって生成されたコードを将来的に呼び出せるようにキャッシュするファイルシステムキャッシュ118を設けることができる。
【0036】
より具体的には、PromptScriptインターフェース114は、(任意選択で1つまたは複数のテスト関数(test function)を含む)プロンプトを、ユーザから(アプリケーション開発クライアント104を介して)受け取る。最初に、ファイルシステムキャッシュ118が調べられて、同じプロンプトが以前に受け取られ、処理されたかどうかが判定される。これは、例えば、提供されたプロンプトにハッシュ関数を適用し、ハッシュ関数によって生成されたハッシュがシステムキャッシュ内にすでに格納されているかどうかを判定することによって、実施することができる。格納されている場合、ハッシュに関連する生成されたコードを、ユーザが構築しているアプリケーションコードの一部として使用できるように、ファイルシステムキャッシュ118からPromptScriptパッケージ112に返すことができる。
【0037】
格納されていない場合、PromptScriptインターフェース114は、プロンプトに、事前定義のシステムメッセージを追加し、組み合わされたシステムメッセージ/プロンプト(設けられたテスト関数があればそれを含む)をLLM116に送出し、LLM116が、組み合わされたシステムメッセージ/プロンプトに基づいてコードを生成する。次いで、PromptScriptインターフェース114がこのコードをパースする。システムメッセージはLLM116に、コードをマークダウンフェンス(markdown fence)の内側に返すように命令した可能性がある。コードフェンスまたはコードブロックとしても知られるマークダウンフェンスは、コードのブロックの前後に特殊文字を挿入することによって、強調表示されているコードのブロックが表示される、構文上の特徴である。例えば、バックチック(`)またはチルダ(~)を、コードブロックの初めと終わりに挿入して、コードの境界を定めることができる。
【0038】
その場合、PromptScriptインターフェース114は、返されたコードを、フェンスを探すことによってパースすることができ、フェンスを探すことにより、フェンスの外側に返された無関係のテキストがあればそれをPromptScriptインターフェース114が破棄することが可能になる。したがって、例えば、LLM116は、フェンスの内側の生成された何らかのJavaScriptコードを、そのJavaScriptコードの前後の無関係な何らかのテキストとともに返すことがあり、その場合、PromptScriptインターフェース114は、フェンスを使用してJavaScriptコードを抽出することができる。しかし、そのようなフェンスが見つからない場合、PromptScriptインターフェース114は、返されたコードをそのまま受け入れることができる。
【0039】
次いで、PromptScriptインターフェース114は、プログラミング言語専用の検証関数(validation function)を使用して、コードを検証する。JavaScriptは、提供されたコードがJavaScriptの構文上のおよび他のプログラミング要件を満たすかどうかを評価し、次いでそのコードを実行する、「eval」と呼ばれる関数を含む。eval関数は、どんな表現が入力文字列内にあろうともその結果を返す。コードが無効である場合、eval関数はエラーを返す。テスト関数は、生成されたコード片を、指定の入力および所望の指定の出力を使用して実行するものである。各テスト関数は、生成されたコードに対するユーザの意図を生成されたコードが満たしているかどうかをPromptScriptインターフェース114が判定するための方途を提供する。
【0040】
一例として、ユーザは、実行されると、フィボナッチ数列の、関数への入力によって指定された位置の値を生成する、JavaScriptで書かれたフィボナッチ関数を生成したいと望むことがある。したがって、例えば、ユーザは、入力が「4」である場合、(数列内の初期位置に位置0が割り当てられていると仮定して)「3」がフィボナッチ数列の4番目の位置にあるため、フィボナッチ関数が「3」を返すことを望むことがある。ユーザが単なる「JavaScriptで書かれたフィボナッチ関数を生成してください」というプロンプトをPromptScriptインターフェース114に入力する場合、生成された関数が、関数に対するユーザの意図を満たさない可能性がある。例えば、生成された関数は、フィボナッチ数列内の、入力された位置を含むその位置までの値の数列全体を出力する関数を返すことがある(例えば、生成された関数は、「4」が入力である場合、「0、1、1、2、3」を返すことになる)。したがって、このシナリオを回避するために、ユーザは、生成された関数の、特定の入力を与えられた場合の所望の出力を指定する、テスト関数「assert.equal(x(0), 0)」および「assert.equal(x(1), 1)」を設けることができる。
【0041】
PromptScriptインターフェース114は、返されたコードが任意のステージにおいて失敗した(例えばパースできない、検証関数に失敗した、またはユーザによって設けられたテスト関数のいずれかに失敗した)と判定した場合、コードを生成せよとのLLMへの要求を繰り返して、基本的にコード生成を再試行する。これらの評価の全てに合格するまでこれが続く。
【0042】
全ての評価に合格したコードを受け取った後、コードは、コンピュータプログラム内で使用するために(例えば後にコンパイルまたは解釈すべく)プログラミング言語専用ファイル110および/またはアプリケーション開発クライアント104に返されるとともに、格納するためにファイルシステムキャッシュ118に書き込まれてよい。
【0043】
PromptScriptインターフェース114により、PromptScriptで書かれたスクリプト言語コマンドが、ユーザによって記述されているコンピュータコード内に指定されることが可能になる。したがって、例えば、ユーザがJavaScriptプログラムを作成している場合、ユーザは最初に、JavaScriptコードの初めまたはその付近に「const p = require(‘PromptScript')」コマンドを指定することなどによって、PromptScriptパッケージ112をロードすべきであることをJavaScriptプログラム内に示すことができる。次いで、PromptScriptパッケージが、コードを生成するのに必要なLLMコールをトリガするためにJavaScriptコード内で使用することのできる一連のコマンドを指定する。
【0044】
したがって、ユーザは、上述したフィボナッチ関数を続けるために、ソフトウェアアプリケーション106のソフトウェアコード内に次の内容をタイプ入力することができる。
【0045】
Const result = p ‘a fibonnaci function'.t(x => {
assert.equal(x(0), 0)
assert.equal(x(1), 1)
}
【0046】
これを元に、PromptScriptインターフェース114が自然言語プロンプトを次のように生成し、次いでそれがシステムメッセージとともにLLM116に渡されてよい。
Javascriptを作成してください
フィボナッチ関数
次の
assert.equal(x(0), 0)
assert.equal(x(1), 1)
を満足させるもの
【0047】
システムメッセージは、次の通りとすることができる。
const systemMsg = "あなたはNode.jsのエキスパートです。説明したJavaScriptのものを作成し、それを```js...```フェンスの内側に返してください。そうすれば、私が`const result = eval(...)`を記述してそれを得ることができます。追加のテキストを出力しないでください。例:\n```js\nconst x = function(a){ console.log(a) };x```"
let userMsg = string
if (testFunction) userMsg += '\nしたがって、それは次のテスト関数を満足させています\n' + testFunction.toString()
【0048】
図2は、例示的な一実施形態による、ソフトウェアプログラミングコードの一部分を自動的に生成するための方法200を示すフロー図である。ここで、動作202において、ソフトウェアプログラミングコード内に指定されたスクリプト言語インターフェースが呼び出される。スクリプト言語インターフェースは、ソフトウェアプログラミングコード内の1つまたは複数の特定のコマンドを識別するように設計されている。動作204において、スクリプト言語インターフェースが、ソフトウェアプログラミングコード内の1つまたは複数の特定のコマンドのうちのあるコマンドを識別する。このコマンドは、ソフトウェアコード片を生成するための第1の自然言語プロンプトを収容した第1の部分と、任意選択で、1つまたは複数のテスト関数を収容した第2の部分とを含む。
【0049】
動作206において、第1の部分をハッシュ関数に通すことによって、第1の部分からハッシュが作成される。動作208において、同ハッシュを使用してファイルシステムキャッシュが調べられて、ファイルシステムキャッシュが同ハッシュをすでに収容しているかどうかが判定される。収容している場合、ソフトウェアコード片はすでに生成され、ファイルシステムキャッシュ内に格納されており、したがって、動作210において、ソフトウェアコード片がファイルシステムキャッシュから取り出されて、ソフトウェアプログラミングコードに挿入される。より具体的には、(文字列の形態をとる)コードはeval関数を使用して評価され、したがって、コードは基本的に、その場で解釈される。
【0050】
収容していない場合、動作212において、(第1の部分、および第2の部分が存在する場合はそれを含む)コマンドが、スクリプト言語インターフェースによって、システム部分内の事前定義のシステムメッセージも含む第2の自然言語プロンプトの、ユーザ部分に変換される。動作214において、第2の自然言語プロンプトが、入力としてLLMに送出され、LLMが、第2の自然言語プロンプトに基づいてソフトウェアコード片を生成する。動作216において、生成されたソフトウェアコード片が、スクリプト言語インターフェースによって受け取られる。
【0051】
動作218において、生成された第1のソフトウェアコード片から無関係なテキストが除去される。これは、システムメッセージがLLMにコードをマークダウンフェンス内に生成せよと命令した場合に、マークダウンフェンスの外側にテキストがあればそれを除去することを含むことができる。
【0052】
動作220において、生成されたソフトウェアコード片がソフトウェアプログラミングコードのプログラミング言語用の評価関数を使用して評価されて、生成されたソフトウェアコード片がそのプログラミング言語の1つまたは複数の要件に従って有効であるかどうかが判定される。有効ではない場合、方法200は動作214に戻り、動作214において、第2の自然言語プロンプトのLLMへの送出が再試行される。
【0053】
有効である場合、動作222において、生成されたソフトウェアコード片が、1つまたは複数のテスト関数が存在する場合はそれを使用してテストされて、1つまたは複数のテスト関数の全てが真と評価されるかどうかが判定される。真と評価されない場合、方法200は動作214に戻り、動作214において、第2の自然言語プロンプトのLLMへの送出が再試行される。
【0054】
真と評価された場合、動作224において、生成されたソフトウェアコード片がソフトウェアプログラミングコードに挿入される。より具体的には、(文字列の形態をとる)コードはeval関数を使用して評価され、したがって、コードは基本的に、その場で解釈される。動作226において、第1のプロンプトが将来的に呼び出されてもコードを再生成する必要がなく、将来的な呼出しが高速化するように、生成されたソフトウェアコード片がファイルシステムキャッシュ内に格納される。
【0055】
任意のステージにおいてエラーが返された場合、方法200は、第2の自然言語プロンプトがLLMに再送出されるようにすることができる。これにより、少なくとも非ゼロ温度LLM(非決定性LLM)において、LLMによって別の出力が生成されることが可能になる。任意選択で、返されたエラーがあればそれを、LLMに将来そのエラーを回避するように実質的に命令するために、第2の自然言語プロンプトとともにLLMに供給することができる。
【0056】
上記の開示に鑑みて、さまざまな例について以下に記載する。別々にまたは組合せて解釈される例の1つまたは複数の特徴は、本出願の開示内で考慮すべきであることに留意されたい。
【0057】
例1。
少なくとも1つのハードウェアプロセッサと、
命令を記憶するコンピュータ可読媒体とを備え、命令が、少なくとも1つのハードウェアプロセッサによって実行されると少なくとも1つのハードウェアプロセッサに、
スクリプト言語インターフェースによって、ソフトウェアプログラミングコード内のあるコマンドを識別することであって、コマンドがスクリプト言語インターフェースライブラリ内に定義されている、識別すること、
コマンドを自然言語プロンプトのユーザ部分に変換すること、
自然言語プロンプトに、事前定義のシステム部分を追加すること、
自然言語プロンプトをLLMに送出して、自然言語プロンプトに基づいて、第1のプログラミング言語で書かれた第1のソフトウェアコード片を生成すること、
第1のソフトウェアコード片を、第1のプログラミング言語の検証関数を使用して検証すること、および
第1のソフトウェアコード片をソフトウェアプログラミングコードに挿入すること
を含む動作を実施させる、システム。
【0058】
例2。コマンドが、所望のプログラミングコード片について自然言語で説明された自然言語部分と、1つまたは複数のテスト関数とを含む、例1のシステム。
【0059】
例3。動作が、
第1のソフトウェアコード片に対して1つまたは複数のテスト関数を実行すること
をさらに含み、
挿入することが、第1のソフトウェアコード片が1つまたは複数のテスト関数の全てに合格したとの判定に応答して実施される、
例2のシステム。
【0060】
例4。第1のソフトウェアコード片が検証関数に失敗したとの判定に応答して、自然言語プロンプトをLLMに再送出することによって、第1のソフトウェアコード片を再生成する、例1~3のいずれかのシステム。
【0061】
例5。第1のソフトウェアコード片が1つまたは複数のテスト関数のうちの1つまたは複数に失敗したとの判定に応答して、自然言語プロンプトをLLMに再送出することによって、第1のソフトウェアコード片を再生成する、例3のシステム。
【0062】
例6。動作が、
コマンドのハッシュを、コマンドにハッシュ関数を適用することによって生成することと、
ハッシュおよび第1のソフトウェアコード片をファイルシステムキャッシュ内に保存することと
をさらに含む、例1~5のいずれかのシステム。
【0063】
例7。動作が、
スクリプト言語インターフェースによって、ソフトウェアプログラミングコード内の第2のコマンドを識別することと、
第2のコマンドのハッシュを、コマンドにハッシュ関数を適用することによって生成することと、
第2のコマンドのハッシュがファイルシステムキャッシュ内に収容されているかどうかを判定することと、
第2のコマンドのハッシュがファイルシステムキャッシュ内に収容されているとの判定に応答して、コマンドを第2の自然言語プロンプトのユーザ部分に変換して第2の自然言語プロンプトをLLMに送出するのではなく、第1のソフトウェアコード片をファイルシステムキャッシュから取り出して、第1のソフトウェアコード片をソフトウェアプログラミングコードに挿入することと
をさらに含む、例1~6のいずれかのシステム。
【0064】
例8。
スクリプト言語インターフェースによって、ソフトウェアプログラミングコード内のあるコマンドを識別することであって、コマンドがスクリプト言語インターフェースライブラリ内に定義されている、識別することと、
コマンドを自然言語プロンプトのユーザ部分に変換することと、
自然言語プロンプトに、事前定義のシステム部分を追加することと、
自然言語プロンプトをLLMに送出して、自然言語プロンプトに基づいて、第1のプログラミング言語で書かれた第1のソフトウェアコード片を生成することと、
第1のソフトウェアコード片を、第1のプログラミング言語の検証関数を使用して検証することと、
第1のソフトウェアコード片をソフトウェアプログラミングコードに挿入することと
を含む、方法。
【0065】
例9。コマンドが、所望のプログラミングコード片について自然言語で説明された自然言語部分と、1つまたは複数のテスト関数とを含む、例8の方法。
【0066】
例10。
第1のソフトウェアコード片に対して1つまたは複数のテスト関数を実行すること
をさらに含み、
挿入することが、第1のソフトウェアコード片が1つまたは複数のテスト関数の全てに合格したとの判定に応答して実施される、
例9の方法。
【0067】
例11。第1のソフトウェアコード片が検証関数に失敗したとの判定に応答して、自然言語プロンプトをLLMに再送出することによって、第1のソフトウェアコード片を再生成する、例8~10のいずれかの方法。
【0068】
例12。第1のソフトウェアコード片が1つまたは複数のテスト関数のうちの1つまたは複数に失敗したとの判定に応答して、自然言語プロンプトをLLMに再送出することによって、第1のソフトウェアコード片を再生成する、例11の方法。
【0069】
例13。
コマンドのハッシュを、コマンドにハッシュ関数を適用することによって生成することと、
ハッシュおよび第1のソフトウェアコード片をファイルシステムキャッシュ内に保存することと
をさらに含む、例8~12のいずれかの方法。
【0070】
例14。
スクリプト言語インターフェースによって、ソフトウェアプログラミングコード内の第2のコマンドを識別することと、
第2のコマンドのハッシュを、コマンドにハッシュ関数を適用することによって生成することと、
第2のコマンドのハッシュがファイルシステムキャッシュ内に収容されているかどうかを判定することと、
第2のコマンドのハッシュがファイルシステムキャッシュ内に収容されているとの判定に応答して、コマンドを第2の自然言語プロンプトのユーザ部分に変換して第2の自然言語プロンプトをLLMに送出するのではなく、第1のソフトウェアコード片をファイルシステムキャッシュから取り出して、第1のソフトウェアコード片をソフトウェアプログラミングコードに挿入することと
をさらに含む、例8~13のいずれかの方法。
【0071】
例15。命令を記憶する非一時的なマシン可読媒体であって、命令が、1つまたは複数のプロセッサによって実行されると1つまたは複数のプロセッサに、
スクリプト言語インターフェースによって、ソフトウェアプログラミングコード内のあるコマンドを識別することであって、コマンドがスクリプト言語インターフェースライブラリ内に定義されている、識別することと、
コマンドを自然言語プロンプトのユーザ部分に変換することと、
自然言語プロンプトに、事前定義のシステム部分を追加することと、
自然言語プロンプトをLLMに送出して、自然言語プロンプトに基づいて、第1のプログラミング言語で書かれた第1のソフトウェアコード片を生成することと、
第1のソフトウェアコード片を、第1のプログラミング言語の検証関数を使用して検証することと、
第1のソフトウェアコード片をソフトウェアプログラミングコードに挿入することと
を含む動作を実施させる、非一時的なマシン可読媒体。
【0072】
例16。コマンドが、所望のプログラミングコード片について自然言語で説明された自然言語部分と、1つまたは複数のテスト関数とを含む、例15の非一時的なマシン可読媒体。
【0073】
例17。動作が、
第1のソフトウェアコード片に対して1つまたは複数のテスト関数を実行すること
をさらに含み、
挿入することが、第1のソフトウェアコード片が1つまたは複数のテスト関数の全てに合格したとの判定に応答して実施される、
例16の非一時的なマシン可読媒体。
【0074】
例18。第1のソフトウェアコード片が検証関数に失敗したとの判定に応答して、自然言語プロンプトをLLMに再送出することによって、第1のソフトウェアコード片を再生成する、例15~17のいずれかの非一時的なマシン可読媒体。
【0075】
例19。第1のソフトウェアコード片が1つまたは複数のテスト関数のうちの1つまたは複数に失敗したとの判定に応答して、自然言語プロンプトをLLMに再送出することによって、第1のソフトウェアコード片を再生成する、例18の非一時的なマシン可読媒体。
【0076】
例20。動作が、
コマンドのハッシュを、コマンドにハッシュ関数を適用することによって生成することと、
ハッシュおよび第1のソフトウェアコード片をファイルシステムキャッシュ内に保存することと
をさらに含む、例15~19のいずれかの非一時的なマシン可読媒体。
【0077】
図3は、上述したデバイスのうちのいずれか1つまたは複数上にインストールすることのできるソフトウェアアーキテクチャ302を示すブロック
図300である。
図3はソフトウェアアーキテクチャの非限定的な例にすぎず、本明細書において説明する機能を実施可能にするためには、他の多くのアーキテクチャを実装できることが理解されよう。さまざまな実施形態では、ソフトウェアアーキテクチャ302は、プロセッサ410、メモリ430、および入力/出力(I/O)コンポーネント450を含む
図4のマシン400などのハードウェアによって実装される。この例示的なアーキテクチャでは、ソフトウェアアーキテクチャ302は、各レイヤが特定の機能を提供することのできるレイヤのスタックとして概念化することができる。例えば、ソフトウェアアーキテクチャ302は、オペレーティングシステム304、ライブラリ306、フレームワーク308、およびアプリケーション310などのレイヤを含む。動作上、アプリケーション310は、いくつかの実施形態と矛盾することなく、このソフトウェアスタックを通じてAPIコール312を呼び出し、APIコール312に応答してメッセージ314を受け取る。
【0078】
さまざまな実装形態では、オペレーティングシステム304は、ハードウェアリソースを管理し、共通サービスを提供する。オペレーティングシステム304は、例えば、カーネル320、サービス322、およびドライバ324を含む。カーネル320は、いくつかの実施形態と矛盾することなく、ハードウェアと他のソフトウェアレイヤとの間の抽象化レイヤとしての働きをする。例えば、カーネル320は、さまざまな機能の中でもとりわけ、メモリ管理、プロセッサ管理(例えばスケジューリング)、コンポーネント管理、ネットワーキング、およびセキュリティ設定を行う。サービス322は、他のソフトウェアレイヤのための他の共通サービスを提供することができる。ドライバ324は、いくつかの実施形態に従って、下にあるハードウェアの制御、またはそのハードウェアとのインターフェースを担う。例として、ドライバ324は、ディスプレイドライバ、カメラドライバ、BLUETOOTH(登録商標)またはBLUETOOTH(登録商標) Low-Energyドライバ、フラッシュメモリドライバ、シリアル通信ドライバ(例えばユニバーサルシリアルバス(USB)ドライバ)、Wi-Fi(登録商標)ドライバ、オーディオドライバ、電力管理ドライバなどを含むことができる。
【0079】
いくつかの実施形態では、ライブラリ306は、アプリケーション310によって利用される低レベルの共通インフラストラクチャを提供する。ライブラリ306は、メモリアロケーション関数、文字列操作関数、数学関数などの関数を提供することのできる、システムライブラリ330(例えばC標準ライブラリ)を含むことができる。それに加えて、ライブラリ306は、メディアライブラリ(例えばMoving Picture Experts Group-4(MPEG4)、アドバンストビデオコーディング(H.264もしくはAVC)、Moving Picture Experts Group Layer-3(MP3)、アドバンストオーディオコーディング(AAC)、適応マルチレート(AMR)オーディオコーデック、Joint Photographic Experts Group(JPEGもしくはJPG)、またはポータブルネットワークグラフィックス(PNG)など、さまざまなメディア形式の提示および操作をサポートするためのライブラリ)、グラフィックスライブラリ(例えばディスプレイ上に、あるグラフィックコンテキストにおいて2次元(2D)および3次元(3D)でレンダリングするために使用されるOpenGLフレームワーク)、データベースライブラリ(例えばさまざまなリレーショナルデータベース関数を提供するためのSQLite)、ウェブライブラリ(例えばウェブブラウジング機能を提供するためのWebKit)などの、APIライブラリ332を含むことができる。ライブラリ306は、他の多くのAPIをアプリケーション310に提供するための多種多様なその他のライブラリ334も含むことができる。
【0080】
フレームワーク308は、いくつかの実施形態に従って、アプリケーション310によって利用することのできる高レベルの共通インフラストラクチャを提供する。例えば、フレームワーク308は、さまざまなグラフィカルユーザインターフェース関数、高レベルのリソース管理、高レベルのロケーションサービスなどを提供する。フレームワーク308は、アプリケーション310によって利用することのできる広範な他のAPIを提供することができ、そのうちのいくつかは、特定のオペレーティングシステム304またはプラットフォームに固有のものとすることができる。
【0081】
例示的な一実施形態では、アプリケーション310は、ホームアプリケーション350、連絡アプリケーション352、ブラウザアプリケーション354、ブックリーダアプリケーション356、ロケーションアプリケーション358、メディアアプリケーション360、メッセージングアプリケーション362、ゲームアプリケーション364、およびサードパーティアプリケーション366など、幅広い種類の他のアプリケーションを含む。いくつかの実施形態によれば、アプリケーション310は、プログラム内に定義された関数を実行するプログラムである。オブジェクト指向プログラミング言語(例えばObjective-C、Java、またはC++)や手続き型プログラミング言語(例えばC言語またはアセンブリ言語)など、さまざまなプログラミング言語を用いて、多様な様式で構造化されたアプリケーション310のうちの1つまたは複数を作成することができる。一具体例では、サードパーティアプリケーション366(例えば特定のプラットフォームのベンダ以外のエンティティによってANDROID(商標)またはIOS(商標)ソフトウェア開発キット(SDK)を使用して開発されたアプリケーション)は、IOS(商標)、ANDROID(商標)、WINDOWS(登録商標) Phone、または別のモバイルオペレーティングシステムなどのモバイルオペレーティングシステム上でランする、モバイルソフトウェアとすることができる。この例では、サードパーティアプリケーション366は、本明細書において説明する機能を実施可能にするために、オペレーティングシステム304によって提供されるAPIコール312を呼び出すことができる。
【0082】
図4は、例示的な一実施形態による、コンピュータシステムの形態をとるマシン400であって、本明細書において論じる方法のうちのいずれか1つまたは複数をマシン400に実施させるための命令のセットがその中で実行されることの可能な、マシン400の概略図を示す。具体的には、
図4は、コンピュータシステムの例示的な形態をとるマシン400であって、本明細書において論じる方法のうちのいずれか1つまたは複数をマシン400に実施させるための命令416(例えばソフトウェア、プログラム、アプリケーション、アプレット、アプリ、または他の実行可能なコード)がその中で実行されることの可能な、マシン400の概略図を示す。例えば、命令416はマシン400に、
図2の方法200を行わせることができる。それに加えてまたはその代わりに、命令416は
図1~
図2などを実装することもできる。命令416は、一般のプログラムされていないマシン400を、説明および図示した機能を説明した様式で実行するようにプログラムされた特定のマシン400に変換する。代替実施形態では、マシン400は、スタンドアロンデバイスとして動作し、またはマシン400は、他のマシンに結合させる(例えばネットワーク接続する)ことができる。ネットワーク接続されたデプロイメントでは、マシン400は、サーバ-クライアントネットワーク環境におけるサーバマシンまたはクライアントマシンとして動作することもでき、あるいはピアツーピア(または分散)ネットワーク環境におけるピアマシンとして動作することもできる。マシン400は、限定はしないが、サーバコンピュータ、クライアントコンピュータ、パーソナルコンピュータ(PC)、タブレットコンピュータ、ラップトップコンピュータ、ネットブック、セットトップボックス(STB)、パーソナルデジタルアシスタント(PDA)、エンターテインメントメディアシステム、セルラー電話、スマートフォン、モバイルデバイス、ウェアラブルデバイス(例えばスマートウォッチ)、スマートホームデバイス(例えばスマートアプライアンス)、他のスマートデバイス、ウェブアプライアンス、ネットワークルータ、ネットワークスイッチ、ネットワークブリッジ、またはマシン400によってとられるべきアクションを指定する命令416を順次もしくはその他の方法で実行することの可能な任意のマシンを備えることができる。さらに、単一のマシン400のみが図示されているが、「マシン」という用語は、本明細書において論じる方法のうちのいずれか1つまたは複数を実施するための命令416を個別にまたは共同で実行するマシン400の集合も含むものと解釈されるものとする。
【0083】
マシン400は、プロセッサ410、メモリ430、およびI/Oコンポーネント450を含むことができ、それらは、バス402を介するなどして相互に通信するように構成することができる。例示的な一実施形態では、プロセッサ410(例えば中央処理装置(CPU)、縮小命令セットコンピューティング(RISC)プロセッサ、複合命令セットコンピューティング(CISC)プロセッサ、グラフィックス処理装置(GPU)、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、無線周波数集積回路(RFIC)、別のプロセッサ、またはそれらの任意の適切な組合せ)は、例えば、命令416を実行することのできるプロセッサ412およびプロセッサ414を含むことができる。「プロセッサ」という用語は、命令416を同時に実行することのできる2つ以上の独立したプロセッサ(「コア」と呼ばれることがある)を備えることのできる、マルチコアプロセッサを含むことが意図されている。
図4は、複数のプロセッサ410を示しているが、マシン400は、単一のコアを備えた単一のプロセッサ412、複数のコアを備えた単一のプロセッサ412(例えばマルチコアプロセッサ412)、単一のコアを備えた複数のプロセッサ412、414、複数のコアを備えた複数のプロセッサ412、414、またはそれらの任意の組合せを含むことができる。
【0084】
メモリ430は、バス402を介するなどしてプロセッサ410にそれぞれがアクセス可能な、メインメモリ432、スタティックメモリ434、および記憶ユニット436を含むことができる。メインメモリ432、スタティックメモリ434、および記憶ユニット436は、本明細書において説明する方法または機能のうちのいずれか1つまたは複数を具現化した命令416を記憶する。命令416は、マシン400によるその実行中に、メインメモリ432内に、スタティックメモリ434内に、記憶ユニット436内に、プロセッサ410のうちの少なくとも1つのプロセッサ内(例えばプロセッサのキャッシュメモリ内)に、またはそれらの任意の適切な組合せ内に、全体または一部が常駐することもある。
【0085】
I/Oコンポーネント450は、入力を受信する、出力を提供する、出力を生成する、情報を送信する、情報を交換する、測定値を捕捉する、などのための、多種多様なコンポーネントを含むことができる。特定のマシン内に含まれる特定のI/Oコンポーネント450は、マシンのタイプに応じて変わる。例えば、モバイル電話などのポータブルマシンは、タッチ入力デバイスまたは他のそのような入力機構を含む可能性があるが、ヘッドレスサーバマシンは、そのようなタッチ入力デバイスを含まない可能性がある。I/Oコンポーネント450は
図4に示されていない他の多くのコンポーネントを含むことがあることを、理解されよう。I/Oコンポーネント450は、単に以下の議論を簡略化するために、機能に従ってグループ化されており、そのグループ化は決して限定するものではない。さまざまな例示的な実施形態では、I/Oコンポーネント450は、出力コンポーネント452および入力コンポーネント454を含むことができる。出力コンポーネント452は、視覚コンポーネント(例えばプラズマディスプレイパネル(PDP)、発光ダイオード(LED)ディスプレイ、液晶ディスプレイ(LCD)、プロジェクタ、または陰極線管(CRT)などのディスプレイ)、音響コンポーネント(例えばスピーカ)、ハプティックコンポーネント(例えば振動モータ、抵抗機構)、他の信号生成器などを含むことができる。入力コンポーネント454は、英数字入力コンポーネント(例えばキーボード、英数字入力を受け取るように構成されたタッチスクリーン、光学式キーボード(photo-optical keyboard)、または他の英数字入力コンポーネント)、ポイントベースの入力コンポーネント(例えばマウス、タッチパッド、トラックボール、ジョイスティック、動きセンサ、または別のポインティング機器)、触覚入力コンポーネント(例えば物理的なボタン、タッチもしくはタッチジェスチャのロケーションおよび/もしくは力を示すタッチスクリーン、または他の触覚入力コンポーネント)、オーディオ入力コンポーネント(例えばマイクロホン)などを含むことができる。
【0086】
さらなる例示的な実施形態では、I/Oコンポーネント450は、さまざまな多数のコンポーネントの中でもとりわけ、バイオメトリックコンポーネント456、動きコンポーネント458、環境コンポーネント460、または位置コンポーネント462を含むことができる。例えば、バイオメトリックコンポーネント456は、表現(例えば手による表現、顔による表現、声による表現、身体によるジェスチャ、または目の動き(eye tracking))を検出する、生体信号(例えば血圧、心拍数、体温、発汗、または脳波)を測定する、人物の識別(例えば音声識別、網膜識別、顔識別、指紋識別、または脳波図ベースの識別)をする、などのためのコンポーネントを含むことができる。動きコンポーネント458は、加速度センサコンポーネント(例えば加速度計)、重力センサコンポーネント、回転センサコンポーネント(例えばジャイロスコープ)などを含むことができる。環境コンポーネント460は、例えば、照度センサコンポーネント(例えば測光計)、温度センサコンポーネント(例えば周囲温度を検出する1つもしくは複数の温度計)、湿度センサコンポーネント、圧力センサコンポーネント(例えば気圧計)、音響センサコンポーネント(例えば背景雑音を検出する1つもしくは複数のマイクロホン)、近接センサコンポーネント(例えば付近の物体を検出する赤外線センサ)、ガスセンサ(例えば安全のために有害ガスの濃度を検出するための、もしくは大気中の汚染物質を測定するためのガス検出センサ)、または周囲の物理的環境に対応する標識、測定値、もしくは信号を提供することのできる他のコンポーネントを含むことができる。位置コンポーネント462は、ロケーションセンサコンポーネント(例えば全地球測位システム(GPS)レシーバコンポーネント)、高度センサコンポーネント(例えば高度計、または高度の導出源となることのできる空気圧を検出する気圧計)、方位センサコンポーネント(例えば磁力計)などを含むことができる。
【0087】
通信を、多種多様な技術を使用して実装することができる。I/Oコンポーネント450は、マシン400をネットワーク480またはデバイス470にそれぞれ結合482および結合472を介して結合するように動作可能な、通信コンポーネント464を含むことができる。例えば、通信コンポーネント464は、ネットワークインターフェースコンポーネント、またはネットワーク480とインターフェースするのに適した別のデバイスを含むことができる。さらなる例では、通信コンポーネント464は、有線通信コンポーネント、ワイヤレス通信コンポーネント、セルラー通信コンポーネント、近距離無線通信(NFC)コンポーネント、Bluetooth(登録商標)コンポーネント(例えばBluetooth(登録商標) Low Energy)、Wi-Fi(登録商標)コンポーネント、および他のモダリティを介して通信を行うための他の通信コンポーネントを含むことができる。デバイス470は、別のマシンまたは(例えばUSBを介して結合された)多種多様な周辺デバイスのうちのいずれかとすることができる。
【0088】
さらに、通信コンポーネント464は、識別子を検出することもでき、あるいは識別子を検出するように動作可能なコンポーネントを含むこともできる。例えば、通信コンポーネント464は、無線周波数識別(RFID)タグリーダコンポーネント、NFCスマートタグ検出コンポーネント、光学式リーダコンポーネント(例えば統一商品コード(UPC)バーコードなどの1次元バーコード、QRコード、Aztecコード、データマトリックス、Dataglyph、MaxiCode、PDF417、Ultra Code、UCC RSS-2Dバーコードなどの多次元バーコード、および他の光学コードを検出するための光学センサ)、または音響検出コンポーネント(例えばタグ付きオーディオ信号を識別するためのマイクロホン)を含むことができる。それに加えて、インターネットプロトコル(IP)ジオロケーションを介したロケーション、Wi-Fi(登録商標)信号による三角測量を介したロケーション、特定のロケーションを示すことのできるNFCビーコン信号の検出を介したロケーションなど、多様な情報を、通信コンポーネント464を介して得ることができる。
【0089】
さまざまなメモリ(例えば430、432、434、および/もしくはプロセッサ410のメモリ)ならびに/または記憶ユニット436は、本明細書において説明する方法または機能のうちのいずれか1つまたは複数を具現化する、またはそのいずれか1つまたは複数によって利用される、命令416およびデータ構造の1つまたは複数のセット(例えばソフトウェア)を記憶することができる。これらの命令(例えば命令416)は、プロセッサ410によって実行されると、開示の実施形態を実施するためのさまざまな動作を生じさせる。
【0090】
本明細書では、「マシン記憶媒体」、「デバイス記憶媒体」、および「コンピュータ記憶媒体」という用語は、同じものを意味し、それらは交換可能に使用されることがある。これらの用語は、実行可能な命令および/またはデータを記憶する単一のまたは複数の記憶デバイスおよび/または記憶媒体(例えば集中データベースもしくは分散データベース、ならびに/または関連するキャッシュおよびサーバ)を指す。したがって、これらの用語は、限定はしないが、プロセッサの内部または外部にあるメモリを含めて、ソリッドステートメモリならびに光学媒体および磁気媒体を含むものと解釈されるものとする。マシン記憶媒体、コンピュータ記憶媒体、および/またはデバイス記憶媒体の具体例には、例として半導体メモリデバイス、例えば消去可能プログラマブル読出し専用メモリ(EPROM)、電気的消去可能プログラマブル読出し専用メモリ(EEPROM)、フィールドプログラマブルゲートアレイ(FPGA)、およびフラッシュメモリデバイスを含む不揮発性メモリ;内蔵ハードディスクやリムーバルディスクなどの磁気ディスク;光磁気ディスク;ならびにCD-ROMディスクおよびDVD-ROMディスクが含まれる。「マシン記憶媒体」、「コンピュータ記憶媒体」、および「デバイス記憶媒体」という用語は、搬送波、変調データ信号、および他のそのような媒体を明確に除外し、それらのうちの少なくともいくつかは、下で論じる「信号媒体」という用語によってカバーされる。
【0091】
さまざまな例示的な実施形態では、ネットワーク480の1つまたは複数の部分が、アドホックネットワーク、イントラネット、エクストラネット、仮想プライベートネットワーク(VPN)、ローカルエリアネットワーク(LAN)、ワイヤレスLAN(WLAN)、広域ネットワーク(WAN)、ワイヤレスWAN(WWAN)、メトロポリタンエリアネットワーク(MAN)、インターネット、インターネットの一部分、公衆交換電話網(PSTN)の一部分、基本電話サービス(POTS)ネットワーク、セルラー電話ネットワーク、ワイヤレスネットワーク、Wi-Fi(登録商標)ネットワーク、別のタイプのネットワーク、または2つ以上のそのようなネットワークの組合せであってよい。例えば、ネットワーク480またはネットワーク480の一部分は、ワイヤレスネットワークまたはセルラーネットワークを含むことができ、結合482は、符号分割多元接続(CDMA)接続、グローバルシステムフォーモバイルコミュニケーションズ(GSM)接続、または別のタイプのセルラー結合もしくはワイヤレス結合とすることができる。この例では、結合482は、シングルキャリア無線伝送技術(1xRTT)、Evolution-Data Optimized(EVDO)技術、汎用パケット無線サービス(GPRS)技術、GSM進化型高速データレート(EDGE)技術、3Gネットワーク、第4世代ワイヤレス(4G)ネットワークを含む第3世代パートナーシッププロジェクト(3GPP)、ユニバーサルモバイルテレコミュニケーションシステム(UMTS)、高速パケットアクセス(HSPA)、Worldwide Interoperability for Microwave Access(WiMAX)、ロングタームエボリューション(LTE)標準、さまざまな標準化団体によって定義されるその他のもの、他の長距離プロトコル、または他のデータ転送技術など、多様なタイプのデータ転送技術のうちのいずれかを実装することができる。
【0092】
命令416は、ネットワークインターフェースデバイス(例えば通信コンポーネント464内に含まれるネットワークインターフェースコンポーネント)を介した伝送媒体を使用するとともにいくつかのよく知られている転送プロトコルのうちのいずれか1つ(例えばHTTP)を利用して、ネットワーク480経由で送信または受信することができる。同様に、命令416は、結合472(例えばピアツーピア結合)を介してデバイス470に至る伝送媒体を使用して送信または受信することもできる。「伝送媒体」および「信号媒体」という用語は、同じものを意味し、それらは本開示において交換可能に使用されることがある。「伝送媒体」および「信号媒体」という用語は、命令416をマシン400によって実行できるように記憶、符号化、または搬送することの可能な任意の無形の媒体を含むものと、またデジタル通信信号もしくはアナログ通信信号、またはそのようなソフトウェアの通信を円滑にするための他の無形の媒体を含むものと、解釈されるものとする。したがって、「伝送媒体」および「信号媒体」という用語は、任意の形態の変調データ信号、搬送波などを含むものと解釈されるものとする。「変調データ信号」という用語は、その特徴のうちの1つまたは複数が、信号内の情報を符号化するように設定または変更された、信号を意味する。
【0093】
「マシン可読媒体」、「コンピュータ可読媒体」、および「デバイス可読媒体」という用語は、同じものを意味し、それらは本開示において交換可能に使用されることがある。これらの用語は、マシン記憶媒体と伝送媒体の両方を含むように定義される。したがって、これらの用語は、記憶デバイス/記憶媒体と搬送波/変調データ信号の両方を含む。
【符号の説明】
【0094】
100 システム
102 アプリケーション開発サーバ
104 アプリケーション開発クライアント
106 ソフトウェアアプリケーション
108 ライブラリ
110 プログラミング言語専用ファイル
112 PromptScriptパッケージ
114 PromptScriptインターフェース
116 LLM
118 ファイルシステムキャッシュ
200 方法
300 ブロック図
302 ソフトウェアアーキテクチャ
304 オペレーティングシステム
306 ライブラリ
308 フレームワーク
310 アプリケーション
312 APIコール
314 メッセージ
320 カーネル
322 サービス
324 ドライバ
330 システムライブラリ
332 APIライブラリ
334 その他のライブラリ
350 ホームアプリケーション
352 連絡アプリケーション
354 ブラウザアプリケーション
356 ブックリーダアプリケーション
358 ロケーションアプリケーション
360 メディアアプリケーション
362 メッセージングアプリケーション
364 ゲームアプリケーション
366 サードパーティアプリケーション
400 マシン
402 バス
410 プロセッサ
412 プロセッサ、マルチコアプロセッサ
414 プロセッサ
416 命令
430 メモリ
432 メインメモリ
434 スタティックメモリ
436 記憶ユニット
450 入力/出力(I/O)コンポーネント
452 出力コンポーネント
454 入力コンポーネント
456 バイオメトリックコンポーネント
458 動きコンポーネント
460 環境コンポーネント
462 位置コンポーネント
464 通信コンポーネント
470 デバイス
472 結合
480 ネットワーク
482 結合
【外国語明細書】