Redian新闻
>
语言接口:探索大模型优先架构的新一代 API 设计

语言接口:探索大模型优先架构的新一代 API 设计

科技

过去的两三个月里,在开发基于大语言模型的软件时,也一直在思考如何设计一个大模型优先架构。而随着越来越多的团队加入到这场竞赛里,我们会发现:基于大语言模型的软件架构与过去的不同之处,诸如于:我们需要新一代的 API。

我暂时将这一代 API 称为:语言接口/语言 API(大概会有大佬来发起新的名称),原因是:自然语言只是人机的接口,DSL 是 AI 与机器的接口、机器与机器的接口。

所以,在这篇文章里,我将继续总结一些内外部看到的经验,以及构建 ArchGuard Co-mate 架构时的一些思考。

模式:自然语言即 DSL

意图:使用自然语言作为领域特定语言(DSL)来描述系统的需求和期望,通过正则表达式等工具从自然语言中提取关键信息,以指导系统的设计和开发。

适用场景:以自然语言作为沟通媒介

示例:在我们习惯了大模型的能力之后,也开始接受了自然语言作为一种 API。与我们一般熟悉的 API 相比,自然语言作为 API 应该称为 DSL(Domain-Specific Language,领域特定语言)。

举一个简单的例子,诸如于我们前面提到的用户故事,其标准形式是: 作为一个<用户角色>, 我想要<完成活动>, 以便于<实现价值> 。随后,我们就可以对其运行特殊处理(诸如于高亮):

  1. **作为一个**购买商品的用户,**我希望**能够退货,**以便于**在不满意或商品存在问题的情况下获得处理。

随后,我们可以让 LLM(大语言模型) 生成正则表达式,以校验返回结果是否符合要求:

  • 用户角色: 购买了商品的用户

  • 完成活动: 退货

  • 实现价值: 在不满意或商品存在问题的情况下获得处理

并作为下一代的输入,如将一句话的需求,编写成更详细的 AC(Acceptance Criteria,验收条件)。这种方式可以使用自然语言来描述系统需求,从而提高开发效率和准确性。

模式:实时文本流 DSL

意图:通过逐步、流式的方式返回结果,提高大语言模型的用户体验。

适用场景:当需要大量处理数据的任务时,一次性返回所有结果会非常耗时,影响用户体验。此时可以采用流式返回结果的方式,即模型逐步返回结果,让用户可以及时查看部分结果。

示例:在需要大语言模型返回复杂的结果时,如果我们期待它一次性返回所有的结果时,它总是非常的缓慢。在这时,采用传统的 JSON、Yaml 等格式,必然非常缓慢的,对于用户的体验非常差 —— 一个返回结果平均要几十秒。而除了在模型侧提升性能、本地减少请求,还可以构建能处理流式返回的 DSL。

这也是为什么我们觉得传统的 JSON 无法满足的原因,在返回正常的结果前可能解析失败,并且你返回的 JSON 可能不是完整的。

在这时,我们需要服务端支持处理 streaming response,并需要前端来处理。如在商业画布的场景下,就可以根据不同的一级 LIST 处理结果,并实时呈现给用户:

  1. - 客户细分

  2. - 目标市场:企业客户

  3. - 客户类别:中小型企业,初创企业,创业公司,大型企业

  4. - 客户需求:专业技术服务,包括但不限于IT咨询,软件开发,网络安全,数据分析等

  5. - 价值主张

  6. ...

除此,根据不同的场景,我们可以返回不同的格式,如 markdown 表格、CSV、JSONP 等也能作为返回格式。

模式:DSL 引导的功能生成

意图:使用DSL和LLM结合的方式,以生成具有更好逻辑性和准确性的文本。

适用场景:适用于需要根据规范和约束生成具有逻辑性和准确性的大量文本的各种场景,例如软件开发、自然语言处理、数据分析和教育培训等领域。

示例:如我们所知,大模型(LLM)在生成文本时随机性太高,充满大量的不确定性。而由于,LLM 具备很好的逻辑推理能力,因此我们结合了 DSL 与 LLM 的强项,让它来编排 DSL 中的功能。

