1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Groq × LangChain ハンズオン(Jupyter 版)

Posted at

はじめに

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. 極めて低いレイテンシ

    • 1 ms以下の推論遅延を実現し、リアルタイムAIアプリに最適。
  2. 高いスループットとエネルギー効率

    • 1 TOPS/ワットを超える性能で、データセンターの電力コストを大幅削減。
  3. 専用アーキテクチャとソフトウェアエコシステム

    • 大規模行列演算に特化したハードウェアと、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) を取得しました。

※本記事の出力例はサンプルです。モデルや環境によって応答は異なります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?