()
| 307 | # ============================================================ |
| 308 | |
| 309 | def main(): |
| 310 | print("=" * 60) |
| 311 | print("Tutorial 02: Session 与消息模型演示") |
| 312 | print("=" * 60) |
| 313 | |
| 314 | # --- 1. 构建一段完整对话 --- |
| 315 | print("\n--- 构建一段对话 ---") |
| 316 | |
| 317 | session = Session() |
| 318 | |
| 319 | # 用户说话 |
| 320 | session.messages.append(ConversationMessage.user_text("2+2 等于几?")) |
| 321 | print(f"添加消息: {session.messages[-1]}") |
| 322 | |
| 323 | # 助手回复(包含文字 + 工具调用) |
| 324 | session.messages.append(ConversationMessage.assistant_with_tool_use( |
| 325 | text="让我算一下。", |
| 326 | tool_id="tool-1", |
| 327 | tool_name="add", |
| 328 | tool_input="2,2", |
| 329 | usage=TokenUsage(input_tokens=20, output_tokens=6), |
| 330 | )) |
| 331 | print(f"添加消息: {session.messages[-1]}") |
| 332 | |
| 333 | # 工具返回结果 |
| 334 | session.messages.append(ConversationMessage.tool_result( |
| 335 | tool_use_id="tool-1", |
| 336 | tool_name="add", |
| 337 | output="4", |
| 338 | )) |
| 339 | print(f"添加消息: {session.messages[-1]}") |
| 340 | |
| 341 | # 助手最终回答 |
| 342 | session.messages.append(ConversationMessage.assistant_text( |
| 343 | text="2 + 2 的答案是 4。", |
| 344 | usage=TokenUsage(input_tokens=30, output_tokens=8), |
| 345 | )) |
| 346 | print(f"添加消息: {session.messages[-1]}") |
| 347 | |
| 348 | # --- 2. 查看消息内部结构 --- |
| 349 | print("\n--- 查看第二条消息的内部结构(助手的工具调用)---") |
| 350 | msg = session.messages[1] |
| 351 | print(f" 角色: {msg.role}") |
| 352 | print(f" 内容块数量: {len(msg.blocks)}") |
| 353 | for i, block in enumerate(msg.blocks): |
| 354 | print(f" 块 {i}: type={block.type}, 内容={block}") |
| 355 | print(f" Token 使用: {msg.usage}") |
| 356 | |
| 357 | # --- 3. 保存和恢复 --- |
| 358 | print("\n--- 保存和恢复 Session ---") |
| 359 | # 创建临时文件来演示 |
| 360 | tmp_path = os.path.join(tempfile.gettempdir(), "tutorial_session.json") |
| 361 | session.save_to_file(tmp_path) |
| 362 | print(f" 已保存到: {tmp_path}") |
| 363 | |
| 364 | # 读回来 |
| 365 | restored = Session.load_from_file(tmp_path) |
| 366 | print(f" 已恢复: {len(restored.messages)} 条消息") |
no test coverage detected