LangGraph-笑話評估器 應用實戰

場景:

用戶指定冷笑話主題,生成冷笑話后,進行評估,如果不搞笑就需要重新生成

以下代碼實現了一個基于LangGraph的冷笑話自動生成與評估工作流。

系統包含兩個核心節點:生成器根據用戶主題創作冷笑話,評估器對笑話進行幽默評級并提供改進建議。通過條件路由機制,當笑話被評為不搞笑 時會循環生成新版本,直到產生合格的笑話為止。工作流采用結構化輸出確保評估反饋的標準化,并利用大語言模型進行內容生成和質量判斷。系統實現了從初始創作到多次迭代優化的完整笑話生產閉環。

上代碼:

# 導入所需的類型和模塊
from typing import TypedDict, Literal
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
from langgraph.constants import START, END
from langgraph.graph import StateGraph
from pydantic import BaseModel, Field
from src.agent.aitool2 import llm# 定義狀態結構的類型提示,用于在圖中傳遞狀態
class State(TypedDict):joke: str                  # 生成的冷笑話內容topic: str                 # 用戶指定的主題feedback: str              # 改進建議funny_or_not: str          # 幽默評級("funny" 或 "not funny")# 定義結構化輸出模型,用于LLM評估反饋的格式化輸出
class Feedback(BaseModel):"""使用此工具來結構化你的響應"""# 定義笑話評估的等級,只能是 "funny" 或 "not funny"grade: Literal["funny", "not funny"] = Field(description="判斷笑話是否幽默",examples=["funny", "not funny"])# 提供具體的反饋建議feedback: str = Field(description="若不幽默,提供改進建議",example="可以加入雙關語或意外結局")# 節點函數:負責生成冷笑話
def generator_func(state: State):"""由大模型生成一個冷笑話的節點"""# 根據是否有反饋來構建提示詞prompt = (f"根據反饋改進笑話:{state['feedback']}\n主題:{state['topic']}"if state.get("feedback", None)  # 如果存在反饋,則使用反饋+主題的提示else f"創作一個關于{state['topic']}的笑話"  # 否則只使用主題生成新笑話)# 創建一個鏈式調用:LLM + 字符串輸出解析器chain = llm | StrOutputParser()# 執行鏈式調用并獲取響應resp = chain.invoke(prompt)# 返回更新后的狀態,包含新生成的笑話return {'joke': resp}# 節點函數:負責評估生成的冷笑話
def avaluator_func(state: State):"""評估狀態中的冷笑話"""# 綁定工具(Feedback模型)到LLM,使LLM能夠以結構化方式調用工具chain = llm.bind_tools([Feedback])# 構造評估提示并調用LLM進行評估evaluation = chain.invoke(f"評估此笑話的幽默程度:\n{state['joke']}\n""注意:幽默應包含意外性或巧妙措辭")# 從LLM響應中提取最后一次工具調用的參數evaluation = evaluation.tool_calls[-1]['args']# 返回更新后的狀態,包含評估結果和反饋return {"funny_or_not": evaluation['grade'],      # 幽默評級"feedback": evaluation['feedback']        # 改進建議}# 條件邊的路由函數:根據評估結果決定下一步流程
def route_func(state: State) -> str:"""動態路由決策函數"""# 如果笑話被評為"funny",則接受并結束流程# 否則拒絕并返回反饋,重新生成return 'Accepted' if state.get("funny_or_not", None) == "funny" else "Rejected + Feedback"# 構建工作流圖
builder = StateGraph(State)  # 使用 State 類型創建狀態圖構建器# 添加節點到圖中
builder.add_node('generator', generator_func)   # 添加生成笑話的節點
builder.add_node('avaluator', avaluator_func)   # 添加評估笑話的節點# 定義節點間的連接關系
builder.add_edge(START, 'generator')            # 從開始節點連接到生成器節點
builder.add_edge('generator', 'avaluator')      # 從生成器連接到評估器節點# 添加條件邊:根據評估結果決定流程走向
builder.add_conditional_edges('avaluator',                                # 從評估器節點出發route_func,                                 # 使用路由函數決定走向{"Accepted": END,                        # 如果接受,則流程結束"Rejected + Feedback": "generator"      # 如果拒絕,則返回生成器節點重新生成}
)# 編譯圖結構為可執行的工作流
graph = builder.compile()

