在人工智能应用开发领域,LangGraph正迅速成为构建复杂工作流的首选工具。想象一下,当你向AI提出"讲个关于西瓜的笑话"时,系统不仅能立即生成内容,还能通过多轮评估和优化,确保最终输出的笑话确实能让人会心一笑——这正是我们将要构建的智能笑话优化系统。
传统AI应用开发面临三大痛点:工作流僵化、缺乏自我优化能力、难以处理循环逻辑。LangGraph通过状态机模型和条件边设计,完美解决了这些问题。本教程将带您从零开始,构建一个能不断自我迭代优化的笑话生成系统,整个过程就像教AI学习幽默感一样有趣。
首先确保Python环境(≥3.8)已配置,然后安装核心库:
bash复制pip install langgraph langchain-openai pydantic
我们使用OpenAI模型作为核心引擎:
python复制from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4-turbo", temperature=0.7)
温度参数说明:
1.0:高风险高随机性
使用Pydantic确保输出格式标准化:
python复制from pydantic import BaseModel, Field
class JokeSchema(BaseModel):
topic: str = Field(description="笑话的主题关键词")
content: str = Field(description="笑话的完整内容")
style: str = Field("pun", description="笑话风格:pun(双关)/story(故事)/dark(黑色幽默)")
组合提示模板与LLM调用:
python复制from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "你是一位专业喜剧编剧,擅长创作{style}类型的笑话"),
("human", "请创作一个关于{topic}的笑话,要求:{requirements}")
])
generation_chain = prompt | llm
建立多维度评估体系:
| 评估维度 | 权重 | 标准说明 |
|---|---|---|
| 创意性 | 30% | 笑点是否新颖独特 |
| 相关性 | 20% | 是否紧密围绕主题 |
| 语言质量 | 20% | 表达是否流畅自然 |
| 幽默感 | 30% | 是否确实引人发笑 |
python复制def evaluate_joke(state: dict):
evaluation = llm.invoke(
f"请从1-10分评估这个笑话:\n{state['joke']}\n"
"评估标准:创意性(30%)、相关性(20%)、语言质量(20%)、幽默感(30%)"
)
score = float(evaluation.content.split(":")[-1].strip())
return {"score": score, "feedback": evaluation.content}
定义工作流状态结构:
python复制from typing import TypedDict, List, Annotated
from operator import add
class JokeState(TypedDict):
topic: str
draft_history: List[str]
current_draft: str
score: float
feedback_history: List[str]
iterations: Annotated[int, add]
关键代码结构:
python复制from langgraph.graph import StateGraph, END
workflow = StateGraph(JokeState)
# 添加节点
workflow.add_node("generate", generate_joke)
workflow.add_node("evaluate", evaluate_joke)
workflow.add_node("improve", improve_joke)
# 设置条件边
def should_continue(state):
if state["score"] >= 8 or state["iterations"] >= 5:
return END
return "improve"
workflow.add_conditional_edges("evaluate", should_continue)
生成的流程图将展示:
python复制styles = ["pun", "story", "dark"]
multi_chain = {
style: prompt.partial(style=style) | llm
for style in styles
}
python复制from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
enhanced_chain = (
prompt
| memory.load_memory_variables
| llm
| (lambda x: memory.save_context(x))
)
python复制inputs = {"topic": "程序员", "requirements": "包含技术术语"}
result = workflow.invoke(inputs)
markdown复制最终生成笑话:
为什么程序员总把万圣节和圣诞节搞混?
因为 Oct 31 == Dec 25!
迭代次数:3
最终评分:8.7/10
优化记录:
- 初始版本缺少技术元素
- 第二版过于复杂
- 最终版找到数学双关点
提示:循环次数建议设置在3-5次,过多迭代可能导致内容过度优化失去自然感
本架构可轻松适配:
只需替换评估标准和生成模板,就能构建各类内容优化系统。我在实际项目中用类似架构为客户构建了自动化营销内容生成平台,将内容生产效率提升了6倍。