🫠
【初心者】LLMって何よ
状況
- よく聞く「LLMに繋ぐ」とか「LLMを使う」という会話の「LLM」ってちゃんと理解していないなと思ったので改めて学習
- 勉強前の理解:大量のデータを扱うプロダクト?のこと?(笑)
内容
エンジニア業界で「LLM」というと、通常 「Large Language Model(大規模言語モデル)」 の略
LLM(Large Language Model)とは?
- LLM は、膨大なテキストデータを学習して、人間のように文章を生成したり、質問に答えたり、コードを補完したりする AI(人工知能)の一種
- テキストを理解し、文章を生成するための AIモデルそのもの
例:GPT-4、Claude、Gemini など
※「LLMに繋ぐ」「LLMを使ってアプリを動かす」という場面で使われるのは、 LLMをAPIやシステムと連携する技術 が関わっているから
「LLMに繋ぐ」とは?
(1) LLMをAPIとして活用
- LLMは スタンドアローンのAI ではなく、通常は APIとして提供 され、アプリケーションやシステムに組み込む形で使われる
例:LLMをAPIとして使う流れ- ユーザーがアプリを操作
- アプリが LLM API にリクエストを送る
- LLM が応答を生成し、アプリに返す
- アプリがユーザーに回答を表示
- 「LLMに繋ぐ」とは、このAPI連携を指すことが多い
(2) LLMを使う具体例
- チャットボットのバックエンド(カスタマーサポートなど)
- ドキュメント要約・翻訳アプリ
- コード補完ツール(GitHub Copilot など)
- 検索エンジンの高度化(LLMを組み込んだ検索)
- 医療・法律・金融向けのAIアシスタント
例えば、「LLMに繋ぐ」= ChatGPT API をシステムに組み込み、ユーザーの問い合わせに自動応答させる という意味で使われることがある
LLMをアプリに組み込む方法
- アプリケーションで LLM を利用するには、一般的に以下の方法がある
(1) OpenAI API(GPT系)を利用
OpenAI の API(ChatGPT、GPT-4 など)を使って、アプリに組み込む
-
使い方:
- HTTPリクエストを送る(
POST
) - 入力テキストを送信 → AIが応答を生成
- 応答をアプリに返す
- HTTPリクエストを送る(
(例)Railsアプリで LLM API を呼び出す
require 'net/http'
require 'json'
uri = URI("https://api.openai.com/v1/chat/completions")
req = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')
req['Authorization'] = "Bearer #{ENV['OPENAI_API_KEY']}"
req.body = {
model: "gpt-4",
messages: [{role: "user", content: "こんにちは!"}]
}.to_json
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
puts JSON.parse(res.body)["choices"][0]["message"]["content"]
このコードを実行すると、OpenAI の API に「こんにちは!」を送信し、LLM が応答を生成
(2) 自前で LLM をホスティング
APIを使わず、 自社サーバー上に LLM をホスト して動かす方法も
-
オープンソースのLLMを活用
- LLama 2(Meta)
- Mistral(軽量&高性能)
- GPT-4all(ローカル動作可能)
-
メリット
- APIコスト不要
- データを外部に送らないのでセキュリティが強い
-
デメリット
- GPUなどのハードウェアが必要
- モデルのチューニングや管理が必要
(例)Pythonで Llama 2 をローカル実行
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "meta-llama/Llama-2-7b-chat-hf"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
input_text = "こんにちは!"
input_ids = tokenizer(input_text, return_tensors="pt").input_ids
output = model.generate(input_ids)
print(tokenizer.decode(output[0]))
これは クラウドに頼らず、ローカル環境で LLM を動かす 例
まとめ
「LLM=生成AI」ではなく、生成AIの一部
- LLM はテキスト生成に特化した AIモデル
- 生成AIには 画像・音声・動画なども含まれる
- 「LLMに繋ぐ」とは、APIを活用することが多い
- LLMは 単独ではなくAPI経由で利用される
- アプリ → API → LLM の流れで動作する
所見
- ようやくスッキリしました。これからはLLMという単語に恐れることなく会話していきます!
Discussion