2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DatabricksでLangGraphのクイックスタートを動かしてみる(その1)

Last updated at Posted at 2025-01-29

LangGrahp勉強中です。

LangGraph QuickstartをDatabricksでウォークスルーします。

このチュートリアルでは、LangGraphでサポートチャットボットを構築します。以下の機能を持つことができます:

✅ ウェブ検索で一般的な質問に答える: その2
✅ 呼び出し間で会話の状態を維持する: その3
✅ 人間がレビューできるように複雑なクエリを人間にルーティングする: その4
カスタム状態を使用して動作を制御する: その5
✅ 会話の代替パスを巻き戻して探索する: その6

基本的なチャットボットから始め、徐々により高度な機能を追加しながら、重要なLangGraphの概念を紹介していきます。さあ、始めましょう!🌟

こちらのクイックスタートのPart1 Build a Basic Chatbotを実行します。

パート1: 基本的なチャットボットを構築する

まず、LangGraphを使用してシンプルなチャットボットを作成します。このチャットボットはユーザーのメッセージに直接応答します。シンプルですが、LangGraphでの構築の基本概念を示します。このセクションの終わりまでに、基本的なチャットボットを構築できるようになります。

セットアップ

まず、必要なパッケージをインストールし、環境を設定します:

%%capture --no-stderr
%pip install -U langgraph langsmith langchain_openai openai
%restart_python
import os
os.environ["OPENAI_API_KEY"] = dbutils.secrets.get(scope="demo-token-takaaki.yayoi", key="openai_api_key")

StateGraphを作成することから始めます。StateGraphオブジェクトは、チャットボットの構造を「状態機械」として定義します。nodeを追加してllmやチャットボットが呼び出せる関数を表し、edgeを追加してこれらの関数間の遷移方法を指定します。

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):
    # メッセージは "list" 型を持ちます。注釈内の `add_messages` 関数は
    # この状態キーがどのように更新されるべきかを定義します
    # (この場合、リストにメッセージを追加し、上書きしません)
    messages: Annotated[list, add_messages]


graph_builder = StateGraph(State)

コンセプト

グラフを定義する際の最初のステップは、そのStateを定義することです。Stateには、グラフのスキーマと状態更新を処理するreducer関数が含まれます。私たちの例では、Stateは1つのキーmessagesを持つTypedDictです。add_messages reducer関数は、新しいメッセージを上書きするのではなく、リストに追加するために使用されます。reducer注釈のないキーは、以前の値を上書きします。State、reducer、および関連する概念についての詳細は、このガイドで学んでください。

次に、「chatbot」ノードを追加します。ノードは作業単位を表します。通常、これらは通常のPython関数です。

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")


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


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

chatbotノード関数が現在のStateを入力として受け取り、キー「messages」の下に更新されたmessagesリストを含む辞書を返す方法に注目してください。これはすべてのLangGraphノード関数の基本パターンです。

Stateadd_messages関数は、llmの応答メッセージを現在の状態に既にあるメッセージに追加します。

次に、entryポイントを追加します。これにより、グラフが実行されるたびにどこから作業を開始するかが指定されます。

graph_builder.add_edge(START, "chatbot")

同様にfinishポイントを設定します。これは、グラフに 「このノードが実行されるたびに、終了してもよい」 と指示します。

graph_builder.add_edge("chatbot", END)

最後にグラフを実行できるようにしたいと思います。そのためには、グラフビルダーで「compile()」を呼び出します。これにより、状態で呼び出すことができる「CompiledGraph」が作成されます。

graph = graph_builder.compile()

グラフは、get_graphメソッドとdraw_asciidraw_pngのような「draw」メソッドの1つを使用して視覚化できます。drawメソッドはそれぞれ追加の依存関係を必要とします。

from IPython.display import Image, display

try:
    display(Image(graph.get_graph().draw_mermaid_png()))
except Exception:
    # これはいくつかの追加の依存関係を必要とし、オプションです
    pass

download.png

さあ、チャットボットを実行しましょう!

ヒント: "quit"、"exit"、または "q" と入力することで、いつでもチャットループを終了できます。

Screenshot 2025-01-29 at 16.36.13.png

Databricksの場合、MLflow Traceが動作してくれます。

おめでとうございます!LangGraphを使用して最初のチャットボットを構築しました。このボットは、ユーザー入力を受け取り、LLMを使用して応答を生成することで基本的な会話を行うことができます。上記の呼び出しに対するLangSmith Traceを提供されたリンクで確認できます。

しかし、ボットの知識はそのトレーニングデータに限定されていることに気付いたかもしれません。次の部分では、ウェブ検索ツールを追加してボットの知識を拡張し、より能力を高めます。

こちらに続きます。

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?