如何让开源大模型支持ChatGPT的Code Interpreter能力:基于LangChain的开源项目Code Interpreter API
ChatGPT的Code Interpreter插件让ChatGPT突破了大语言模型本身只能做文本处理的限制,使其可以通过生成并执行Python代码来实现强大的数据分析、图片生成、视频数据处理等操作,大大拓展了ChatGPT的实用范围和价值。在此前的文章中,我们已经分析了Code Interpreter插件的官方实现(参考:ChatGPT官方代码解释器插件Code-Interpreter大揭秘:Code-Interpreter背后都有什么(执行环境、硬件资源、包含的Python库等)? )。而今天,LangChain的官方博客也推出了一种类似的开源方案,让开源模型也可以实现ChatGPT的Code Interperter插件。我们简要描述一下这个方案。

Code Interpreter API简介
Code Interpreter API是由shroominic实现的一个类似ChatGPT Code Interpreter插件的开源项目。该项目基于LangChain实现。它使用CodeBoxes作为后端进行沙盒化的Python代码执行。
相比较原始的Code Interpreter插件,这个开源项目的最大特点是支持网络访问。这在分析一些最新数据或者实时数据中非常有用。例如,假设你想让大模型画出2023年XX股票的走势图。在ChatGPT的官方插件下,你只能先上传数据然后让Code Interpreter进行分析。而在这个开源项目下,你可以直接对大模型提问:画出XX在2023年的走势图,那么它会让模型先去网络搜索数据,然后画出这个图,是不是更加方便?
简单总结一下这个项目的特点:
功能丰富:项目支持数据集分析,股票图表绘制,图像操作等功能。并且支持互联网访问和自动Python包安装。
交互性强:可以接收文本和文件作为输入,然后返回文本和文件。同时,它具有会话记忆功能,可以根据之前的输入进行响应。
本地运行:除了OpenAI API(或者可能很快的OpenOrca或其他),所有的东西都可以在本地运行。
易于扩展:项目计划使用CodeBox API进行生产环境的易扩展性(即将推出)。
开源协议友好:这个项目使用MIT许可证,没有商用限制。
Code Interpreter API的技术实现
Code Interperter API项目底层利用了LangChain的Agent工具,帮助大模型使用Code Interpreter。这里面的核心部分有2个:LangChain的最新的OpenAIFunctionsAgent和Python代码执行器。
OpenAIFunctionsAgent是由LangChain提供的可以让大模型调用函数和工具的代理类。
作者对这个类做了一点改造使其可以支持代码的执行工具。作者同时提供了一个名为CodeBoxAPI的类来代替LangChain自带的Python REPL。原因是LangChain自带的Python REPL是无法做文件的读写并且每次执行之后都会丢失定义的变量!
当启动一个代码解释器会话时,Code Interpreter会在你的设备上创建一个小型的Jupyter内核,类似于Jupyter笔记本的工作方式。CodeBox就是代理可以运行代码并接收其输出的底层Python执行环境。代理可以访问并使用它来满足用户的请求。
Code Interpreter API代码实例和演示结果
作者举了两个例子,一个是提问画出2023年的bitcoin图:
from codeinterpreterapi import CodeInterpreterSession
async def main():
# create a session
session = CodeInterpreterSession()
await session.astart()
# generate a response based on user input
output = await session.generate_response(
"Plot the bitcoin chart of 2023 YTD"
)
# ouput the response (text + image)
print("AI: ", response.content)
for file in response.files:
file.show_image()
# terminate the session
await session.astop()
if __name__ == "__main__":
import asyncio
# run the async function
asyncio.run(main())
结果回答很准确:

第二个是对Iris数据集分析。
from codeinterpreterapi import CodeInterpreterSession, File
async def main():
# context manager for auto start/stop of the session
async with CodeInterpreterSession() as session:
# define the user request
user_request = "Analyze this dataset and plot something interesting about it."
files = [
File.from_path("examples/assets/iris.csv"),
]
# generate the response
response = await session.generate_response(
user_request, files=files
)
# output to the user
print("AI: ", response.content)
for file in response.files:
file.show_image()
if __name__ == "__main__":
import asyncio
asyncio.run(main())
结果如下:

Code Interpreter API的总结(现有问题和未来规划)
目前Code Interpreter API项目只支持使用OpenAI的ChatGPT接口实现,这是目前最大的限制,但也是很多人梦寐以求的功能。没有API接口的人觉得这是个限制,有API接口的人认为终于可以通过接口调用Code Intepreter插件了。Code Interpreter API相比较目前其它的开源大模型Code实现,最大的特点有如下几个:
互联网访问权限:与OpenAI的现有代码解释器相比,这个开源版本具有互联网访问权限。例如,当询问“绘制2023年的比特币图表”时,代理会使用雅虎财经下载实时数据,然后将其以图像形式展示给用户。
可以自己的硬件:如果你想做一些需要运行多模态数据处理的事情(如stable diffusion),你需要有一个可以运行模型的专用GPU。在OpenAI的云环境中,这是不可能的。但是,基于这个项目可以结合OpenAI的ChatGPT和本地的模型一起处理。
聊天记忆功能:很多开源实现对于记忆处理不是很好,包括LangChain的官方Python REPL在每次运行后都会丢失变量。
自动Python包安装:如果缺少某个包,代理会尝试再次安装,这个是官方插件做不到的。
从目前的描述看,这是一个非常值得关注的项目,它不仅可以完成Code Interpreter插件的本地化,在未来显然也可以接入其它模型。目前,作者透露的未来规划如下:
- 使CodeBox适用于生产环境:目前,每个用户都需要一个小型的沙盒执行环境,这使得使用这个API在生产环境中部署变得具有挑战性,未来会继续发展CodeBox,让它可以更加容易使用。
- 使用其他LLMs(如ClaudeV2或Open Orca)使其可用:作者已经确定未来会集成其它模型,最终可以让大家在本地运行!
Code Interpreter API项目地址:https://github.com/shroominic/codeinterpreter-api
欢迎大家关注DataLearner官方微信,接受最新的AI技术推送
