""" Step 02 练习题:设计你的第一个 Agent State ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🎯 练习目标: 1. 巩固 State 的基本结构 2. 设计一个业务相关的 State 3. 理解状态在多步骤任务中的作用 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ """ from typing import TypedDict, List, Dict, Any import json # ═══════════════════════════════════════════════════════════════════════════════ # 练习 1:完善一个简单的聊天机器人状态 # ═══════════════════════════════════════════════════════════════════════════════ """ 任务: 设计一个客服聊天机器人的状态 要求: 1. 记录用户信息(用户名、ID) 2. 记录对话历史 3. 记录当前正在处理的问题 4. 记录问题解决状态 5. 记录用户满意度评分 提示: - 使用 TypedDict 定义状态 - 考虑哪些字段是必须的,哪些是可选的 """ class CustomerServiceState(TypedDict, total=False): """ 客服聊天机器人的状态 请补全以下字段的定义: """ # 用户信息 user_id: str user_name: str # TODO: 添加更多字段... pass # ═══════════════════════════════════════════════════════════════════════════════ # 练习 2:设计一个数据分析 Agent 的状态 # ═══════════════════════════════════════════════════════════════════════════════ """ 任务: 设计一个数据分析 Agent 的状态 功能: 1. 用户提出数据分析需求 2. Agent 连接数据源 3. Agent 执行查询 4. Agent 生成报告 请设计状态来支持这个流程,包括: - 用户需求 - 数据源配置 - 查询结果 - 生成的报告 - 中间状态 """ class DataAnalysisState(TypedDict, total=False): """ 数据分析 Agent 的状态 请补全状态定义... """ pass # ═══════════════════════════════════════════════════════════════════════════════ # 练习 3:实现状态快照和恢复 # ═══════════════════════════════════════════════════════════════════════════════ """ 任务: 给以下状态实现快照和恢复功能 提示: - 快照应该保存足够的信息来恢复状态 - 恢复后状态应该是完整的 - 考虑哪些字段需要保存,哪些不需要 """ def create_snapshot(state: dict) -> dict: """ 创建状态快照 应该保存: - 关键业务数据 - 不包括临时计算的中间结果 返回格式: { "data": {...}, # 快照数据 "timestamp": "..." # 时间戳 } """ # TODO: 实现这个函数 pass def restore_from_snapshot(state: dict, snapshot: dict) -> dict: """ 从快照恢复状态 参数: state: 当前状态(会被更新) snapshot: 之前保存的快照 返回: 恢复后的状态 """ # TODO: 实现这个函数 pass # ═══════════════════════════════════════════════════════════════════════════════ # 练习 4:状态验证 # ═══════════════════════════════════════════════════════════════════════════════ """ 任务: 实现状态验证函数 验证规则: 1. 必填字段不能为空 2. 字段类型要正确 3. 某些字段有取值范围限制 返回: { "valid": True/False, "errors": ["错误1", "错误2", ...] } """ def validate_state(state: dict, rules: dict) -> dict: """ 验证状态 参数: state: 要验证的状态 rules: 验证规则,格式: { "field_name": { "type": int/str/list/dict, "required": True/False, "min": 0, # 可选,数字最小值 "max": 100, # 可选,数字最大值 "choices": ["a", "b"] # 可选,枚举值 } } 示例: rules = { "user_id": {"type": str, "required": True}, "age": {"type": int, "min": 0, "max": 150}, "status": {"type": str, "choices": ["active", "inactive"]} } """ # TODO: 实现这个函数 pass # ═══════════════════════════════════════════════════════════════════════════════ # 测试 # ═══════════════════════════════════════════════════════════════════════════════ def test_exercises(): """测试所有练习""" print("\n" + "=" * 60) print("测试练习答案") print("=" * 60) # 测试练习 3 print("\n📝 练习 3: 快照和恢复") # 示例状态 sample_state = { "user_id": "123", "current_task": "数据分析", "progress": 50, "temp_data": ["计算中...", "处理中..."], # 临时数据 } print(f"原始状态: {sample_state}") # 创建快照 snapshot = create_snapshot(sample_state) print(f"快照: {snapshot}") # 修改状态 sample_state["progress"] = 100 print(f"修改后状态: {sample_state}") # 恢复 restored = restore_from_snapshot(sample_state, snapshot) print(f"恢复后状态: {restored}") # 测试练习 4 print("\n📝 练习 4: 状态验证") rules = { "user_id": {"type": str, "required": True}, "age": {"type": int, "min": 0, "max": 150}, "status": {"type": str, "choices": ["active", "inactive"]} } # 有效状态 valid_state = {"user_id": "123", "age": 25, "status": "active"} print(f"验证有效状态: {validate_state(valid_state, rules)}") # 无效状态 invalid_state = {"user_id": "123", "age": 200, "status": "unknown"} print(f"验证无效状态: {validate_state(invalid_state, rules)}") if __name__ == "__main__": test_exercises()