Skip to content

ClasCat® AI Research

クラスキャット – 生成 AI, AI エージェント, MCP

Menu
  • ホーム
    • ClassCat® AI Research ホーム
    • クラスキャット・ホーム
  • OpenAI API
    • OpenAI Python ライブラリ 1.x : 概要
    • OpenAI ブログ
      • GPT の紹介
      • GPT ストアの紹介
      • ChatGPT Team の紹介
    • OpenAI platform 1.x
      • Get Started : イントロダクション
      • Get Started : クイックスタート (Python)
      • Get Started : クイックスタート (Node.js)
      • Get Started : モデル
      • 機能 : 埋め込み
      • 機能 : 埋め込み (ユースケース)
      • ChatGPT : アクション – イントロダクション
      • ChatGPT : アクション – Getting started
      • ChatGPT : アクション – アクション認証
    • OpenAI ヘルプ : ChatGPT
      • ChatGPTとは何ですか?
      • ChatGPT は真実を語っていますか?
      • GPT の作成
      • GPT FAQ
      • GPT vs アシスタント
      • GPT ビルダー
    • OpenAI ヘルプ : ChatGPT > メモリ
      • FAQ
    • OpenAI ヘルプ : GPT ストア
      • 貴方の GPT をフィーチャーする
    • OpenAI Python ライブラリ 0.27 : 概要
    • OpenAI platform
      • Get Started : イントロダクション
      • Get Started : クイックスタート
      • Get Started : モデル
      • ガイド : GPT モデル
      • ガイド : 画像生成 (DALL·E)
      • ガイド : GPT-3.5 Turbo 対応 微調整
      • ガイド : 微調整 1.イントロダクション
      • ガイド : 微調整 2. データセットの準備 / ケーススタディ
      • ガイド : 埋め込み
      • ガイド : 音声テキスト変換
      • ガイド : モデレーション
      • ChatGPT プラグイン : イントロダクション
    • OpenAI Cookbook
      • 概要
      • API 使用方法 : レート制限の操作
      • API 使用方法 : tiktoken でトークンを数える方法
      • GPT : ChatGPT モデルへの入力をフォーマットする方法
      • GPT : 補完をストリームする方法
      • GPT : 大規模言語モデルを扱う方法
      • 埋め込み : 埋め込みの取得
      • GPT-3 の微調整 : 分類サンプルの微調整
      • DALL-E : DALL·E で 画像を生成して編集する方法
      • DALL·E と Segment Anything で動的マスクを作成する方法
      • Whisper プロンプティング・ガイド
  • Gemini API
    • Tutorials : クイックスタート with Python (1) テキスト-to-テキスト生成
    • (2) マルチモーダル入力 / 日本語チャット
    • (3) 埋め込みの使用
    • (4) 高度なユースケース
    • クイックスタート with Node.js
    • クイックスタート with Dart or Flutter (1) 日本語動作確認
    • Gemma
      • 概要 (README)
      • Tutorials : サンプリング
      • Tutorials : KerasNLP による Getting Started
  • Keras 3
    • 新しいマルチバックエンド Keras
    • Keras 3 について
    • Getting Started : エンジニアのための Keras 入門
    • Google Colab 上のインストールと Stable Diffusion デモ
    • コンピュータビジョン – ゼロからの画像分類
    • コンピュータビジョン – 単純な MNIST convnet
    • コンピュータビジョン – EfficientNet を使用した微調整による画像分類
    • コンピュータビジョン – Vision Transformer による画像分類
    • コンピュータビジョン – 最新の MLPモデルによる画像分類
    • コンピュータビジョン – コンパクトな畳込み Transformer
    • Keras Core
      • Keras Core 0.1
        • 新しいマルチバックエンド Keras (README)
        • Keras for TensorFlow, JAX, & PyTorch
        • 開発者ガイド : Getting started with Keras Core
        • 開発者ガイド : 関数型 API
        • 開発者ガイド : シーケンシャル・モデル
        • 開発者ガイド : サブクラス化で新しい層とモデルを作成する
        • 開発者ガイド : 独自のコールバックを書く
      • Keras Core 0.1.1 & 0.1.2 : リリースノート
      • 開発者ガイド
      • Code examples
      • Keras Stable Diffusion
        • 概要
        • 基本的な使い方 (テキスト-to-画像 / 画像-to-画像変換)
        • 混合精度のパフォーマンス
        • インペインティングの簡易アプリケーション
        • (参考) KerasCV – Stable Diffusion を使用した高性能画像生成
  • TensorFlow
    • TF 2 : 初級チュートリアル
    • TF 2 : 上級チュートリアル
    • TF 2 : ガイド
    • TF 1 : チュートリアル
    • TF 1 : ガイド
  • その他
    • 🦜️🔗 LangChain ドキュメント / ユースケース
    • Stable Diffusion WebUI
      • Google Colab で Stable Diffusion WebUI 入門
      • HuggingFace モデル / VAE の導入
      • LoRA の利用
    • Diffusion Models / 拡散モデル
  • クラスキャット
    • 会社案内
    • お問合せ
    • Facebook
    • ClassCat® Blog
