1. LangServe の概要

LangServe は、開発者がプログラムと LangChain の連鎖を REST API として実行するのを支援するライブラリです。 FastAPI を統合し、データ検証に pydantic を使用しています。

2. 機能

LangServe には次の機能があります:

  • LangChain オブジェクトから入出力モードを自動的に推論し、各 API 呼び出しの検証を行い、豊富なエラーメッセージを提供します
  • JSONSchema と Swagger を含む API ドキュメントページ
  • 1 台のサーバーで多くの同時リクエストをサポートする /invoke//batch//stream/ エンドポイント
  • 連鎖/エージェントの中間ステップをすべて(または一部)ストリーミングするための /stream_log/ エンドポイント
  • バージョン 0.0.40 からの新機能: astream_events をサポートし、stream_log の出力をパースする必要なしでストリーミングを容易にします
  • ストリーミング出力と中間ステップを持つ /playground/ ページ
  • LangSmith へのオプションの組み込みトレース。API キーを追加するだけで使用できます
  • FastAPI、Pydantic、uvloop、asyncio などの実績のあるオープンソースの Python ライブラリを使用して作られています
  • ローカルで実行している Runnable を呼び出すように LangServe サーバーをクライアント SDK を使用して呼び出すことができます(または直接 HTTP API を呼び出すこともできます)
  • LangServe Hub

3. 制限

  • サーバーから発生するイベントのためのクライアントコールバックはまだサポートされていません
  • Pydantic V2 を使用すると OpenAPI ドキュメントが生成されません。FastAPI は Pydantic v1 と v2 の混在ネームスペースをサポートしていません。詳細については以下のセクションをご覧ください。

4. インストール

LangServe は、以下のコマンドを使用してインストールできます:

pip install "langserve[all]"

または、クライアントコードを pip install "langserve[client]"、サーバーコードを pip install "langserve[server]" としてインストールできます。

4. サンプルアプリケーション

以下は、LangChain で定義されたモデル、連鎖、エージェントを他のアプリケーションから呼び出すための REST API として公開する方法を示しています。FastAPI に慣れている場合、langserve が提供するユーティリティクラスを使用して FastAPI ルートを登録するだけです。

次の例では、OpenAI チャットモデル、Anthropic チャットモデル、および Anthropic モデルを使用して特定のトピックに関するジョークを伝えるチェーンを展開しています。

以下はサンプルコードです:

from fastapi import FastAPI
from langchain.prompts import ChatPromptTemplate
from langchain.chat_models import ChatAnthropic, ChatOpenAI
from langserve import add_routes

app = FastAPI(
    title="LangChain Server",
    version="1.0",
    description="LangChain の Runnable インターフェースを使用したシンプルな API サーバー",
)

add_routes(
    app,
    ChatOpenAI(),
    path="/openai",
)

add_routes(
    app,
    ChatAnthropic(),
    path="/anthropic",
)

model = ChatAnthropic()
prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
add_routes(
    app,
    prompt | model,
    path="/joke",
)

if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="localhost", port=8000)

ブラウザからエンドポイントを呼び出す場合は CORS ヘッダーを設定する必要があります。FastAPI の組込みミドルウェアを使用してこれを実珵できます:

from fastapi.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
    expose_headers=["*"],
)

5. ドキュメント

上記の例を実行した後、LangServe はすべての登録されたルートの API ドキュメントを自動的に生成します。生成された OpenAPI ドキュメントは次のアドレスで確認できます:

http://localhost:8000/docs

必ず /docs サフィックスを追加してください。

⚠️ pydantic v2 を使用する場合、invokebatchstreamstream_log に対してドキュメントが生成されません。pydantic v1 バージョンを使用することをお勧めします。

6. APIルートへの導入

以下は、APIルートを登録した後にLangServeによって生成されるAPIインタフェースの紹介です。

たとえば、次のコードを考えます:

add_routes(
    app,
    runnable,
    path="/my_runnable",
)

LangServeは次のインタフェースを生成します:

  • POST /my_runnable/invoke - モデル呼び出し用のインタフェース
  • POST /my_runnable/batch - バッチモデル呼び出し用のインタフェース
  • POST /my_runnable/stream - ストリーミングモデル呼び出し用のインタフェース
  • POST /my_runnable/stream_log - ログ出力付きストリーミングモデル呼び出し用のインタフェース
  • POST /my_runnable/astream_events - イベント出力付き非同期ストリーミングモデル呼び出し
  • GET /my_runnable/input_schema - モデル呼び出しのためのインタフェースパラメータ説明
  • GET /my_runnable/output_schema - モデル出力のためのインタフェースパラメータ説明
  • GET /my_runnable/config_schema - モデルの構成説明

7. プレイグラウンド

LangServeは、登録された各ルートに対してUIデバッグページを提供し、定義したChainAgent、およびその他のLangChainサービスのデバッグを容易にします。

以下の形式でPlaygroundの例にアクセスできます: /my_runnable/playground/.