所以,在 Co-mate 里,我们设计了一套 DSL,以让 LLM 根据不同的场景填空和编写 DSL,如根据基础的规范来生成 DSL:

  1. foundation {

  2. layered {

  3. layer("application") {

  4. pattern(".*\\.application") { name shouldBe endWiths("DTO", "Request", "Response") }

  5. }

  6. ...

  7. dependency {

  8. "application" dependedOn "domain"

  9. ...

  10. }

  11. }

  12. }

在这里的 layered 是指系统的分层架构,layer 则是分层的定义,dependency 则定义分层间的依赖关系。最后,交由我们的系统来处理这个 DSL。

DSL 引导的功能生成是一种结合了领域特定语言(DSL)和大模型语言模型(LLM)的文本生成模式,通过 DSL 提供的规范和约束,以增强 LLM 生成文本的逻辑性和准确性。

模式:语言显式化重试

意图:提高大语言模型生成结果的准确性,并保持历史消息,以便进行对话记录和可视化。

适用场景:由于大语言模型的不确定性,生成的结果往往不够准确。此时可以采用显式化重试的方式,通过告知模型结果错误并让其重新生成,从而提高结果准确性。

示例:众所周知,由 LLM 生成的有确定性要求的结果,总会出现一定的错误。诸如于,我在使用 ChatGPT 生成 PlantUML 时,只有 80% 的结果是可正确编译的。通常来说,在这种时候会有多种不同的方式可以实现:

  • 重新发送请求,以 GPT 再次生成。

  • 告知 GPT 错了,让他重新生成。

从结果来看,两种模式的差异并不大。不过,第二种方式需要保持历史消息,所以会多消耗几个 token。

尽管从实践来看,第一种方式更为简单,但是方式二提供了一种更显式化的设计。

模式:动态代理调用

意图:支持动态代理调用其他服务的API或函数,并根据用户的输入进行匹配和响应。

适用场景:需要动态处理用户输入并调用相应功能的系统,以及需要将自然语言与函数或服务进行匹配和转换的系统。它为开发人员提供了一种灵活和可扩展的方式来处理不同的输入,并根据需求调用相应的API或函数。

示例 1:LangChain Agents 采用的便是类似的机制,它负责动态代理调用其他服务的API,比如精确计算、实际的业务数据 API 等。由内部提供的一系列问题模板来构建这个过程:

  1. ...

  2. Question: the input question you must answer

  3. Thought: you should always think about what to do

  4. Action: the action to take, should be one of [{tool_names}]

  5. ...

示例 2:OpenAI 提供的 Function calling,可以检测何时需要调用函数(取决于用户的输入)并使用符合函数签名(signature)的 JSON 进行响应。这样一来,开发人员更可靠地从模型中获取结构化数据。诸如于官方示例里的: send_email(to: string, body: string),便是可以直接由用户的输入转换过来的。而在自然语言与函数之前,我们需要设计一个的方式来进行匹配。

示例 3:在 ArchGuard Co-mate 中,我们也构建了类似的方式,其缘由是架构治理是一个复杂的问题,我们确定用户的输入并不一定在系统之中。因此,我们希望提供两种方式:

  1. 反射 + 抽象的方式可调用的函数,来匹配用户的输入。

  2. 提供关键的模型信息, 让 LLM 进行分析。

所以,我们设计的是 DynamicContext 的方式,以及对应的 DyFunction 来实现这种方式的支持。

模式:本地函数动态代理

意图:旨在结合本地运行的 NLP 工具对用户输入的文本进行分析,并根据分析结果动态匹配对应的函数进行调用。

适用场景:根据用户输入的文本内容动态匹配并调用相应函数的系统,通过本地文本分析工具结合语义分析实现准确的函数匹配。它提供了灵活和可扩展的方式来处理不同的文本输入,并自动选择适当的函数进行处理。

