国产开源大模型,首次实现代码解释

编者按

快速成长中的大语言模型功能日新月异。为解决复杂问题,它甚至可以调用工具,“自动”写代码进行编程!

近日,上海人工智能实验室(上海AI实验室)推出书生·浦语大语言模型的升级版对话模型InternLM-Chat-7B v1.1(以下简称“InternLM-Chat”)。InternLM-Chat为首个具有代码解释能力的开源对话模型,能够根据需要灵活调用Python解释器等外部工具,在解决复杂数学计算等任务上的能力显著提升;此外,该模型还可通过搜索引擎获取实时信息,提供具有时效性的回答。

与此同时,上海AI实验室还发布了开源智能体框架Lagent以辅助用户体验新模型的完整功能。通过Lagent,用户可便捷实现由大语言模型到智能体的转换,从而轻松实现模型的插件调用功能并探索新的智能体范式。

开源链接:
书生·浦语开源体系InternLM:https://github.com/InternLM
InternLM-Chat:https://github.com/InternLM/InternLM
Lagent:https://github.com/InternLM/lagent
OpenCompass:https://opencompass.org.cn/
LMDeploy:https://github.com/InternLM/lmdeploy

在今年7月举行的WAIC 2023上,上海人工智能实验室(上海AI实验室)正式开源了书生·浦语大模型70亿参数的轻量级版本InternLM-7B,并推出首个面向大模型研发与应用的全链条开源体系,同时提供免费商用,受到了学术和产业界的广泛关注。开放评测平台OpenCompass的评测结果显示,书生·浦语在数十项评测中体现出强大的知识体系与推理能力。

随着大模型的发展,大模型在实际场景落地中的价值越来越受到关注。单靠大语言模型的聊天能力无法满足例如报告分析、电子商务、数理问题求解等具体场景下的任务需求。为使大模型能够执行复杂任务,OpenAI于今年7月9日向用户正式开放了Code Interpreter,使得ChatGPT和GPT-4可以根据用户问题来编写和执行代码,从而拓展了模型在数据分析、复杂计算与功能调用方面的能力。

在InternLM-7B基础上,上海AI实验室面向实用需求,正式开源了书生·浦语具有代码解释能力的对话模型版本,填补了开源社区中模型代码解释能力的空白,进一步助力大模型能力构建与应用探索。

大语言模型为什么需要代码解释器

大语言模型虽然在对话能力上表现出色,但是在数学计算等复杂场景下,依然具有一定的局限性,例如,模型虽然可以完成小数字的基本运算,但是难以进行大数运算。此时,如果有代码解释器或者计算器等工具进行辅助,就能够比较方便地解决这类问题。

例如,用户可以让模型求解如下题目:

题目:已知水库水位为海拔148.5m,相应水面的面积为140.0km2;水位为海拔157.5m时,相应水面的面积为180.0km2。将该水库在这两个水位间的形状看作一个棱台,则该水库水位从海拔148.5m上升到157.5m时,增加的水量约为?

在没有代码解释器的情况下,模型的回复是:

由题意知,水库的体积增加了     

可以发现,模型虽然知道计算公式,但却无法正确计算出结果。但是,如果模型具有调用代码解释器的能力,就可以产生如下内容,调用 Python代码解释器对问题进行求解:

c9acfee497146088b206ffabadf9732b.png

用户可以基于一定的规则,从模型的回复中提取出模型对代码解释器的调用并执行代码,计算得到结果 1440.0并返回给模型,模型在接收到计算结果后可以组织回复并告诉用户最终答案。

根据题意可知,棱台的体积为:

8f0df422ca4057cf0b2eacadc8d9abbb.png

可见,代码解释器等外部插件能够有效弥补模型的不足,提升模型解决实际应用中复杂问题的能力。

调用开源插件,赋能复杂任务

本次书生·浦语开源升级,使大模型具备了调用代码解释器及搜索引擎等外部插件的能力,为大模型解决复杂任务赋能。

当前,大多数开源模型主要聚焦于对话主观体验的提升,并不具备良好的调用外部插件的能力。针对此情况,书生·浦语团队进行了积极研究探索,赋予了InternLM-Chat调用代码解释器、检索工具等外部插件的新能力。

写代码解难题

面对解方程等复杂的数学计算问题,模型仅凭自身能力难以完全做对,而有了代码解释器的加持,模型只要能写对方程式,就可调动代码解释器完成方程求解。

124a8daed762cd3d2ac64c6fb3342963.png

