You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在调用MessageGraph时传入多个输入参数?

解决MessageGraph调用时传入额外上下文的问题

问题描述

基于LLMCompiler实现MessageGraph后,调用invoke传入HumanMessage对象列表作为用户问题时,该列表会自动映射到默认"messages"键并传入提示模板,简单场景运行正常。但需要在**调用阶段(非图构建阶段)**传入额外信息/上下文时,此前React Agent中可用的invoke({"messages": input, "context": context})字典格式在MessageGraph中无法生效:

  • 调用invoke(messages)仅能传入消息列表,无法添加其他输入参数
  • 尝试传入字典invoke({"messages": messages, "context": context})时执行失败,报错:

Message dict must contain 'role' and 'content' keys, got {"messages":messages,"context":context}

解决方案

方法1:将上下文嵌入到HumanMessage内容中

如果不需要单独分离context参数,可直接把额外上下文拼接进用户消息的内容里:

# 构造包含上下文的用户消息
context = "这里是额外的上下文信息"
user_message = HumanMessage(content=f"{context}\n\n你的问题:{user_query}")
# 直接传入消息列表
result = message_graph.invoke([user_message])

方法2:自定义MessageGraph的输入映射逻辑

MessageGraph默认会把传入的消息列表绑定到"messages"键,要支持多参数输入,需在构建阶段显式定义输入模式:

  1. 定义包含messages和context的提示模板
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "根据上下文回答问题:{context}"),
    ("human", "{messages}")
])
  1. 构建MessageGraph时关联自定义提示模板
from langgraph.graph import MessageGraph

graph = MessageGraph()
# 添加LLM节点并绑定提示模板
graph.add_node("llm", prompt | llm)
graph.set_entry_point("llm")
graph.set_finish_point("llm")
  1. 调用时传入字典格式输入(注意messages需为字符串或可序列化的消息内容,而非HumanMessage对象列表)
result = graph.invoke({
    "messages": user_query,
    "context": "这里是额外的上下文信息"
})

方法3:改用StateGraph实现灵活参数输入

若MessageGraph的默认行为限制较多,可替换为StateGraph,它支持自定义状态结构以承载多参数:

from langgraph.graph import StateGraph, MessagesState
from typing import TypedDict, List

# 自定义状态类,包含messages和context字段
class CustomState(TypedDict):
    messages: List[HumanMessage]
    context: str

# 定义LLM处理节点
def call_llm(state: CustomState):
    prompt = ChatPromptTemplate.from_messages([
        ("system", "上下文:{context}"),
        ("human", "{messages}")
    ])
    chain = prompt | llm
    response = chain.invoke({
        "messages": state["messages"],
        "context": state["context"]
    })
    return {"messages": state["messages"] + [response]}

# 构建并编译StateGraph
graph = StateGraph(CustomState)
graph.add_node("llm", call_llm)
graph.set_entry_point("llm")
graph.set_finish_point("llm")
compiled_graph = graph.compile()

# 调用时传入自定义状态字典
result = compiled_graph.invoke({
    "messages": [HumanMessage(content="你的问题")],
    "context": "这里是额外的上下文信息"
})

内容的提问来源于stack exchange,提问作者Luis Leal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 08:52:08