示例:在 Co-mate 中,我们在本地引入了 SentenceTransformer 来处理用户的输入,优在本地分析、匹配用户的输入,并处理。当匹配到结果后直接调用本地的函数,当匹配不到结果时调用远端的处理函数来处理。

小结

由 ChatGPT 总结什么是语言 API:

语言 API 是一种使用自然语言作为领域特定语言(DSL)或与系统进行交互的接口。它通过解析、处理和分析自然语言,以指导系统的设计、开发和执行。它的设计目的是提高开发效率、准确性和用户体验,使开发人员能够使用自然语言描述系统需求、执行任务并获取系统生成的结果。

由 Notion 总结本文:

本文介绍了五种模式,包括实时文本流 DSL、DSL 引导的功能生成、语言显式化重试、动态代理调用和本地函数动态代理,以提高大语言模型的用户体验和准确性。这些模式适用于不同的场景,如需要大量处理数据的任务、需要生成具有逻辑性和准确性的大量文本的各种场景、需要动态处理用户输入并调用相应功能的系统、需要将自然语言与函数或服务进行匹配和转换的系统等。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
讲座预告 | 软件工程学院博学论坛第十五期:自然语言处理与大型语言模型的挑战与探索破局之作:首部开源 AIGC 软件工程应用电子书《构筑大语言模型应用:应用开发与架构设计》谈谈后端架构的演进房市和房事有鸡毛关系Magic of Ordinary Days一娃兩人三餐四季日子平凡如斯生活美好如斯總結的太好了!喜歡!《如梦令 - 春顾》爱奇艺客户端 “白嫖” 电视机;Twitter劲敌注册量破三千万;基于NT架构的全新QQ Windows版发布 | 周热点中文医学大模型“本草”(原名华驼):医学知识增强在中文大型语言模型指令微调上的初步探索ArchGuard Co-mate:一次关于大语言模型与架构治理、架构设计的探索基于NT架构的全新QQ Windows版正式发布ICLR 2023 | Edgeformers: 基于Transformer架构的表征学习框架基于双层Markov DRL架构的分布式星群激光组网算法聊一聊升级Zen4架构的机革新机直面业务出海难题:强合规架构、数据合规、多云架构的实践经验|QCon广州构建可持续架构的三大秘籍百度华为阿里等入选大模型“国家队”;盘古大模型3.0发布;阿里云推AI绘画大模型丨AIGC大事日报GPT-4被破解,训练成本,模型架构的秘密都被挖出来了?LVMH有意收购雅诗兰黛;盒马发起预制菜生态联盟;京东推动大模型优化;兴盛优选进军团店业务;北京谊品生鲜所剩无几|联商头条“多”维演进:智能化编码架构的研究与实践全文 | 广东数字政府2.0:探索公共数据资产化管理,探索建立“数据海关”,完善数据交易监管机制汽车电子、第三代半导体、新一代高速接口……最新芯片测试干货,尽在2023泰克创新论坛!探索下一代节能电气和光学接口清华五道口:脑机接口行业图谱「舆芯半导体」完成近亿元天使轮融资,提供面向中央集成架构的车规MCU产品|36氪首发微软 Office copilot 定价每月 30 美元;腾讯否认推公务员版微信;Meta 发布新一代开源大模型 | 极客早知道ChatGPT提示词方法实战:探索一个系统架构设计的案例直播预告:面向汽车区域架构的ADI电源管理IC产品及应用探索大模型智能:众安保险基于 AIGC 的应用实践阿里达摩院大模型公开课上新!主讲中文个性化对话大模型ChatPLUG和模块化多模态大模型mPLUG-Owl红豆沙松软香面包(附菜谱)给数字人注入“灵魂”,360探索大模型“心病”目前只To B,腾讯云为什么优先发布行业大模型,而非大模型?作业帮多云多活架构的探索和实践One Baby, Two people, Three meals, and Four seasons只给大模型LeetCode编号,也能解题!大模型表现好是源于对训练数据的记忆吗?请不要迷信大模型
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。