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 を使用する場合、invoke、batch、stream、stream_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デバッグページを提供し、定義したChain
、Agent
、およびその他のLangChainサービスのデバッグを容易にします。
以下の形式でPlayground
の例にアクセスできます: /my_runnable/playground/
.