はじめに
Groq の超低レイテンシな推論を、LangChain のシンプルな API で扱う最小構成のハンズオンです。
Jupyter Notebook を前提に、「API キー設定 → 最小実行 → LCEL でのチェーン → ストリーミング → 構造化出力」までを一気に体験します。
- 想定読者
- 既に Python / Jupyter の基本操作は分かる人
- LangChain の最近の(0.2 以降)API で Groq を試したい人
- 最短で“動くサンプル”から把握したい人
- ゴール
- Groq の API キーを Jupyter セッションに設定できる
- langchain_groq.ChatGroq を使って 1 発目の応答を取得できる
- LCEL(LangChain Expression Language)で prompt | llm の基本形が書ける
- ストリーミング / TypedDict による構造化出力を体験できる
- 前提環境
- Python 3.10+ 推奨
- Jupyter(Notebook or Lab)
- インターネット接続(パッケージ取得・API 叩き用)
0) Groqにアカウントを作成してAPIキーを設定(無料)
Groq のダッシュボードで API キーを発行してください。
詳細な手順は省略しますが、下記にアクセスし、アカウントを発行、「API Keys」メニューより発行できます。
本記事では 環境変数 GROQ_API_KEY に設定して使います
(下の「2)」でセッションに限定して設定)。
セキュリティTip: Git などに APIキーをコミットしない こと。.env やシークレットマネージャの利用を推奨。
1) 依存ライブラリのインストールとバージョン確認
Jupyter のセルから pip を実行します。
import sys, subprocess, importlib
def pip_install(pkg):
subprocess.check_call([sys.executable, "-m", "pip", "install", "-q", pkg])
# 最低限の依存関係をインストール/更新
for pkg in [
"langchain>=0.2.12", # 0.3 系でも可。互換性のため余裕を持たせる指定
"langchain-core>=0.2.12",
"langchain-groq>=0.1.9", # ChatGroq を提供するパッケージ
"typing_extensions>=4.9.0"
]:
pip_install(pkg)
# バージョン表示
import importlib
import pkgutil
def get_version(mod_name):
try:
m = importlib.import_module(mod_name)
return getattr(m, "__version__", "unknown")
except Exception as e:
return f"not found ({e})"
print("langchain :", get_version("langchain"))
print("langchain_core :", get_version("langchain_core"))
print("langchain_groq :", get_version("langchain_groq"))
print("typing_extensions:", get_version("typing_extensions"))
補足
- langchain と langchain-core を分けて指定しているのは、バージョンの整合を取りやすくするためです。
- langchain-groq が ChatGroq 実装を提供します。LangChain 0.2+ のインターフェース(LCEL 等)に素直に乗ります。
2) API キー設定(このセッションだけに適用)
getpass
でキーを入力→ os.environ['GROQ_API_KEY']
に設定します。
import os, getpass
if "GROQ_API_KEY" not in os.environ or not os.environ["GROQ_API_KEY"]:
print("GROQ_API_KEY を入力してください(入力は画面に表示されません)")
key = getpass.getpass("GROQ_API_KEY: ")
os.environ["GROQ_API_KEY"] = key.strip()
else:
print("GROQ_API_KEY は既に設定済みです。")
補足
- この方法は Notebook の実行プロセス(カーネル)内だけ に反映されます。
- 別ノートブックや再起動後も使いたい場合は、
.env
を使ってos.environ
に読み込む、またはシェルでexport GROQ_API_KEY=...
などを設定してください。
3) 最小の “Hello, Groq”
LangChain の ChatGroq 経由でチャット補完を 1 回呼び出します。
from langchain_groq import ChatGroq
# 例のモデル名。ご利用可能なモデル ID に置き換えてください。
MODEL = "openai/gpt-oss-20b"
llm = ChatGroq(model=MODEL, temperature=0.2)
messages = [
("system", "あなたは日本語の丁寧なアシスタントです。"),
("human", "GroqとLangChainを使う利点を一言で教えてください。"),
]
res = llm.invoke(messages)
print(res.content)
実行時間:0.7s
実行結果
高速推論と柔軟なLLMワークフロー構築が実現できることです。
解説
-
messages
は(role, content)
のタプル列で渡せます(AIMessage
等のクラスでも可)。 - モデルIDは環境によって異なる ため、ダッシュボードの利用可能モデル一覧で確認して置き換えてください。
4) LCEL でプロンプト→モデルの基本チェーン
LangChain Expression Language (LCEL) を使うと、prompt | llm
のようにパイプでつないで呼び出せます。
from langchain_core.prompts import ChatPromptTemplate
from langchain_groq import ChatGroq
prompt = ChatPromptTemplate.from_messages(
[
("system", "あなたは{domain}の専門家です。短く・正確に答えてください。"),
("human", "{question}"),
]
)
llm = ChatGroq(model=MODEL, temperature=0.3) # 軽量・高速の例
chain = prompt | llm
ans = chain.invoke({"domain": "LLM", "question": "Groqの強みを3点で説明してください。"})
print(ans.content)
実行時間:0.8s
実行結果
Groqの強み(3点)
極めて低いレイテンシ
- 1 ms以下の推論遅延を実現し、リアルタイムAIアプリに最適。
高いスループットとエネルギー効率
- 1 TOPS/ワットを超える性能で、データセンターの電力コストを大幅削減。
専用アーキテクチャとソフトウェアエコシステム
- 大規模行列演算に特化したハードウェアと、TensorFlow/PyTorch向けの最適化ライブラリを提供。
解説
-
ChatPromptTemplate
で プレースホルダー({domain}, {question})を定義 →chain.invoke()
に辞書で値を入れるだけ。 - LCEL は「前処理(プロンプト)→ 生成(LLM)」の合成を明示的に表現でき、あとから評価・埋め込み・RAG 等へ段階的に拡張しやすいのが利点です。
5) ストリーミング(トークン逐次出力)
生成トークンを逐次表示します。Jupyter でも随時出力されます。
from langchain_groq import ChatGroq
import sys
llm = ChatGroq(model=MODEL, temperature=0)
print("Streaming: ", end="", flush=True)
for chunk in llm.stream([("human", "100文字以内でGroqを紹介してください。")]):
text = chunk.content or ""
sys.stdout.write(text)
sys.stdout.flush()
print() # 改行
実行時間:1.7s
実行結果
Streaming: Groqは高速AI推論を実現する次世代プロセッサで、低レイテンシと高スループットを提供します。さらに、エネルギー効率も優れています。
解説
-
.stream()
は部分文字列(トークン/チャンク)単位で届くたびに処理できます。 - CLI や WebSocket、Gradio/Streamlit UI などでリアルタイム表示に応用しやすいです。
- Notebook では
print(..., flush=True)
やsys.stdout.flush()
を併用すると体感が良くなります。
6) 構造化出力(TypedDict スキーマ)
.with_structured_output()
を使って、辞書として受け取ります。 Python 3.10 などでも動くように typing_extensions.TypedDict
を使います。
from typing_extensions import TypedDict, Literal
from langchain_groq import ChatGroq
class Summary(TypedDict):
title: str
sentiment: Literal["positive", "neutral", "negative"]
bullets: list[str]
llm = ChatGroq(model=MODEL, temperature=0)
structured_llm = llm.with_structured_output(Summary)
doc = "Groqは超低レイテンシ志向の推論を提供し、開発者が高速応答のアプリを構築しやすくします。"
result = structured_llm.invoke([("human", f"次を要約し、感情と箇条書き3点を返してください:\n\n{doc}")])
print(result) # {'title': '...', 'sentiment': '...', 'bullets': ['...', '...', '...']}
実行時間:0.6s
実行結果
{‘bullets’: [‘Groqは超低レイテンシを重視した推論を提供’, ‘開発者は高速応答のアプリを簡単に構築できる’, ‘性能向上によりユーザー体験が向上する’], ‘sentiment’: ‘positive’, ‘title’: ‘Groqの超低レイテンシ推論’}
解説
- 期待する JSON 形式を
TypedDict
で定義し、.with_structured_output()
を噛ませるだけで、辞書として受け取れるのが便利。 - バックエンドではスキーマに合わせた制約付き生成(function calling / JSON モード等)が行われるため、型安全で後工程(DB 登録・API 呼び出し)に回しやすいです。
まとめ
- 最短 6 セルで Groq × LangChain を体験できる構成にしました。
- Groq の API キーを セッション環境変数に設定しました。
- 必要ライブラリを pip でインストールし、バージョンを確認しました。
- ChatGroq を用いて 最小の 1 回呼び出し(Hello, Groq) を実行しました。
- LCEL(prompt | llm)で 基本チェーンを構築・実行しました。
-
.stream()
を使い トークン逐次出力(ストリーミング) を実装しました。 -
.with_structured_output()
とTypedDict
で 構造化出力(型安全な JSON) を取得しました。
※本記事の出力例はサンプルです。モデルや環境によって応答は異なります。