今天小编分享的科学经验:国产开源大模型,首次实现代码解释,欢迎阅读。
编者按:
快速成长中的大语言模型功能日新月异。为解决复杂问题,它甚至可以调用工具," 自动 " 写代码进行编程!
近日,上海人工智能实验室(上海 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 代码解释器对问题进行求解:
用户可以基于一定的规则,从模型的回复中提取出模型对代码解释器的调用并执行代码,计算得到结果 1440.0 并返回给模型,模型在接收到计算结果后可以组织回复并告诉用户最终答案。
根据题意可知,棱台的体积为:
可见,代码解释器等外部插件能够有效弥补模型的不足,提升模型解决实际应用中复杂问题的能力。
调用开源插件,赋能复杂任务
本次书生 · 浦语开源更新,使大模型具备了调用代码解释器及搜索引擎等外部插件的能力,为大模型解决复杂任务赋能。
当前,大多数开源模型主要聚焦于对话主观体验的提升,并不具备良好的调用外部插件的能力。针对此情况,书生 · 浦语团队进行了积极研究探索,赋予了 InternLM-Chat 调用代码解释器、检索工具等外部插件的新能力。
写代码解难题
面对解方程等复杂的数学计算问题,模型仅凭自身能力难以完全做对,而有了代码解释器的加持,模型只要能写对方程式,就可调动代码解释器完成方程求解。
面对复数题,模型也能够调用 Python 代码解释器并写出正确的代码,对问题进行求解。如题目:若 ,
检索获取新知
由于大语言模型迭代周期较长,往往难以获取最新的知识,调用检索工具则可以显著地增强模型对最新知识的获取和了解,提高回答的时效性和有效性。例如,向新版大模型询问 "LK-99 真的是常温常压超导体吗 ",此时大模型会先搜索 "LK-99 常温超导体 ",并检索到三篇参考资料,在阅读这些资料内容后,给出总结回答 "LK-99 并没有被证实为常温常压超导体 "。
千亿参数模型能力再上台阶
书生 · 浦语团队还将最新研究成果运用于书生 · 浦语千亿参数版本大语言模型的能力提升中,使其实现了在复杂场景中进行多步推理和计算。目前,书生 · 浦语千亿参数版本大语言模型已拥有多知识点运用、自主反思及修正错误等能力,模型的推理能力和插件调用能力也日渐提升。
当使用该模型求解以下数学题时,模型能够准确理解向量垂直的性质并进一步列出方程解答。
同时,模型还能够理解三角函数的性质并对问题进行求解。在以下问题中,模型使用方程求解出多个答案并能够根据题意回答实数的最小值。
在调用插件的过程中,大语言模型可能无法一次性成功调用工具解决问题。此时模型的反思和修正能力就显得尤为关键。如下图所示,让千亿参数的模型统计满足题目要求的集合个数,计算指出模型并没有导入对应的模块依赖,但随后能根据报错修复代码并正确求解。
可以发现,随着模型参数量的提升,模型的推理能力和插件调用能力也得到显著提升。
开源 Lagent 框架,助力智能体研发
当大语言模型能够以 " 自主 " 思考方式调用外部工具完成复杂任务时,其可谓经进化成为智能体。
为达到此目标,除了需要提升大语言模型本身的推理和调用工具能力,还需要一套智能体框架,构建大语言模型作为智能体的思维过程,并实现对应的工具供大语言模型调用执行。
因此,书生 · 浦语团队同时开源了智能体框架,支持用户快速地将一个大语言模型转变为多种类型的智能体,并提供典型工具为大语言模型赋能。
这套开源框架具备如下特点:
集合了多种类型的智能体能力,包括 ReAct、AutoGPT 和 ReWoo 等,这些智能体能够调用大语言模型进行多轮的推理和工具调用,并在工作过程中及时进行反思和自我修正;
框架简单易拓展,支持 Python 解释器、API 调用和搜索三类常用典型工具;
灵活支持多个大语言模型应用,包括 InternLM、Llama-2 等开源模型和 GPT-4、GPT-3.5 等基于 API 的闭源模型。
为了方便社区基于 Lagent 灵活地实现和探索各种新的 Agent 及工具,Lagent 采用了一套简洁的模块设计。智能体(Agent)模块包含了动作执行器(ActionExecutor)和大语言模型(LLM),并确立了特定类型的规划和执行机制。Agent 模块接收用户输入后,LLM 进行对应的规划和决策过程,发出调用工具的指令。不同类型的工具,如 Python 解释器和搜索引擎等被分别定义为智能体的一个动作(Action),由 ActionExecutor 接收并解析调用工具的指令,完成具体的工具调用并向 LLM 返回执行结果。
目前广泛使用的开源框架 Langchain 也实现了类似的功能,能够为大语言模型提供工具扩展,但在多重抽象和封装之下,学习上手和调试相对较复杂,Lagent 采用简洁直观的设计,统一的接口并提供清晰的文档,为用户在构建不同 Agent 和工具调用流程中提供一致性的流畅体验。
研究人员用 10 行代码快速实现了一个 Agent,它能够调用代码解出数学题,并输出正确的结果。
题目: ,
在实际使用过程中,无论采用何种工具和 Agent,用户都可以通过类似的 10 行代码快速构建一个 Demo 并调试。未来,Lagent 也将继续支持各种丰富的 Agent 和工具,不断拓宽大语言模型作为智能体的能力边界,助力开源社区高效构建和研发基于大语言模型的智能体。