Menu

LangGraph 0.5 on Colab : Get started : カスタム・ワークフローの構築

Posted on 06/29/202506/29/2025 by Masashi Okumura

LangGraph 0.5 でドキュメント構成が大幅に変更されましたので、再翻訳しながら Google Colab ベースで動作するようにまとめ直します。モデルは可能な限り最新版を利用し、プロンプトは日本語を使用します。
このチュートリアルでは、基本的なチャットボットを構築します。このチャットボットは以降の一連のチュートリアルのベースとなります。

LangGraph 0.5 on Colab : Get started : カスタム・ワークフローの構築

作成 : クラスキャット・セールスインフォメーション
作成日時 : 06/29/2025

* 本記事は langchain-ai.github.io の以下のページを独自に翻訳した上で、補足説明を加えてまとめ直しています :

  • Get started : Build a custom workflow : 1. Build a basic chatbot

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス ⭐️ リニューアルしました 😉

◆ クラスキャット は人工知能に関する各種サービスを提供しています。お気軽にご相談ください :

  • 人工知能導入個別相談会(無償)実施中! [詳細]

  • 人工知能研究開発支援 [詳細]
    1. 自社特有情報を含むチャットボット構築支援
    2. 画像認識 (医療系含む) / 画像生成

  • PoC(概念実証)を失敗させないための支援 [詳細]

◆ お問合せ : 下記までお願いします。

  • クラスキャット セールス・インフォメーション
  • sales-info@classcat.com
  • ClassCatJP

 

 

LangGraph 0.5 on Colab : Get started : 1. 基本的なチャットボットの構築

このチュートリアルでは、基本的なチャットボットを構築します。このチャットボットは以降の一連のチュートリアルのベースとなります、そこではより洗練された機能を段階的に追加し、同時に主要な LangGraph コンセプトが紹介されます。Let’s dive in! 🌟

 

前提条件

このチュートリアルを始める前に、OpenAI, Anthropic や Google Gemini のような、ツール呼び出し機能をサポートする LLM にアクセスできることを確認してください。

 

1. パッケージのインストール

必要なパッケージをインストールします :

%%capture --no-stderr
!pip install -U --quiet langgraph langsmith

Tip : LangSmith にサインアップして問題を素早く特定して LangGraph プロジェクトのパフォーマンスを改善しましょう。LangSmith はトレースデータを使用して、LangGraph で構築された LLM アプリケーションをデバッグ、テストそして監視を行うことを可能にします。For more information on how to get started, see LangSmith docs.

 

2. StateGraph の作成

これで LangGraph を使用して基本的なチャットボットを作成できます。このチャットボットはユーザメッセージに直接応答します。

StateGraph の作成から始めます。StateGraph オブジェクトはチャットボットの構造を「ステートマシン」として定義します。チャットボットが呼び出すことができる LLM と関数を表すノードと、ボットがこれらの関数間を遷移する方法を指定するエッジを追加します。

API リファレンス: StateGraph | START | add_messages

StateGraph : ノードが共有状態への読み書きにより通信するグラフ。各ノードのシグネチャは State -> Partial.
各状態キーはオプションで reducer 関数によりアノテートされます、これは複数のノードから受け取ったキーの値を集約するために使用されます。reducer 関数のシグネチャは (Value, Value) -> Value です。

START : グラフスタイル Pregel 内の最初の (maybe 仮想的な) ノード。