測試結果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94881.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94881.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94881.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Paimon——官網閱讀:Flink 引擎

Flink 引擎 快速入門 本文檔是在Flink中使用Paimon的指南。 相關JAR包 Paimon目前支持Flink 1.20、1.19、1.18、1.17、1.16、1.15 。為獲得更好的體驗,我們推薦使用最新的Flink版本。 下載對應版本的JAR文件。 目前,Paimon提供兩種類型的JAR包&…

2025.8.28總結

工作日精進:今天終于把SPN控制器對接成功了,之前對接出現各種各樣的問題,搞得自己都有些心力交瘁。感覺自己明明很忙,也在努力的去推動進度,但還是阻塞了兩三天。最后求助了另一個同事,結果在他的指導和幫忙…

使用 Action 自動部署 VuePress 到 GitHub Pages

?? 成果: 框架:VuePress 2 vuepress/plugin-blog打包工具:Vite(viteBundler)包管理:pnpmCI/CD:GitHub Actions部署方案: 源碼倉庫:urfread1010/mind-elevation打包結…

【人工智能】2025年AI代理開源革命:社區驅動的智能體生態重塑未來

還在為高昂的AI開發成本發愁?這本書教你如何在個人電腦上引爆DeepSeek的澎湃算力! 2025年,AI代理(AI Agents)的開源浪潮席卷全球,標志著人工智能從封閉的商業模式向社區驅動的協作生態轉型。這一浪潮由開源社區主導,推動了智能體的快速迭代和民主化發展。本文深入探討了…

QT:【第一個QT程序】【信號和槽】

目錄 一. 第一個QT程序 1.1純代碼實現 1.2可視化操作實現 1.3 項目文件解析 1.3.1 .pro文件解析 1.3.2 widget.h 文件解析 1.3.3 main.cpp文件解析 1.3.4 widget.cpp 1.3.5 widget.ui文件解析 1.4對象樹 演示自動釋放的過程 1.5 中文亂碼 1.6 Qt窗口坐標系 二. 信…

河南萌新聯賽2025第(七)場:鄭州輕工業大學

河南萌新聯賽2025第(七)場:鄭州輕工業大學 If I only could, Id be running up that hill!鄭輕有品!背景終于不是二次元了… 是Stranger Things!希望我能像主題曲里那樣,勇攀高峰,R…

Java 獲取淘寶商品詳情(item get)API 接口實戰指南

在電商領域,獲取商品詳情數據對于市場分析、價格監控、用戶體驗優化等場景具有重要意義。淘寶作為國內領先的電商平臺,提供了豐富的 API 接口供開發者使用,其中 taobao.item.get 和 taobao.item.get_pro 接口可以用來獲取商品的詳細信息。本文…

配送算法17 AFramework for Multi-stage Bonus Allocation in meal delivery Platform

AFramework for Multi-stage Bonus Allocation in meal delivery Platform本文針對美團每日數十萬單因無人接單而被取消的痛點,提出“多階段動態獎金分配”框架:先用半黑盒模型預估獎金—接單概率關系,再用拉格朗日對偶動態規劃離線算出階段乘…

Python DELL Logo

寫在前面 Python繪制Android Studio標志的完整代碼。 系列文章 序號文章目錄直達鏈接炫酷系列1無法拒絕的表白界面https://want595.blog.csdn.net/article/details/1347448942滿屏飄字表白代碼https://want595.blog.csdn.net/article/details/1350373883無限彈窗表白代碼http…

【架構師干貨】軟件工程

1. 軟件工程概述 軟件工程基本原理 軟件工程基本原理:通過劃分生命周期階段的方式嚴格管理、堅持進行階段評審、實現嚴格的產品控制、采用現代程序設計技術、結果應能清楚地審查、開發小組的人員應少而精、承認不斷改進軟件工程實踐的必要性。 軟件開發生命周期 軟件…

