Files
knightutils/test/langgraph/quickstart_graph_api.ipynb
2025-09-12 23:56:37 +08:00

273 lines
19 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"id": "initial_id",
"metadata": {},
"source": [
"import os\n",
"\n",
"os.environ['DASHSCOPE_API_KEY'] = 'sk-e2a05bbcfac84e53b73f98acef15a009'\n",
"\n",
"# Step 0: Define tools and model\n",
"\n",
"from langchain_core.tools import tool\n",
"from langchain_community.chat_models.tongyi import ChatTongyi\n",
"\n",
"llm = ChatTongyi(\n",
" model=\"qwen-max\", # 此处以qwen-max为例您可按需更换模型名称。模型列表https://help.aliyun.com/zh/model-studio/getting-started/models\n",
" streaming=True,\n",
" # other params...\n",
")"
],
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "code",
"execution_count": null,
"source": [
"\n",
"# Define tools\n",
"@tool\n",
"def multiply(a: int, b: int) -> int:\n",
" \"\"\"Multiply a and b.\n",
"\n",
" Args:\n",
" a: first int\n",
" b: second int\n",
" \"\"\"\n",
" return a * b\n",
"\n",
"\n",
"@tool\n",
"def add(a: int, b: int) -> int:\n",
" \"\"\"Adds a and b.\n",
"\n",
" Args:\n",
" a: first int\n",
" b: second int\n",
" \"\"\"\n",
" return a + b\n",
"\n",
"\n",
"@tool\n",
"def divide(a: int, b: int) -> float:\n",
" \"\"\"Divide a and b.\n",
"\n",
" Args:\n",
" a: first int\n",
" b: second int\n",
" \"\"\"\n",
" return a / b\n",
"\n",
"\n",
"# Augment the LLM with tools\n",
"tools = [add, multiply, divide]\n",
"tools_by_name = {tool.name: tool for tool in tools}\n",
"llm_with_tools = llm.bind_tools(tools)\n",
"\n",
"# Step 1: Define state\n",
"\n",
"from langchain_core.messages import AnyMessage\n",
"from typing_extensions import TypedDict, Annotated\n",
"import operator\n",
"\n",
"class MessagesState(TypedDict):\n",
" messages: Annotated[list[AnyMessage], operator.add]\n",
" llm_calls: int"
],
"id": "c5d56c085bb11d32",
"outputs": []
},
{
"metadata": {},
"cell_type": "code",
"outputs": [],
"execution_count": null,
"source": [
"\n",
"# Step 2: Define model node\n",
"from langchain_core.messages import SystemMessage\n",
"def llm_call(state: dict):\n",
" \"\"\"LLM decides whether to call a tool or not\"\"\"\n",
"\n",
" return {\n",
" \"messages\": [\n",
" llm_with_tools.invoke(\n",
" [\n",
" SystemMessage(\n",
" content=\"You are a helpful assistant tasked with performing arithmetic on a set of inputs.\"\n",
" )\n",
" ]\n",
" + state[\"messages\"]\n",
" )\n",
" ],\n",
" \"llm_calls\": state.get('llm_calls', 0) + 1\n",
" }\n",
"\n",
"\n",
"# Step 3: Define tool node\n",
"\n",
"\n",
"from langchain_core.messages import ToolMessage\n",
"\n",
"def tool_node(state: dict):\n",
" \"\"\"Performs the tool call\"\"\"\n",
"\n",
" result = []\n",
" for tool_call in state[\"messages\"][-1].tool_calls:\n",
" tool = tools_by_name[tool_call[\"name\"]]\n",
" observation = tool.invoke(tool_call[\"args\"])\n",
" result.append(ToolMessage(content=observation, tool_call_id=tool_call[\"id\"]))\n",
" return {\"messages\": result}\n",
"\n",
"# Step 4: Define logic to determine whether to end\n",
"\n",
"from typing import Literal\n",
"from langgraph.graph import StateGraph, START, END\n",
"\n",
"# Conditional edge function to route to the tool node or end based upon whether the LLM made a tool call\n",
"def should_continue(state: MessagesState) -> Literal[\"tool_node\", END]:\n",
" \"\"\"Decide if we should continue the loop or stop based upon whether the LLM made a tool call\"\"\"\n",
"\n",
" messages = state[\"messages\"]\n",
" last_message = messages[-1]\n",
" # If the LLM makes a tool call, then perform an action\n",
" if last_message.tool_calls:\n",
" return \"tool_node\"\n",
" # Otherwise, we stop (reply to the user)\n",
" return END\n",
"\n",
"# Step 5: Build agent\n",
"\n",
"# Build workflow\n",
"agent_builder = StateGraph(MessagesState)\n",
"\n",
"# Add nodes\n",
"agent_builder.add_node(\"llm_call\", llm_call)\n",
"agent_builder.add_node(\"tool_node\", tool_node)\n",
"\n",
"# Add edges to connect nodes\n",
"agent_builder.add_edge(START, \"llm_call\")\n",
"agent_builder.add_conditional_edges(\n",
" \"llm_call\",\n",
" should_continue,\n",
" [\"tool_node\", END]\n",
")\n",
"agent_builder.add_edge(\"tool_node\", \"llm_call\")\n",
"\n",
"# Compile the agent\n",
"agent = agent_builder.compile()\n"
],
"id": "7f4880f9cb6f8501"
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-09-12T15:48:15.712042Z",
"start_time": "2025-09-12T15:48:12.205943Z"
}
},
"cell_type": "code",
"source": [
"\n",
"from IPython.display import Image, display\n",
"# Show the agent\n",
"display(Image(agent.get_graph(xray=True).draw_mermaid_png()))"
],
"id": "269888930d3623d6",
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"metadata": {},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
}
],
"execution_count": 3
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-09-12T15:48:32.368684Z",
"start_time": "2025-09-12T15:48:30.654590Z"
}
},
"cell_type": "code",
"source": [
"\n",
"# Invoke\n",
"from langchain_core.messages import HumanMessage\n",
"messages = [HumanMessage(content=\"Add 3 and 4.\")]\n",
"messages = agent.invoke({\"messages\": messages})\n",
"for m in messages[\"messages\"]:\n",
" m.pretty_print()"
],
"id": "4683ed620870c4fa",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"================================\u001B[1m Human Message \u001B[0m=================================\n",
"\n",
"Add 3 and 4.\n",
"==================================\u001B[1m Ai Message \u001B[0m==================================\n",
"Tool Calls:\n",
" add (call_140ed9992ae847dbacf07ccall_140ed9992ae847dbacf07ccall_140ed9992ae847dbacf07ccall_140ed9992ae847dbacf07c)\n",
" Call ID: call_140ed9992ae847dbacf07ccall_140ed9992ae847dbacf07ccall_140ed9992ae847dbacf07ccall_140ed9992ae847dbacf07c\n",
" Args:\n",
" a: 3\n",
" b: 4\n",
"=================================\u001B[1m Tool Message \u001B[0m=================================\n",
"\n",
"7\n",
"==================================\u001B[1m Ai Message \u001B[0m==================================\n",
"\n",
"The sum of 3 and 4 is 7.\n"
]
}
],
"execution_count": 4
},
{
"metadata": {},
"cell_type": "code",
"outputs": [],
"execution_count": null,
"source": "",
"id": "43d176ce20ff2b8a"
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}