LangChain + Aim: 构建和调试人工智能系统变得简单了!

994 阅读6分钟

复杂人工智能系统的崛起

随着ChatGPT和大型语言模型(LLMs),如GPT3.5-turbo和GPT4的引入,人工智能的进展急剧上升。这些模型已经实现了大量基于人工智能的应用,将LLM的力量带到了现实世界的使用案例中。

但是,当我们将LLM与其他工具、脚本和计算源结合起来,创造出比独立模型更强大的人工智能系统时,人工智能的真正力量才会出现。

随着人工智能系统变得越来越复杂,有效调试和监控它们的能力变得至关重要。如果没有全面的跟踪和调试,对这些系统的改进、监测和理解就会变得极具挑战性。

在这篇文章中,我们将看看如何使用Aim来轻松追踪用LangChain构建的复杂人工智能系统。具体来说,我们将讨论如何:

  • 追踪链的所有输入和输出、
  • 可视化和探索单个链、
  • 并排比较几条链。

LangChain:用LLM构建AI系统

LangChain是一个库,旨在通过将LLMs与其他计算资源或知识源整合,实现强大的应用开发。它简化了创建问题回答系统、聊天机器人和智能代理等应用的过程。

它提供了一个统一的界面,用于管理和优化提示,创建调用LLM或其他实用程序(链)的序列,与外部数据源互动,做出决定和采取行动。LangChain使开发者能够通过充分利用LLM并轻松地将它们与其他工具连接起来,从而建立复杂、尖端的应用程序!

目的:提升人工智能系统的调试体验

监测和调试人工智能系统需要的不仅仅是在终端上扫描输出日志。

介绍一下Aim!

Aim是一个开源的人工智能元数据库,它可以跟踪你的人工智能系统执行的所有方面,促进深入探索、监测和可重复性。

重要的是,Aim有助于以编程方式查询所有跟踪的元数据,并为人工智能元数据配备了一个强大的UI/可观察层。

这样一来,Aim使调试、监测、比较不同的执行情况变得轻而易举。

体验一下Aim的终极控制吧!

在GitHub上查看Aim:github.com/aimhubio/aim

image.png

Aim + LangChain = 🚀

image.png 随着LangChain v0.0.127的发布,现在只需使用几行代码就可以用Aim来追踪LangChain代理和链了!你只需配置好LangChain代理和链即可!你所需要做的就是配置Aim的回调,并像往常一样运行你的执行。

Aim通过跟踪工具和LLM的输入和输出、代理的行动和链的结果,为你做剩下的工作。此外,它还跟踪CLI命令和参数、系统信息和资源使用、环境变量、git信息和终端输出。

让我们继续前进,用LangChain建立一个代理,配置Aim来跟踪执行,并快速浏览用户界面,看看Aim如何帮助调试和监控。

实践案例:构建一个多任务人工智能代理

设置代理和Aim回调
让我们建立一个配备两个工具的代理:

  • SerpApi工具,用于访问谷歌搜索结果、
  • LLM-math工具来执行所需的数学运算。

在这个特殊的例子中,我们将提示代理发现莱昂纳多-迪卡普里奥的女朋友是谁,并计算出她目前的年龄提高到0.43倍:

tools = load_tools(["serpapi", "llm-math"], llm=llm, callback_manager=manager)
agent = initialize_agent(
    tools,
    llm,
    agent="zero-shot-react-description",
    callback_manager=manager,
    verbose=True,
)
agent.run(
    "Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?"
)

进入全屏模式 退出全屏模式

现在链子已经设置好了,让我们来整合Aim回调。这只需要几行代码,Aim会在执行过程中捕捉到所有的移动部件。

from langchain.callbacks import AimCallbackHandler

aim_callback = AimCallbackHandler(
    repo=".",
    experiment_name="scenario 1: OpenAI LLM",
)

aim_callback.flush_tracker(langchain_asset=agent, reset=False, finish=True)

进入全屏模式 退出全屏模式

Aim is entirely open-source and self-hosted, which means your data remains private and isn't shared with third parties.
在LangChain的官方文档中找到完整的脚本和更多的例子:https://python.langchain.com/en/latest/ecosystem/aim_tracking.html

执行代理和运行Aim

在执行代理之前,通过执行以下命令确保Aim已经安装:

pip install aim

进入全屏模式 退出全屏模式

现在,让我们运行多个执行程序,并启动Aim用户界面来可视化和探索结果:

通过运行python example.py执行脚本,
,然后用aim up命令启动用户界面。
随着Aim的启动和运行,你可以毫不费力地深入了解每个执行的细节,比较结果,并获得有助于你调试和迭代你的链的洞察力。

通过Aim探索执行情况

主页

在主页上,你会发现所有被跟踪的执行的有组织的视图,使你很容易跟踪你的进展和最近的运行。要导航到一个特定的执行,只需点击链接,你就会被带到一个专门的页面,里面有关于该特定执行的全面信息。

image.png

深入到一个单一的执行
当导航到一个单独的执行页面时,你会发现一个系统信息和执行细节的概述。在这里你可以访问:

  • CLI命令和参数、
  • 环境变量、
  • 软件包、
  • Git信息、
  • 系统资源使用情况、
  • 以及其他关于单个执行的相关信息。

image.png

Aim在执行过程中自动捕捉终端输出。在 "日志 "选项卡中访问这些日志,可以轻松地跟踪你的人工智能系统的进展并识别问题。

image.png

在 "文本 "选项卡中,你可以探索一个链条的内部运作,包括代理行动、工具和LLMs输入和输出。这种深入的观点使你能够审查在执行的每一步收集的元数据。

image.png

利用Aim的文本浏览器,你可以毫不费力地比较多个执行,并排检查它们的行动、输入和输出。它有助于识别模式或发现差异。

image.png 例如,在给定的例子中,两次执行产生的答案是:"Camila Morrone是Leo DiCaprio的女朋友,她目前的年龄提高到0.43倍是3.8507291225496925"。然而,另一个执行的答案是 "3.991298452658078"。之所以出现这种差异,是因为前两次执行时错误地将卡米拉-莫罗内的年龄确定为23岁,而不是25岁。

有了Text Explorer,你可以很容易地比较和分析各种执行的结果,并做出决定,进一步调整代理和提示。

总结

总之,随着人工智能系统变得更加复杂和强大,对综合跟踪和调试工具的需求变得越来越重要。LangChain与Aim相结合,为构建和监控复杂的AI应用提供了强大的解决方案。通过遵循本博文中的实际例子,你可以有效地监控和调试你的基于LangChain的系统!