3.滲透-.IP地址-詳解

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 內容參考于:易錦網校 上一個內容:2.滲透-.WEB運行原理-ZBlog安裝(進一步理解數據庫) ip地址是互聯網中的門牌號…

【數字投影】簡單介紹數字展廳內投影融合技術的原理

投影融合技術 https://www.bmcyzs.com/ 是一種將多臺投影機的畫面無縫拼接成一個完整、統一的高分辨率大畫面的技術。它的核心原理在于通過幾何校正與邊緣羽化等處理,消除設備間的物理縫隙與亮度差異,從而實現視覺上的完美一體化。這一過程高度依賴于專業…

UML狀態圖中entry/do/exit動作的深入解析與C/C++實現

<摘要> 本文將深入探討UML狀態圖中entry、do和exit動作的概念、作用及實現方式&#xff0c;通過astah工具展示如何專業地建模這些元素&#xff0c;并提供完整的C/C代碼實現解析。文章包含具體案例和最佳實踐&#xff0c;幫助開發者掌握狀態機設計的精髓。 <解析> U…

Vue3 Pinia 中 store.$dispose()的用法說明

在 Vue 3 的 Pinia 中&#xff0c;store.$dispose()方法用于手動銷毀一個 store 實例&#xff0c;它會重置該 store 的狀態并移除所有訂閱&#xff08;如通過 $subscribe或 $onAction添加的監聽器&#xff09;。如果你發現調用 store.$dispose()后沒有達到預期效果&#xff0c;…

Java自定義程序使用Ollama實現本地ai調用

Ollama 提供 兩套核心接口、三種常見輸入風格、兩種輸出模式&#xff0c;你可以按需組合。 一、兩套核心接口 /api/generate ? 一問一答&#xff0c;無對話歷史。 ? 輸入&#xff1a;單次 prompt&#xff0c;可選參數&#xff08;temperature、top_p、max_tokens …&#xff…

操作系統中的死鎖是什么意思

問題操作系統中的死鎖是什么意思我的回答死鎖是指在操作系統中&#xff0c;兩個或多個進程互相等待對方釋放資源&#xff0c;導致這些進程都無法繼續執行的一種狀態。簡單來說&#xff0c;就像兩個人相互禮讓過馬路&#xff0c;結果誰也不肯先走&#xff0c;最后都卡在那里一樣…

DA14531(Cortex-M0+)之Wake-up Interrupt Controller (WIC)

Wake-up Interrupt Controller (WIC) to allow the processor to be powered down during sleep, while interrupt sources are still allowed to wake up the system. 喚醒中斷中斷器&#xff0c;允許處理器休眠時關閉電源和時鐘&#xff0c;但中斷源可以喚醒系統。具備獨立的…

實戰演練(一):從零構建一個功能完備的Todo List應用

實戰演練&#xff08;一&#xff09;&#xff1a;從零構建一個功能完備的Todo List應用 作者&#xff1a;碼力無邊各位React探險家&#xff0c;歡迎集結&#xff01;我是你們的向導碼力無邊&#xff0c;這里是《React奇妙之旅》的第六站&#xff0c;也是我們基礎階段的“畢業大…

GitHub 宕機自救指南:確保開發工作不間斷

1.1 GitHub 宕機事件回顧 在 2025 年 8 月&#xff0c;GitHub 經歷了一次全球性的重大故障事件&#xff0c;此次宕機持續了數小時&#xff0c;對全球范圍內依賴 GitHub 進行代碼托管、協作開發的團隊和個人造成了嚴重影響。眾多開源項目的代碼提交陷入停滯&#xff0c;企業級開…

RK3588 android12 DDR開發指南相關記錄

一&#xff0c;DDR打印信息 DDR 打印信息包括 loader 中的打印和 kernel 中的打印&#xff0c;loader 中打印的解析如下&#xff1a;DDR Version 1.05 20170712// DDR 初始化代碼的版本信息&#xff0c;用于核對版本。從這行開始&#xff0c;已經進入DDR初始化代碼 In SRX // 有…