From a88d8a2c4ceadcdc5ba7a78a0dba0acacf3d5464 Mon Sep 17 00:00:00 2001 From: Annyfee <2287551746@qq.com> Date: Fri, 21 Nov 2025 09:44:11 +0800 Subject: [PATCH] refactor(config):manage API_KEY vai .env in project root --- 08_langgraph_basics/01_workflow.png | Bin 4879 -> 6449 bytes 08_langgraph_basics/02_langsmith_trace.py | 14 +++----------- 08_langgraph_basics/03_conditional_router.py | 15 +++++---------- 08_langgraph_basics/04_agent_with_memory.py | 13 ++++--------- 08_langgraph_basics/README.md | 6 ++++-- config.py | 2 ++ 6 files changed, 18 insertions(+), 32 deletions(-) diff --git a/08_langgraph_basics/01_workflow.png b/08_langgraph_basics/01_workflow.png index 5fc97208e6a4b64ee95906075e80632595b94ba7..1394b48cee58614ed114e20c58daca7fc2a07b8b 100644 GIT binary patch literal 6449 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