LangGraph 第三章 StateGraph编译

目录

 工作流和代理

工作流是通过预定义的代码路径编排 LLM 和工具的系统。 另一方面,代理是 LLM 动态指导自己的流程和工具使用,保持对他们完成任务方式的控制的系统。


在构建代理和工作流时,LangGraph 提供了许多好处,包括持久性、流式处理以及对调试和部署的支持。

from langchain_openai import ChatOpenAI
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END

OPENAI_API_KEY= "lm-studio"
OPENAI_MODEL_NAME = "qwen2.5-3b-instruct"
OPENAI_BASE_URL="http://localhost:9999/v1"
llm = ChatOpenAI(
    openai_api_key=OPENAI_API_KEY,
    model_name=OPENAI_MODEL_NAME,
    openai_api_base=OPENAI_BASE_URL,
    temperature=5
)
# 图状态
class State(TypedDict):
    topic: str  # 主题
    joke: str  # 笑话
    improved_joke: str  # 改进后的笑话
    final_joke: str  # 最终的笑话


# 节点
def generate_joke(state: State):
    """第一次调用大语言模型生成初始笑话"""

    msg = llm.invoke(f"写一个关于 {state['topic']} 的短笑话")
    return {"joke": msg.content}


def check_punchline(state: State):
    """检查笑话是否有笑点的判断函数"""
    d=state["joke"]
    print(f"检查-》{d}")
    # 简单检查 - 笑话是否包含 "?" 或 "!"
    if "?" in state["joke"] or "!" in state["joke"]:
        print("ss->失败")
        return "失败"
    return "通过"


def improve_joke(state: State):
    """第二次调用大语言模型改进笑话"""

    msg = llm.invoke(f"通过添加双关语让这个笑话更有趣: {state['joke']}")
    return {"improved_joke": msg.content}


def polish_joke(state: State):
    """第三次调用大语言模型进行最终润色"""

    msg = llm.invoke(f"给这个笑话添加一个令人惊讶的转折: {state['improved_joke']}")
    return {"final_joke": msg.content}


# 构建工作流
workflow = StateGraph(State)

# 添加节点
workflow.add_node("generate_joke", generate_joke)
workflow.add_node("improve_joke", improve_joke)
workflow.add_node("polish_joke", polish_joke)

# 添加边来连接节点
workflow.add_edge(START, "generate_joke")
workflow.add_conditional_edges(
    "generate_joke", check_punchline, {"失败": "improve_joke", "通过": END}
)
workflow.add_edge("improve_joke", "polish_joke")
workflow.add_edge("polish_joke", END)

# 编译
chain = workflow.compile()

# 显示工作流

# 调用
state = chain.invoke({"topic": "猫"})
print("初始笑话:")
print(state["joke"])
print("\n--- --- ---\n")
if "improved_joke" in state:
    print("改进后的笑话:")
    print(state["improved_joke"])
    print("\n--- --- ---\n")

    print("最终的笑话:")
    print(state["final_joke"])
else:
    print("笑话未通过质量检查 - 未检测到笑点!")
    print("Joke failed quality gate - no punchline detected!")

out_put:

检查-》当然可以!这是一个简单的笑话:

一只猫和另一只猫在路上相遇,它们都不肯先说话。
第一只会说话的那只对另一只是这么说道:“你好啊,小灰!听说你的毛现在是淡棕色呢!”
听到这话,另一只猫有点害羞地说:“谢谢夸奖,小花。听说你的鼻子比以前更高了。”
然后他们一起笑了。

当然了,实际上所有猫都愿意先说的哦!不过这是一个有趣的笑话表达方式。
初始笑话:
当然可以!这是一个简单的笑话:

一只猫和另一只猫在路上相遇,它们都不肯先说话。
第一只会说话的那只对另一只是这么说道:“你好啊,小灰!听说你的毛现在是淡棕色呢!”
听到这话,另一只猫有点害羞地说:“谢谢夸奖,小花。听说你的鼻子比以前更高了。”
然后他们一起笑了。

当然了,实际上所有猫都愿意先说的哦!不过这是一个有趣的笑话表达方式。

--- --- ---

笑话未通过质量检查 - 未检测到笑点!
Joke failed quality gate - no punchline detected!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值