🧠 LangSmith 中的 @traceable 是什么?
LangSmith 提供了一个 Python 装饰器 @traceable,它可以让你把任意函数包装为链中的一个步骤(step),并自动上传至 LangSmith 平台进行观察与调试。
它主要用于:
- 链式调用追踪 (
run_type="chain") - 工具调用追踪 (
run_type="tool") - LLM 调用包装 (
run_type="llm",通常自动追踪)
🧪 示例:在 LangSmith 中追踪自定义函数
假设你有一个函数用于处理 LLM 响应,你希望它在 LangSmith 的链中出现:
python
from langsmith.utils import traceable
@traceable(run_type="chain", name="llm_response")
def process_llm_response(prompt: str) -> str:
# 模拟某种处理
return prompt.upper() # 示例:全部大写
你可以把这个函数嵌入到 LangChain Agent 或其他链中,并在 LangSmith 平台看到它的调用轨迹。
✅ 参数说明
-
run_type: 指定这是哪种类型的运行,可选:"chain":代表它是一个链的一部分(推荐用于子任务封装)"tool":用于工具函数"llm":用于底层模型调用(通常不需要手动添加)
-
name: 你想在 LangSmith UI 中显示的名称,方便识别
📊 效果展示
当你运行使用 @traceable 装饰的函数时,LangSmith 会自动上传运行数据,并在可视化页面显示:
- 每一步的输入 / 输出
- 执行时间
- 调用层级关系(支持嵌套)
- 错误日志(如抛出异常)
🛠 示例:组合使用 LangChain 和 LangSmith 的追踪
python
from langsmith.utils import traceable
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI()
@traceable(run_type="chain", name="summarize_paragraph")
def summarize(text: str) -> str:
prompt = f"Please summarize this text:\n\n{text}"
return llm.predict(prompt)
运行时,你会在 LangSmith 的 UI 中看到 summarize_paragraph 作为一个独立的链步骤,并且嵌套显示其中的 LLM 调用。
🔒 要求:使用前需要设置环境变量
使用 LangSmith 追踪时,你需要设置:
bash
export LANGCHAIN_API_KEY=your-langsmith-api-key
export LANGCHAIN_TRACING_V2=true
或在代码中设置:
python
import os
os.environ["LANGCHAIN_API_KEY"] = "your-key"
os.environ["LANGCHAIN_TRACING_V2"] = "true"
🎯 总结
| 参数 | 说明 |
|---|---|
@traceable |
LangSmith 提供的装饰器 |
run_type="chain" |
声明为链步骤 |
name="llm_response" |
给这个步骤命名 |
| 效果 | 追踪函数调用,记录输入输出、耗时等信息,方便在 LangSmith UI 中调试 |