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类型まとめ
- ChatPromptTemplate:プロンプトの雛形を作成
- ChatOpenAI:HolySheep AI などのOpenAI互換APIに接続
- StrOutputParser:出力を文字列に変換
- RunnableLambda:自定义関数をチェーンに統合
- RunnableBranch:条件分岐を実装
実践例:多段チェーンの構築
より高度な应用として、多个の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の基本をマスターしたら、以下のトピックに挑戦してみてください:
- LCELルータ:入力内容に応じて異なるチェーンを選択
- メモリ統合:チェーンに会話履歴を追加
- ツール統合:LangChain Agentsで外部APIや计算機能を活用
- 非同期処理:asyc/awaitで大规模并发処理
HolySheep AI はWeChat PayやAlipayにも対応しているため、日本語圈外の开发者でも簡単に начатьできます。登録無料で付与されるクレジットを使えば、実際に手を動かしながら学习できます。
👉 HolySheep AI に登録して無料クレジットを獲得