LangChain LCEL(LangChain Expression Language)は、大規模言語モデル(LLM)を組み合わせたアプリケーションを構築するための革命的な構文です。本記事では、API経験がまったくない完全な初心者でも理解できるよう、ゼロから丁寧に解説します。

LCELとは?为什么要学习链式调用

LCELは、LangChainでプロンプト、モデル、出力を 연결する「パイプライン」を簡単に作れる構文です。従来の方法相比、コード量が大幅に削減され、デバッグも容易になります。

HolySheep AI は、今すぐ登録すると無料クレジットが付与され、GPT-4.1が$8/MTokという破格の料金で利用可能です。レートは¥1=$1(公式¥7.3=$1比85%節約)という驚異的なコストパフォーマンスで、实验的なチェーン構築も怖くありません。

事前准备:HolySheep AI APIキーの取得

まず、HolySheep AI に登録してAPIキーを取得してください。注册後にダッシュボードから「API Keys」を選択し、新しいキーを生成します。このキーは後ほど使用します。

基本的な链式调用の構造

LCELの核心は、「|」オペレーターにあります。これはUnixのパイプと同じ概念で、左から右へデータを 流します。

シンプルなチェーンの例

# 必要なライブラリのインストール
!pip install langchain langchain-openai langchain-core

環境設定

import os from langchain_core.output_parsers import StrOutputParser from langchain_openai import ChatOpenAI from langchain.prompts import ChatPromptTemplate

HolySheep AI のエンドポイントを設定

os.environ["OPENAI_API_KEY"] = "YOUR_HOLYSHEEP_API_KEY" os.environ["OPENAI_API_BASE"] = "https://api.holysheep.ai/v1"

モデルの初期化(GPT-4o-miniを使用、成本効率优秀)

llm = ChatOpenAI( model="gpt-4o-mini", temperature=0.7, api_key=os.environ["OPENAI_API_KEY"], base_url=os.environ["OPENAI_API_BASE"] )

プロンプトテンプレートの作成

prompt = ChatPromptTemplate.from_messages([ ("system", "あなたは{name}として{name}の特点について話します。"), ("human", "{topic}について教えてください。") ])

出力パーサーの設定

output_parser = StrOutputParser()

チェーンの構築(| で 连接)

chain = prompt | llm | output_parser

チェーンの実行

result = chain.invoke({ "name": "猫", "topic": "猫の魅力" }) print(result)

ポイント:上記のコードでは、prompt → llm → output_parser の顺序で処理が执行されます。HolySheep AI は<50msの低レイテンシを実現しているため、チェーンの反復实验も素早く行えます。

Runnable接口详解

LCELでは、すべてのコンポーネントが「Runnable」インターフェースを実装しています。これにより、どんな 对象でもチェーンに接続できます。

# Runnable 接口の具体例

from langchain_core.runnables import RunnableLambda, RunnableBranch

カスタム関数をRunnableとして定義

def format_weather(location: str, weather: str) -> str: return f"{location}の天気は{weather}です。"

RunnableLambda でラップ

weather_formatter = RunnableLambda(format_weather)

プロンプトテンプレートの例

location_prompt = ChatPromptTemplate.from_template( "{location}の天気を教えてください。" )

チェーンの構築

weather_chain = location_prompt | llm | output_parser | weather_formatter

実行

result = weather_chain.invoke({"location": "東京"}) print(result)

常用的Runnable类型まとめ

実践例:多段チェーンの構築

より高度な应用として、多个のLLM调用を 连続で行うチェーンを作成します。例えば、「产品名」から「キャッチコピー」と「説明文」を同時に生成するケースを考えてみましょう。

from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import PromptTemplate
from pydantic import BaseModel, Field

出力構造の定義

class MarketingContent(BaseModel): headline: str = Field(description="製品のキャッチコピー(15文字以内)") description: str = Field(description="製品の説明(50文字以内)") hashtags: list[str] = Field(description="関連するハッシュタグ(3つ)")

JSON出力パーサーの設定

json_parser = JsonOutputParser(pydantic_object=MarketingContent)

ステップ1:製品分析チェーン

analysis_prompt = PromptTemplate.from_template( """製品「{product}」の核心的な特徴とターゲット層を分析してください。 分析結果として以下のJSON形式を出力してください: {format_instructions} """, partial_variables={"format_instructions": json_parser.get_format_instructions()} ) analysis_chain = analysis_prompt | llm | json_parser

ステップ2:マーケティングコンテンツ生成チェーン

content_prompt = PromptTemplate.from_template( """製品「{product}」に対して、 分析結果:{analysis} を基に、マーケティングコンテンツを生成してください。 {format_instructions} """ ) content_chain = content_prompt | llm | json_parser

メインチェーンの構築(ステップ1 → ステップ2)

full_chain = {"product": RunnableLambda(lambda x: x), "analysis": analysis_chain} | content_chain

実行

result = full_chain.invoke({"product": "最新式のワイヤレスヘッドフォン"}) print("キャッチコピー:", result["headline"]) print("説明文:", result["description"]) print("ハッシュタグ:", result["hashtags"])

HolySheep AI では、DeepSeek V3.2が$0.42/MTokという破格の料金で使えるため、このように多段チェーンを構築してもコストを気にせず实验に集中できます。

