1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
| from langchain_openai import ChatOpenAI from langchain_core.tools import tool from langgraph.graph import MessagesState, START from langgraph.prebuilt import ToolNode from langgraph.graph import END, StateGraph from langgraph.checkpoint.memory import MemorySaver
@tool def play_song_on_qq(song: str): """在qq音乐上播放歌曲""" return f"成功在QQ音乐上播放了{song}!"
@tool def play_song_on_163(song: str): """在网易云上播放歌曲""" return f"成功在网易云上播放了{song}!"
tools = [play_song_on_qq, play_song_on_163] tool_node = ToolNode(tools)
from langchain_openai import ChatOpenAI import os
deepseek = ChatOpenAI( model="deepseek-chat", temperature=0, api_key=os.environ.get("DEEPSEEK_API_KEY"), base_url=os.environ.get("DEEPSEEK_API_BASE"), )
model = deepseek.bind_tools(tools, parallel_tool_calls=False)
def should_continue(state): messages = state["messages"] last_message = messages[-1] if not last_message.tool_calls: return "end" else: return "continue"
def call_model(state): messages = state["messages"] response = model.invoke(messages) return {"messages": [response]}
workflow = StateGraph(MessagesState)
workflow.add_node("agent", call_model) workflow.add_node("action", tool_node)
workflow.add_edge(START, "agent")
workflow.add_conditional_edges( "agent", should_continue, { "continue": "action", "end": END, }, )
workflow.add_edge("action", "agent")
memory = MemorySaver()
app = workflow.compile(checkpointer=memory)
from langchain_core.messages import HumanMessage
config = {"configurable": {"thread_id": "1"}} input_message = HumanMessage(content="你能播放一首周杰伦播放量最高的歌曲吗?") for event in app.stream({"messages": [input_message]}, config, stream_mode="values"): event["messages"][-1].pretty_print()
app.get_state(config).values["messages"]
all_states = [] for state in app.get_state_history(config): print(state) all_states.append(state) print("--")
|