使用 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')
# 加载本地环境变量
dotenv load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
langchain_openai AzureChatOpenAI
llm = AzureChatOpenAI(deployment_name=, temperature=)
flower_care_template =
flower_deco_template =
prompt_infos = [
{
: ,
: ,
: flower_care_template,
},
{
: ,
: ,
: flower_deco_template,
}
]
langchain.chains.llm LLMChain
langchain.prompts PromptTemplate
chain_map = {}
info prompt_infos:
prompt = PromptTemplate(
template=info[],
input_variables=[]
)
chain = LLMChain(
llm=llm,
prompt=prompt,
verbose=
)
chain_map[info[]] = chain
langchain.chains.router.llm_router LLMRouterChain, RouterOutputParser
langchain.chains.router.multi_prompt_prompt MULTI_PROMPT_ROUTER_TEMPLATE RounterTemplate
destinations = [ p prompt_infos]
router_template = RounterTemplate.(destinations=.join(destinations))
router_prompt = PromptTemplate(
template=router_template,
input_variables=[],
output_parser=RouterOutputParser(),
)
router_chain = LLMRouterChain.from_llm(
llm,
router_prompt,
verbose=
)
langchain.chains ConversationChain
default_chain = ConversationChain(
llm=llm,
output_key=,
verbose=
)
langchain.chains.router MultiPromptChain
chain = MultiPromptChain(
router_chain=router_chain,
destination_chains=chain_map,
default_chain=default_chain,
verbose=
)
(chain.run())


