落地大模型应知必会(3): 如何构建多任务的LLM应用

编者按:今年以来,大语言模型(LLM)已被广泛应用于各种自然语言处理任务,也越来越多地被用于构建复杂的语言应用。但是构建多任务的 LLM 应用仍面临一定的挑战,需要解决任务组合和调控等问题。

本文内容介绍了构建多任务 LLM 应用可能涉及的方方面面,包括如何设计并使用控制流程,如何测试代理等,对于那些希望设计出好用、功能强大的 LLM 应用的读者而言,本文将是非常有价值的学习资料,读者可以通过本文对该领域有一个初步的了解。

以下是译文,Enjoy!

作者 |Chip Huyen

编译 | 岳扬

本文重点讨论如何使用控制流程(例如if语句、for循环)来组合多个任务,并结合工具(例如SQL执行器、bash、Web浏览器、第三方API)来创建更复杂和强大的LLM 应用程序。

01 多任务组成的应用程序

大多数LLM应用程序都比较复杂,例如在"与数据对话"的应用场景下,我们会需要通过自然语言连接并查询数据库。如果需要操作一张信用卡交易表,您可以会问:"凤凰城 (Phoenix) 有多少家不同的商户,他们的名字是什么?" 数据库就会返回:"凤凰城 (Phoenix) 有9 家不同的商户,它们是......"。

实现这个"与数据对话"场景的应用程序一般通过执行以下任务序列进行:

Task 1:将来自用户输入的自然语言转换为 SQL 查询语句 LLM

Task 2:在数据库中执行 SQL 查询语句 SQL 执行器

Task 3:将 SQL 语句查询结果转换为自然语言展示给用户 LLM

02 Agents, tools, and control flows 代理、工具和控制流程

我在网上进行了一项小调查,目前似乎对这几个专业术语的定义还没有达成共识。

Agent 这个词已经被广泛使用,指的是可以根据给定的控制流程执行多个任务(参见2.2 控制流程部分)的应用程序。每一个任务可以利用一种或多种工具。在上述例子中,SQL 执行器就是一种工具。

注:有人抵制在本文所描述的内容中使用代理(agent)这个术语,因为它在其他领域内已经被过度使用(例如,用代理(agent)来指代强化学习1中的策略(policy))。

2.1 工具与插件

除了SQL执行器(SQL executor)之外,还有很多用于完成任务的工具,比如:

  • 搜索工具(例如使用Google Search API或Bing API进行搜索)
  • 互联网浏览器(例如,给定一个URL,能够获取其内容)
  • bash executor(译者注:用于执行Bash命令或脚本的工具,可以执行各种任务,例如文件操作、进程管理、系统配置等。)
  • 计算器

工具和插件基本上是相同东西的两种说法。我们可以将插件视为贡献到OpenAI插件商店中的工具。截至目前(译者注:文章发表时间为2023 年 4 月 11 日),OpenAI插件尚未向公众开放,但任何人都可以创建和使用工具。

2.2 控制流程:顺序、并行、条件语句、循环(sequential, parallel, if, for loop)

在上述示例中,使用的控制流程是顺序(sequential),在该流程之中,一个任务接着另一个任务之后执行。还有其他类型的控制流程,例如并行、条件语句、循环。

  • 顺序:在任务A完成后执行任务B,可能是因为任务B依赖于任务A。例如,只有在从用户输入翻译成SQL查询语句之后,才能执行该SQL查询语句。
  • 并行:同时执行任务A和任务B。
  • 条件语句:根据用户的输入选择执行任务A或任务B。
  • 循环:重复执行任务A,直到满足特定条件。例如,使用浏览器获取某一个网页内容,并继续使用浏览器获取该网页中其他链接的内容,直到代理认为已经获得足够的信息来回答用户的问题为止。

注意:虽然并行确实用处很大,但我还没有看到很多使用这种控制流程的应用程序。

2.3 使用LLM agents的控制流程

在传统的软件工程中,控制流程(control flows)的条件是精确的。而在LLM应用程序(也称为agent)中,条件也可能可以通过 prompt 来确定。(译者注:该句的"条件"原文是conditions,此处指确定在执行控制流程中的哪个分支或操作时所需满足的特定情况或规则。)

