langgraph和tool

from typing import Annotated, TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langchain_core.messages import HumanMessage

@tool
def get_weather(city: str) -> str:
"""获取城市天气"""
return f"{city} 现在晴天,25°C"

tools = [get_weather]
llm = ChatOpenAI(model="gpt-4o").bind_tools(tools)

class AgentState(TypedDict):
messages: Annotated[list, add_messages]

def agent_node(state: AgentState):
response = llm.invoke(state["messages"])
return {"messages": [response]}

def should_continue(state: AgentState):
last_message = state["messages"][-1]
if last_message.tool_calls:
return "tools"
return END

# 构建图
builder = StateGraph(AgentState)
builder.add_node("agent", agent_node)
builder.add_node("tools", ToolNode(tools))

builder.add_edge(START, "agent")
builder.add_conditional_edges("agent", should_continue, {"tools": "tools", END: END})
builder.add_edge("tools", "agent") # 形成循环

app = builder.compile()

# 运行
result = app.invoke({
"messages": [HumanMessage(content="北京天气怎么样?")]
})

for msg in result["messages"]:
print(msg.content if hasattr(msg, "content") else msg)

posted on 2026-08-27 01:39  漫思  阅读(10)  评论(0)    收藏  举报

导航