接入即配置环境变量。LangSmith 的 Python/JS SDK 不要求你在代码里写死任何配置——它在进程启动时读取一组以
LANGSMITH_开头的环境变量来决定「要不要上报、报给谁、报到哪个项目、报到哪个区域」。把配置当成环境的一部分,而不是代码的一部分,是后面 CI、多环境、自托管能平滑切换的根本原因。
第一步:注册账号并创建 API Key
- 打开
https://smith.langchain.com,用邮箱或 GitHub / Google 账号注册并登录。个人开发者有免费额度,足够跑通本教程。 - 登录后,点击左下角头像 →
Settings(设置),进入设置页。 - 在左侧菜单选择
API Keys,点击Create API Key(创建 API Key)。 - 选择 key 类型:
Personal Access Token(个人令牌,跟随你的账号权限,适合本地开发)或Service Key(服务密钥,不绑定个人、适合 CI / 生产)。本教程本地开发用 Personal Access Token 即可。 - 复制生成的 key(形如
lsv2_pt_xxxxxxxxxxxxxxxx_yyyyyyyyyy)。这个值只在创建时显示一次,关闭弹窗后无法再次查看,请立即妥善保存。 - 顺便记下你账号所在的区域:默认美区入口是
smith.langchain.com,欧区入口是eu.smith.langchain.com。区域决定了后面LANGSMITH_ENDPOINT要不要改。
第二步:安装 SDK
LangSmith 的客户端是独立的 langsmith 包,不依赖 LangChain,可以单独使用(比如你用裸 OpenAI SDK 也能上报)。如果你的应用本来就用 LangChain,再额外装 langchain,它内置了与 LangSmith 的自动集成。
# 必装:LangSmith 官方 Python SDK(含 Client、@traceable、evaluate 等)
pip install -U langsmith
# 可选:如果你的应用使用 LangChain,装它即可获得零代码自动 tracing
# langchain-core 已被 langchain 作为依赖带入;按需再装具体模型集成包
pip install -U langchain langchain-openai
# 验证安装版本(建议 langsmith >= 0.2)
python -c "import langsmith; print(langsmith.__version__)"
第三步:理解关键环境变量
| 环境变量 | 作用 | 默认值 / 何时必填 | 示例值 |
|---|---|---|---|
| LANGSMITH_TRACING | 上报总开关,设为 true 才会把 trace 发往 LangSmith | 不设 = 关闭。想上报就必填 true | true |
| LANGSMITH_API_KEY | 身份凭证,标识 trace 归属哪个账号 / workspace | 开启 tracing 时必填 | lsv2_pt_xxx... |
| LANGSMITH_PROJECT | trace 落入的项目名,便于按业务分组 | 不设则进名为 default 的项目 | my-chatbot-dev |
| LANGSMITH_ENDPOINT | API 上报地址,决定美区 / 欧区 / 自托管 | 默认美区 https://api.smith.langchain.com | https://eu.api.smith.langchain.com |
口诀开关(TRACING) · 身份(API_KEY) · 分组(PROJECT) · 区域(ENDPOINT)
写法 A:.env 文件(推荐本地开发)
# 文件名:.env (放在项目根目录,并加入 .gitignore,切勿提交)
# 上报总开关:必须为 true 才会发送 trace
LANGSMITH_TRACING=true
# 身份凭证:第一步在 Settings → API Keys 创建的值
LANGSMITH_API_KEY=lsv2_pt_xxxxxxxxxxxxxxxx_yyyyyyyyyy
# 可选:trace 归入的项目名,不设则进 default
LANGSMITH_PROJECT=my-chatbot-dev
# 可选:区域 / 自托管 endpoint,美区可省略
# 欧区:https://eu.api.smith.langchain.com
# 自托管:填你自己的地址
LANGSMITH_ENDPOINT=https://api.smith.langchain.com
# 若用 langchain-openai 跑示例,再加上模型厂商的 key
OPENAI_API_KEY=sk-xxxxxxxx
# 加载 .env:需要 python-dotenv
# pip install python-dotenv
from dotenv import load_dotenv
# load_dotenv 会把 .env 里的键值读进 os.environ
# 默认不覆盖已存在的同名变量;override=True 可强制覆盖
load_dotenv(override=False)
import os
# 加载后即可在代码里读取,确认变量已就位
print("tracing =", os.environ.get("LANGSMITH_TRACING"))
print("project =", os.environ.get("LANGSMITH_PROJECT"))
print("endpoint =", os.environ.get("LANGSMITH_ENDPOINT"))
# 注意:API key 不要直接 print 到日志,这里只示意它存在与否
print("api_key set =", bool(os.environ.get("LANGSMITH_API_KEY")))
写法 B:os.environ 显式设置(适合脚本 / Notebook)
import os
import getpass
# 关键点:这些 os.environ 赋值必须在 import langsmith / langchain 之前执行,
# 因为 SDK 在首次构建 Client 时读取这些变量。
os.environ["LANGSMITH_TRACING"] = "true"
os.environ["LANGSMITH_PROJECT"] = "my-chatbot-dev"
# 美区可省略 endpoint;欧区 / 自托管按需设置
os.environ["LANGSMITH_ENDPOINT"] = "https://api.smith.langchain.com"
# 用 getpass 交互式输入,避免把明文 key 写进源码 / 笔记本
if not os.environ.get("LANGSMITH_API_KEY"):
os.environ["LANGSMITH_API_KEY"] = getpass.getpass("Enter LANGSMITH_API_KEY: ")
✓推荐做法
- 本地开发用 .env + python-dotenv,把 .env 写进 .gitignore
- CI / 生产用平台的 secret 机制注入 LANGSMITH_API_KEY,用 service key 而非个人令牌
- 在 import langsmith / langchain 之前完成环境变量设置
- 按环境区分 LANGSMITH_PROJECT(如 my-app-dev / my-app-prod),避免数据串台
✗不推荐
- 不要把 lsv2_ 开头的 key 硬编码进源码或提交进 git
- 不要既设 LANGCHAIN_API_KEY 又设 LANGSMITH_API_KEY 且取值不一致
- 欧区 / 自托管不要漏设 LANGSMITH_ENDPOINT 还指望能看到数据
- 不要把 LANGSMITH_TRACING 设成 1 或 yes——SDK 认的是字符串 true
⚠常见误区
- endpoint 写成网页地址 eu.smith.langchain.com(缺 api. 子域)导致上报失败
- 在 Notebook 里先 import 了 langchain 再改 os.environ,旧配置已被缓存
- key 复制时带上了首尾空格 / 换行,认证报 401
运行下面的验证脚本无异常,并能在 LangSmith 网页对应项目里看到一条新 trace,即视为配置完成。
第四步:最小连通性验证
配完别急着写业务代码,先用两个层次确认连通:层次一用 Client 直接打 API,验证 key 与 endpoint 有效;层次二用 @traceable 跑一次函数调用,验证 trace 真的能上报并出现在网页项目里。
"""最小连通性验证脚本:python verify_langsmith.py
前置:已 pip install -U langsmith,且环境变量已就位(写法 A 或 B 二选一)。
"""
import os
from langsmith import Client, traceable
# ---------- 层次一:验证 API key / endpoint 是否有效 ----------
# Client 会自动从环境变量读取 api_key 与 endpoint
client = Client()
# client.info 返回服务端实例信息,能成功拿到说明认证与网络都通
info = client.info
print("[OK] 已连上 LangSmith,服务端版本:", getattr(info, "version", info))
# ---------- 层次二:验证 trace 能真正上报 ----------
# @traceable 把任意函数变成一个被追踪的 Run,自动记录输入 / 输出 / 耗时
@traceable(run_type="chain", name="verify-hello")
def hello(name: str) -> str:
return f"hello, {name}"
result = hello("langsmith")
print("[OK] 函数返回:", result)
# 打印当前项目,方便你去网页对应项目里找这条 trace
print("[OK] trace 已上报到项目:",
os.environ.get("LANGSMITH_PROJECT", "default"))
print("=> 打开 smith.langchain.com,进入该项目应能看到一条 verify-hello 记录")
"""可选:验证 LangChain 零代码自动接入
前置:pip install -U langchain langchain-openai,并已设置 OPENAI_API_KEY。
只要 LANGSMITH_TRACING=true,下面这段不写任何 LangSmith 代码也会自动上报 trace。
"""
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "You are a concise assistant."),
("human", "{question}"),
])
model = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# LCEL 管道:prompt | model。调用时 LangChain 检测到 tracing 开启,
# 会自动把这次链路(含 prompt 渲染 + 模型调用)作为一棵 trace 上报。
chain = prompt | model
resp = chain.invoke({"question": "用一句话解释什么是可观测性"})
print(resp.content)
# 回到 LangSmith 网页项目,可看到一条带 ChatPromptTemplate -> ChatOpenAI 的 trace
脚本跑通但网页看不到 trace
- 典型表现
- verify 脚本无报错,但 LangSmith 项目里空空如也
- 判断标准
- 网页对应项目能看到 verify-hello 记录
- 解决方向
- 确认 LANGSMITH_TRACING 严格等于字符串 true;确认看的是 LANGSMITH_PROJECT 指定的那个项目(不是 default);trace 上报是异步的,等几秒并刷新页面。
认证报 401 / Unauthorized
- 典型表现
- client.info 抛认证错误
- 判断标准
- client.info 正常返回服务端信息
- 解决方向
- 检查 LANGSMITH_API_KEY 是否复制完整、首尾无空格换行;确认 key 未被删除;欧区 / 自托管账号要把 LANGSMITH_ENDPOINT 指向对应区域,key 与 endpoint 区域必须匹配。
Notebook 改了环境变量却不生效
- 典型表现
- 在 cell 里改 os.environ 后 trace 仍按旧配置走
- 判断标准
- 新配置在重启后生效
- 解决方向
- SDK 在首次构建 Client 时缓存配置。改完环境变量后重启 kernel,或确保 os.environ 赋值在所有 import langsmith / langchain 之前执行。
连接超时 / DNS 解析失败
- 典型表现
- 请求 endpoint 长时间挂起后超时
- 判断标准
- client.info 在数秒内返回
- 解决方向
- 检查 LANGSMITH_ENDPOINT 拼写(欧区是 eu.api.smith.langchain.com,含 api. 子域);公司网络需走代理时设置 HTTPS_PROXY;自托管要确认服务地址可达。