面对复数题,模型也能够调用 Python 代码解释器并写出正确的代码,对问题进行求解。如题目:若  ,  

56ade7845ecbf405ca17d3e5966ec59c.png

检索获取新知

由于大语言模型迭代周期较长,往往难以获取最新的知识,调用检索工具则可以显著地增强模型对最新知识的获取和了解,提高回答的时效性和有效性。例如,向新版大模型询问“LK-99 真的是常温常压超导体吗”,此时大模型会先搜索“LK-99 常温超导体”,并检索到三篇参考资料,在阅读这些资料内容后,给出总结回答“LK-99 并没有被证实为常温常压超导体”。

e3554896494f4b0c875ca931d35c6628.png

千亿参数模型能力再上台阶

书生·浦语团队还将最新研究成果运用于书生·浦语千亿参数版本大语言模型的能力提升中,使其实现了在复杂场景中进行多步推理和计算。目前,书生·浦语千亿参数版本大语言模型已拥有多知识点运用、自主反思及修正错误等能力,模型的推理能力和插件调用能力也日渐提升。

当使用该模型求解以下数学题时,模型能够准确理解向量垂直的性质并进一步列出方程解答。

bb43af7bd0d59e5ef7b50991195f9090.png

同时,模型还能够理解三角函数的性质并对问题进行求解。在以下问题中,模型使用方程求解出多个答案并能够根据题意回答实数的最小值。

c51216b9f749da605f90b75f8f2a26fb.png

在调用插件的过程中,大语言模型可能无法一次性成功调用工具解决问题。此时模型的反思和修正能力就显得尤为关键。如下图所示,让千亿参数的模型统计满足题目要求的集合个数,计算指出模型并没有导入对应的模块依赖,但随后能根据报错修复代码并正确求解。

4c058ca62d9852509c556c8633727de5.png

可以发现,随着模型参数量的提升,模型的推理能力和插件调用能力也得到显著提升。

开源Lagent框架,助力智能体研发

当大语言模型能够以“自主”思考方式调用外部工具完成复杂任务时,其可谓经进化成为智能体。

为达到此目标,除了需要提升大语言模型本身的推理和调用工具能力,还需要一套智能体框架,构建大语言模型作为智能体的思维过程,并实现对应的工具供大语言模型调用执行。

因此,书生·浦语团队同时开源了智能体框架,支持用户快速地将一个大语言模型转变为多种类型的智能体,并提供典型工具为大语言模型赋能。

这套开源框架具备如下特点:

  1. 集合了多种类型的智能体能力,包括ReAct、AutoGPT 和 ReWoo 等,这些智能体能够调用大语言模型进行多轮的推理和工具调用,并在工作过程中及时进行反思和自我修正;

  2. 框架简单易拓展,支持Python解释器、API调用和搜索三类常用典型工具;

  3. 灵活支持多个大语言模型应用,包括InternLM、Llama-2等开源模型和GPT-4、GPT-3.5等基于API的闭源模型。

为了方便社区基于Lagent灵活地实现和探索各种新的Agent及工具,Lagent采用了一套简洁的模块设计。智能体(Agent)模块包含了动作执行器(ActionExecutor)和大语言模型(LLM),并确立了特定类型的规划和执行机制。Agent模块接收用户输入后,LLM进行对应的规划和决策过程,发出调用工具的指令。不同类型的工具,如 Python解释器和搜索引擎等被分别定义为智能体的一个动作(Action),由 ActionExecutor接收并解析调用工具的指令,完成具体的工具调用并向LLM返回执行结果。

e9282e508e370d1e15d43ac54257b901.png

目前广泛使用的开源框架Langchain也实现了类似的功能,能够为大语言模型提供工具扩展,但在多重抽象和封装之下,学习上手和调试相对较复杂,Lagent采用简洁直观的设计,统一的接口并提供清晰的文档,为用户在构建不同Agent和工具调用流程中提供一致性的流畅体验。

研究人员用10行代码快速实现了一个Agent,它能够调用代码解出数学题,并输出正确的结果。

题目:  ,  

5acac817841c3d4e579a405dd464e1ca.png

在实际使用过程中,无论采用何种工具和Agent,用户都可以通过类似的10行代码快速构建一个Demo并调试。未来,Lagent也将继续支持各种丰富的Agent和工具,不断拓宽大语言模型作为智能体的能力边界,助力开源社区高效构建和研发基于大语言模型的智能体。

猜你喜欢

转载自blog.csdn.net/QbitAI/article/details/132439687