LangGraph 模拟简单的多模型编排

假设这三个节点是不同的模型,处理不同的问题,在用户输入后使用模型判断下一步要调用哪个节点回答问题

  • node1: 讲短笑话
  • node2: 李白风格写诗
  • node3: 其他问题

路由节点返回的就是下一步要走的节点,最后并实现打字效果,使用stream优化响应等待时间

python 复制代码
from langchain_core.messages import AIMessageChunk
from langchain.messages import AIMessage,HumanMessage,SystemMessage
from langgraph.graph import StateGraph,START,END
from langgraph.graph.message import add_messages,MessagesState
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
from rich import print as rprint
from IPython.display import display
from typing import Literal
load_dotenv()
llm=init_chat_model(
  model="deepseek-chat"
)
class overAllState(MessagesState):
  userValue: str
  nodeName: str
def node1(state:overAllState):
  res1=llm.invoke([HumanMessage(state["userValue"])])
  return {
    "messages": [res1]
  }
def node2(state:overAllState):
  res2=llm.invoke([HumanMessage(state["userValue"])])
  return {
    "messages": [res2]
  }
def node3(state:overAllState):
  res3=llm.invoke([HumanMessage(state["userValue"])])
  return {
    "messages": [res3]
  }
def route(state:overAllState) -> Literal["node1","node2","node3"]:
  userValue=state["userValue"]
  prompt=f"""
    用户的提示词:{userValue},
    判断分类,**只输出下面其中一个单词,不要多余文字**
    node1: 讲短笑话
    node2: 李白风格写诗
    node3: 其他问题
    只返回:node1 / node2 / node3
  """
  res=llm.invoke(prompt)
  route_name = res.content.strip()
  return route_name

builder=StateGraph(overAllState)
builder.add_node(node1)
builder.add_node(node2)
builder.add_node(node3)
builder.add_conditional_edges(
  source=START,
  path=route,
  path_map={
    "node1": "node1",
    "node2": "node2",
    "node3": "node3"
  }
)
builder.add_edge("node1", END)
builder.add_edge("node2", END)
builder.add_edge("node3", END)
graph=builder.compile()
display(graph)
# res=graph.invoke({"userValue":"给我讲个笑话吧"})
# rprint(res["messages"][-1].content)


for chunk in graph.stream({"userValue":"爱因斯坦终年多少岁"},stream_mode="messages"):
    mes, meta = chunk
    target_nodes = {"node1","node2","node3"}
    if meta.get("langgraph_node") in target_nodes:
        if isinstance(mes, AIMessageChunk) and mes.content:
            print(mes.content, end="", flush=True)
相关推荐
Ivanqhz2 分钟前
激活函数在 Transformer 中的作用及各种变体简述
java·linux·数据库·人工智能·深度学习
染指11103 分钟前
134.Agent-多Agent框架-LangChain多智能体
人工智能·中间件·langchain·agents
fkyyly25 分钟前
企业 Agent 落地的两场战争:内部经营闭环与 ToB 外部规模赋能
人工智能·codeagent
看浪的路人28 分钟前
第9讲:AI 应用混沌工程与容灾演练
人工智能
workflower35 分钟前
AI system product quality model
大数据·人工智能·机器学习·云计算·无人机
众链网络37 分钟前
从 GB/T 30225-2026 的「数据管理」章节,反推景区票务系统的数据层设计
人工智能
kaixin_啊啊40 分钟前
【零基础学AI】第 1 章课后练习与答案
人工智能·ai
yl453043 分钟前
硫酸泄露处理生产商怎么选才够专业
大数据·人工智能·python
搬砖的小码农_Sky1 小时前
AI Agent:Claude Code以及相关竞品简介
人工智能·人机交互
笨笨饿1 小时前
140_AI新手村MCP与Skills是干嘛的
开发语言·人工智能·python·stm32·单片机·嵌入式硬件·物联网