Files
python----/大模型/graph.ipynb
T
admin 2d8c1ea8f9 chore: 批量新增各类工具脚本与配置文件
1. 新增音频录制、下载、上传相关脚本
2. 新增数据库操作、API调用工具
3. 新增Excel数据处理脚本
4. 新增弱密码检测脚本
2026-06-14 17:47:15 +08:00

35 KiB

In [1]:
import os
from dotenv import load_dotenv
from langgraph.graph import StateGraph, START, END, MessagesState
from langchain_openai import ChatOpenAI
from langchain_core.messages import SystemMessage, HumanMessage

load_dotenv()

# 初始化 LLM
llm = ChatOpenAI(
    model="MiniMax-M2.7-highspeed",
    openai_api_key="sk-8d657b8b7efe0cb6c141a30d9cee97f726efb9b18ea72bb1e8cfb080b42c140d",
    openai_api_base="https://console.pivotbak.cfd/v1",
    temperature=0.5
)

# 路由函数
def classify_intent(state: MessagesState) -> str:
    """根据用户意图路由到不同的 Agent"""
    last_message = state["messages"][-1]
    content = last_message.content.lower()
    
    if "天气" in content or "温度" in content:
        return "weather_agent"
    elif "代码" in content or "编程" in content:
        return "code_agent"
    elif "再见" in content or "退出" in content:
        return "farewell"
    else:
        return "general_agent"

# 定义各个 Agent 节点
def router_node(state: MessagesState) -> dict:
    """路由节点:不做处理,只用于触发路由判断"""
    return {}

def weather_node(state: MessagesState) -> dict:
    """天气 Agent"""
    response = llm.invoke([
        SystemMessage(content="你是一个天气助手,友好地回答天气相关问题。如果没有实时数据,可以给出一般性建议。"),
        *state["messages"]
    ])
    return {"messages": [response]}

def code_node(state: MessagesState) -> dict:
    """代码 Agent"""
    response = llm.invoke([
        SystemMessage(content="你是一个编程助手,擅长解答代码问题并给出清晰的代码示例。"),
        *state["messages"]
    ])
    return {"messages": [response]}

def general_node(state: MessagesState) -> dict:
    """通用 Agent"""
    response = llm.invoke([
        SystemMessage(content="你是一个友善的 AI 助手,可以回答各种问题。"),
        *state["messages"]
    ])
    return {"messages": [response]}

def farewell_node(state: MessagesState) -> dict:
    """告别节点"""
    return {"messages": [{"role": "assistant", "content": "再见!期待下次与你交流。"}]}

# 构建图
builder = StateGraph(MessagesState)

# 添加节点
builder.add_node("router", router_node)
builder.add_node("weather_agent", weather_node)
builder.add_node("code_agent", code_node)
builder.add_node("general_agent", general_node)
builder.add_node("farewell", farewell_node)

# 添加边
builder.add_edge(START, "router")
builder.add_conditional_edges(
    "router",
    classify_intent,
    {
        "weather_agent": "weather_agent",
        "code_agent": "code_agent",
        "general_agent": "general_agent",
        "farewell": "farewell",
    }
)

# 所有 agent 节点处理完后结束
for node in ["weather_agent", "code_agent", "general_agent", "farewell"]:
    builder.add_edge(node, END)

# 编译图
graph = builder.compile()

# 测试不同意图
test_inputs = [
    "北京今天天气怎么样?",
    "帮我写一个 Python 快速排序",
    "你好,介绍一下你自己",
    "再见啦!"
]

for user_input in test_inputs:
    print(f"\n用户: {user_input}")
    result = graph.invoke({"messages": [HumanMessage(content=user_input)]})
    print(f"助手: {result['messages'][-1].content[:100]}...")
    print("-" * 50)
用户: 北京今天天气怎么样?
助手: 您好!很抱歉,我无法获取实时的天气数据,因此无法告诉您北京今天的具体天气情况。

建议您可以通过以下方式查询北京今天的天气:

1. **手机天气应用** - 如墨迹天气、天气通等
2. **搜索引擎...
--------------------------------------------------

用户: 帮我写一个 Python 快速排序
助手: # Python 快速排序实现

## 方法一:原地排序(经典版本)

```python
def quick_sort(arr, left, right):
    """原地快速排序"""
   ...
--------------------------------------------------

用户: 你好,介绍一下你自己
助手: 你好!我是 MiniMax AI,一个由 MiniMax 公司开发的人工智能助手。

我可以帮助你:

- 回答各种问题
- 进行对话和交流
- 协助写作、编程、翻译等任务
- 提供信息和知识

有什...
--------------------------------------------------

用户: 再见啦!
助手: 再见!期待下次与你交流。...
--------------------------------------------------
In [3]:
from IPython.display import Image
Image(graph.get_graph().draw_mermaid_png())
Out [3]: