使用 LangSmith 加速 LangChain 开发与调试
什么是 LangSmith
LangSmith 是一个用于构建生产级 LLM(大语言模型)应用程序的平台。它允许开发者调试、测试、评估和监控基于任何 LLM 框架构建的链(Chains)和智能代理(Agents),并无缝集成 LangChain——这是目前构建 LLM 应用的首选开源框架。
LangSmith 由 LangChain 公司开发,旨在解决 LLM 应用开发中的黑盒问题。虽然其目标宏大且仍处于快速迭代阶段,但目前最实用的功能集中在调试和跟踪 LangChain 应用上。这一项价值已无可估量,能大大缩减学习 LangChain 的时间,提高开发效率。
用 LangChain 完成大语言模型的应用原型或代理很简单,但要交付实际的大语言应用异常困难:往往需要大量定制、迭代 Prompt、链和其他组件。LangSmith 可以帮助开发者快速调试链、代理或工具集,可视化各种组件(如链、LLM、检索器 Retriever 等)如何交互及使用,并评估不同的 Prompt 效果。
注册与设置
1. 注册账号
访问 LangSmith 官网进行注册。支持通过 Discord、GitHub、Google 账号登录,也可以使用邮箱注册。平台目前可能需要邀请码才能注册,具体以官方最新政策为准。
2. 生成 API Key
登录后进入控制台,找到 API Keys 管理页面。点击生成新的 Key,请务必在生成时复制保存,一旦丢失只能重新生成。
3. 配置环境变量
为了启用 LangSmith 的自动追踪功能,需要在运行代码的环境中设置特定的环境变量。这完全无需修改业务代码,具有非侵入性。
Linux / macOS 环境:
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
export LANGCHAIN_API_KEY="<your-api-key>"
export LANGCHAIN_PROJECT="langchain_for_llm_application_development"
Windows 环境:
setx LANGCHAIN_TRACING_V2 true
setx LANGCHAIN_ENDPOINT "https://api.smith.langchain.com"
setx LANGCHAIN_API_KEY <your-api-key>
setx LANGCHAIN_PROJECT langchain_for_llm_application_development
变量说明:
LANGCHAIN_TRACING_V2:控制是否开启日志追踪模式,必须设为 true。
LANGCHAIN_PROJECT:指定要跟踪的项目名称。如果平台上不存在该项目,会自动创建。若不设置,信息将写入默认的 default 项目。项目名称不必与实际项目一一对应,可理解为分类标签,可按开发/生产环境或日期区分。
LANGCHAIN_API_KEY:即上面生成的 API Key。
实战示例:RouterChain 调试
下面展示一个 RouterChain 的使用案例,该示例展示了如何通过路由链分发不同类型的用户请求。
import warnings
warnings.filterwarnings('ignore')
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
from langchain_openai import AzureChatOpenAI
llm = AzureChatOpenAI(deployment_name="GPT-4", temperature=0)
flower_care_template = """
你是一个经验丰富的园丁,擅长解答关于养花育花的问题。
下面是需要你来回答的问题:
{input}
"""
flower_deco_template = """
你是一位网红插花大师,擅长解答关于鲜花装饰的问题。
下面是需要你来回答的问题:
{input}
"""
prompt_infos = [
{
"key": "flower_care",
"description": "适合回答关于鲜花护理的问题",
"template": flower_care_template,
},
{
"key": "flower_decoration",
"description": "适合回答关于鲜花装饰的问题",
"template": flower_deco_template,
}
]
from langchain.chains.llm import LLMChain
from langchain.prompts import PromptTemplate
chain_map = {}
for info in prompt_infos:
prompt = PromptTemplate(
template=info['template'],
input_variables=["input"]
)
chain = LLMChain(
llm=llm,
prompt=prompt,
verbose=True
)
chain_map[info["key"]] = chain
from langchain.chains.router.llm_router import LLMRouterChain, RouterOutputParser
from langchain.chains.router.multi_prompt_prompt import MULTI_PROMPT_ROUTER_TEMPLATE as RounterTemplate
destinations = [f"{p['key']}: {p['description']}" for p in prompt_infos]
router_template = RounterTemplate.format(destinations="\n".join(destinations))
router_prompt = PromptTemplate(
template=router_template,
input_variables=["input"],
output_parser=RouterOutputParser(),
)
router_chain = LLMRouterChain.from_llm(
llm,
router_prompt,
verbose=True
)
from langchain.chains import ConversationChain
default_chain = ConversationChain(
llm=llm,
output_key="text",
verbose=True
)
from langchain.chains.router import MultiPromptChain
chain = MultiPromptChain(
router_chain=router_chain,
destination_chains=chain_map,
default_chain=default_chain,
verbose=True
)
print(chain.run("如何为玫瑰浇水?"))
虽然代码逻辑清晰,但在复杂链路中,手动排查问题依然困难。结合 LangSmith 可以直观看到内部调用细节。
核心功能详解
1. 查看运行情况 (Tracing)
运行上述程序后,打开 LangSmith 控制台,找到最近一次的运行记录。界面会展示 LangChain 组件的调用顺序,类似于微服务架构中的 Zipkin 链路追踪。
通过 Trace 视图,你可以看到:
- 调用顺序:每个 Chain、Tool 或 Agent 的执行步骤。
- 耗时分析:每一步耗费的时间,帮助定位性能瓶颈。
- Token 消耗:调用 OpenAI 或其他 LLM 消耗的 Token 数量,便于成本估算。
- 输入输出:每一步的 Input 和 Output 详情。
这对于排查'出乎意料的最终结果'、'代理为何一直在循环'、'链为何比预期慢'等问题至关重要。
2. Playground 交互式调试
面向 LLM 编程,很多时候是在迭代 Prompt。LangSmith 集成了 Playground 功能,可以直接修改 Prompt 参数并观察输出变化。
- 在 Trace 详情页点击右上角的 Playground。
- 系统会自动填充当前调用的 LLM 参数和 Prompt 模板。
- 你可以直接修改 Prompt 文本或温度(Temperature)等参数,重新运行。
- 执行过程会被记录到名为'playground'的项目下,方便对比不同 Prompt 的效果。
这种方式极大地降低了 Prompt 工程的试错成本。
3. 数据集与评估 (Datasets & Evaluation)
在查看运行情况的界面,点击右上角的'Add to Dataset',可以将对应的输入、输出添加到数据集中。
- 构建测试集:收集典型的用户问答对,形成基准数据集。
- 回归测试:当调整模型或 Prompt 后,使用数据集批量测试,确保新方案没有破坏原有功能。
- 指标评估:LangSmith 支持自定义评估指标,可以量化评估 LLM 输出的质量(如相关性、安全性等)。
4. Hub 社区协作
LangSmith 内置了 Hub 功能,类似于 Prompt 版本的 GitHub。
- 发现与分享:用户可以发布自己的 Prompt 模板供他人使用。
- 版本控制:对 Prompt 进行 Fork、试运行和版本管理。
- 复用能力:可以直接引用社区分享的优质 Prompt,加速开发进程。
最佳实践与注意事项
1. 成本控制
由于 LLM 调用按 Token 计费,建议在开发阶段充分利用 LangSmith 的 Token 统计功能。对于高频调用的场景,可以通过缓存机制减少重复请求,并在 LangSmith 中监控 Token 增长趋势。
2. 数据安全
在生产环境中,注意不要将敏感数据(如用户隐私、API Key)直接传入 LLM。LangSmith 提供了数据脱敏选项,可以在上传日志前自动过滤敏感字段。
3. 版本兼容性
LangChain 更新频繁,部分旧版导入路径可能在新版本中失效。例如 langchain.chat_models 在新版中可能迁移至 langchain_openai。建议定期检查依赖库文档,保持代码与框架版本兼容。
4. 项目隔离
利用 LANGCHAIN_PROJECT 环境变量区分不同环境(开发、测试、生产)。避免将生产环境的日志混入开发环境,导致数据污染或误操作。
总结
LangSmith 是 LangChain 生态中不可或缺的工具,它将 LLM 应用的调试从'猜谜游戏'转变为可视化的工程流程。通过 Trace 追踪、Playground 迭代、Dataset 评估等功能,开发者可以更高效地构建可靠的 AI 应用。尽管平台仍在快速迭代中,但掌握其核心用法能显著提升开发效率和产品质量。
随着 LangChain 框架本身的成熟,LangSmith 也将持续进化。建议开发者尽早接入,积累调试经验,共同推动 LLM 应用工程化能力的提升。