准备接入 Studio 的标准项目目录应当采用如下结构:
my_agent_project/├── .env#1. 环境变量配置(密钥)├── langgraph.json#2. Studio 核心配置文件(导航图)└── agent.py#3. 你的图逻辑代码(引擎)
.env 文件)使用 Studio 时,强烈建议单独存放密钥,以便 Studio 启动后自动读取。
在项目根目录创建一个名称为 .env 的文本文件,并写入你的配置:
# .env 文件内容DEEPSEEK_API_KEY=sk-da217ba... (你的真实密钥)# LangSmith 追踪配置 (强烈建议开启,Studio 严重依赖它)LANGSMITH_TRACING=trueLANGSMITH_API_KEY=lsv2_pt_... (你的真实密钥)
(在 Python 代码里,可以把 os.environ["..."] = "..." 那些硬编码删掉了。)
langgraph.json)这是启动 Studio 最核心的配置文件。它告诉 Studio 该去哪里加载代码、加载哪些依赖。(强烈建议就取名为Langgraph.json,大小写无所谓。这样LangStudio就会自动识别到)
在项目根目录中创建 langgraph.json,然后复制以下标准模板:
{"dependencies": ["."],"graphs": {"math_agent": "./agent.py:agent"},"env": ".env"}
深入解析配置项:
"dependencies": ["."]:项目运行依赖的位置是当前目录,Studio 会由此获知。"graphs":它是核心配置,可以将其理解成一个注册表。"math_agent":图显示在 Studio 左上角下拉菜单时所用的UI 名称(可由你任意命名,比如 DeepSeek_Calculator)。"./agent.py:agent":物理路径通过此处建立映射。Python 文件相对路径位于冒号前面,你代码中的内容则位于冒号后面 builder.compile() 被赋值的那个变量名称。"env": ".env":第一步配置的密钥文件,应由 Studio 按此项指定的位置读取。agent.py)为了让 Studio 接管可视化和时光倒流功能,你的代码在导出给 Studio 使用时,必须是“裸编译”的。
请确认你的 agent.py 文件底部采用以下配置:
# ... 前面的 Nodes 和 Edges 逻辑保持不变 ...builder = StateGraph(MessagesState)builder.add_node("llm_node", llm_node)# ... 其他连线 ...# 【关键配置】:不要加 checkpointer=MemorySaver()agent = builder.compile() # 上面这个叫 "agent" 的变量,必须和 langgraph.json 里冒号后面的名字完全一致!
1. 启动服务在项目根目录打开终端(进入到当前项目的父目录),输入:
langgraph dev
参考示例如下:输入cd graph_api
2. 进入界面在终端打印出的图案下方,找到 Studio UI 的链接:https://smith.langchain.com/studio/?baseUrl=http://127.0.0.1:2024
按住 Ctrl (或 Cmd) 后点击它,浏览器便会自动打开。
打开 Studio 后,可以看到整个界面大致由左侧、中间和右侧三个核心工作区构成:
MemorySaver 实现的记忆会在此处变得直观。每新建一个 Thread,都相当于开启一个全新且干净的对话上下文。右侧的 Graph 标签页应先行查看,此时对话尚未开始。
llm_node 是否通过一条条件边指向 tool_node,tool_node 以及是否再次指回 llm_node)。MessagesState)。{"messages": [{"role": "user", "content": "3乘以5等于多少?"}]}START 节点开始闪烁,数据随后流入 llm_node,之后由条件边触发并跳转到 tool_node,最终再次回到 llm_node 并输出最终结果。遇到大模型胡言乱语或工具发生报错时,应当如何处理?
print() 相比,其效率要高出一万倍。因为它是带着 [inmem] 启动的,所以这个 Studio 会持续监听本地文件。当你在 Python 代码中修改某个节点的逻辑或新增一条连线后,只需按下 Ctrl+S 浏览器中的 Graph 拓扑图,会在保存操作完成后自动瞬间刷新