LangChain v1.0の概要と新機能:v0.xからの刷新点・新要素を含むアップデート全体像
目次
- 1 LangChain v1.0の概要と新機能:v0.xからの刷新点・新要素を含むアップデート全体像
- 2 エージェントAPI(create_agent)の進化:従来方式との違いと新しい標準エージェント構築手法
- 3 ミドルウェア導入:エージェント開発における柔軟性と安全性を徹底的に強化する新機能
- 4 標準コンテンツブロック(Standard Content Blocks)の概要と活用事例を詳しく解説
- 5 LangChain v1.0における構造化出力(Structured Output)の概要・機能と実践的な活用方法を徹底解説
- 6 LCEL(LangChain Expression Language)チェイン構文の概要と活用ガイドを徹底解説
- 7 パッケージ分割と機能選択性の向上:@langchain/coreと@classicの使い分けを解説
- 8 LangChain v1.0での活用事例と実践例:さまざまなケースでの使用例を紹介
LangChain v1.0の概要と新機能:v0.xからの刷新点・新要素を含むアップデート全体像
LangChain v1.0はエージェント構築フレームワークのメジャーアップデートであり、createAgentをはじめとする新機能が導入されました。このバージョンではフレームワークがよりモジュール化・柔軟化され、旧バージョンから多くの改善が加えられています。公式ドキュメントによれば、v1.0ではcreateAgent(従来のcreateReactAgentに代わるエージェント生成API)、標準コンテンツブロックを活用した統合的なLLM機能インターフェース、そしてパッケージの簡素化が主要な改良点として挙げられています。これにより、LangChainはより本番環境向けの土台が整えられました。
- createAgent: 新しいエージェント構築API。従来のReactエージェントの代替となるインターフェース。
- 標準コンテンツブロック: モダンLLM機能(推論経路や引用、組み込みツールなど)に統一的にアクセスできるAPI。
- パッケージ簡素化: coreパッケージに主要機能を集約し、レガシー機能は@classicパッケージへ移行。
LangChainとは何か:LLMエージェント開発の概要と最新動向を徹底的にわかりやすく解説する
LangChainは言語モデル(LLM)を活用したエージェントやアプリケーションを構築するためのフレームワークです。によると、わずか数行のコードでOpenAIやAnthropicなど複数のモデルに接続可能で、耐障害性のある実行環境やストリーミング対応、人間介在型ワークフローなど豊富な機能を提供しています。基本的にLangChainはLangGraph上に構築されており、LangGraphの特徴である耐久性のある実行や人間インザループ、永続化などを利用できます。v1.0リリースにより、この基盤の上でさらなるモジュール化と抽象化が進み、エージェント開発がより柔軟かつ安全になりました。
LangChain v1.0リリースの背景と目的:エージェント開発の最新ニーズに対応する新機能群
LangChainは2022年にオープンソース化され、わずか3年で急速に成長してきました。v1.0リリースは、$125Mの資金調達を経て実現した大規模アップデートであり、企業や研究者が求めるエージェント開発の要件に応えることを目的としています。具体的には、エージェント構築の標準化と拡張性の向上が図られ、エージェント生成の新API(createAgent)やミドルウェアによる動的プロンプト制御・状態管理、安全性強化機能、構造化出力などが追加されました。これらの機能強化により、より実践的で安全なAIエージェントの開発が可能になります。
LangChain v1.0の主要機能一覧:createAgent、ミドルウェア、標準コンテンツブロックなど
LangChain v1.0では、次のような主要機能が導入・強化されました。
- createAgent: 新しいエージェント構築API。より簡潔で強力なインターフェースに刷新され、ユーザーはcreateReactAgentの代わりにこれを利用します。
- ミドルウェア: createAgentの中核機能で、ダイナミックプロンプト制御や会話要約、ツールアクセスの制限、状態管理、ガードレールなどを追加できる仕組みです。
- 標準コンテンツブロック: モデルの推論経路(trace)、引用(citations)、内蔵ツール(web検索やコード実行など)への統一的アクセスを提供するAPI層で、プロバイダ非依存かつ型安全に利用できます。
- 構造化出力: 返答を事前定義したスキーマ形式で取得し、パース不要なデータを直接得られる機能。createAgentは出力スキーマを自動認識し、検証済みの構造化データを返します。
- パッケージ簡素化: coreパッケージをエージェント開発に必要な機能に絞り、レガシー機能は@classicパッケージに移動。これにより基本機能の発見性と保守性が向上しています。
LangChain v1.0のパッケージ構成:langchainパッケージの整理と@classicパッケージの導入
v1.0ではパッケージ構成も大きく見直されています。従来のlangchainパッケージは機能が増えて複雑になっていたため、エージェント開発に必要なコア機能だけに絞り込まれました。一方、LLMChainやretriever、インデクシングAPI、Hub機能など旧バージョンのレガシー機能は新たに登場した@langchain/classicパッケージに移行しています。ユーザーは必要な機能に応じてこれらのパッケージを使い分け、軽量なコアパッケージと従来機能群を選択可能です。
公式ドキュメントで紹介されるリリースノートと移行ガイドの要点解説
公式サイトにはv1.0のリリースノートと移行ガイドが公開されており、変更点やアップグレード手順が詳細に解説されています。リリースノートでは上記の主要機能がまとめられ、移行ガイドでは具体的なコード例や互換性への対応策が示されています。移行にあたっては互換性に注意し、旧APIの@langchain/classic移行やimportパスの変更など公式ドキュメントを参考にするとスムーズです。
エージェントAPI(create_agent)の進化:従来方式との違いと新しい標準エージェント構築手法
v1.0で最も注目されるのがcreateAgent APIです。これはLangGraphのReactAgentを置き換える標準のエージェント構築手段で、よりシンプルで直感的なインターフェースを提供します。createAgentはモデル・ツール・プロンプトなどをオプションで受け取り、内部でエージェントループ(モデル呼び出し→ツール実行の繰り返し)を自動管理します。その結果、ユーザーは少ないコードで強力なエージェントを作成できます。
create_agentの基本的な使い方とパラメータ設定
createAgentの利用には、モデルやツール、初期プロンプトを設定します。例えば、OpenAIやAnthropicのモデル名と、ツール一覧(関数にスキーマを付与したもの)を引数に指定します。また、システムプロンプトでエージェントの性格や指示を与えることも可能です。公式例では下記のように簡単にエージェントを作成できます。
例: Claudeモデルと天気取得ツールを使ったエージェント
const agent = createAgent({ model: "claude-sonnet-4-5-20250929", tools: [getWeather], systemPrompt: "You are a helpful assistant." });
const result = await agent.invoke({ messages: [{ role: "user", content: "東京の天気は?" }] });
従来のcreateReactAgentとの相違点と利点
従来のLangGraphで提供されていたcreateReactAgentはリアクションベースのインターフェースでしたが、v1.0ではこれを汎用的なcreateAgentに統合しました。主な違いはAPIの簡潔さと拡張性で、createAgentはミドルウェアを正式サポートし、より細かいカスタマイズが可能です。また、内部でのエージェントループ処理が同一のため、従来の方法よりも使いやすく、かつ柔軟性が高まっています。
create_agentの内部動作:エージェントループの仕組み
createAgentは、モデル呼び出し→ツール選択・実行→ツール結果のループを制御する基本的なエージェント構造に基づいています。内部では、モデルにコンテキストを与えた後、モデルがツール呼び出しを指示するまで会話を進めます。ツールが呼ばれなくなればループ終了となり、モデルの回答がエージェントの最終出力となります。このシンプルな構成を通じて、ユーザーは複雑なループ処理を意識せずともエージェントを実装できます。
ツール設定やシステムプロンプトの指定例
createAgentでは、ツールには名前・説明・入力スキーマを付与して登録します。上記のgetWeatherツールは、都市名を入力として受け取り天気情報を返す関数です。システムプロンプトでは、assistantの役割設定や制約条件を記述します。これらを組み合わせることで、例えば「重要情報のみを出力する」「特定の企業方針に従う」など、エージェントの振る舞いを詳細に制御できます。
実装例:ツールとプロンプトを組み合わせた簡易エージェント
例えば、以下のコードでは天気取得ツールと簡単なシステムプロンプトでエージェントを作っています。ユーザーが「東京の天気は?」と質問すると、エージェントはgetWeatherツールを呼び出して答えます。
const getWeather = tool( ({ city }) => It's always sunny in ${city}!, { name: "get_weather", description: "Get the weather for a given city", schema: z.object({ city: z.string() }) } ); const agent = createAgent({ model: "claude-sonnet-4-5-20250929", tools: [getWeather], }); const result = await agent.invoke({ messages: [{ role: "user", content: "東京の天気は?" }], }); console.log(result.content);
このように、createAgentではモデルとツールを組み合わせるだけで簡単に動的なエージェントを作成できます。
ミドルウェア導入:エージェント開発における柔軟性と安全性を徹底的に強化する新機能
LangChain v1.0の大きな目玉機能として、ミドルウェアが挙げられます。ミドルウェアはcreateAgentを通じてエージェントに動的な処理を追加できる仕組みであり、まさにエージェント開発におけるカスタマイズ性の要となる機能です。ミドルウェアを使うことで、動的なプロンプト生成や会話履歴の要約、特定ツールの呼び出し制御、ユーザー入力の検査、出力のフィルタリングなどが可能になります。これにより、エージェントの安全性と柔軟性を高め、より実用的なアプリケーションを構築できます。
ミドルウェアとは何か:エージェント拡張のキーフィーチャー
ミドルウェアは、エージェント処理の特定フェーズにフックして追加処理を行うコンポーネントです。例えば、ユーザーからのメッセージがモデルに送信される前やモデル応答後、ツール呼び出しの直前など、様々なタイミングで介入できます。一般的な用途には、会話履歴を要約して入力トークンを削減したり、個人情報を自動検出して隠蔽したり、ツールへの入力を制限して安全性を確保することなどが含まれます。これにより、エージェントは複雑な状況に対しても柔軟に対応できるようになります。
プリビルトミドルウェアの種類と利用例(要約、PII保護など)
LangChainにはいくつかのプリビルトミドルウェアが用意されており、一般的なパターンを簡単に実装できます。主なものには、summarizationMiddleware(会話履歴が長くなりすぎる前に要約する)、humanInTheLoopMiddleware(重要なツール呼び出しで承認を求める)、piiRedactionMiddleware(メールや電話番号などの個人情報を自動的にマスクする)などがあります。例えば以下のコードでは、メール送信ツールを使うエージェントに対し、PII検出→要約→人間確認のミドルウェアを組み合わせています。
const agent = createAgent({ model: "claude-sonnet-4-5-20250929", tools: [readEmail, sendEmail], middleware: [ piiRedactionMiddleware({ patterns: ["email", "phone", "ssn"] }), summarizationMiddleware({ model: "claude-sonnet-4-5-20250929", maxTokensBeforeSummary: 500 }), humanInTheLoopMiddleware({ interruptOn: { sendEmail: { allowedDecisions: ["approve","edit","reject"] } } }), ] as const, });
このように、プリビルトミドルウェアを組み合わせることで強力なエージェントを簡単に構築できます。
カスタムミドルウェアの作成方法:フックを利用した独自ロジック
LangChainでは独自のミドルウェアも作成できます。createMiddleware関数でフックを定義し、必要なタイミングで任意の処理を挟み込めます。例えば「ツール呼び出し前に特定条件を満たさない場合は実行を止める」「会話履歴をリアルタイムで分析して対話を誘導する」など、複雑な要件にも対応できます。カスタムミドルウェアでは、ユーザー入力のフィルタリングや、外部システムとの連携、追加的なガードレール実装などが可能で、プロジェクト固有のニーズに合わせてエージェントを拡張できます。
ミドルウェアの実行タイミングとフロー制御
ミドルウェアは以下のようなタイミングで実行できます:①ユーザー入力前にコンテキストを修正、②モデル呼び出し後に応答を整形、③ツール呼び出し前に検証、④ツール実行後に結果を後処理、⑤エージェント実行の終了時などです。これらのフックに関数を登録することで、エージェントのフロー全体を制御できます。例えば、summarizationMiddlewareは会話履歴のトークン数を監視して、上限を超えたら要約処理を挟みます。このように、ミドルウェアによって任意のロジックを動的に差し込めるため、エージェントの挙動を細かくカスタマイズできます。
ミドルウェアを使った実践例:プロンプト制御や状態管理の強化
ミドルウェアを活用した例として、長い対話を扱うカスタマーサポートエージェントが挙げられます。会話履歴が長くなると要約Middlewareで情報を圧縮し、同時にPII検出Middlewareで個人情報をマスクします。さらに、重要な決定が必要な場面ではHumanInTheLoopMiddlewareで承認を得ることで、安全性と効率を両立できます。このようにミドルウェアを組み合わせることで、実務向けの高度なエージェント機能を実現できます。
標準コンテンツブロック(Standard Content Blocks)の概要と活用事例を詳しく解説
標準コンテンツブロックは、v1.0で導入された新しい機能で、LLMから得られる情報を一元的に扱うためのAPIです。具体的には、モデルによる推論経路(reasoning traces)や引用文献情報(citations)、内蔵ツールの結果などを同一のインターフェースで取得できるようになります。これにより、OpenAIやAnthropicといった複数のプロバイダ間で扱い方を統一でき、コードの書き換えをせずに様々なモデルの機能を利用できます。さらに型安全に設計されており、TypeScriptの型推論をフル活用して各ブロックを扱えます。
標準コンテンツブロックとは:機能と利用目的
標準コンテンツブロックは、モデルの回答に含まれる内部情報を抽象化して提供する仕組みです。従来は各プロバイダごとに別APIで取得していた情報(例:GPTの理由説明や内部ツール実行結果)を、統一されたインターフェースで取得できます。目的はプロバイダ非依存性の実現と開発効率化で、開発者は一つの書き方で高度なLLM機能を活用できます。将来的にはすべてのコンポーネントでこのAPIが利用される予定です。
対応プロバイダと利用可能なコンテンツブロック一覧
現時点で標準コンテンツブロックに対応するのは、一部のパッケージのみです。具体的には、coreパッケージやAnthropic/OpenAIのモジュールでサポートされています。今後対応範囲は拡大予定ですが、まずはv1.0対応パッケージ(langchain, @langchain/core, @langchain/anthropic, @langchain/openai)で使用可能です。対応モデルが生成する推論経路などを取得するには、これらパッケージの中のcontentBlocksプロパティやユーティリティを利用します。
主な利点:プロバイダ非依存・型安全・後方互換
標準コンテンツブロックの利点は以下の通りです。まず、プロバイダ非依存であること。どのモデルを使っても同一のAPIでアクセスできるため、モデル切替時の対応が容易です。次に、型安全な設計であること。各コンテンツブロックにはTypeScriptの型情報が用意されているため、データ取得時の型チェックが自動的に行われ、バグを減らせます。さらに、後方互換性にも配慮されており、標準コンテンツブロック機能は遅延ロード可能なため、既存コードへの影響が抑えられています。
利用例:reasoning_traceやcitationsなどの活用シナリオ
実際の例として、モデルの応答に含まれる根拠や出典を取得する場合を考えます。例えば、長い推論過程を持つ質問に対し、モデルがどのような思考を経て回答したかをreasoning_traceブロックで取得できます。あるいは、引用文献を含む回答ではcitationsブロックで参考文献URLを取得します。これらのブロック取得はプロバイダ共通のAPIで行えるため、コードを変更せずに発生情報を得られます。今後、Web検索結果やコード実行結果なども同様の仕組みで統一的に扱えるようになる予定です。
ロード方法と後方互換性の確保
標準コンテンツブロックは通常、lazy loadingで動的に読み込まれます。そのため、コンテンツブロック機能を使用しない既存コードは影響を受けません。必要なときに初めて対応パッケージが読み込まれるため、v0.xからの移行時にコードを大きく書き換える必要はありません。また、今は一部機能のみですが将来的にカバー範囲が広がる設計になっており、継続的に活用範囲が増えていく見込みです。
LangChain v1.0における構造化出力(Structured Output)の概要・機能と実践的な活用方法を徹底解説
LangChain v1.0では構造化出力機能が強化され、エージェントの応答を型付きデータとして簡単に取得できるようになりました。従来、モデルの返答は自然言語として受け取り解析が必要でしたが、構造化出力ではあらかじめ定義したスキーマ(ZodやJSON Schema)に基づいてモデルに出力させ、事前定義した形式でデータを得る仕組みです。createAgentにoutput schemaを設定すると、モデルがその形式で出力したデータがAgentの状態オブジェクトに自動格納されます。結果として、後処理なしで直接使える構造化データを得られ、システムとの連携が容易になります。
Structured Outputとは:目的と得られるメリット
Structured Outputの主な目的は「モデル出力を予測可能で利用しやすい形式にする」ことです。利点として、①データ損失防止:出力ミスによる情報欠落のリスクが低減、②直接利用可能な形式:解析不要でデータとしてそのまま扱える、③バリデーションによる安心感:スキーマに沿った出力なので、型に合わない結果はエラーとして検出されます。特に複数フィールドの返答が必要なアプリでは、Structured Outputが有効です。
レスポンスフォーマットの設定方法:ZodスキーマとJSONフォーマット
出力形式はZodスキーマまたはJSON Schemaのいずれかで定義します。createAgentのresponseFormatプロパティにスキーマを与えると、対応する型の出力が行われます。例えば、名前・メール・電話番号を持つオブジェクトを定義する場合、Zodでオブジェクトスキーマを作成し、responseFormat: z.object({…})のように指定します。この設定によって、モデルはJSON形式で指定スキーマに合うオブジェクトを返すよう誘導され、AgentはstructuredResponseに型付きの結果を格納します。
ProviderStrategyとToolStrategyの使い分け
Structured Outputには2つの戦略があります。ProviderStrategyはモデルプロバイダ側でネイティブに対応している場合に有効で、OpenAIやGroKのような一部モデルが直接スキーマ対応して出力します。これを利用するには、providerStrategy(schema)で指定します。一方、ToolStrategyはモデルがネイティブ対応しないときに用いられ、LangChainが内部的にツール呼び出し戦略で構造化出力を実現します。通常、schemaを直接指定するだけでモデルが対応すればProviderStrategyが自動的に使われます。どちらも、対応モデルがない場合はToolStrategyにフォールバックするため、互換性を心配する必要はありません。
活用例:連絡先情報抽出やJSON出力の実装例
具体例として、ユーザー入力から連絡先情報を抽出する例を考えます。Zodで名前・メール・電話のオブジェクトを定義し、responseFormat: z.object({…})とすると、モデルはその形式で回答します。以下はその一例です。
const ContactInfo = z.object({ name: z.string().describe("氏名"), email: z.string().describe("メールアドレス"), phone: z.string().describe("電話番号"), }); const agent = createAgent({ model: "gpt-5", tools: tools, responseFormat: providerStrategy(ContactInfo), }); const result = await agent.invoke({ messages: [{ role: "user", content: "John Doe, [email protected], (555) 123-4567"}] }); console.log(result.structuredResponse); // 出力例: { name: "John Doe", email: "[email protected]", phone: "(555) 123-4567" }
このようにスキーマを渡すだけで、エージェントは直接JSONオブジェクトを返します。ProviderStrategyの場合はモデルが厳密な出力を保証し、ToolStrategyならあらゆるモデルで動作します。
対応モデルとフォールバック動作の注意点
現在、構造化出力のProviderStrategyに対応しているモデルはOpenAIやGroKのみです。他モデルではToolStrategyが使われ、内部で追加のツール呼び出しを行ってフォーマットされたJSONを取得します。したがって、モデル選択時には対応可否に応じたStrategyを考慮する必要があります。また、スキーマの検証に失敗するとエラーになるため、必ず適切な型を定義してください。出力がスキーマに合わない場合、LangChainは例外を投げてエラー処理する仕組みがある点にも注意が必要です。
LCEL(LangChain Expression Language)チェイン構文の概要と活用ガイドを徹底解説
LCELはLangChainが提供する宣言型チェイン構文で、既存のランチャブル(プロンプト・モデル・ツールなど)を組み合わせる新しい方法です。パイプ演算子(|)でチェインを作成することで、直感的かつ短いコードで複雑なパイプラインを構築できます。宣言的アプローチにより、バッチ処理やストリーミング、非同期呼び出しが自動サポートされ、標準化されたインターフェースでチェインを扱えます。LangSmithとの相性も良く、実行トレースの可視化も容易に行えます。
LCELとは:宣言的チェイン記述の概要
LCEL(LangChain Expression Language)は、PythonのSQLAlchemyのように、チェインを宣言的に定義するための言語です。従来のChainクラスのように細かい制御をすることなく、「プロンプト | モデル」のように直感的にチェインを記述できます。例えば、下記のコードはプロンプトテンプレートとモデルをパイプで連結した簡単なチェインです。
例:
model = ChatOpenAI()
prompt = ChatPromptTemplate.from_template("tell me a joke about {foo}")
chain = prompt | model
chain.invoke({foo: "bears"}) → AIMessage: “Why don’t bears ever wear shoes? Because they have bear feet!”
このように、LCELでは既存のLangChain要素をそのまま組み合わせることができます。
従来構文との違い:LCELの特徴とメリット
従来のLangChainではLLMChainやSequentialChainなどクラスを明示的に作成してチェインを構築していましたが、LCELではそれらを束縛しません。LCELの大きな特徴は、高度なバッチ・ストリーミング・非同期処理をデフォルトでサポートすることです。通常のinvokeに加え、batchやstreamメソッドで複数入力への一括実行やストリーミング出力を簡単に行えます。また、チェイン構造が直感的にコードで表現されるため、複雑な処理でも読み書きが容易になります。
基本構文:パイプ演算子を使ったチェイン記述例
LCELではパイプ(|)演算子を使って要素をつなげます。例えば、プロンプトテンプレートとモデルを連結する場合、prompt | modelのように書くだけでチェインが構築されます。入力を辞書形式で与えてinvokeすると、モデルの応答が得られます。この書き方は非常にシンプルで、内部的に必要なChainオブジェクトが自動生成されます。さらに、複数のLLM呼び出しや関数呼び出し、データベースクエリなども同様にパイプでつなげられるため、自由度の高いパイプラインが実現します。
バッチ・ストリーミング・非同期呼び出し対応
LCELで作成したチェインは、そのままの構文でバッチ処理(chain.batch)やストリーミング処理(chain.stream)が可能です。例えば、複数の入力をリストで渡せば内部的にバッチ化して効率的に実行します。ストリーミングでは、モデルから逐次生成される部分出力をリアルタイムに取得できます。さらに、invokeやbatch、streamには非同期版(ainvokeなど)も用意されており、async/await構文で簡単に非同期処理を扱えるのも特徴です。
LangSmithとの連携:自動トレースと可視化
LCELチェインは、LangSmithとの連携を念頭に設計されており、実行時にトレースを自動で記録します。従来型のカスタムチェインではトレース対応に手間がありましたが、LCELではパイプで繋いだコンポーネントが自然にLangSmithにフックされます。このため、実行パスや各ステップの状態遷移、メトリクスなどをLangSmithのUIで可視化可能です。開発者はこれを利用してチェインの挙動をデバッグ・最適化できます。
パッケージ分割と機能選択性の向上:@langchain/coreと@classicの使い分けを解説
LangChain v1.0ではパッケージ構造が見直され、必要な機能を選択的にインストールできるようになりました。langchainパッケージはエージェント作成のコア機能に絞り込まれ、その他の従来機能は新たに設立された@langchain/classicパッケージに移行されました。これにより、エージェント開発に必要な機能だけを小さな依存性で利用できるようになり、不要なモジュールのロードを避けられます。以下に主な違いをまとめます。
- @langchain/core(またはlangchain): 新しいエージェントループ、ミドルウェア、ストリーミング、構造化出力などコア機能を含む。
- @langchain/classic: 旧版LangChainのレガシー機能が移動。具体的にはLLMChainやConversationalChainなどのチェイン、Retriever、インデクシングAPI、Prompt Hub、コミュニティ拡張機能などが含まれる。
@langchain/coreと@classicの違い:含まれる機能の概要
@langchain/coreにはエージェント構築の基本要素が含まれています。一方@classicはレガシーなチェインや検索機能を保持します。Coreパッケージは軽量かつ最新機能に特化しているため、まずはこちらの導入が推奨されます。旧版と同等の機能が必要な場合は、別途@classicをインストールしてimportを切り替えます。
主要モジュールの移行:Legacyチェインやインデクシング機能の配置先
旧バージョンで使われていた主要なモジュールは@classicに移されました。具体例を挙げると、LLMChainやMultiQueryRetrieverなどのチェイン・Retriever、インデクサ(indexing API)、プロンプトHub、既存のEmbeddingsキャッシュなどは@classic内にあります。移行後のコード例としては、例えばLLMChainは以前はfrom langchain.chains import LLMChainだったものを、from langchain_classic.chains import LLMChainに変更します。
簡素化されたcoreパッケージの機能一覧
coreパッケージにはエージェントAPI、Modelインターフェース、Messages/Tools管理、Structured Output、ミドルウェアなど、エージェントに不可欠な要素が集約されています。多くは内部で@langchain/coreのモジュールが再エクスポートされており、シンプルなAPIで利用できます。例えば、import { createAgent } from "langchain"でcoreの機能を呼び出せるようになっています。
必要な機能のみを選択する方法とメリット
新構成の利点は、不要な依存を減らせる点です。エージェントに必要な最小限のパッケージだけをインストールできるため、アプリケーションサイズの削減や起動時間の短縮が期待できます。たとえば、チェインを使わない純粋なエージェントアプリでは@classicを省略し、coreだけで十分です。将来さらに機能を追加したい場合にも、必要なパッケージだけを後から追加できます。
移行時の注意点:インポートパスや依存パッケージの整理
移行にあたっては、インポートパスの変更に注意が必要です。前述のとおり、旧版から移されたクラスは
LangChain v1.0での活用事例と実践例:さまざまなケースでの使用例を紹介
LangChain v1.0の新機能は多様なユースケースで活用できます。以下にいくつかの事例を紹介します。まず、カスタマーサポートチャットボットでは、ユーザーとの対話を要約するmiddlewareや、個人情報を自動削除するmiddlewareを組み合わせることで、安全かつ効率的な対話が可能です。また、応答を構造化出力で得ることでFAQシステムのバックエンドとして正確な情報抽出が実現します。
基本的なエージェント活用例:FAQ回答やチャットボット
LangChainを使う典型的な例はFAQや一般質問応答ボットです。createAgentでエージェントを構築し、必要に応じて検索ツールやデータベースクエリツールを組み込むことで、自律的に回答できるアシスタントになります。Structured Outputを併用すれば、回答をJSON形式で取得し、そのままアプリケーションに渡せます。
ミドルウェア活用例:会話要約や人間インザループのエージェント
企業向けの対応が必要な場面では、ミドルウェアが威力を発揮します。たとえば、長時間の対話を要約するsummarizationMiddlewareと、機密情報書き出しを防ぐpiiRedactionMiddleware、さらに大事な判断には承認プロセスを挟むHumanInTheLoopMiddlewareを組み合わせたエージェントが考えられます。これにより、エージェントは一定の品質と安全性を維持しつつ、自動化されたサポート業務を実行できます。
構造化出力活用例:データ抽出・JSON生成ワークフロー
Structured Outputはデータ抽出に最適です。たとえば、ユーザーから渡された文章から特定情報を抽出する場合、Zodスキーマを定義してcreateAgentに渡すだけで必要項目を型付きで取得できます。これにより、開発者は自然言語の解析処理を書かずに済み、信頼性の高いデータ抽出パイプラインを短時間で構築できます。さらに、ツール呼び出し戦略と組み合わせれば、SQLクエリやAPIリクエストの結果を直接構造化出力で取得するような高度なワークフローも可能です。
LCELチェイン活用例:シンプルなデータパイプライン構築
LCELを使えば複数ステップの処理を簡潔に記述できます。たとえば、「プロンプト→モデル→関数実行」を繋げたパイプラインをprompt | model | functionのように表現し、入力したデータを連続的に処理できます。これにより、データ収集→変換→保存などのパイプラインを直感的に設計でき、コードの複雑さが大幅に減ります。
実世界アプリケーション:カスタマーサポートや業務自動化
実際の業務例では、LangChainを使ってカスタマーサポートの自動化やレポート作成を行うケースがあります。たとえばECサイトでは、顧客問い合わせを自動解析し、適切な回答を返すエージェントを作れます。その際、ミドルウェアで注文履歴を検索するツールを呼び出し、structuredOutputで注文情報を返すような実装も可能です。また、金融分野では問い合わせの要点を要約し、重要事項を抽出するエージェントとして活用でき、これらのプロセスには構造化出力やミドルウェアが有用です。