batchとstreamの活用

LCELでは、単一入力だけでなく、複数の入力を同時に処理するbatchと、リアルタイムで出力を取得するstreamもサポートしています。

# batchによる複数入力の同時処理
questions = [
    {"topic": "人工智能"},
    {"topic": "機械学習"},
    {"topic": "深層学習"}
]

batchで一括処理

results = chain.batch(questions) for i, result in enumerate(results): print(f"Q{i+1}: {questions[i]['topic']}") print(f"A{i+1}: {result}\n")

レイテンシ測定(HolySheep AI の性能確認)

import time start = time.time() for q in questions: chain.invoke(q) elapsed = time.time() - start print(f"合計処理時間: {elapsed*1000:.0f}ms") print(f"平均1件あたり: {elapsed/3*1000:.0f}ms")

エラー处理とデバッグ技巧

チェーン構築时に発生する一般的なエラーとその解決策を見ていきます。

よくあるエラーと対処法

エラー1:AuthenticationError - APIキー无效

# ❌ 错误示例:キーが空または無効
os.environ["OPENAI_API_KEY"] = ""  # 空のキー

✅ 正しい方法:有効なキーを設定

os.environ["OPENAI_API_KEY"] = "YOUR_HOLYSHEEP_API_KEY" os.environ["OPENAI_API_BASE"] = "https://api.holysheep.ai/v1"

キーの検証

llm = ChatOpenAI( api_key=os.environ["OPENAI_API_KEY"], base_url=os.environ["OPENAI_API_BASE"] ) response = llm.invoke("テスト") print("接続成功:", response.content[:50])

原因:APIキーが設定されていない、または無効な値になっています。
解決:HolySheep AI ダッシュボードから有効なAPIキーをコピーして設定してください。

エラー2:InvalidInputError - 入力フォーマットの问题

# ❌ 错误示例:chains.invoke() に字符串を直接渡す
chain.invoke("猫について")  # dict ではなく str を渡している

✅ 正しい方法:dict 形式で入力

chain.invoke({ "name": "猫", "topic": "猫の魅力" })

batch時も同样的にリスト内包のdictが必要

chain.batch([ {"name": "犬", "topic": "犬の魅力"}, {"name": "猫", "topic": "猫の魅力"} ])

原因:Runnableのinvokeメソッドはdict形式を期待していますが、文字列を渡しています。
解決:プロンプトテンプレートで定義された変数名をキーとするdictを渡してください。

エラー3:OutputParserError - 出力パーサーの形式错误

# ❌ 错误示例:JSON出力期待だがLLMがテキストを返した
from langchain_core.output_parsers import JsonOutputParser

json_parser = JsonOutputParser()
chain = prompt | llm | json_parser

JSON形式以外の回答が返るとエラー

try: result = chain.invoke({"question": "今日の天前は?"}) except Exception as e: print(f"エラー: {type(e).__name__}")

✅ 解决方法1:プロンプトで形式を明确规定

prompt = ChatPromptTemplate.from_template( """回答を以下のJSON形式で返してください: {{"answer": "あなたの回答"}} 質問: {question}""" )

✅ 解决方法2:PydanticOutputParserで型号を嚴格に定義

from langchain_core.output_parsers import PydanticOutputParser from pydantic import BaseModel class Answer(BaseModel): answer: str parser = PydanticOutputParser(pydantic_object=Answer) chain = prompt | llm | parser result = chain.invoke({"question": "猫はかわいい?"}) print(result.answer)

原因:LLMがJSON形式の出力を 生成せず、パーサーが解析できない。
解決:プロンプトで必ずJSON形式を要求し、可能ならPydanticOutputParserを使用して型号レベルで拘束してください。

エラー4:RateLimitError - API调用制限

# ❌ 错误示例:短时间内大量のリクエスト
for i in range(100):
    chain.invoke({"input": f"質問{i}"})  # 制限に引っかかる可能性

✅ 正しい方法:レート制限を考虑したリクエスト

from langchain_core.runnables import RunnableLambda def rate_limited_invoke(chain, inputs, max_per_second=5): """简单的レートリミッター""" import time from collections import deque timestamps = deque() for inp in inputs: now = time.time() # 1秒以内にmax_per_second以上のリクエストをチェック while timestamps and timestamps[0] < now - 1: timestamps.popleft() if len(timestamps) >= max_per_second: sleep_time = 1 - (now - timestamps[0]) time.sleep(sleep_time) result = chain.invoke(inp) timestamps.append(time.time()) yield result

使用例

questions = [{"input": f"質問{i}"} for i in range(20)] for result in rate_limited_invoke(chain, questions, max_per_second=10): print(result)

原因:短时间内大量のリクエストを送りすぎている。
解決:リクエスト間に適切な間隔を空けてください。HolySheep AI は競争力のあるレート制限设定なので、公式ドキュメントを参観してください。

次のステップ

LCELの基本をマスターしたら、以下のトピックに挑戦してみてください:

HolySheep AI はWeChat PayやAlipayにも対応しているため、日本語圈外の开发者でも簡単に начатьできます。登録無料で付与されるクレジットを使えば、実際に手を動かしながら学习できます。

👉 HolySheep AI に登録して無料クレジットを獲得