IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧

特開2025-136522生成モデルを利用したデータ処理システム及びデータ処理方法
<>
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図1
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図2
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図3
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図4
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図5
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図6
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図7
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図8
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図9
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図10
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図11
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図12
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図13
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図14
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図15
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図16
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図17
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図18
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図19
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図20
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図21
  • 特開-生成モデルを利用したデータ処理システム及びデータ処理方法 図22
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025136522
(43)【公開日】2025-09-19
(54)【発明の名称】生成モデルを利用したデータ処理システム及びデータ処理方法
(51)【国際特許分類】
   G06F 8/51 20180101AFI20250911BHJP
   G06F 8/30 20180101ALI20250911BHJP
【FI】
G06F8/51
G06F8/30
【審査請求】未請求
【請求項の数】17
【出願形態】OL
(21)【出願番号】P 2024035154
(22)【出願日】2024-03-07
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】野尻 周平
【テーマコード(参考)】
5B081
5B376
【Fターム(参考)】
5B081AA02
5B081AA09
5B376BC26
5B376BC46
(57)【要約】
【課題】生成モデルの出力データに対する検証及び/又は修正の負担を少なくする。
【解決手段】データ処理システムは、第一のプロンプト又は第二のプロンプトの生成モデルへの入力に対する出力データの検証結果に関する情報である検証結果情報を入力し、検証結果情報が第二のプロンプトを生成する条件を満たすか否かを判定する。検証結果情報が当該条件を満たす場合、データ処理システムは、検証結果情報を用いて生成モデルへの第二のプロンプトを生成する。
【選択図】図2
【特許請求の範囲】
【請求項1】
第一のプロンプト又は第二のプロンプトの生成モデルへの入力に対する出力データの検証結果に関する情報である検証結果情報を入力する入力部と、
前記検証結果情報が第二のプロンプトを生成する条件を満たすか否かを判定し、前記検証結果情報が前記条件を満たす場合に前記検証結果情報を用いて前記生成モデルへの第二のプロンプトを生成する処理部と
を備えるデータ処理システム。
【請求項2】
前記条件は、前記検証結果情報がエラー情報を含むことを含み、
前記エラー情報は、下記(a)乃至(d)のうちの少なくとも一つを含む、
(a)前記エラーを表すエラーメッセージ、
(b)前記出力データの全部又は一部であって前記エラーに関わるデータである修正対象データ、
(c)今回のエラー情報と前回のエラー情報との差分、及び、
(d)検証結果の履歴、
請求項1に記載のデータ処理システム。
【請求項3】
前記生成モデルは、テキスト生成モデルであり、
前記第一のプロンプトは、第一のプログラミング言語のプログラムコードを第二のプログラミング言語のプログラムコードに変換することを前記テキスト生成モデルに指示するプロンプトであり、
前記出力データの全部又は一部である修正対象データは、前記出力データが有する第二のプログラミング言語のプログラムコードを含む、
請求項1に記載のデータ処理システム。
【請求項4】
前記プロンプト生成部は、プロンプトテンプレートを用いて前記第二のプロンプトを生成し、
前記プロンプトテンプレートは、エラーの修正を指示するテキストの他に、第一のテキスト、第二のテキスト、第三のテキスト、第四のテキスト、及び、第五のテキストのうちの少なくとも一つを含み、
前記第一のテキストは、第一の位置と、前記第一の位置に設定されるテキストが前記出力データのうちの少なくともエラーに関わるプログラムコードであることとを規定したテキストを含み、
前記第二のテキストは、第二の位置と、前記第二の位置に設定されるテキストが前記検証の内容を表すテキストであることとを規定したテキストを含み、
前記第三のテキストは、第三の位置と、前記第三の位置に設定されるテキストが前記検証において得られたエラーメッセージであることとを規定したテキストを含み、
前記第四のテキストは、第四の位置と、前記第四の位置に設定されるテキストが修正前のプログラムコードであることとを規定したテキストを含み、
前記第五のテキストは、第五の位置と、前記第五の位置に設定されるテキストが簡約化されたエラーメッセージであることとを規定したテキストを含む、
請求項3に記載のデータ処理システム。
【請求項5】
前記検証は、一つ又は複数のチェックツールの各々によるチェックを含み、
前記検証結果は、前記一つ又は複数のチェックツールのうちの少なくとも一つのチェックツールを用いたチェックにおいて検出されたエラーを含む、
請求項3に記載のデータ処理システム。
【請求項6】
前記第一のプログラミング言語及び前記第二のプログラミング言語のいずれも高水準言語であり、
前記一つ又は複数のチェックツールは、コンパイラを含み、
前記検証は、前記コンパイラにより、前記出力データが有するプログラムコードを低水準言語のプログラムコードにコンパイルすることを含み、
前記検証結果情報は、コンパイルエラーのエラーメッセージを含む、
請求項5に記載のデータ処理システム。
【請求項7】
前記一つ又は複数のチェックツールは、テストツールを含み、
前記検証は、前記テストツールにより、前記出力データについて一つ又は複数のテストケースの各々についてテストコードが満たされるかのチェックを行うことを含み、
前記検証結果情報は、いずれかのテストケースについてテストコードが満たされないことにより出力されたエラーメッセージを含む、
請求項5に記載のデータ処理システム。
【請求項8】
前記一つ又は複数のチェックツールは、Lintツールを含み、
前記検証は、Lintツールにより、前記出力データがLintルールを満たすか否かのチェックを行うことを含み、
前記検証結果情報は、Lintルールが満たされないことにより出力されたエラーメッセージを含む、
請求項5に記載のデータ処理システム。
【請求項9】
前記複数のチェックツールは、コンパイラ、テストツール及びLintツールを含み、
前記検証は、前記コンパイラによるチェックの後に前記テストツールによるチェックを行い、前記テストツールによるチェックの後に前記Lintツールによるチェックを行うことを含む、
請求項5に記載のデータ処理システム。
【請求項10】
前記プロンプト生成部は、今回の検証結果情報よりも前回の検証結果情報の方が良い場合、前回の検証結果に含まれていなかったが前記今回の検証結果に含まれていたエラーを前記前回の検証結果が得られた出力データをベースに修正するための第二のプロンプトを生成する、
請求項1に記載のデータ処理システム。
【請求項11】
前記今回の検証結果情報よりも前記前回の検証結果情報の方が良いとは、今回の検証において検出されたエラーの数よりも前回の検証において検出されたエラーの数の方が少ないことである、
請求項10に記載のデータ処理システム。
【請求項12】
前記検証結果が得られた検証は、複数のチェックツールによるチェックを含み、
前記複数のチェックツールの各々について、当該チェックツールに対応のプロンプトテンプレートを含み、
前記複数のチェックツールの各々について、前記プロンプト生成部は、今回のチェックの結果よりも前回のチェックの結果の方が良い場合、前記前回のチェックにおいて検出されなかったが前記今回のチェックにおいて検出されたエラーを前記前回のチェックの対象であった出力データをベースに修正するための第二のプロンプトを、当該チェックツールに関連付いているプロンプトテンプレートを用いて生成する、
請求項10に記載のデータ処理システム。
【請求項13】
前記条件は、下記のうちの少なくとも一つを含む、
・前回の出力データと同じ出力データが得られた回数が第一の閾値未満であること、
・前回の検証において検出されたエラーと同じエラーが検出された回数が第二の閾値未満であること、
請求項1に記載のデータ処理システム。
【請求項14】
前記プロンプト生成部は、前処理用テンプレートを用いて生成したプロンプトをテキスト生成モデルであるプロンプト生成モデルに入力することで、当該プロンプト生成モデルの出力データとして前記生成モデルへの前記第二のプロンプトを取得し、
前記前処理用テンプレートは、前記プロンプト生成モデルへのプロンプトの生成に利用されるプロンプトテンプレートであり、
前記前処理用テンプレートは、前記プロンプト生成モデルの出力データとしてのプロンプトの目的と、当該目的に基づく、前記プロンプト生成モデルの役割とのうちの少なくとも一つとしてのコンテキストを表すテキストを含む、
請求項1に記載のデータ処理システム。
【請求項15】
前記検証結果情報が前記条件を満たさない場合に、前記生成モデルの出力データを出力すする出力部、
を更に備える請求項1に記載のデータ処理システム。
【請求項16】
(a)第一のプロンプト又は第二のプロンプトの生成モデルへの入力に対する出力データの検証結果に関する情報である検証結果情報を入力し、
(b)前記検証結果情報が第二のプロンプトを生成する条件を満たすか否かを判定し、
(c)前記検証結果情報が前記条件を満たす場合に、前記検証結果情報を用いて前記生成モデルへの第二のプロンプトを生成し、(a)を行う
ことをコンピュータにより行うデータ処理方法。
【請求項17】
(a)第一のプロンプト又は第二のプロンプトの生成モデルへの入力に対する出力データの検証結果に関する情報である検証結果情報を入力し、
(b)前記検証結果情報が第二のプロンプトを生成する条件を満たすか否かを判定し、
(c)前記検証結果情報が前記条件を満たす場合に、前記検証結果情報を用いて前記生成モデルへの第二のプロンプトを生成し、(a)を行う
ことをコンピュータに実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、生成モデルを利用したデータ処理に関する。
【背景技術】
【0002】
生成モデルの一例として、テキスト生成モデル、典型的には、LLM(Large Language Model)がある。LLMの利用したデータ処理の一例として、プログラミング言語の変換がある。プログラミング言語の変換に関する技術として、例えば、特許文献1に開示の技術が知られている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2014-191738号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
プログラミング言語の変換は、一般に、ルールベースでのプログラミング言語の変換を行うプログラム(言語トランスレータ)によって行われる。しかし、プログラミング言語の変換のためのルールとして、変換前のプログラムの提供元(例えばベンダ)、変換後のプログラムの提供先(例えば顧客)、及び、プログラミング言語の変換が関わるプロジェクト、のうちの少なくとも一つに応じた要件に従うルールがあり、そのようなルールを用意することは負担である。このようなルールベース特有の課題は、プログラミング言語変換にLLMを利用することで解決され得る。
【0005】
しかし、LLMは確率モデルであり、故に、同じプロンプトがLLMに入力されたとしてもLLMの出力データは確率的に異なることがあり得る。このような事象は、プログラミング言語変換後のプログラムにおけるバグとなり得る。教師データを大量に用意してLLMの学習を行うことで、LLMの精度を高めることが期待されるが、教師データを大量に用意したり大量の教師データを用いて学習を行ったりすることは負担が大きい。また、LLMの精度が向上しても、LLMは確率モデルであるため、上述のような事象が発生する確率をゼロにすることは実質的に不可能である。
【0006】
このような課題は、LLM以外の生成モデルを利用したデータ処理についてもあり得る。
【課題を解決するための手段】
【0007】
データ処理システムは、第一のプロンプト又は第二のプロンプトの生成モデルへの入力に対する出力データの検証結果に関する情報である検証結果情報を入力し、検証結果情報が第二のプロンプトを生成する条件を満たすか否かを判定する。検証結果情報が当該条件を満たす場合、データ処理システムは、検証結果情報を用いて生成モデルへの第二のプロンプトを生成する。
【発明の効果】
【0008】
本発明の一態様によれば、生成モデルの出力データに対する検証及び/又は修正の負担を少なくすることができる。上記した以外の課題、構成及び効果は、以下の実施形態の説明によって明らかにされる。
【図面の簡単な説明】
【0009】
図1】実施形態に係るプログラミング言語変換装置を含むシステム全体の構成の一例を示す図である。
図2】実施形態に係るプログラミング言語変換の流れの一例を示す図である。
図3】変換後のソースコードの例を示す図である。
図4】テストコードの例を示す図である。
図5】エラーメッセージの例を示す図である。
図6】変換後のソースコードの例を示す図である。
図7】Lintルールの例を示す図である。
図8】エラーメッセージの例を示す図である。
図9】変換前のソースコードの例を示す図である。
図10】変換後のソースコードの例を示す図である。
図11】エラーメッセージの例を示す図である。
図12】プロンプトテンプレートの例を示す図である。
図13】プロンプトの例を示す図である。
図14】プロンプトテンプレートの例を示す図である。
図15】プロンプトテンプレートの例を示す図である。
図16】プロンプトテンプレートの例を示す図である。
図17】プロンプトテンプレートの例を示す図である。
図18】トレースの例を示す図である。
図19】圧縮されたトレースの例を示す図である。
図20】エラーメッセージの例を示す図である。
図21】プロンプトテンプレートの例を示す図である。
図22】プロンプトの生成、プロンプトの入力、検証結果情報の入力、第一の判定及び第二の判定の繰り返しの流れの例を示す図である。
【発明を実施するための形態】
【0010】
以下の説明では、「インターフェース装置」は、一つ以上のインターフェースデバイスでよい。当該一つ以上のインターフェースデバイスは、下記のうちの少なくとも一つでよい。
・一つ以上のI/O(Input/Output)インターフェースデバイス。I/O(Input/Output)インターフェースデバイスは、I/Oデバイスと遠隔の表示用計算機とのうちの少なくとも一つに対するインターフェースデバイスである。表示用計算機に対するI/Oインターフェースデバイスは、通信インターフェースデバイスでよい。少なくとも一つのI/Oデバイスは、ユーザインターフェースデバイス、例えば、キーボード及びポインティングデバイスのような入力装置と、表示デバイスのような出力装置とのうちのいずれでもよい。
・一つ以上の通信インターフェースデバイス。一つ以上の通信インターフェースデバイスは、一つ以上の同種の通信インターフェースデバイス(例えば一つ以上のNIC(Network Interface Card))であってもよいし2つ以上の異種の通信インターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
【0011】
また、以下の説明では、「メモリ」は、一つ以上の記憶デバイスの一例である一つ以上のメモリデバイスであり、典型的には主記憶デバイスでよい。メモリにおける少なくとも一つのメモリデバイスは、揮発性メモリデバイスであってもよいし不揮発性メモリデバイスであってもよい。
【0012】
また、以下の説明では、「永続記憶装置」は、一つ以上の記憶デバイスの一例である一つ以上の永続記憶デバイスでよい。永続記憶デバイスは、典型的には、不揮発性の記憶デバイス(例えば補助記憶デバイス)でよく、具体的には、例えば、HDD(Hard Disk Drive)、SSD(Solid State Drive)、NVME(Non-Volatile Memory Express)ドライブ、又は、SCM(Storage Class Memory)でよい。
【0013】
また、以下の説明では、「記憶装置」は、メモリと永続記憶装置の少なくともメモリでよい。
【0014】
また、以下の説明では、「プロセッサ」は、一つ以上のプロセッサデバイスでよい。少なくとも一つのプロセッサデバイスは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサデバイスでよいが、GPU(Graphics Processing Unit)のような他種のプロセッサデバイスでもよい。少なくとも一つのプロセッサデバイスは、シングルコアでもよいしマルチコアでもよい。少なくとも一つのプロセッサデバイスは、プロセッサコアでもよい。少なくとも一つのプロセッサデバイスは、処理の一部又は全部を行うハードウェア記述言語によりゲートアレイの集合体である回路(例えばFPGA(Field-Programmable Gate Array)、CPLD(Complex Programmable Logic Device)又はASIC(Application Specific Integrated Circuit))といった広義のプロセッサデバイスでもよい。
【0015】
また、以下の説明では、「yyy部」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサによって実行されることで実現されてもよいし、一つ以上のハードウェア回路(例えばFPGA又はASIC)によって実現されてもよいし、それらの組合せによって実現されてもよい。プログラムがプロセッサによって実行されることで機能が実現される場合、定められた処理が、適宜に記憶装置及び/又はインターフェース装置等を用いながら行われるため、機能はプロセッサの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配付計算機又は計算機が読み取り可能な記憶媒体(例えば非一時的な記憶媒体)であってもよい。各機能の説明は一例であり、複数の機能が1つの機能にまとめられたり、1つの機能が複数の機能に分割されたりしてもよい。
【0016】
以下、図面を用いて実施形態を説明する。なお、実施形態では、生成モデルとしてLLMが採用され、LLMを利用したデータ処理として、プログラミング言語の変換が採用される。また、便宜上、プログラミング言語変換前のプログラムを「原始プログラム」と言い、プログラミング言語変換後のプログラムを「対象プログラム」と言う。
【0017】
図1は、実施形態に係るプログラミング言語変換装置を含むシステム全体の構成の一例を示す図である。
【0018】
プログラミング言語変換装置(以下、変換装置)100は、本実施形態では、物理的な計算機システム(1つ又は複数の計算機)であるが、それに代えて、物理的な計算機システムに基づく論理的な計算機システム(例えば、クラウド基盤に基づくクラウドコンピュータサービスとしてのシステム)でもよい。
【0019】
変換装置100は、下記(a)及び(b)を行うようになっている。
(a)プロンプトが入力されたLLM151によるプログラミング言語変換後の出力データの検証結果に関する情報がプロンプト生成条件を満たすか否かをチェックする。
(b)(a)においてプロンプト生成条件が満たされている場合には、別の出力データを得るためにプロンプトを自動生成し、(a)に戻る。
【0020】
つまり、変換装置100は、プロンプト生成条件が満たされなくなるまで、(a)及び(b)を繰り返すようになっている。
【0021】
変換装置100は、インターフェース装置110、記憶装置120及びそれらに接続されたプロセッサ130を有する。
【0022】
インターフェース装置110は、LLM実行装置150やユーザインターフェース装置190と通信する。少なくともLLM実行装置150との通信は、通信ネットワーク(例えばインターネットやWAN(Wide Area Network))を介して行われてよい。LLM実行装置150は、物理的な計算機システムでも論理的な計算機システムでもよく、プロンプトを送信元から受信し、受信したプロンプトをLLM151に入力し、LLM151から出力されたデータをプロンプトの送信元に返す。LLM151は、図1に例示の通り変換装置100の外にあってもよいが、変換装置100の記憶装置120に格納され変換装置100内のLLMが利用されてもよい。ユーザインターフェース装置190は、キーボード、ポインティングデバイス及び表示デバイスのような入出力装置でもよいし、変換装置100がサーバである場合のクライアントとしての遠隔の情報処理端末(例えばパーソナルコンピュータやスマートフォン)でもよい。ユーザは、ユーザインターフェース装置190を用いて所望の指示を変換装置100に送信したり、変換装置100から送信され表示された情報を閲覧したりすることができる。
【0023】
記憶装置120は、データやプログラムを記憶する。記憶装置120は、例えば、原始プログラムソースファイル121と、対象プログラムソースファイル122と、一つ又は複数のチェックツール123とを記憶する。原始プログラムソースファイル121は、原始プログラムのソースファイルであり、当該ソースファイルに記述の言語は第一のプログラミング言語である。対象プログラムソースファイル122は、対象プログラムのソースファイルであり、当該ソースファイルに記述の言語は、第一のプログラミング言語の変換後の言語としての第二のプログラミング言語である。チェックツール123は、エラー判定の全部又は一部としての判定であるチェックに用いられるツールである。一つ又は複数のチェックツール123は、コンパイラ、テストツール及びLintツールのうちの少なくとも一つを含んでよく、及び/又は、その他のツールを含んでよい。また、記憶装置は、一つ又は複数のプロンプトテンプレート124を記憶してよい。また、記憶装置120は、プロセッサ130に実行されるプログラムを記憶する。
【0024】
プロセッサ130が当該プログラムを実行することで、LLMインターフェース部132、入力部137、処理部20、及び出力部135といった機能が実現される。処理部20は、例えば、プロンプト生成部131、判定部134、及びユーザインターフェース部136を含む。プロンプト生成部131は、LLM151へのプロンプトを生成する。LLMインターフェース部132は、LLM151に対しプロンプトを入力したり、当該プロンプトの入力に応答してLLM151の出力データを受けたりする。入力部137は、プロンプトがLLM151に入力された結果出力される出力データの検証結果に関する検証結果情報を入力し、当該検証結果情報を記憶装置120(例えばメモリ)に格納する。判定部134は、検証結果情報が後述のプロンプト250Yを生成する条件を満たすか否かを判定する。当該判定の結果が真の場合にプロンプト生成部131が当該検証結果情報(例えば当該エラー情報)を用いてLLM151へのプロンプト250Yを生成する。具体的には、例えば、判定部134は、検証結果情報がエラー情報を含むか否かの第一の判定を行い、当該第一の判定の結果が真の場合、当該検証結果情報(例えば当該エラー情報)を基に、プロンプト250Yを生成する条件(以下、継続条件)が満たされるか否かの第二の判定を行う。出力部135は、処理部20の判定結果が偽の場合、例えば、検証結果情報がエラー非検出を表す情報を含む場合(つまり第一の判定の結果が偽の場合)、当該出力データとしての対象プログラムソースコードを含んだ対象プログラムソースファイル122を出力(例えば格納)する。ユーザインターフェース部136は、ユーザインターフェース装置190との通信、例えば、ユーザインターフェース装置190から要求を受けたり、ユーザインターフェース装置190に表示用の情報又はその他の情報を送信したりする。なお、プロンプトがLLM151に入力された結果出力される出力データの検証結果の一例は、エラー判定部133(図2参照)によるエラー判定の結果でよい。エラー判定部133等の一部の機能(例えば更にLLMインターフェース部132)は、変換装置100に備えられてもよいが、変換装置100の外部の装置(例えば、LLM実行装置150又は別の装置)に備えられてもよい。すなわち、エラー判定結果に関する情報は、変換装置100の外部の装置から受信されてもよい。或いは、エラー判定部133以外の機能131、132及び134~137のうちの一部の機能を実現するための第一のソフトウェアと、エラー判定部133を実現するための第二のソフトウェアとが変換装置100において実行され、第一のソフトウェアのベンダと第二のソフトウェアのベンダとが異なっていて、第二のソフトウェアが、第一のソフトウェアからエラー判定結果に関する情報を受けてもよい。
【0025】
上述した機能20及び131~137のうち、一部の機能は無くてもよいし、二つ以上の機能が一つの機能とされてもよいし、或いは、一つの機能が二つ以上の機能に分かれていてもよい。また、上述した機能20及び131~137以外の機能が更に実現されてもよい。例えば、LLMインターフェース部132の機能は、プロンプト生成部131、エラー判定部133及び入力部137の少なくとも一つに含まれてもよく、LLMインターフェース部132が無くてもよい。また、エラー判定部133が変換装置100に備えられる場合、エラー判定部133と入力部137が一体であってもよい。
【0026】
図2は、実施形態に係るプログラミング言語変換の流れの一例を示す図である。
【0027】
図2に示す処理は、例えば次のように開始されてよい。ユーザインターフェース部136がプログラミング言語変換の要求をユーザインターフェース装置190から受け付けてよい。当該要求には、原始プログラムの指定と変換後のプログラミング言語の指定とが関連付けられていてよい。ユーザインターフェース部136が、当該要求から、プログラミング言語変換がされる原始プログラムと、変換後のプログラミング言語とを特定し、特定された原始プログラム及び変換後のプログラミング言語をプロンプト生成部131に指定する。原始プログラム及び変換後のプログラミング言語をプロンプト生成部131に指定する方法としては、ユーザインターフェース部136経由の指定に代えて、予めプログラミング言語変換のスケジュールを登録しておき当該スケジュールにより指定するといった他の方法を採用することができる。
【0028】
プロンプト生成部131は、指定された原始プログラムの原始プログラムソースファイル121を記憶装置120から読み出し、プロンプト250Xを生成する(S201)。S201で生成されたプロンプト250Xは、原始プログラムソースファイル121に記述の第一のプログラミング言語のソースコードを第二のプログラミング言語のソースコードに変換するためのプロンプトである。プロンプト250Xは、原始プログラムソースファイル121が有する全ての又は一部の第一のプログラミング言語のソースコードを含んでよい。プロンプト250Xが一部のソースコードを含む場合、原始プログラムソースファイル121が有する残りのソースコードについても、並列に、又は、逐次に(例えば、エラー非検出を含むエラー判定の結果が得られる毎に)、プロンプト250Xが生成されてよい。
【0029】
LLMインターフェース部132は、S201で生成されたプロンプト250XをLLM151に対して入力し(S202)、当該プロンプト250Xの入力に対する出力データ260をLLM151から受ける(S203)。
【0030】
エラー判定部133は、出力データ260のエラー判定、具体的には、出力データ260からエラーが発生するか否かの判定を含むエラー判定を行う。エラー判定は、チェックツール123を用いて行われる。チェックツール123を用いたエラー判定において出力データ260からエラーが発生した場合、チェックツール123により、当該検出されたエラーに関するエラーメッセージが出力される。すなわち、エラー判定の結果に関する情報としての検証結果情報が、エラーに関するエラー情報を含むことになる。検証結果情報を入力部137が入力し記憶装置120に格納する(S204)。判定部134が、検証結果情報がエラー情報を含むか否かの第一の判定を行う(S205)。
【0031】
第一の判定結果が偽の場合(検証結果情報がエラー情報を含まない場合)、出力部135が、出力データ260にある第二のプログラミング言語のソースコードが記述された対象プログラムソースファイル122を出力する(S206)。
【0032】
第一の判定結果が真の場合(検証結果情報がエラー情報を含む場合)、すなわち、出力データ260からエラーが検出された場合、判定部134が、継続条件が満たされているか否か(エラー修正のためのプロンプト250Yを生成するか否か)の第二の判定を行う(S207)。
【0033】
第二の判定結果が偽の場合、プログラミング言語変換について所定の停止処理が実施される。例えば、ユーザインターフェース部136が、ユーザインターフェース装置190に、プログラミング言語変換の停止を通知する情報を出力する(S208)。ユーザは、当該情報を閲覧することで、プログラミング言語変換の停止を知ることができる。当該情報は、プログラミング言語変換の停止の理由(例えば、プロンプトの生成及び入力が所定回数実施されてもエラーが修正されない)を表す情報を含んでよい。
【0034】
第二の判定結果が真の場合、プロンプト生成部131が、検出されたエラーが修正された第二のプログラミング言語のソースコードを得ることが期待されるプロンプト250Yを自動生成する(S209)。その後、再度、S202以降(すなわち、生成されたプロンプト250YのLLM151への入力以降)が行われる。つまり、LLM151の出力データ260のエラー判定結果がエラー非検出になるまで、(S202)→(S203)→(S204)→(S205)→(S207)→(S209)が繰り返される(図22参照)。
【0035】
以下、本実施形態に適用可能な詳細の例を説明する。なお、「java」は商標登録である。
【0036】
(1)まず、コンパイラ以外のチェックツール123の例を説明する。
【0037】
コンパイラ以外のチェックツール123として、下記のうちの少なくとも一つがあり得る。
(1a)テストツール。
(1b)Lintツール。
【0038】
ツール(1a)、すなわち、テストツールについては、例えば、下記の通りである。
【0039】
テストツールは、期待値が記述されたテストコードを有しており、テストコードに記述の期待値と適合する値が得られたか否かをチェックするためのツールである。具体的には、テストツールは、LLM151に生成されたソースコードのコンパイル後の実行可能コードを対象に、実行可能コードを実行し、当該実行によって得られた値がテストコードに記載の期待値に適合するか否かをチェックするツールである。
【0040】
例えば、テストとして、2+2を実行し、結果が4であるか否かをチェックする例は、下記の通りである。
【0041】
変換後のソースコードの例が、下記の通りである(図3参照)。
public class Translated{
public int add(int a, int b) {
return a + b;

【0042】
テストコードの例が、下記の通りである(図4参照)。
Test
public void testAdd() {
// テスト対象のクラスのインスタンスを生成
Translated target = new Translated();
// テスト対象のメソッドを呼び出し、結果をチェック
int result = target.add(2, 2);
// 期待される結果と実際の結果が一致するかをチェック
assertEquals(4, result);
【0043】
テストツールを用いたチェックにおいてエラーが検出された場合のエラーメッセージの例が、下記の通りである(図5参照)。
org.junit.ComparisonFailure: expected:<4> but was:<5>
at your.package.name.Translated.testAdd(Translated.java:15)
【0044】
ツール(1b)、すなわち、Lintツールについては、例えば、下記の通りである。
【0045】
Lintツールは、LLM151に生成されたソースコードが予め定められたルール(以下、Lintルール)に適合するか否かを判定するためのツールである。このLintルールは、バグを招きやすい拙い記述であるとの定義を含んでもよいし、コード規約(例えばインデントはスペース4つで表現するなど)を含んでもよい。Lintルールは、チーム等の組織毎に用意されてもよい。
【0046】
例えば、Lintツールを用いたチェックの例として、インデントに関するコーディング規約が守られているか否かのチェックがあり、当該チェックの例は、下記の通りである。
【0047】
変換後のソースコードの例が、下記の通りである(図6参照)。
public class Translated{
public int add(int a, int b) {
return a + b;

【0048】
Lintルールの例が、下記の通りである(図7参照)。
<module name=“TreeWalker”>
<!-- インデントの設定 -->
<module name=“Indentation”>
<property name=“basicOffset” value=“4”/>
<property name=“caseIndent” value=“4”/>
<property name=“throwsIndent” value=“4”/>
</module>
</module>
【0049】
Lintツールを用いたチェックにおいてエラーが検出された場合のエラーメッセージの例が、下記の通りである(図8参照)。
[ERROR] /path/to/Translated.java:10: Indentation
【0050】
複数のチェックツール123、例えば、コンパイル、テストツール及びLintツールのうちの二つ以上のチェックツール123が用いられてもよい。複数のチェックツール123は逐次に実行されてもよいし、二つ以上のチェックツール123が並列に実行されてもよい。例えば、テストは、コンパイル後のコードに適用可能であるため、チェックツール123の実行順序として、コンパイラ→テストツール→Lintツールが採用可能である。なお、Lintツールは、コンパイラ又はテストツールの前に実行されてもコンパイラ又はテストツールと並行して実行されてもよいが、本実施形態では、コンパイラ及びテストツールの実行後に実行される。なぜなら、コンパイラ及びテストツールはいずれも変換後のプログラムとしての正しさ(例えば、目的の結果が得られるか)を判定するのに対し、Lintツールはプログラムの正しさよりも優先度の低い点(例えば読み易さ)を判定するためである。例えば、機能チェック(コンパイラ:高優先度)及び見た目チェック(Lintツール:低優先度)が行われると仮定した場合、下記が期待される。
・機能チェックの結果及び見た目チェックの結果のいずれかがNGの場合、プロンプトの自動生成が実行されるが、機能チェック及び見た目チェックの実行がそれぞれ1回だけである場合、処理時間やコストはあまり変わらない。
・しかし、機能チェック及び見た目チェックが繰り返し実行されるケースにおいて、機能チェックの結果がNGであって見た目チェックの結果がOKであったコードを再入力する場合、機能を正すために見た目が損なわれる可能性が高く、見た目チェックを反復して正してから機能チェックを経て機能を修正する流れの優位性は高くない。
・また、最終的に機能及び見た目のいずれかが修正されなかった場合の出力として、機能チェックのみ結果がOKであるコードは実質的に変換が成功しているとみなすことができる。見た目の修正の難易度は低くまた工数は少ない。一方、見た目チェックのみ結果がOKであるコードは実質的に変換が失敗しているとみなすことができる。このため、機能の修正の難易度は高くまた工数は多い。
・従って、優先度順に実行することで、不要な修正工数(特に自動修正できなかった場合の人手の修正コスト)を下げることが期待できる。
【0051】
(2)次に、エラー判定の結果に基づくプロンプト250Yの自動生成の例を説明する。
【0052】
プロンプト250Yの自動生成の方法としては、例えば、下記のうちの少なくとも一つがある。
(2a)LLM151へ問い合わせる際の文脈を引き出すための問いかけ生成。
(2b)エラー判定において得られたエラーメッセージの解釈(例えば情報整理)。
(2c)(2a)と(2b)の組み合わせ。
【0053】
方法(2a)は、プロンプトテンプレート124を用いてプロンプトを生成する方法である。プロンプトテンプレート124は、チェックツール123毎に用意されてよい。エラー判定においてエラーメッセージがどのチェックツール123から出力されたかに応じて、プロンプト生成部131が、一つ又は複数のプロンプトテンプレート124からプロンプトテンプレート124を選択し、選択したプロンプトテンプレート124と出力されたエラーメッセージとを用いてプロンプト250Yを生成する。
【0054】
チェックツール123がコンパイラである場合の例は、下記の通りである。
【0055】
変換前のソースコードの例が、下記の通りである(図9参照)。
IDENTIFICATION DIVISION.
PROGRAM-ID. MainProgram.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM1 PIC 9(3) VALUE 0.
01 NUM2 PIC 9(3) VALUE 0.
01 RESULT PIC 9(4) VALUE 0.
PROCEDURE DIVISION.
DISPLAY ‘COBOL Addition Program’.
ACCEPT NUM1.
ACCEPT NUM2.
ADD NUM1 TO NUM2 GIVING RESULT.

STOP RUN.
【0056】
変換後のソースコードの例が、下記の通りである。下記の例は、文末のセミコロンが無いエラーを含む(図10参照)。
public class Translated{
public int add(int a, int b) {
return a + b

【0057】
コンパイラにより出力されたエラーメッセージの例が、下記の通りである(図11参照)。
Translated.java:4: error: ‘;’ expected
return a + b

1 error
【0058】
コンパイラについて用意されたプロンプトテンプレート124の一つの例が、下記の通りである(図12参照)。(“<<”と“>>”との間に、該当のコードやメッセージが設定される。他のプロンプトテンプレート124についても同様である。“<<”と、“>>”と、それらの間にある記述とを含んだ組が、設定されるべき情報の種別と当該種別の情報が設定されるべき位置とを規定したテキストの例である。)
下記のコードをコンパイルしたところ、
<<プログラム挿入部>>
下記のようなエラーが発生しました。
<<エラー表示挿入部>>
このエラーを回避するように、コードを修正してください。
【0059】
このプロンプトテンプレート124に基づき、プロンプト生成部131が、プロンプトテンプレート124における該当箇所(つまり“<<”と“>>”との間)に変換前のソースコードと出力されたエラーメッセージをそれぞれ設定した記述を含むプロンプト250Yを生成する。当該プロンプト250Yの例が、下記の通りである(図13参照)。
下記のコードをコンパイルしたところ、
public class Translated{
public int add(int a, int b) {
return a + b


下記のようなエラーが発生しました。
Translated.java:4: error: ‘;’ expected
return a + b

1 error
このエラーを回避するように、コードを修正してください。
【0060】
チェックツール123がテストツールである場合のプロンプトテンプレート124の例が、下記の通りである(図14参照)。
下記のコードを、
<<プログラム挿入部>>
下記のテストコードでテストしたところ、
<<テストコード挿入部>>
下記のような失敗が発生しました。
<<テスト結果挿入部>>
この失敗を回避するようにプログラムを修正してください。
【0061】
チェックツール123がLintツールである場合のプロンプトテンプレート124の例が、下記の通りである(図15参照)。
下記のコードを、
<<プログラム挿入部>>
下記のLintルールでチェックしたところ、
<<Lint定義挿入部>>
下記のような失敗が発生しました。
<<Lint結果挿入部>>
この失敗を回避するようにプログラムを修正してください。
【0062】
また、例えば、少なくとも一つのチェックツール123について、変換後のプログラミング言語を特定することでより良い結果を引き出すためのプロンプトエンジニアリングTipsを含んだプロンプトテンプレート124が用意されてよく、そのようなプロンプトテンプレート124を用いてプロンプト250Yが生成されてもよい。そのようなプロンプトテンプレート124の例が、下記の通りである(図16参照)。なお、「プロンプトエンジニアリング」は、LLMからより望ましい出力を得るために、問い合わせ文言を設計及び/又は最適化することである。「プロンプトエンジニアリングTips」は、プロンプトエンジニアリングのTipsであり、こうしたエンジニアリングの実績から、目的毎にどのような前提情報や語彙、問い合わせ構文を与えるとより良い結果を得ることができるかというノウハウをまとめたものである。プログラム言語変換の際により良い結果を導く前提情報を与えるノウハウの例が「あなたは~~~」である。)
あなたは<<プログラム言語>>開発者です。
下記のコードをコンパイルしたところ、
<<プログラム挿入部>>
下記のようなエラーが発生しました。
<<エラー表示挿入部>>
このエラーを回避するように、コードを修正してください。
【0063】
また、例えば、少なくとも一つのチェックツール123について、変換前のソースコードの文脈を維持するため、変換前のソースコードが設定されるプロンプトテンプレート124が用意されてもよい。そのようなプロンプトテンプレート124の一例が、下記の通りである(図17参照)。
あなたは<<新プログラム言語>>開発者です。
下記の<<旧プログラム言語>>プログラムを変換し、
<<旧プログラム挿入部>>
下記の<<新プログラム言語>>プログラムを
生成してもらいました。
<<プログラム挿入部>>
このコードをコンパイルしたところ、
下記のようなエラーが発生しました。
<<エラー表示挿入部>>
このエラーを回避するように、コードを修正してください。
【0064】
方法(2b)は、冗長なエラーメッセージを簡約し(例えばノイズを取り除き)、簡約されたエラーメッセージを用いてプロンプト250Yを生成する方法である。以下、具体例を説明する。
【0065】
例えば、上述のテスト(2+2)を実行した際、下記のようなトレースが出力されたとする(図18参照)。しかし、下記のうち、必要な情報は、先頭の1文と最後の1文のみであるとする。
org.junit.ComparisonFailure: expected:<4> but was:<null>
at org.junit.Assert.assertEquals(Assert.java:115)
at org.junit.Assert.assertEquals(Assert.java:144)
at your.package.name.CalculatorTest.testAddWithNull(CalculatorTest.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
【0066】
プロンプト生成部131は、当該トレースを解釈し、当該トレースを下記のように圧縮する(図19参照)。
org.junit.ComparisonFailure: expected:<4> but was:<null>
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
【0067】
また、エラー判定において、テストツールが実行された場合、テスト結果(テストの成否)だけでなく下記のような実行時エラーのエラーメッセージが生じる場合がある。実行時エラーのエラーメッセージの例が、下記の通りである(図20参照)。
java.lang.NullPointerException
at org.junit.Assert.assertEquals(Assert.java:115)
(中略)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
【0068】
この場合、プロンプト生成部131は、適切なプロンプトテンプレート124を選ぶために、トレースの簡約化に加えて、「実行時エラーが発生していること」を解釈し、適切なプロンプトテンプレート124を選ぶための補助情報を解析してよい。この補助情報の組み合わせが、方法(2c)である。テストツールによる真偽判定にて、実行時エラーが出た場合、プロンプト生成部131は、下記のようなプロンプトテンプレート124を選択し(図21参照)、当該プロンプトテンプレート124を用いてプロンプト250Yを生成する。
あなたは<<プログラム言語>>開発者です。
下記のコードを、
<<プログラム挿入部>>
下記のテストコードでテストしたところ、
<<テストコード挿入部>>
下記のような実行時エラーが出力されました。
<<簡約結果挿入部>>
この失敗を回避するようにプログラムを修正してください。
【0069】
(3)プロンプト250Y(及びプロンプト250X)の生成にもLLMのようなテキスト生成モデル(以下、プロンプト生成モデル)が利用されてよい。この場合、前処理用テンプレートが利用されてよい。「前処理用テンプレート」とは、LLM151へのプロンプト250を生成するためのプロンプト生成モデルへのプロンプトの生成に利用されるプロンプトテンプレートである。前処理用テンプレートは、下記のうちの少なくとも一つを含んでよい。
・コンテキスト(例えば、「あなたは生成AIを活用して、与えられたプログラムを修正するためのプロンプト(指示文)を考える役割です。」といったテキスト)。
・前処理用テンプレートにおける設定されるべき位置に記述されたテキストであって、どのような記述(例えば、テストコード、Lintルール又はエラーメッセージ)が設定されるべきかを表すテキスト。
【0070】
また、前処理用テンプレートには、下記のうちの少なくとも一つが関連付けられてよい。例えば、前処理用テンプレートは、チェックツールの種別毎に用意されてよい。
・チェックツール123の種別(例えば、コンパイラ、テストツール又はLintツール)。
・どのような結果が得られればエラー判定の結果が真となるかの判断基準。
・当該プロンプトテンプレート124を用いて過去に生成されたプロンプトの履歴(プロンプト毎にエラー判定の結果を含んでよい)。
【0071】
プロンプト生成部131は、いずれかのチェックツール123によりエラーメッセージが出力された場合、当該エラーメッセージの出力元のチェックツール123に関連付いた前処理用テンプレートを選択する。プロンプト生成部131は、前処理用テンプレートにエラーメッセージ及び/又はその他の記述を設定し、コンテキストを含み記述が設定された当該前処理用テンプレートを有するプロンプトをプロンプト生成モデルに入力することで、プロンプト生成モデルの出力データとして、LLM151に対するプロンプト250Yを取得する。プロンプト生成部131は、取得されたプロンプト250Yを生成する。生成されたプロンプト250Yは、LLMインターフェース部132によりLLM151に入力される。
【0072】
(4)修正のためのプロンプト250Yの入力に応答して出力されたデータ260のエラー判定の結果が再度エラー検出を含む(例えば、前回と同じ又は別のエラーメッセージが出力された)場合に行われる処理として、例えば、以下の処理(4a)及び(4b)のうちの少なくとも一つの処理がある。
(4a)複数のチェックツール123に共通の処理。
(4b)一つ又は複数のチェックツール123の少なくとも一つのチェックツール123について、当該チェックツール123に応じた処理。
【0073】
(4a)複数のチェックツール123に共通の処理については、例えば、下記の通りである。
【0074】
エラー判定部133又は入力部137は、エラー判定の都度に、当該エラー判定において出力されたエラーメッセージを履歴として記憶装置120(例えばメモリ)に蓄積するようになっている。エラー判定の都度に、下記(a1)及び(a2)が行われる。
(a1)エラー判定部133又は入力部137は、当該エラー判定において出力されたエラーメッセージが、直前回のエラー判定において出力されたエラーメッセージと同じか否かを判定する。
(a2)(a1)の判定結果が真の場合、エラー判定部133又は入力部137は、直前回と同じエラーメッセージが得られたことを表す情報を出力する。当該情報を基に、プロンプト生成部131は、再生成用のプロンプトテンプレート124を選択し、当該再生成用のプロンプトテンプレート124を用いてプロンプト250Yを生成する。当該プロンプト250Yは、LLMインターフェース部132を通じてLLM151に入力される。
【0075】
「再生成用のプロンプトテンプレート」とは、修正されなかった直前回エラーの修正のためのプロンプト250Yの生成に用いられるプロンプトテンプレート124である。再生成用のプロンプトテンプレート124は、例えば、「前回の修正案では、同様のエラーメッセージが得られました。異なるアプローチで修正してください。」のように、直前回のプロンプト250Yに応答して行われた生成と異なるアプローチでの生成をLLM151に実行させるための文章を含む。そのような文章を含んだ再生成用のプロンプトテンプレート124を用いて生成されたプロンプト250YがLLM151に入力されることで、直前回エラーが修正された出力データ260が期待される。「直前回エラー」とは、直前回のエラー判定において検出されたエラーである。「修正されなかった直前回エラー」とは、直前回エラーの修正のためのプロンプト250Yが入力されたがエラー判定において再度検出された直前回エラーである。
【0076】
以下、直前回エラーの修正のためのプロンプト250Yの生成を、便宜上、「再生成」と呼ぶことができる。
【0077】
判定部134は、第二の判定を、下記(X)及び(Y)のうちの少なくとも一つに基づき行う。
(X)エラー判定部133又は入力部137は、修正対象プログラム(出力データ260に記述されておりエラーを含んだソースコードに従うプログラム)について、再生成後も同じ文字列のソースコードが生成され続けた回数であるプログラム一致回数をカウントする。判定部134は、プログラム一致回数が第一の閾値以下か否かを判定する。この判定の結果が偽の場合に、すなわち、プログラム一致回数が第一の閾値を超えている場合に、判定結果は「停止」となる。なお、プログラム一致回数は、再生成後に異なる文字列のソースコードが検出された場合に、エラー判定部133によりリセットされる(例えば当該回数は“0”とされる)。
(Y)エラー判定部133又は入力部137は、修正対象プログラムについて直前回と同じエラーメッセージが出力された回数であるエラーメッセージ一致回数をカウントする。判定部134は、エラーメッセージ一致回数が第二の閾値以下か否かを判定する。この判定の結果が偽の場合に、すなわち、エラーメッセージ一致回数が第二の閾値を超えている場合に、判定結果は「停止」となる。なお、エラーメッセージ一致回数は、直前回のエラーメッセージとは異なるエラーメッセージが出力された場合に、エラー判定部133によりリセットされる(例えば当該回数は“0”とされる)。第二の閾値は第一の閾値と同じ値でも異なる値でもよい。
【0078】
このようにして、判定部134は、プログラム一致回数及び/又はエラーメッセージ一致回数を監視し、いずれかの回数が当該回数の閾値を超えた場合に(又は全ての回数がそれぞれの閾値を超えた場合に)、原始プログラムを正しく動かせるプログラムにプログラミング言語変換することはできないと判定する。この場合、ユーザインターフェース部136が、プログラミング言語変換を実施できない旨を表す情報を含んだ通知情報を、ユーザインターフェース装置190を通じてユーザ(例えば開発者)に伝える。なお、修正対象プログラムのソースコードを有する全て又は一部の出力データ260が、エラー判定部133又は入力部137により記憶装置120に蓄積されてもよい。また、エラーメッセージが出力された場合、出力されたエラーメッセージと当該エラーメッセージの出力元のチェックツール123の種別を表す情報とを含んだ組が、エラー判定部133又は入力部137により記憶装置120に蓄積されてもよい。ユーザインターフェース部136が出力する通知情報は、プログラミング言語変換を実施できない旨を表す情報の他に、プログラミング言語変換を実施できないと判定されるまで(判定結果「停止」が得られるまで)に得られたソースコード、エラーメッセージ、及び、当該エラーメッセージを出力したチェックツール123の種別を表す情報を含んでよい。これにより、エラー無しの第二のプログラミング言語のソースコードを得ることができなくても、ユーザは、手動での作業においてどのような修正を行えば良いかを推定でき、以って、LLM151により得られたエラー有りの第二のプログラミング言語のソースコードを基に、少ない作業量で、エラー無しの第二のプログラミング言語のソースコードに従う対象プログラムを作成することが期待できる。
【0079】
なお、この(4a)の説明では、エラー判定において「直前回」が採用されているが、「直前回」に限らない「前回」が採用されてよい。なぜなら、今回(最近)のエラー判定において、直前回エラーが修正されたことが検出されても(直前回のエラーメッセージが出力されなくても)、直前回よりも過去の回で検出されたエラーと同じエラーが検出されたり、直前回よりも過去の回で出力されたエラーメッセージと同じエラーメッセージが出力されたりすることがあるためである。「直前回」に限らない「前回」が採用される場合、プログラム一致回数及びエラーメッセージ一致回数の各々は、累積値としての回数でよい。
【0080】
(4b)少なくとも一つのチェックツール123について、当該チェックツール123に応じた処理は、当該チェックツール123による今回のチェック結果と前回のチェック結果との差分に応じてプロンプト250Yを生成することを含む。
【0081】
例えば、チェックツール123がテストツールであり、テストツールが、テストケース1~5(複数の異なるテストケースの一例)を行うようになっているとする。テストツールが、チェックの都度に、テストケース毎の成否を、例えば記憶装置120に記録する。プロンプト生成部131は、テストツールの今回のチェック結果(例えば、いずれのテストケースが成功でありいずれのテストケースが失敗であったかを含む結果)と前回のチェック結果との差を特定し、特定された差に応じてプロンプト250Yを生成する。特定される差は、例えば、前回は成功であったが今回は失敗である一つ以上のテストケース、及び/又は、前回は失敗であったが今回は成功である一つ以上のテストケースを含んでよい。前回と今回どちらの方が成功のテストケースが多いか、及び/又は、差分におけるテストケースが何であるかに応じて、プロンプト250Yが生成されてよい。例えば、特定された差が、直前回のチェックにおいてテストケース1、2及び5が成功したが今回のチェックではテストケース1だけが成功の場合(前回のチェックの方がより多くのテストケースについて成功が得られたことの一例)、プロンプト生成部131は、「今回の修正では、テストケース2及び5が失敗してしまっているため、今回の修正は破棄し、前回のテストコード修正案から再度修正を試みる」といった文章を含んだプロンプト250Yを生成してよい。そのようなプロンプト250Yが、今回のプロンプト250Yに応答して生成された出力データ260が有するソースコードではなく、直前回のプロンプト250Yに応答して生成された出力データ260が有するソースコードをベースにソースコードをLLM151に生成させるためのプロンプト250Yの一例である。
【0082】
また、例えば、チェックツール123がLintツールであるとする。Lintツールは、典型的には文毎にチェックを行う。プロンプト生成部131は、直前回(直前回に限らないでもよい)のチェックにおける失敗数(成否判定の結果が偽となった文の数)と今回のチェックにおける失敗数のどちらが多いかによって、直前回と今回のどちらの出力データ260におけるソースコードをベースに修正を行うかを決定し、当該決定に応じたプロンプト250Yを生成する。例えば、今回のチェックにおける失敗数が直前回のチェックにおける失敗数より多い場合、プロンプト生成部131は、今回の出力データ260におけるソースコードを破棄し直前回の出力データ260におけるソースコードをベースにソースコードの修正版をLLM151に生成させるためのプロンプト250Yを生成する。
【0083】
本発明の一実施形態を説明したが、この実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。本発明は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。この実施形態は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【0084】
例えば、上述の説明を、以下のように総括することができる。なお、以下の総括は、上述の説明の補足説明や変形例の説明を含んでよい。例えば、以下の記載において、「エラー」は、異常という意味での狭義の「エラー」でもよいし、修正対象という意味での広義の「エラー」でもよい。
【0085】
上述の変換装置100は、本発明の一態様に係るデータ処理システムが適用された装置の一例である。データ処理システムは、入力部(例えば入力部137)と、処理部(例えば、処理部20)とを有する。入力部は、第一のプロンプト(例えばプロンプト250X)又は第二のプロンプト(例えばプロンプト250Y)の生成モデルへの入力に対する出力データの検証結果に関する情報である検証結果情報を入力する。処理部は、検証結果情報が第二のプロンプトを生成する条件を満たすか否かを判定し、検証結果情報が当該条件を満たす場合に検証結果情報を用いて生成モデルへの第二のプロンプトを生成する。この「条件」は、例えば、検証結果情報がエラー情報を含むこと、及び、継続条件が満たされることを含んでよい。生成された第二のプロンプトは生成モデルに入力される。これにより、生成モデルの出力結果に対する検証及び/又は修正の負担を少なくすることができる。生成モデルは、典型的には確率モデルであり、生成AI(Artificial Intelligence)モデルと呼ばれてもよい。生成モデルは、目的とするデータを得るための学習がされたモデルでよい。出力データの検証は、検証部により行われてよく、検証部の一例が、エラー判定部133でよい。また、第一のプロンプトの少なくとも一部は、プロンプト生成部により生成されてもよいし、ユーザにより作成又は編集されてもよい。第二のプロンプトの一部は、ユーザにより作成又は編集されてもよい。また、データ処理システムは、検証結果情報が上記条件を満たさない場合に生成モデルの出力データを出力する出力部(例えば出力部135)を備えてよい。
【0086】
上記条件は、検証結果情報がエラー情報を含むことを含んでよい。エラー情報は、下記(a)乃至(d)のうちの少なくとも一つを含んでよい。このようなエラー情報を基に第二のプロンプトが生成されるため、エラー修正の成功率の向上が期待される。
(a)検証結果に含まれるエラーを表すエラーメッセージ。
(b)生成モデルの出力データの全部又は一部であって検証結果に含まれるエラーに関わるデータである修正対象データ。
(c)今回のエラー情報と前回のエラー情報との差分。
(d)検証結果の履歴。
【0087】
検証(例えばエラー判定)毎に、(1)検証判定の通し番号(例えば何回目の検証であるか)、(2)当該検証の結果、及び(3)当該検証の直前に入力されたプロンプト、が関連付けられ、これら(1)~(3)の情報が蓄積されてよい。処理部は、その蓄積された情報を基に第二のプロンプトを生成してよい。
【0088】
生成モデルの一例が、LLM151(テキスト生成モデルの一例)でよい。第一のプロンプトの一例が、第一のプログラミング言語のプログラムコードを第二のプログラミング言語のプログラムコードに変換することをLLM151にさせるためのプロンプト250Xでよい。第二のプロンプトの一例が、LLM151の出力データについてのエラー判定において検出されたエラーをLLM151に修正させるためのプロンプト250Yでよい。上記修正対象データが、出力データが有する第二のプログラミング言語のプログラムコードを含んでよい。これにより、LLM151を利用してプログラミング言語が変換されたプログラムを得ることを負担少なく行うことができる。なお、プログラムコードは、ソースコードでもよいしマシンコードでもよい。LLM151は、プログラミング言語変換のための学習がされたモデル、例えば、第一のプログラミング言語と第二のプログラミング言語との確率的対応関係が学習されたモデルでよい。
【0089】
データ処理システムの処理部及び検証の一例が、処理部20及びエラー判定でよい。処理部20は、プロンプトテンプレートを用いてプロンプト250Yを生成してよい。プロンプトテンプレートは、エラーの修正を指示するテキストの他に、下記の第一乃至第五のテキストのうちの少なくとも一つを含んでよい。これにより、プログラミング言語変換におけるエラーの修正成功率の向上が期待されるプロンプト250Yを効率的に生成することができる。
・第一のテキストは、第一の位置と、当該第一の位置に設定されるテキストが出力データのうちの少なくともエラーに関わるプログラムコードであることとを規定したテキストを含む。第一のテキストの一例が、上述の「<<プログラム挿入部>>」を含んだテキストでよい。
・第二のテキストは、第二の位置と、当該第二の位置に設定されるテキストがエラー判定の内容を表すテキストであることとを規定したテキストを含む。第二のテキストの一例が、上述の「<<テストコード挿入部>>」を含んだテキストでよい。
・第三のテキストは、第三の位置と、当該第三の位置に設定されるテキストがエラー判定において得られたエラーメッセージであることとを規定したテキストを含む。第二のテキストの一例が、上述の「<<テスト結果挿入部>>」を含んだテキストでよい。
・第四のテキストは、第四の位置と、当該第四の位置に設定されるテキストが修正前のプログラムコードであることとを規定したテキストを含んでよい。第四のテキストの一例が、上述の「<<旧プログラム挿入部>>」を含んだテキストでよい。
・第五のテキストは、第五の位置と、当該第五の位置に設定されるテキストが簡約化されたエラーメッセージであることとを規定したテキストを含んでよい。第五のテキストの一例が、上述の「<<簡約結果挿入部>>」を含んだテキストでよい。
【0090】
検証は、一つ又は複数のチェックツールの各々によるチェックを含んでよい。エラー検出は、一つ又は複数のチェックツールのうちの少なくとも一つのチェックツールを用いたチェックにおいてエラーが検出されたことでよい。このように一つ又は複数の観点でのチェックがされるため、検証の精度の向上が期待される。複数のチェックツールのうちの二つ以上のチェックツールが逐次に又は並列に実行されてよい。いずれかのチェックツールによるチェックにおいてエラーが検出された場合に検証が終了してもよい。一つ又は複数のチェックツールの一例が、一つ又は複数のチェックツール123でよい。
【0091】
第一のプログラミング言語及び第二のプログラミング言語のいずれも高水準言語でよい。一つ又は複数のチェックツールは、コンパイラを含んでよい。検証は、コンパイラにより、出力データ160が有するプログラムコードを低水準言語のプログラムコードにコンパイルすることを含んでよい。検証結果情報(例えばエラー情報)は、コンパイルエラーのエラーメッセージを含んでよい。このようにコンパイラをチェックツールに流用することで、チェックツールを新規作成すること無しに検証を実現することが可能である。なお、エラー判定部133がコンパイラでもよい。
【0092】
一つ又は複数のチェックツールは、テストツールを含んでよい。検証は、テストツールにより、出力データについて一つ又は複数のテストケースの各々についてテストコードが満たされるかのチェックを行うことを含んでよい。検証結果情報(例えばエラー情報)は、いずれかのテストケースについてテストコードが満たされないことにより出力されたエラーメッセージを含んでよい。このように一つ又は複数のテストケースの各々についてのチェックがされるため、検証の精度の向上が期待される。
【0093】
一つ又は複数のチェックツールは、Lintツールを含んでよい。検証部133は、Lintツールにより、出力データがLintルールを満たすか否かのチェックを行ってよい。検証結果情報(例えばエラー情報)は、Lintルールが満たされないことにより出力されたエラーメッセージを含んでよい。これにより、コンパイラやテストツールとは別のチェック(例えばコンパイラよりも詳細なチェック)ができ、以って、検証の精度の向上が期待される。
【0094】
複数のチェックツールは、コンパイラ、テストツール及びLintツールを含んでよい。検証は、コンパイラによるチェックの後にテストツールによるチェックを行い、テストツールによるチェックの後にLintツールによるチェックを行うことを含んでよい。このように、効率的な検証を実現することができる。例えば、コンパイラ又はテストツールによるチェックにおいてエラーが検出された場合にはLintツールによるチェック無しに検証が終了してもよい。
【0095】
生成モデルは、テキスト生成モデル以外の生成モデル、例えば、画像生成モデル、動画生成モデル、又は、音声生成モデルであってもよい。いずれの種類の生成モデルについても、チェックツールとして少なくともテストツールが用意されてよい。例えば、生成モデルが画像生成モデルの場合、検証では、出力データとしての画像の画像領域毎に当該画像領域の画素値が期待される画素値か否かのチェックがされてよく、その検証において、画素値が適合しないというエラーが検出された場合、画素値修正のための第二のプロンプトが生成されてもよい。また、例えば、生成モデルが音声生成モデルの場合、検証では、出力データとしての音声における時間帯毎に当該時間帯でのノイズ量が一定量を超えるか否かのチェックがされてよく、その検証において、ノイズ量が一定量を超えているというエラーが検出された場合、ノイズ量低減のための第二のプロンプトが生成されてもよい。
【0096】
処理部は、今回の検証結果情報(例えばエラー情報)よりも前回の検証結果情報(例えばエラー情報)の方が良い場合、前回の検証結果に含まれていなかったが今回の検証結果に含まれていたエラーを前回の検証結果が得られた出力データをベースに修正するための第二のプロンプトを生成してよい。これにより、効率的なエラー修正が期待される。なお、「今回の検証結果情報よりも前回の検証結果情報の方が良い」とは、今回の検証において検出されたエラーの数よりも前回の検証において検出されたエラーの数の方が少ないことでよい。また、この場合に生成される第二のプロンプトは、今回の検証において検出されたエラーが修正されて前回の検証において検出されなかったエラーが再度生じることを防ぐことが期待されるコンテキストを表すテキストを含んでもよい。
【0097】
検証は、複数のチェックツールによるチェックを含んでよい。複数のチェックツールの各々について、当該チェックツールに対応のプロンプトテンプレートを含んでよい。複数のチェックツールの各々について、処理部は、今回のチェックの結果よりも前回のチェックの結果の方が良い場合、前回のチェックにおいて検出されなかったが今回のチェックにおいて検出されたエラーを前回のチェックの対象であった出力データをベースに修正するための第二のプロンプトを、当該チェックツールに関連付いているプロンプトテンプレートを用いて生成してよい。エラーを検出したチェックツールに対応のプロンプトテンプレートを用いて第二のプロンプトが生成されるため、エラー修正の成功率の向上が期待される第二のプロンプトを生成することができる。
【0098】
第二の判定の結果が否の場合に、出力部は、生成モデルの今回の出力データを出力してよい。すなわち、第二の判定の結果が偽の場合に、第二のプロンプトの生成はされないでよい。これにより、第二のプロンプトの自動生成及び入力と検証といったループが無駄に継続してしまうことを回避することができる。なお、継続条件は、下記のうちの少なくとも一つを含んでよい。
・前回の出力データと同じ出力データが得られた回数(例えば、上述のプログラム一致回数)が第一の閾値未満であること。
・前回の検証において検出されたエラーと同じエラーが検出された回数(例えば、上述のエラーメッセージ一致回数)が第二の閾値未満であること。
【0099】
第一のプロンプト及び/又は第二のプロンプトの生成はルールベースで行われてもよいが、テキスト生成モデルであるプロンプト生成モデルにより行われてもよい。具体的には、処理部は、前処理用テンプレートを用いて生成したプロンプトをプロンプト生成モデルに入力することで、当該プロンプト生成モデルの出力データとして生成モデルへの第二のプロンプトを取得してよい。前処理用テンプレートは、プロンプト生成モデルへのプロンプトの生成に利用されるプロンプトテンプレートでよい。前処理用テンプレートは、プロンプト生成モデルの出力データとしてのプロンプトの目的と、当該目的に基づく、プロンプト生成モデルの役割とのうちの少なくとも一つとしてのコンテキストを表すテキストを含んでよい。これにより、第二のプロンプトの効率的な生成が期待される。
【符号の説明】
【0100】
100:プログラミング言語変換装置、131:プロンプト生成部、132:LLMインターフェース部、133:エラー判定部、134:判定部、135:出力部、136:ユーザインターフェース部、137:入力部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22