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)
浙公网安备 33010602011771号