【BEFORE】LLM以前のプログラミング
【AFTER】LLM以降のプログラミング
※あくまで「イメージ」です😅
LLMのビジネス活用で、こんなにプログラミングの世界が変わります!!
プログラミングというと、複雑なコードを書いたり、バグを修正したり、ドキュメントを整備したりと、大変な作業が多いイメージがあります。しかし、最近では、AI技術の進化により、これらの作業を劇的に効率化することができるようになってきました。そのキーワードが「LLM」です。
LLMとは、Large Language Modelの略で、大規模なテキストデータから学習し、人間のような文章を生成できるAIモデルのことです。LLMは、自然言語処理の分野で最先端の技術と言えます。BERTやGPT-3、GPT-4などが有名なLLMの例です。
LLMは、話し言葉(自然言語)のプロンプト(指示)を与えるだけで、コード生成、デバッグ、ドキュメント作成を支援してくれます。これにより、プログラミングの世界は、次のように変わっていきます♪
1. コード生成
【BEFORE】
これまで、プログラムの動作や機能を実現するために、人間が手動でコードを書いていました。これには、プログラミング言語の文法・構文の理解や、最適アルゴリズムやデータ構造のノウハウ、ライブラリの選定眼、エラーやバグを防ぐためにテスト・デバッグのスキルなど、高度な知識・ノウハウが必要ですし、その作業には多くの時間と労力をかけてきました。
【AFTER】
LLMを活用すれば、プログラムの動作や機能を自然言語で説明するだけで、自動でコードを生成してくれます。これまでのような高度な知識やノウハウがなくても、内容によっては、数秒から数分でコード生成が完成してしまうこともあります。
具体例を見てみましょう。例えば、以下のようなプロンプト(指示)をLLMに与えれば、Pythonコードを生成してくれます。
- リスト[1, 2, 3, 4, 5]の要素の合計を求める
- 二項分布に従う乱数を10個生成する
- ファイル"data.csv"を読み込んで、カラム"price"の平均値を表示する
ChatGPT4が生成したPythonコードは以下の通りです。
# リスト[1, 2, 3, 4, 5]の要素の合計を求める
lst = [1, 2, 3, 4, 5]
total = sum(lst)
print(total)
# 二項分布に従う乱数を10個生成する
import numpy as np
n = 10 # 試行回数
p = 0.5 # 成功確率
random_numbers = np.random.binomial(n, p, size=10)
print(random_numbers)
# ファイル"data.csv"を読み込んで、カラム"price"の平均値を表示する
import pandas as pd
df = pd.read_csv("data.csv")
mean_price = df["price"].mean()
print(mean_price)
2. デバッグ
【BEFORE】
これまで、プログラムに異常が見つかると、人手でそのエラー原因やバグを特定し、修正していました。具体的には、プログラムの動作の追跡、原因の特定、解決策の実装、再テストなど、かなり煩雑で手間のかかる作業が必要でした。結果として、デバッグには多くの時間や労力がかかっていました。
【AFTER】
LLMを活用すれば、プログラムコードやエラー、バグをLLMに報告するだけで、LLMが次々に処理してくれます。プログラムそのものや、エラーメッセージを、単にコピペして示すだけです。それだけで、LLMが、原因の推定と解決策の提示まで実施してくれます。LLM活用型ツールを使えば、より高度な自動化も実現できます。
具体例を見てみましょう。例えば、次のようなPythonコードを与えると、原因を特定し、修正プログラムを提示してくれます。
# フィボナッチ数列を生成する関数
def fibonacci(n):
if n == 0 or n == 1:
return n
else:
return fibonacci(n - 1) + fibonacci(n - 2)
# 10番目のフィボナッチ数を表示する
print(fibonacci(10))
LLMは、以下のようなエラーやバグを指摘し、修正します。
-エラー:関数の最後にインデントがない
-バグ:フィボナッチ数列の定義が間違っている(0番目ではなく1番目から始まる)
LLMが修正したコードは以下の通りです。
# フィボナッチ数列を生成する関数
def fibonacci(n):
if n == 1 or n == 2:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
# 10番目のフィボナッチ数を表示する
print(fibonacci(10))
3. ドキュメント整備
【BEFORE】
ドキュメント整備とは、プログラムの仕様や機能、使用方法などを文章や図表で説明することです。ドキュメント整備には、プログラムの内容を理解し、目的や対象者に応じて適切な表現や構成を選択し、分かりやすく伝えるなど、高度なコミュニケーションスキルや知識が必要です。また、ドキュメント整備には多くの時間や労力がかかります。
【AFTER】
ドキュメント整備とは、プログラムの内容や目的、対象者をLLMに伝えるだけで、LLMが自動でドキュメントを生成することです。ドキュメント整備には、LLMがプログラムの内容を理解し、目的や対象者に応じて適切な表現や構成を選択し、分かりやすく伝えます。また、ドキュメント整備には数秒から数分で完了します。
具体例を見てみましょう。例えば、以下のPythonコードに関するドキュメントを生成してみましょう。
# 二分探索法を実装する関数
def binary_search(lst, target):
# リストを昇順にソートする
lst.sort()
# 探索範囲の左端と右端を設定する
left = 0
right = len(lst) - 1
# 左端と右端が重なるまで繰り返す
while left <= right:
# 中央の位置を計算する
mid = (left + right) // 2
# 中央の値と目的の値を比較する
if lst[mid] == target:
# 一致したらその位置を返す
return mid
elif lst[mid] < target:
# 中央の値より目的の値が大きければ、左端を中央+1にする
left = mid + 1
else:
# 中央の値より目的の値が小さければ、右端を中央-1にする
right = mid - 1
# 見つからなければ-1を返す
return -1
LLMに、上記コードと以下の条件を与えれば、下方のドキュメントを生成します。
-目的:このコードの概要と使用方法を説明する
-対象者:Pythonの基本的な文法を知っているプログラマー
# 二分探索法のドキュメント
## 概要
このコードは、二分探索法というアルゴリズムを実装したものです。二分探索法とは、ソート済みのリストから目的の値を効率的に探す方法です。リストの中央の値と目的の値を比較し、目的の値が中央の値より大きければ右半分、小さければ左半分に絞り込んでいきます。これを繰り返して、目的の値が見つかればその位置を返し、見つからなければ-1を返します。
## 使用方法
このコードを実行するには、Python 3.xが必要です。コードをインポートして、binary_search関数を呼び出します。binary_search関数は、二つの引数を受け取ります。
- lst: ソート済みの数値のリスト
- target: 探したい数値
binary_search関数は、targetがlstに含まれていればその位置(インデックス)を返し、含まれていなければ-1を返します。
## 例
```python
# コードをインポートする
import binary_search
# ソート済みのリストを作る
lst = [1, 3, 5, 7, 9, 11, 13, 15]
# 5を探す
result = binary_search(lst, 5)
print(result) # 2を出力
# 6を探す
result = binary_search(lst, 6)
print(result) # -1を出力
いかがでしたか?LLMは、今後のプログラミングを大きく変革していきます。弊社株式会社ディビイでは、すでにプログラマーではなかった社員やマネージャまでもが、文字整形やデータ整理、スクレイピングなどのプログラムを、LLMで作って自動化しています。是非、皆さんもご活用下さい。
株式会社ディビイでは、ChatGPTやLLMの”基本のき”から学べるChatGPT基礎コース講座や、自らの手でLLMをカスタマイズするスキルを学べる応用コース講座をご用意しています。お気軽にお問い合わせ下さい。