例如,如果你想要LLM agents在搜索工具(search)、SQL执行器(SQL executor)和聊天工具(Chat) 三个操作之间进行选择,可以像如下的输入内容那样进行解释,告诉它如何选择其中一个操作,如下所示(非常粗略)。换句话说,您可以使用LLM来决定控制流程的条件!

You have access to three tools: Search, SQL executor, and Chat.

Search is useful when users want information about current events or products.

SQL executor is useful when users want information that can be queried from a database.

Chat is useful when users want general information.

Provide your response in the following format:

Input: { input }

Thought: { thought }

Action: { action }

Action Input: { action_input }

Observation: { action_output }

Thought: { thought }
您可以使用三个工具:搜索工具(search)、SQL执行器(SQL executor)和聊天工具(Chat)。

当用户想要获取有关当前事件或产品的信息时,搜索工具在这个场景下非常有用。

当用户想要从数据库中查询信息时,应当使用SQL执行器。

当用户想要获取基本信息时,建议使用聊天工具。

请用以下格式进行回答:

Input: { input }

Thought: { thought }

Action: { action }

Action Input: { action_input }

Observation: { action_output }

Thought: { thought }

2.4 Testing an agent 测试代理

要使代理(agent)可靠,我们就需要在组合所有任务之前分别单独构建和测试它们。存在两种主要的故障模式:

1) 一个或多个任务测试失败。 可能的原因包括:

  • 控制流程错误:选择了非可选的操作
  • 一个或多个任务产生了错误的结果

2) 所有任务产生了正确的结果,但整体解决方案是不正确的。 Press等人(2022年)将这种情况称为"composability gap2":在模型正确回答所有子问题的前提下,从中错误回答了组合性问题的比例。

与软件工程一样,我们可以并且应该对每个组件以及控制流程进行单元测试。可以为每个组件定义成对的评估示例(pairs of as evaluation examples),每次更新prompt或控制流程时都可以用它们来评估应用程序。还可以对整个应用程序进行集成测试。成对的评估示例格式如下:(input, expected output)。

END

参考资料

1.en.wikipedia.org/wiki/Reinfo...

2.ofir.io/self-ask.pd...

本文经原作者授权,由Baihai IDP编译。如需转载译文,请联系获取授权。

原文链接

huyenchip.com/2023/04/11/...

推荐阅读:

LLM | 从技术原理到落地实践 (IDP 大语言模型相关干货合集-202308)

相关推荐
To_OC7 小时前
别死磕 Prompt 了!我用 Harness 流水线,让大模型自动产出高质量代码
人工智能·llm·agent
恒拓高科WorkPlus7 小时前
企业级即时通讯与数字协同平台:BeeWorks如何连接沟通、文档、业务与AI
人工智能
XGeFei7 小时前
【AI应用/Agent智能体搭建平台2】Dify——自部署
人工智能·笔记·学习
hans汉斯8 小时前
《软件工程与应用》期刊推荐&10月版面征稿中
图像处理·人工智能·深度学习·算法·音视频·软件工程
前端开发江鸟8 小时前
为了实现“小说自由”,我搭了一套 AI 小说工作流,结果却不如回家种田
人工智能
叠层归一研究院8 小时前
AGI 系统(八):符号范畴嵌入函子 — SymCat ↪ C_M107 严格化
c语言·开发语言·人工智能·算法·transformer·agi
2601_964840278 小时前
4G云门禁普惠化技术实践:基于边缘计算破解成本、隐私、部署三大行业瓶颈
大数据·人工智能·边缘计算
明朝百晓生8 小时前
Deep RL learning[2026/8]
开发语言·javascript·人工智能
具身智能进化论8 小时前
国产协作机器人品牌如何选择,企业长期使用更看重什么
大数据·人工智能·机器人·工厂方法模式
AKAMAI8 小时前
2026年Gartner Peer Insights 边缘分布平台客户之声将Akamai评为客户之选
人工智能·云计算