add_messages : デフォルトでは (新しいメッセージが既存のメッセージと同じ ID を持たない限りは) 状態が “append-only” であることを保証します。

from typing import Annotated

from typing_extensions import TypedDict

from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages


class State(TypedDict):
    # messages は "list" 型です。アノテーションの `add_messages` 関数はこの状態キーの更新方法を定義します。
    # (この場合、それはメッセージを上書きするのではなく、リストに追加します)
    messages: Annotated[list, add_messages]

graph_builder = StateGraph(State)

グラフは 2 つの主要なタスクを処理できるようになりました :

  1. 各 node は入力として現在の State を受け取り、状態への更新を出力します。

  2. Annotated 構文とともに使用される構築済みの add_messages 関数により、messages への更新は既存のリストを上書きするのではなく、追加されます。

コンセプト : グラフを定義するとき、最初のステップはその State を定義することです。State はグラフのスキーマと、状態更新を処理する reducer 関数 を含みます。この例では、State は一つのキー: messages をもつ TypedDict です。add_messages reducer 関数はリストを上書きするのではなく、新しいメッセージをリストに追加するために使用されます。reducer アノテーションのないキーは以前の値を上書きします。To learn more about state, reducers, and related concepts, see LangGraph reference docs.

 

3. ノードの追加

次に、”chatbot” ノードを追加します。ノード は処理単位を表し、通常は一般的な Python 関数です。

まずチャットモデルを選択しましょう :

OpenAI

!pip install -U "langchain[openai]"
import os
from langchain.chat_models import init_chat_model

os.environ["OPENAI_API_KEY"] = "sk-..."

llm = init_chat_model("openai:gpt-4.1")

Anthropic

!pip install -U "langchain[anthropic]"
import os
from langchain.chat_models import init_chat_model

os.environ["ANTHROPIC_API_KEY"] = "sk-..."

llm = init_chat_model("anthropic:claude-3-5-sonnet-latest")

init_chat_model はモデル名とプロバイダーから ChatModel を初期化します。
Chat Model は、(プレーンテキストを使用するのとは対照的に) 入力としてメッセージのシークエンスを使用して、出力としてメッセージを返す言語モデルです。

👉 Read the Anthropic integration docs

これでチャットモデルを単純なノードに組み込むことができるようになりました :

def chatbot(state: State):
    return {"messages": [llm.invoke(state["messages"])]}

# 最初の引数は一意なノード名です。
# 2 番目の引数は、ノードが使用されるたびに呼び出される関数またはオブジェクトです。
graph_builder.add_node("chatbot", chatbot)

Note : チャットボット・ノード関数が入力として現在の State を受け取り、キー “messages” のもとで更新されたメッセージ・リストを含む辞書を返す方法に注目してください。これは、すべての LangGraph ノード関数に対する基本パターンです。

この State の add_messages 関数は LLM の応答メッセージを状態に既にあるメッセージに追加します。

 

4. エントリポイントの追加

グラフが実行されるたびに、どこから作業を開始するか をグラフに伝えるエントリポイントを追加します :

graph_builder.add_edge(START, "chatbot")

 

5. 終了ポイントの追加

どこでグラフが実行を終了するべきか を示す終了 (exit) ポイントを追加します。これはより複雑なフローで役立ちますが、このような単純なグラフにおいても、終了ノードの追加はわかりやすさを向上させます。

graph_builder.add_edge("chatbot", END)

これはグラフに、チャットボット・ノードを実行したあと終了するように伝えます。

 

6. グラフのコンパイル

グラフを実行する前に、それをコンパイルする必要があります。graph builder 上で compile() を呼び出すことでそれを行うことができます。これは、ステート上で invoke できる CompiledGraph を作成します。

graph = graph_builder.compile()

 

7. グラフの可視化 (オプション)

get_graph メソッドと draw_ascii や draw_png のような “draw” メソッドの一つを使用してグラフを可視化できます。それぞれの draw メソッドは追加の依存関係が必要です。

from IPython.display import Image, display

try:
    display(Image(graph.get_graph().draw_mermaid_png()))
except Exception:
    # This requires some extra dependencies and is optional
    pass

 

8. チャットボットの実行

それではチャットボットを実行しましょう!

Tip : You can exit the chat loop at any time by typing quit, exit, or q.

