当前位置: 首页 > news >正文

AI Agent开发学习系列 - LangGraph(10): 带有循环的Looping Graph(练习解答)

在AI Agent开发学习系列 - LangGraph(9): 带有循环的Looping Graph中,我们学习了如何创建带有循环的Looping Graph。为了巩固学习,我们来做一个练习。

用LangGraph创建如下图的一个Agent:
在这里插入图片描述
要求:

  1. 输入玩家姓名
  2. 通过输入的上限值和下限值之间,随机出一个目标值,该目标值对玩家不可见。
  3. 大模型通过不断的猜目标值直到猜中
  4. 每猜一次目标值如果没猜中,给出猜大了还是猜小了,并且调整上限或者下限值
  5. 记录尝试次数

解答:

from typing import TypedDict, List
from langgraph.graph import StateGraph, END
import randomclass AgentState(TypedDict):player_name: strtarget_number: intguesses: List[int]attempts: intlower_bound: intupper_bound: intdef setup_node(state: AgentState) -> AgentState:"""Setup the game state"""state["target_number"] = random.randint(state["lower_bound"], state["upper_bound"])state["guesses"] = []state["attempts"] = 0state["lower_bound"] = state["lower_bound"]state["upper_bound"] = state["upper_bound"]state["player_name"] = f"Hi, {state["player_name"]}. Please start the game. Guess a number between {state["lower_bound"]} and {state["upper_bound"]}.\n================================================"print(state["player_name"])return statedef guess_node(state: AgentState) -> AgentState:"""Guess the number"""state["attempts"] += 1print(f"Guess attempts: {state['attempts']}")state["guesses"].append(random.randint(state["lower_bound"], state["upper_bound"]))print(f"I guess: {state['guesses'][-1]}")return statedef hint_node(state: AgentState) -> AgentState:"""Give a hint based on the guess"""if state["guesses"][-1] == state["target_number"]:print("Your guess is correct!")elif state["guesses"][-1] < state["target_number"]:state["lower_bound"] = state["guesses"][-1]print(f"Your guess is lower than the target number. Please guess a number between {state['lower_bound']} and {state['upper_bound']}.")else:state["upper_bound"] = state["guesses"][-1]print(f"Your guess is higher than the target number. Please guess a number between {state['lower_bound']} and {state['upper_bound']}.")return statedef should_continue(state: AgentState) -> AgentState:"""Function to decide what to do next"""if state["attempts"] < 7 and state["guesses"][-1] != state["target_number"]:print("Please guess again.")print("\n--------------------------------\n")return "loop"elif state["attempts"] >= 7 and state["guesses"][-1] != state["target_number"]:print(f"Game over! The target number is {state['target_number']}.")return "exit"else:return "exit"graph = StateGraph(AgentState)graph.add_node("setup", setup_node)
graph.add_node("guess", guess_node)
graph.add_node("hint", hint_node)graph.set_entry_point("setup")
graph.add_edge("setup", "guess")
graph.add_edge("guess", "hint")graph.add_conditional_edges("hint",should_continue,{"loop": "guess","exit": END,}
)app = graph.compile()from IPython.display import Image, display
display(Image(app.get_graph().draw_mermaid_png()))result = app.invoke({"player_name": "Alex", "lower_bound": 1, "upper_bound": 20})
# print(result)

运行结果(每一次运行结果有随机性,可能都不一样):
在这里插入图片描述

Hi, Alex. Please start the game. Guess a number between 1 and 20.
================================================
Guess attempts: 1
I guess: 10
Your guess is lower than the target number. Please guess a number between 10 and 20.
Please guess again.--------------------------------Guess attempts: 2
I guess: 16
Your guess is lower than the target number. Please guess a number between 16 and 20.
Please guess again.--------------------------------Guess attempts: 3
I guess: 18
Your guess is correct!
http://www.lryc.cn/news/608090.html

相关文章:

  • JavaScript特殊集合WeakMap 的使用及场景介绍
  • 【昇腾推理PaddleOCR】生产级部署方式
  • 什么是AWS Region和AWS Availability Zones
  • php完整处理word中表单数据的方法
  • Word怎样转换为PDF
  • 使用AWS免费EC2自建RustDesk远程桌面连接服务
  • 【iOS】3GShare仿写
  • 市政污水厂变频器联网改造方案-profibus转ethernet ip网关(通俗版)
  • 疏老师-python训练营-Day33 MLP神经网络的训练
  • 详解Python标准库之命令行界面库
  • 【05】OpenCV C#——OpenCvSharp 图像基本操作---转灰度图、边缘提取、兴趣区域ROI,图像叠加
  • MyBatisPlus之CRUD接口(IService与BaseMapper)
  • 西门子 G120 变频器全解析:从认知到参数设置
  • 技巧|SwanLab记录ROC曲线攻略
  • LINUX82 shell脚本变量分类;系统变量;变量赋值;四则运算;shell
  • 系统性学习数据结构-第一讲-算法复杂度
  • MySQL 内置函数
  • ADB 查看 CPU 信息、查看内存信息、查看硬盘信息
  • 排序算法大全:从插入到快速排序
  • k8s使用 RBAC 鉴权
  • 论文阅读笔记:Dataset Condensation with Gradient Matching
  • [C++竞赛]数论
  • 深入 Go 底层原理(十三):interface 的内部表示与动态派发
  • [硬件电路-113]:模拟电路 - 信号处理电路 - 二极管的应用 - 精密整流电路与波形
  • sqli-labs:Less-18关卡详细解析
  • Json Jsoncpp
  • hyper-v实战系列:第一代虚拟机转第二代步骤
  • 深入理解 Docker 容器网络:为什么用 host 网络模式能解决连通性问题?
  • yolo 、Pytorch (5)IOU
  • Git、Gitee、GitHub、GitLab完整讲解:从基础到进阶