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

如何在LangChain的React Agent或OpenAI工具代理的工具中访问LangGraph的状态?

如何在LangChain的React Agent或OpenAI工具代理的工具中访问LangGraph的状态?

嘿,我来给你捋捋怎么解决这个问题~你想在工具里拿到LangGraph的状态或者传递user_id这类变量,其实有几个实用的办法,我一个个给你说:

  • 方法一:把状态变量作为Agent输入传递,让工具直接接收参数
    首先,你需要确保LangGraph的状态里包含user_id这类你需要的变量,然后在调用Agent的节点里,把这些变量从状态中提取出来,加到Agent的输入上下文里。比如:

    def agent_node(state):
        # 从LangGraph状态里取出user_id
        user_id = state["user_id"]
        # 构造Agent的输入,把user_id和用户提问、对话历史一起传进去
        agent_input = {
            "input": state["input"],
            "user_id": user_id,
            "chat_history": state.get("chat_history", [])
        }
        # 调用Agent执行器
        result = agent_executor.invoke(agent_input)
        # 返回更新后的状态
        return {"agent_outcome": result}
    

    然后你的工具就可以直接把user_id作为参数接收,记得要在工具的描述里明确说明参数用途,这样Agent才知道要传递这个值:

    @tool
    def get_goals(user_id: int):
        """
        Returns the user's goals.
        Args:
            user_id: The ID of the user whose goals you want to retrieve.
        """
        # 这里就可以用user_id查询对应数据啦
        return f"Goals for user {user_id}: ..."
    
  • 方法二:用类工具绑定状态变量
    如果你不想依赖Agent自动传递参数,也可以把工具定义成类,这样就能直接把LangGraph的状态变量绑定到工具实例上。比如:

    from langchain.tools import BaseTool
    
    class GetGoalsTool(BaseTool):
        name = "get_goals"
        description = "Returns the user's goals."
        # 定义属性存储需要的user_id
        user_id: int
    
        def _run(self):
            # 直接用绑定好的user_id就行
            return f"Goals for user {self.user_id}: ..."
    

    然后在LangGraph的Agent节点里,动态创建工具实例并传入user_id:

    def agent_node(state):
        user_id = state["user_id"]
        # 动态生成带user_id的工具实例
        tools = [GetGoalsTool(user_id=user_id)]
        # 重新创建Agent执行器(或者也可以把工具列表放到状态里管理)
        agent_executor = create_openai_tools_agent(tools=tools, llm=llm, prompt=prompt)
        result = agent_executor.invoke({"input": state["input"]})
        return {"agent_outcome": result}
    
  • 方法三:修改Agent提示词,引导它传递状态变量
    你还可以在Agent的提示词里明确告诉它,要使用状态里的user_id来调用工具。比如:

    from langchain_core.prompts import ChatPromptTemplate
    
    prompt = ChatPromptTemplate.from_messages([
        ("system", "你是一个助手,调用需要用户ID的工具时,必须使用上下文里的{user_id}参数。"),
        ("human", "{input}"),
        ("placeholder", "{agent_scratchpad}")
    ])
    # 创建Agent时用这个提示词
    agent_executor = create_openai_tools_agent(tools=tools, llm=llm, prompt=prompt)
    

    搭配方法一的Agent输入传递,这样Agent就会自动把user_id作为参数传给工具啦。

最后别忘了,要确保LangGraph的状态结构里包含你需要的变量,比如用TypedDict定义状态:

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

class State(TypedDict):
    input: str
    user_id: int
    chat_history: List
    agent_outcome: dict

# 构建并编译LangGraph
graph_builder = StateGraph(State)
graph_builder.add_node("agent", agent_node)
graph_builder.set_entry_point("agent")
graph_builder.add_edge("agent", END)
graph = graph_builder.compile()

# 调用时传入初始状态
result = graph.invoke({
    "input": "我的目标是什么?",
    "user_id": 12345,
    "chat_history": []
})

备注:内容来源于stack exchange,提问作者Javier Tejero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 15:59:37