LangChainJS项目实战:使用LangSmith进行LLM应用评估与优化

LangChainJS项目实战:使用LangSmith进行LLM应用评估与优化

langchainjs langchainjs 项目地址: https://gitcode.com/gh_mirrors/lan/langchainjs

引言

在构建基于大语言模型(LLM)的应用时,开发者常常面临一个关键挑战:如何确保应用在生产环境中的表现符合预期?LangChainJS作为流行的LLM应用开发框架,虽然简化了原型开发过程,但要将应用真正推向生产环境,还需要解决调试、评估和持续优化等问题。这正是LangSmith平台的价值所在。

LangSmith核心功能概述

LangSmith是专为LLM应用设计的全生命周期管理平台,主要提供以下核心能力:

  1. 实时调试:可视化追踪LLM应用的完整执行流程
  2. 数据集管理:创建和管理用于评估和优化的数据集
  3. 回归测试:确保应用迭代过程中性能不会退化
  4. 生产分析:收集运行时数据用于产品洞察

环境准备与配置

1. 获取LangSmith访问权限

首先需要获取LangSmith平台的访问权限和API密钥。由于平台目前处于封闭测试阶段,可能需要申请才能获得访问资格。

2. 安装必要依赖

npm install @langchain/openai @langchain/community langsmith uuid

3. 配置环境变量

import { v4 as uuidv4 } from "uuid";
const uniqueId = uuidv4().slice(0, 8);

// 启用LangSmith追踪
process.env.LANGCHAIN_TRACING_V2 = "true";
process.env.LANGCHAIN_PROJECT = `JS Tracing Walkthrough - ${uniqueId}`;
process.env.LANGCHAIN_ENDPOINT = "https://api.smith.langchain.com";
process.env.LANGCHAIN_API_KEY = "<YOUR-API-KEY>";

// 配置LLM和工具API密钥
process.env.OPENAI_API_KEY = "<YOUR-OPENAI-API-KEY>";
process.env.TAVILY_API_KEY = "<YOUR-TAVILY-API-KEY>";

构建并追踪LLM应用

1. 创建LangSmith客户端

import { Client } from "langsmith";
const client = new Client();

2. 构建函数调用代理

以下示例创建一个基于OpenAI函数调用功能的代理,并集成Tavily搜索工具:

import { AgentExecutor, createOpenAIFunctionsAgent } from "langchain/agents";
import { pull } from "langchain/hub";
import { TavilySearchResults } from "@langchain/community/tools/tavily_search";
import { ChatOpenAI } from "@langchain/openai";
import type { ChatPromptTemplate } from "@langchain/core/prompts";

const tools = [new TavilySearchResults()];

// 从Hub获取预定义提示模板
const prompt = await pull<ChatPromptTemplate>("hwchase17/openai-functions-agent");

const llm = new ChatOpenAI({
  modelName: "gpt-3.5-turbo-1106",
  temperature: 0,
});

const agent = await createOpenAIFunctionsAgent({
  llm,
  tools,
  prompt,
});

const agentExecutor = new AgentExecutor({
  agent,
  tools,
});

3. 批量执行并追踪

const inputs = [
  { input: "What is LangChain?" },
  { input: "What's LangSmith?" },
  // 更多输入...
];

const results = await agentExecutor.batch(inputs);

执行后,所有运行轨迹会自动记录到LangSmith平台,可以在项目页面查看详细执行流程。

评估与优化LLM应用

1. 创建评估数据集

const referenceOutputs = [
  { output: "LangChain is an open-source framework..." },
  // 更多参考输出...
];

const datasetName = `lcjs-qa-${uniqueId}`;
const dataset = await client.createDataset(datasetName);

await Promise.all(
  inputs.map(async (input, i) => {
    await client.createExample(input, referenceOutputs[i], {
      datasetId: dataset.id,
    });
  })
);

2. 配置评估指标

LangSmith支持多种评估方式,包括内置评估器和自定义评估逻辑:

import type { RunEvalType, DynamicRunEvaluatorParams } from "langchain/smith";

// 自定义评估器示例:检查输出是否包含不确定表述
const notUnsure = async (params: DynamicRunEvaluatorParams) => {
  if (typeof params.prediction?.output !== "string") {
    throw new Error("Invalid prediction format");
  }
  return {
    key: "not_unsure",
    score: !params.prediction.output.includes("not sure"),
  };
};

const evaluators: RunEvalType[] = [
  // 内置评估器:正确性
  LabeledCriteria("correctness"),
  
  // 内置评估器:简洁性
  Criteria("conciseness", {
    formatEvaluatorInputs: (run) => ({
      input: run.rawInput.question,
      prediction: run.rawPrediction.output,
      reference: run.rawReferenceOutput.answer,
    }),
  }),
  
  // 自定义评估器
  notUnsure,
];

3. 执行基准测试

import { runOnDataset } from "langchain/smith";

await runOnDataset(agentExecutor, datasetName, {
  evaluators,
  projectName: "Name of the evaluation run",
});

测试完成后,可以在LangSmith界面查看详细的评估结果,包括每个指标的得分情况。

评估结果分析

评估完成后,开发者可以获得以下关键信息:

  1. 执行轨迹可视化:查看每个测试用例的完整执行流程
  2. 指标得分统计:各评估维度的总体表现
  3. 问题定位:识别表现不佳的具体环节
  4. 对比分析:不同版本间的性能比较

最佳实践建议

  1. 迭代优化:基于评估结果持续改进提示词和链结构
  2. 版本控制:为重要变更创建基准测试
  3. 监控生产:将评估流程集成到CI/CD管道
  4. 数据驱动:定期扩充和更新评估数据集

总结

通过LangSmith平台,LangChainJS开发者可以实现:

  • 端到端的LLM应用调试能力
  • 标准化的评估流程
  • 数据驱动的持续优化
  • 生产环境的性能监控

这套工具链显著降低了LLM应用的开发门槛,使开发者能够更专注于业务逻辑的实现,而不必重复构建基础设施。

langchainjs langchainjs 项目地址: https://gitcode.com/gh_mirrors/lan/langchainjs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

符凡言Elvis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值