def stream_graph_updates(user_input: str):
    for event in graph.stream({"messages": [{"role": "user", "content": user_input}]}):
        for value in event.values():
            print("Assistant:", value["messages"][-1].content)


while True:
    try:
        user_input = input("User: ")
        if user_input.lower() in ["quit", "exit", "q"]:
            print("Goodbye!")
            break
        stream_graph_updates(user_input)
    except:
        # fallback if input() is not available
        user_input = "What do you know about LangGraph?"
        print("User: " + user_input)
        stream_graph_updates(user_input)
        break
Assistant: LangGraph is a library designed to help build stateful multi-agent applications using language models. It provides tools for creating workflows and state machines to coordinate multiple AI agents or language model interactions. LangGraph is built on top of LangChain, leveraging its components while adding graph-based coordination capabilities. It's particularly useful for developing more complex, stateful AI applications that go beyond simple query-response interactions.
Goodbye!

Congratulations! LangGraph を使用して最初のチャットボットを構築しました。このボットは、ユーザ入力を受け取り LLM を使用して応答を生成することで基本的な会話を行なうことができます。You can inspect a LangSmith Trace for the call above.

以下はこのチュートリアル用の完全なコードです :

from typing import Annotated

from langchain.chat_models import init_chat_model
from typing_extensions import TypedDict

from langgraph.graph import StateGraph, START
from langgraph.graph.message import add_messages


class State(TypedDict):
    messages: Annotated[list, add_messages]


graph_builder = StateGraph(State)


llm = init_chat_model("anthropic:claude-3-5-sonnet-latest")


def chatbot(state: State):
    return {"messages": [llm.invoke(state["messages"])]}


# The first argument is the unique node name
# The second argument is the function or object that will be called whenever
# the node is used.
graph_builder.add_node("chatbot", chatbot)
graph_builder.add_edge(START, "chatbot")
graph = graph_builder.compile()

 

以上



クラスキャット

最近の投稿

  • LangGraph 0.5 on Colab : Get started : Tavily Web 検索ツールの追加
  • LangGraph 0.5 on Colab : Get started : カスタム・ワークフローの構築
  • LangGraph 0.5 on Colab : Get started : クイックスタート
  • LangGraph on Colab : SQL エージェントの構築
  • LangGraph on Colab : マルチエージェント・スーパーバイザー

タグ

AutoGen (13) ClassCat Press Release (20) ClassCat TF/ONNX Hub (11) DGL 0.5 (14) Eager Execution (7) Edward (17) FLUX.1 (16) Gemini (20) HuggingFace Transformers 4.5 (10) HuggingFace Transformers 4.6 (7) HuggingFace Transformers 4.29 (9) Keras 2 Examples (98) Keras 2 Guide (16) Keras 3 (10) Keras Release Note (17) Kubeflow 1.0 (10) LangChain (45) LangGraph (24) MediaPipe 0.8 (11) Model Context Protocol (16) NNI 1.5 (16) OpenAI Agents SDK (8) OpenAI Cookbook (13) OpenAI platform (10) OpenAI platform 1.x (10) OpenAI ヘルプ (8) TensorFlow 2.0 Advanced Tutorials (33) TensorFlow 2.0 Advanced Tutorials (Alpha) (15) TensorFlow 2.0 Advanced Tutorials (Beta) (16) TensorFlow 2.0 Guide (10) TensorFlow 2.0 Guide (Alpha) (16) TensorFlow 2.0 Guide (Beta) (9) TensorFlow 2.0 Release Note (12) TensorFlow 2.0 Tutorials (20) TensorFlow 2.0 Tutorials (Alpha) (14) TensorFlow 2.0 Tutorials (Beta) (12) TensorFlow 2.4 Guide (24) TensorFlow Deploy (8) TensorFlow Get Started (7) TensorFlow Graphics (7) TensorFlow Probability (9) TensorFlow Programmer's Guide (22) TensorFlow Release Note (18) TensorFlow Tutorials (33) TF-Agents 0.4 (11)
2025年6月
月 火 水 木 金 土 日
 1
2345678
9101112131415
16171819202122
23242526272829
30  
« 5月    
© 2025 ClasCat® AI Research | Powered by Minimalist Blog WordPress Theme