Langsmith的相关使用| 豆包MarsCode AI 刷题

107 阅读4分钟

随着自然语言处理技术的飞速发展,基于大型语言模型(LLMs)的应用在各个领域迅速普及。这类应用的复杂性也随之增加,从简单的对话机器人到复杂的信息检索和生成系统,开发者需要应对各种挑战,如性能调优、错误调试、响应监控等。LangSmith 作为一个强大的工具平台,为开发者提供了一站式解决方案,使他们能够高效构建和管理 LLM 应用。同时也为初学者提供了一个更加深入了解LLM应用内部构造的机会

1. LangSmith 是什么?

LangSmith 是由 LangChain 团队开发的一款工具平台,专门用于简化和优化 LLM 应用的开发过程。它的目标是帮助开发者在开发语言模型驱动的应用时更高效地进行调试、测试、监控和优化。LangSmith 提供了一系列的功能,从详细的日志记录到实时监控、性能优化,帮助开发者更好地理解和管理 LLM 系统的行为。

2. 如何使用Langsmith

2.1 注册等准备工作

通过Langsmith官网来进行注册以及获取api key(免费的但有限制,具体可以看LangSmith Pricing)

然后就是在自己的代码上设置相关的environment

import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "" # 填你自己的
os.environ["LANGCHAIN_PROJECT"] = "my_project" # 随便取个名字

3. 实例

这里拿官网的agent tutorial改了一下:

# Import relevant functionality
from langchain_openai import ChatOpenAI 
from langchain_core.messages import HumanMessage
from langgraph.checkpoint.memory import MemorySaver
from langgraph.prebuilt import create_react_agent
import langchain 
# decide the mode as you want
langchain.debug = True
# langchain.verbose = True

import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "" # 填你自己的
os.environ["SERPAPI_API_KEY"] = ""
os.environ["OPENAI_API_KEY"] = ''
os.environ["LANGCHAIN_PROJECT"] = "my_project" # 随便取个名字

# Create the agent
memory = MemorySaver()
model = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
# search = TavilySearchResults(max_results=2)
from langchain_community.agent_toolkits.load_tools import load_tools
tools = load_tools(["serpapi"])
agent_executor = create_react_agent(model, tools, checkpointer=memory)

config = {"configurable": {"thread_id": "abc123"}}

# while True:
    # message = input("Enter a message: ")
for message in ["hi im bob! and i live in sf", "whats the weather where I live?", "exit"]:
    if message == "exit":
        break
    response = agent_executor.execute(
        {"messages": [HumanMessage(content=message)]}, config
    )
    print(response)

下面是终端里面debug模式下的截图(这里我的langchain版本是0.3.8,langchain-core是0.3.21),对于初学者来说还是有点不太友好(感觉更多的是Langchain更改使用了LangGraph的结果):

image.png 但是Langsmith界面的就好多了:

image.png

这样我们就可以详细直观地了解到每个步骤LLM所读取到的信息是怎样的以及LLM实际上是怎么调用工具的 下面是我对上图中流程中的一个了解:

  1. agent: 这里指每一次调用agent的循环;
  2. call_model: 这里包含了构建prompt+调用模型api;
  3. StateModifier: 这个牵扯到了LangGraph的相关概念(作者本人还并不是很了解这一部分,具体的可以通过LangGraph的相关文档了解🚀 LangGraph Quick Start), 但通俗点来讲就是将memory中的message插入到prompt中让LLM看到(这里是基于我对于老一点的版本的理解)
  4. should_continue: 通过LLM 的回复来判断是否应该终止;
  5. tools这里封装了一个search tool并负责了对LLM的工具调用进行解析,输入工具并运行,将输出构建成message插入到memory中

image.png 6. 回到第一步进行循环。

3. 总结

(1)调试和跟踪

LangSmith 提供了详细的日志记录功能,允许开发者跟踪每一次模型调用的输入和输出。通过查看这些日志,开发者可以了解模型在不同情况下的行为,找到潜在的错误和优化空间。此外,LangSmith 支持在调试过程中进行“断点”检查,便于深入分析模型的决策过程。这对于复杂的对话系统或多步骤的推理任务尤为重要。

(2)playground

为了优化 LLM 的性能和准确性,LangSmith 提供了playground。开发者可以在不同的配置、提示词(Prompt)或数据集上进行测试,比较模型在不同设置下的表现。通过这些实验,开发者能够快速找到最佳的参数配置,提高应用的效果。

(3)实时监控和性能分析

LangSmith 允许开发者实时监控 LLM 的性能,包括响应时间、准确性和成本等关键指标。这些监控数据可以帮助开发者及时发现问题并进行调整,例如缩短响应时间、降低推理成本等。此外,LangSmith 的性能分析工具还可以帮助识别系统的瓶颈,为进一步优化提供数据支持。

随着 LLM 技术的不断发展,像 LangSmith 这样的工具将变得越来越重要。它不仅为开发者提供了强大的调试和优化功能,还为整个行业树立了新的标准。未来,随着更多功能的加入,LangSmith 有望成为 LLM 应用开发者的首选工具,为推动语言模型技术的发展做出更大的贡献。