LangChain Messages API
すべてのメッセージタイプ
| タイプ | role | type | 主要プロパティ | 説明 |
|---|---|---|---|---|
| HumanMessage | user | human | content | ユーザーメッセージ |
| AIMessage | assistant | ai | content, tool_calls, usage_metadata | AI 応答 |
| AIMessageChunk | assistant | ai | content(増分) | ストリーミング出力のトークン断片 |
| SystemMessage | system | system | content | システム指示 |
| ToolMessage | tool | tool | content, tool_call_id, name | ツール実行結果 |
| RemoveMessage | - | remove | id | 指定メッセージの削除 |
ContentBlock タイプ(マルチモーダルコンテンツ)
| タイプ | 説明 | 使用シーン |
|---|---|---|
| PlainTextContentBlock | プレーンテキスト | 通常の文字 |
| ImageContentBlock | 画像(base64 または URL) | マルチモーダルモデルの画像入力 |
| AudioContentBlock | オーディオ | 音声入力 |
| VideoContentBlock | ビデオ | 動画入力 |
| FileContentBlock | ファイル | ドキュメント入力 |
| ToolCall | ツール呼び出しリクエスト | モデルがツール呼び出しをリクエスト |
| ServerToolCall | サーバーサイドのツール呼び出し | 組み込み/MCP ツール呼び出し |
よく使うヘルパー関数
| 関数 | 説明 | シグネチャ |
|---|---|---|
| trim_messages() | コンテキストウィンドウに合わせてメッセージ履歴を切り詰める | trim_messages(messages, *, max_tokens, strategy, token_counter, include_system, start_on) |
一般的な使用例
インスタンス
from langchain.messages import (
HumanMessage, AIMessage, SystemMessage, ToolMessage, trim_messages
)
# メッセージの作成
human = HumanMessage(content="こんにちは")
system = SystemMessage(content="あなたはアシスタントです")
ai = AIMessage(content="こんにちは!何かお手伝いできますか?")
tool = ToolMessage(content="結果", tool_call_id="call_1", name="my_tool")
# ショートカット
msg1 = ("user", "こんにちは") # タプル
msg2 = {"role": "user", "content": "こんにちは"} # 辞書
# メッセージ属性
print(human.type) # human
print(human.content) # こんにちは
print(ai.tool_calls) # [] または [ToolCall]
# メッセージの切り詰め
trimmed = trim_messages(
messages, max_tokens=1000, strategy="last",
token_counter=model, include_system=True,
)
HumanMessage, AIMessage, SystemMessage, ToolMessage, trim_messages
)
# メッセージの作成
human = HumanMessage(content="こんにちは")
system = SystemMessage(content="あなたはアシスタントです")
ai = AIMessage(content="こんにちは!何かお手伝いできますか?")
tool = ToolMessage(content="結果", tool_call_id="call_1", name="my_tool")
# ショートカット
msg1 = ("user", "こんにちは") # タプル
msg2 = {"role": "user", "content": "こんにちは"} # 辞書
# メッセージ属性
print(human.type) # human
print(human.content) # こんにちは
print(ai.tool_calls) # [] または [ToolCall]
# メッセージの切り詰め
trimmed = trim_messages(
messages, max_tokens=1000, strategy="last",
token_counter=model, include_system=True,
)