DeepSeek写Langgraph就是个大傻逼,一本正经胡说八道

我今天终于逮到了现行,DeepSeek一本正经的胡说八道,之前让DeepSeek写前端或者后端代码感觉还挺好的,生成代码基本复制过去就能用,讨论好前后端架构设计后,让他直接根据讨论好的架构设计直接生成代码,基本复制过去就能跑通,我也是很赞赏他的,但是,让他排查Langgraph的代码就完全不懂装懂,一本正经的胡说八道,让我在错误的道理上越走越远。 我写个很小的场景,Langgraph流式输出信息,

stream_mode 只有一个值

ini 复制代码
for metadata,chunk in graph.stream(
    Command(resume=val),
    config=config,
    stream_mode="messages"
):
    if isinstance(chunk, AIMessageChunk) and chunk.content:
        print(chunk.content, end="", flush=True)

stream_mode 有多个值

ini 复制代码
for mode, data in graph.stream(
    Command(resume=input_value),
    config=config,
    stream_mode=["messages","updates","custom"],
):
    if mode == "messages":
        # LLM 的 Token 流
        token, metadata = data
        print(token.content, end="", flush=True)
    elif mode == "updates":
        # 节点完成后的状态增量
        rprint(f"\n[Update] 节点完成: {list(data.keys())}")
        rprint("uu",data)
    elif mode == "custom":
        rprint("cc",data)
        # 你在节点里手动发出的进度事件
        rprint(f"\n[Custom] {data['msg']}")

stream_mode只有一个值时,解构出两个值 metadata,chunk ,生成的内容就在chunk.content里,但是有多个值时,解构出第一个值时mode模式名称,第二个值还能再解构出 token, metadata两个值,生成的内容在token.content里。


但是我不小心把多值模式下的两个值位置搞反了,我就无法输出打字效果,我就问DeepSeek,它一本正经的说出很多种可能原因,我就跟着在它的坑里翻滚了好久出不来

没有办法我只能翻出之前写的代码,一行行比对,才找出这个小问题,我重开一个对话,把同样的问题问他,它还是绕不出来。


所以得出结论,DeepSeek写Langgraph能力很差,小伙伴们一定不能全信它

最后贴上代码

python 复制代码
from langchain_core.messages import HumanMessage, AIMessageChunk
from langchain.chat_models import init_chat_model
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.config import get_stream_writer
from langgraph.graph import StateGraph, START, END, MessagesState
from dotenv import load_dotenv
from langgraph.types import interrupt, Command

load_dotenv(override=True)
from rich import print as rprint
# 1. 初始化 DeepSeek 模型(按你的配置)
model = init_chat_model(
    model="deepseek-chat",
    extra_body={"thinking": {"type": "disabled"}},
)

# 2. 定义图状态
class State(MessagesState):
    text: str

# 3. 节点函数:内部发射 custom 进度事件,同时调用模型产生 messages 流
def generate_node(state: State):
    writer = get_stream_writer()
    writer({"type": "progress", "stage": "start", "msg": "开始生成内容..."})
    val=interrupt("请输入")
    # 调用 DeepSeek 模型(messages 模式会自动流式输出这里的 Token)
    response = model.invoke(
        [HumanMessage(val)]
    )
    writer({"type": "progress", "stage": "finish", "msg": "生成完成"})
    return {"messages": [response]}

# 4. 构建图
builder = StateGraph(State)
builder.add_node("generate", generate_node)
builder.add_edge(START, "generate")
builder.add_edge("generate", END)
checkpointer=InMemorySaver()
graph = builder.compile(checkpointer=checkpointer)

config = {
    "configurable": {"thread_id": "966347"}
}
graph.invoke({},config=config,)
# 5. 同时使用三种流模式
input_value= input("请输入")
for mode, data in graph.stream(
    Command(resume=input_value),
    config=config,
    stream_mode=["messages","updates","custom"],
):
    if mode == "messages":
        # LLM 的 Token 流
        token, metadata = data
        print(token.content, end="", flush=True)
    elif mode == "updates":
        # 节点完成后的状态增量
        rprint(f"\n[Update] 节点完成: {list(data.keys())}")
        rprint("uu",data)
    elif mode == "custom":
        rprint("cc",data)
        # 你在节点里手动发出的进度事件
        rprint(f"\n[Custom] {data['msg']}")
相关推荐
jktantan2 小时前
每个节点 41 字节:把一棵百万节点树拆进 14 个 typed array
前端·javascript·vue.js·算法·typescript
沃达德软件2 小时前
智慧无人机图像识别分析技术
人工智能·目标检测·计算机视觉·目标跟踪·视觉检测·无人机
计算机魔术师3 小时前
Anthropic官方插件被「寄生」,背后是同一类攻击又来了
前端
染指11103 小时前
162.Agent-LangGraph-检查点的作用
人工智能·python·langchain·agents
FII工业富联科技服务3 小时前
从灯塔工厂到规模化智能运营:Omniverse Sim2Real与多智能体协同架构解析
人工智能·数字孪生·ai智能体·工业机器人·omniverse·柔性制造·灯塔工厂
合尘猫3 小时前
6GB 笔记本本地跑 Z-Image Turbo:一次从 cu121 到 cu130 的踩坑记录
人工智能·ai·大模型·本地部署
2401_832298103 小时前
当思考本身被解放:AI 时代的人与机器
人工智能
北方的银狐-Zero3 小时前
Palantir 平替产品出世:OntoL 8.0 发布,把「企业级本体决策平台」产品复刻出来了
人工智能·本体论·本体产品
赤龙ERP3 小时前
ERP周报:连接器开闸、国产GPU进场与智能工厂253家
数据库·人工智能·大模型·rpa·erp·企业数字化·builderpattern