编者按:这是我们客座博客文章的又一篇,重点介绍了有趣和新颖的用例。这篇博客由 Shroominic 撰写,他构建了 ChatGPT 代码解释器的开源实现。
重要链接
在开源软件的世界中,总是有令人兴奋的进展。今天,我很高兴地宣布我一直在进行的一个新项目 - 代码解释器 API。它是使用 LangChain Agents 实现的 ChatGPT 代码解释器的实现。请记住,这是一个非官方的实现,我与 OpenAI 无关。
动机
作为一个独立开发者,我一直在寻找可以添加到我的项目中的新功能。在开发一个 Discord 机器人时,我尝试将代码解释器作为一个功能整合进去。在那时我从未尝试过它,但看到人们在 YouTube 上使用它就感到很兴奋。它最初只是一个实验,但经过一些调整,它演变成一个功能性且不断改进的功能。我注意到在这个领域有很大的兴趣,并发现市场上的一个空白 - 没有针对此功能的 API,尤其不是开源的。
独特的功能和优势
相对于 OpenAI 已经存在的代码解释器,这个开源版本最大的优势是它可以访问互联网。例如,当询问“绘制 2023 年的比特币图表”时,代理会使用 Yahoo Finance 下载有关当前情况的实时数据,然后将其作为图像图表显示给用户。另一个优势是你可以使用自己的硬件。例如,如果你想做一些包括运行 Stable Diffusion 的事情,你需要有一个可以运行模型的专用 GPU。这在你从 OpenAI 获得的云环境中是不可能的。其他功能包括聊天记忆,因此你可以提出后续问题,以及自动 Python 包安装(当缺失时),以便代理可以再次尝试。
技术细节
该项目的核心是一个 LangChain Agent,特别是新的 OpenAIFunctionsAgent,它具有调用函数/工具的优势,可以更好地处理用户需求。对于代码解释器,我们需要让它访问 Python 解释器,以便它可以执行 Python 代码。这个解释器被表示为一个工具,以便 Agent 可以调用该工具并使用 Python 来满足用户的需求。
例如,如果用户要求绘制一个正弦波并将其显示为图像,则代理会编写 Python 代码并将其输入到 Python 解释器中,解释器运行代码,输出图像,然后可以将此图像显示给用户。此外,Agent 可以对结果进行评论,并解释发生了什么或提供有关输出的更多详细信息。
让 LangChain Agents 访问代码执行环境并非易事。已经有 Python REPL,但这不允许 FileIO,并且在每次运行后也会忘记变量。所以我不得不为此编写我的解决方案:CodeBoxAPI。
当启动代码解释器会话时,它会在你的设备上创建一个小型 Jupyter 内核,类似于 Jupyter 笔记本的工作方式。CodeBox 是底层的 Python 执行环境,代理可以在其中运行代码并接收其输出。这是一个小型个人计算机,代理可以访问它,并可以用它来服务用户的请求。
示例

AI:这是显示 2023 年科技巨头(苹果、谷歌、微软、亚马逊)相对表现的归一化图表。该图表已归一化,因此每只股票的起点为 100,这便于比较每只股票价格在一段时间内的百分比变化。

另一个例子
提示:“选择代表不同行业(科技、医疗保健、非必需消费品等)的代表性 ETF。绘制它们在过去两个经济周期中的表现。分析不同行业在经济周期的不同阶段如何表现。”
回应
AI:上面的图表显示了代表科技、医疗保健和非必需消费品行业的选定 ETF 在过去两个经济周期(2000-2002 年的互联网泡沫和 2007-2009 年的金融危机)期间的表现。
正如我们所见,所有行业在这些时期都受到了负面影响,价值大幅下降。然而,这些下降的程度和时间在不同行业之间有所不同。
为了更详细的分析,我们可以查看这些行业在经济周期的不同阶段(例如,衰退前、衰退期间和衰退后)的表现。然而,这将需要更复杂的分析,并且可能超出本次讨论的范围。
请注意,此分析相当简化,并未考虑许多可能影响这些行业在不同经济周期中表现的因素。为了进行更准确和详细的分析,你可能需要考虑咨询财务顾问或进行更深入的研究。

路线图
下一步是使 CodeBox 达到生产就绪状态,使开发人员能够创建公共应用程序,因为它允许轻松扩展。目前,每个用户都需要一个小型沙盒执行环境,这使得使用此 API 部署到生产环境具有挑战性。计划还包括使其可用于其他 LLM,如 ClaudeV2 或 Open Orca。随着时间的推移,用户可能能够在他们的家用 PC 上 100% 本地和离线运行此 API。
如何使用它
安装非常简单:在此处获取你的 OpenAI API 密钥here,并使用 pip 安装软件包。你可以在你的 Python 代码中使用 API:启动会话,根据用户输入生成响应 - 停止你的会话。你可以在项目的 GitHub README 中找到详细说明。
贡献
如果你有兴趣为代码解释器 API 做出贡献,有很多机会。查看我在 Issues 中标记为 ToDo 的一些问题。但你也可以处理你的想法,然后提交 PR。谢谢!
进行实验
如果你还没有查看过该存储库,我强烈建议你这样做,并尝试你的提示!尝试很多不同的东西,以了解什么是可能的,什么是不可能的。如果你遇到任何错误,请将它们发布为 GitHub Issues,我将尽力修复它们。
这是我的第一篇博文,感谢你的阅读,我希望你玩得开心!如果你想获得更新,请随时查看我的 Twitter @shroominic。