LangChain 实验跟踪集成指南:面向 ML 研究员
引言
实验跟踪是机器学习研究和大模型应用开发的关键环节。本文将详细介绍 LangChain 支持的实验跟踪工具,帮助你更好地管理和分析模型调用过程。
一、主流实验跟踪工具对比
| 工具/平台 | 核心功能 | 免费额度 | 是否需要 API Key | 官方地址 |
|---|---|---|---|---|
| Weights & Biases | 实验跟踪、可视化、协作 | 免费个人版 | 是 | https://wandb.ai |
| LangSmith | LLM 调试、评估、跟踪 | 免费试用 | 是 | https://smith.langchain.com |
| MLflow | 实验管理、模型管理 | 完全开源免费 | 否(自托管) | https://mlflow.org |
| Arize AI | 模型监控、评估 | 有免费层 | 是 | https://arize.com |
| Evidently AI | 模型评估、监控 | 有免费层 | 否(本地/可选云) | https://evidentlyai.com |
| PromptLayer | Prompt 管理、跟踪 | 免费 1000 次/月 | 是 | https://promptlayer.com |
二、LangSmith(LangChain 官方工具)
2.1 简介
LangSmith 是 LangChain 官方推出的 LLM 应用调试和跟踪平台,与 LangChain 无缝集成。
获取 API Key:
- 访问 https://smith.langchain.com 注册
- 创建项目并获取 API Key
配置环境变量:
setx LANGCHAIN_TRACING_V2 true
setx LANGCHAIN_API_KEY "xxxxxxxxxxxxxxxxxxxxxxxx"
setx LANGCHAIN_PROJECT "your-project-name"
2.2 基本使用
python
import os
from langchain_openai import ChatOpenAI
from langsmith import traceable
# 启用 LangSmith 跟踪
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-api-key"
os.environ["LANGCHAIN_PROJECT"] = "weather-agent"
# 普通调用会自动被跟踪
llm = ChatOpenAI(
base_url="http://localhost:11434/v1/",
api_key="ollama",
model="qwen3.5:4b"
)
response = llm.invoke("你好,请介绍自己")
print(response.content)
# 所有调用都会自动记录到 LangSmith Dashboard
2.3 使用装饰器自定义跟踪
python
import os
from langchain_openai import ChatOpenAI
from langsmith import traceable
from langchain_core.tools import tool
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-api-key"
@traceable
def get_weather(city: str) -> str:
"""查询天气(模拟)"""
# 这里可以是真实的天气 API 调用
return f"{city} 天气晴,温度 25°C"
@traceable(run_type="llm")
def ask_ai(question: str) -> str:
"""调用 AI 回答问题"""
llm = ChatOpenAI(
base_url="http://localhost:11434/v1/",
api_key="ollama",
model="qwen3.5:4b"
)
return llm.invoke(question).content
# 使用
answer = ask_ai("解释一下 RAG 技术")
print(answer)
# 所有调用链会被 LangSmith 自动跟踪
三、Weights & Biases (W&B)
3.1 简介
W&B 是业界流行的机器学习实验跟踪平台,支持 LLM 应用的监控和可视化。
获取 API Key:
- 访问 https://wandb.ai 注册
- 在 Settings 页面获取 API Key
安装和配置:
pip install wandb
wandb login # 输入 API Key
3.2 基本使用
python
import wandb
from langchain_openai import ChatOpenAI
from langchain_core.callbacks import BaseCallbackHandler
# 初始化 W&B 实验
wandb.init(
project="llm-experiments",
name="experiment-1",
config={
"model": "qwen3.5:4b",
"temperature": 0.7
}
)
# 定义自定义回调
class WandBTracker(BaseCallbackHandler):
def on_llm_end(self, response, **kwargs):
# 记录 LLM 响应
wandb.log({
"response": response.generations[0][0].text,
"token_usage": response.llm_output.get("token_usage", {})
})
# 使用
llm = ChatOpenAI(
base_url="http://localhost:11434/v1/",
api_key="ollama",
model="qwen3.5:4b",
callbacks=[WandBTracker()]
)
result = llm.invoke("什么是大模型?")
print(result.content)
# 记录实验指标
wandb.log({"response_length": len(result.content)})
wandb.finish()
四、MLflow(开源方案,完全免费)
4.1 简介
MLflow 是一个开源的机器学习生命周期管理平台,完全免费,可本地部署。
安装:
pip install mlflow
4.2 基本使用
python
import mlflow
from langchain_openai import ChatOpenAI
# 启动 MLflow UI(命令行):
# mlflow ui
# 设置实验
mlflow.set_experiment("LLM Agent Experiments")
# 开始一次运行
with mlflow.start_run(run_name="qwen3.5-test"):
# 记录参数
mlflow.log_param("model", "qwen3.5:4b")
mlflow.log_param("temperature", 0.7)
# 调用模型
llm = ChatOpenAI(
base_url="http://localhost:11434/v1/",
api_key="ollama",
model="qwen3.5:4b",
temperature=0.7
)
test_prompts = [
"你好",
"什么是 RAG?",
"如何使用 LangChain?"
]
for i, prompt in enumerate(test_prompts):
response = llm.invoke(prompt)
print(f"Q{i+1}: {prompt}")
print(f"A{i+1}: {response.content[:100]}...\n")
# 记录每次调用
mlflow.log_metric(f"response_length_{i}", len(response.content))
mlflow.log_text(response.content, f"response_{i}.txt")
print("实验完成!可在 MLflow UI 查看结果")
# 查看结果:浏览器访问 http://localhost:5000
五、PromptLayer(Prompt 管理工具)
5.1 简介
PromptLayer 专注于 Prompt 管理和 LLM 调用跟踪,有免费额度。
获取 API Key:
- 访问 https://promptlayer.com 注册
- 获取 API Key
配置环境变量:
setx PROMPTLAYER_API_KEY "xxxxxxxxxxxxxxxxxxxxxxxx"
代码示例:
python
import os
from langchain_openai import ChatOpenAI
# 使用 PromptLayer 包装的 LLM
llm = ChatOpenAI(
base_url="http://localhost:11434/v1/",
api_key="ollama",
model="qwen3.5:4b",
pl_tags=["experiment", "weather-agent"] # 自定义标签
)
# 所有调用会自动记录到 PromptLayer
response = llm.invoke("查询天气的方法")
print(response.content)
六、实战:完整的实验跟踪系统
python
import os
import mlflow
import wandb
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langsmith import traceable
# === 配置 ===
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-langsmith-key"
# === 定义工具 ===
@tool
@traceable
def get_weather(city: str) -> str:
"""查询指定城市的天气信息"""
return f"{city} 天气:晴,25°C,湿度 50%"
# === 实验配置 ===
EXPERIMENT_CONFIG = {
"model": "qwen3.5:4b",
"temperature": 0.7,
"tools": ["get_weather"],
"max_iterations": 5
}
# === 初始化 MLflow ===
mlflow.set_experiment("Weather Agent Experiments")
with mlflow.start_run(run_name="weather-agent-v1"):
# 记录配置
mlflow.log_params(EXPERIMENT_CONFIG)
# 初始化 LLM
llm = ChatOpenAI(
base_url="http://localhost:11434/v1/",
api_key="ollama",
model=EXPERIMENT_CONFIG["model"],
temperature=EXPERIMENT_CONFIG["temperature"]
)
# 创建智能体
tools = [get_weather]
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个天气助手,可以查询天气信息。"),
("user", "{input}"),
("placeholder", "{agent_scratchpad}")
])
agent = create_tool_calling_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 测试用例
test_cases = [
"北京今天天气怎么样?",
"上海的温度是多少?",
"广州下雨吗?"
]
# 运行实验
for i, test_case in enumerate(test_cases):
print(f"\n=== 测试用例 {i+1}: {test_case} ===")
result = executor.invoke({"input": test_case})
output = result["output"]
print(f"回答: {output[:200]}...")
# 记录到 MLflow
mlflow.log_metric(f"response_length_{i}", len(output))
mlflow.log_text(output, f"response_{i}.txt")
print("\n=== 实验完成! ===")
print("LangSmith: https://smith.langchain.com")
print("MLflow UI: http://localhost:5000")
七、快速选择指南
| 场景 | 推荐方案 | 是否免费 | 特点 |
|---|---|---|---|
| LangChain 原生集成 | LangSmith | 有免费层 | 官方工具,深度集成 |
| 完全开源自托管 | MLflow | 免费 | 功能全面,本地部署 |
| 机器学习研究 | Weights & Biases | 有免费层 | 可视化强,协作友好 |
| Prompt 优化 | PromptLayer | 有免费层 | 专注 Prompt 管理 |
| 模型监控 | Arize AI | 有免费层 | 生产级监控工具 |
八、常见问题
Q: 是否有完全免费的实验跟踪方案?
A: 是的,MLflow 完全开源免费,可本地部署使用。
Q: LangSmith 和 W&B 哪个更好?
A: LangSmith 对 LangChain 集成更紧密,W&B 在传统 ML 领域更强。根据你的使用场景选择。
Q: 如何在团队中共享实验结果?
A: LangSmith 和 W&B 都提供团队协作功能,支持实验结果的共享和评论。
Q: 是否支持本地部署?
A: MLflow 完全支持本地部署。LangSmith 和 W&B 提供企业版私有部署选项。
LangChain 的实验跟踪工具让模型评估和优化变得简单:
- 官方支持:LangSmith 与 LangChain 无缝集成
- 开源方案:MLflow 完全免费,可本地部署
- 专业工具:W&B、Arize 提供企业级功能
- 灵活选择:根据需求在不同工具间切换
- 可视化分析:所有工具提供直观的 Dashboard
推荐入门路径:先用 LangSmith 快速上手,需要更深度的分析时再接入 MLflow 或 W&B。