🧠 LangSmith 中的 @traceable
是什么?
LangSmith 提供了一个 Python 装饰器 @traceable
,它可以让你把任意函数包装为链中的一个步骤(step),并自动上传至 LangSmith 平台进行观察与调试。
它主要用于:
- 链式调用追踪(
run_type="chain"
) - 工具调用追踪(
run_type="tool"
) - LLM 调用包装(
run_type="llm"
,通常自动追踪)
🧪 示例:在 LangSmith 中追踪自定义函数
假设你有一个函数用于处理 LLM 响应,你希望它在 LangSmith 的链中出现:
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 的追踪
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 追踪时,你需要设置:
export LANGCHAIN_API_KEY=your-langsmith-api-key
export LANGCHAIN_TRACING_V2=true
或在代码中设置:
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 中调试 |