目录
工作流是通过预定义的代码路径编排 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!