作者: 引线小白-本文永久链接:httpss://www.limoncc.com/post/b6e87fb18befa699/
知识共享许可协议: 本博客采用署名-非商业-禁止演绎4.0国际许可证
根据笔者的观测和实践,大模型时代的交互语言有三种:
LLM_UI = 领域特定语言(DSL)+工作流(WorkFlow)+自适应界面(Self-Adaption-UI)
一个完整的大模型应用开发应该至少解决这三个问题,才能达到易用性。下面我们将使用一个完整的例子要说明这三个方面。
一、DSL (领域特定语言)
2023年3月以来大模型持续火热,人们大呼交互方式将迎来chat范式变革。什么prompt即代码,chat即UI等概念异常火热。
有人提出:寻找一种合理的 DSL (领域特定语言) ,以将现有的流程结合到 LLM^1。笔者觉得这是大模型开发非常重要的想法。
1.1、为什么需要领域特定语言
从一个简单的场景出发,我们希望LLM能翻译英文为中文。一个简单的提示词是:1
2
3你是一个翻译专家,精通将翻译英文为中文,请翻译下面的句子:
我想提高自己的技能水平,这样能提高自己未来的工资。
# I want to improve my skills so that I can increase my future salary.
但是对于有些模型来说,如果你忘记了句号,你得到的结果是这样的1
2
3
4你是一个翻译专家,精通将翻译英文为中文,请翻译下面的句子:
我想提高自己的技能水平,这样能提高自己未来的工资
# 和职业发展。
# I want to improve my skills so that I can increase my future salary and career development.
如果我们用这样的提示,稍加引导就可以避免这种情况1
2
3
4
5
6
7
8
9
10
11你是一个翻译专家,你会翻译用户的输入为英文,不要回答多余的话。翻译完后,不要做多余的输出。
下面是一些例子:
输入: 你好
英文: hello.
输入: 大模型将如何影响未来工作
英文: How will big models affect the future of work?
输入: 在街道上一个兔子起自行车
英文: In the street a rabbit picked up a bicycle.\n
我想提高自己的技能水平,这样能提高自己未来的工资
# 英文: I want to improve my skills so that I can increase my future salary.
也就是说我们在解决特定问题的时候,无论提示词还是大模型的输出都应该遵循特定的文本格式。而编程领域恰好有这么一个术语DSL (领域特定语言)。也就说即使大语言模型也无法做到无障碍沟通。这和人与人之间的沟通是一个道理。大家必须在共同背景和知识上下文,才能有效沟通。
如果说传统开发是使用编程语言开发功能,而大模型应用开发则是使用自然语言和必要编程构建LLM能理解的中间语言(或者说领域特定语言),通过沟通对话开发功能。
也就是说,我们应该将提示词视为一种可编程的语言
1、Prompt 编程特性 1:从需求到代码的直接转换,例如大语言模型中的函数
2、Prompt 编程特性 2:代码只是临时产物,大语言模型中代码只是中间工具,如果其他工具可以,不一定需要生成代码这个中间产物
3、Prompt 编程特性 3:次序化的分解框架,DDD (领域驱动设计)
4、Prompt 编程特性 4:语言即语言,简单来说如果我们限定了输入和输出的格式,那么我们的自然语言也是一种DSL。这就意味着,限制我们进行次序化的关键就是形式化的抽象。
1.2、DSL (领域特定语言)的一个例子:文生图提示词生成
这种领域特定语言使用场景是广泛的:
1、处理数据例如有提出未来大大模型格式的统一输出应该是类似于markdown类似块内容^2
2、约定输出格式以方便下游应用解析,如下面例子简单的「输入:」、「英文:」的前缀等。
3、对接工具也需要特定格式,为此我们需要设计一种语言以方便解析
下面在举一个文生图的提示词优化的例子
首先你一定要对摄影知识有所了解,才可能写出下面的提示。当然如果你对某一领域的知识不够了解,你也可以直接询问大模型。然后我们基于领域知识设计特定的格式的模版、提示(DSL)。
1.2.1、提示词生成
1 | 你是一个艺术家,精通摄影。你会对用户的输入在一下几个方面提供改进意见: |
然后我们输入1
2
3
4
5
6
7
8
9
10
11
12拍摄一位午后在舞蹈房练舞的亚洲少女照片,阳光透过玻璃洒在她的脸上,全身镜头。
# 输出:
# 拍摄方式:全身镜头
# 风格: 自然光线
# 主体: 一个午后在舞蹈房练舞的亚洲少女
# 光效: 阳光透过玻璃洒在她的脸上
# 场景: 在舞蹈房中
# 镜头: EF50mm/佳能EF50毫米镜头
# 设备: Canon/佳能
# 提示词:
# 全身镜头,自然光线,午后在舞蹈房练舞的亚洲少女。阳光透过玻璃洒在她的脸上,EF50mm/佳能EF50毫米镜头,Canon/ 佳能。
这显然还无法直接被sdxl这类的文生图模型使用。我们还需要提取最后面的提示词,于是再来一步
1.2.2、提示词提取
1 | 你是一个提取器,你只会提取文中的提示词部分,下面是些例子 |
然后输入第一步的结果1
2
3
4
5
6
7
8
9
10
11
12
13输出:
拍摄方式:全身镜头
风格: 自然光线
主体: 一个午后在舞蹈房练舞的亚洲少女
光效: 阳光透过玻璃洒在她的脸上
场景: 在舞蹈房中
镜头: EF50mm/佳能EF50毫米镜头
设备: Canon/佳能
提示词:
全身镜头,自然光线,午后在舞蹈房练舞的亚洲少女。阳光透过玻璃洒在她的脸上,EF50mm/佳能EF50毫米镜头,Canon/ 佳能。
# 提取的提示词: 全身镜头风格, 自然光线主体是一个午后在舞蹈房练舞的亚洲少女。
# 阳光透过玻璃洒在她的脸上,EF50mm/佳能EF50毫米镜头,Canon/ 佳能设备。
1.2.3、提示词翻译
有了提示词,我们还需要翻译为英文1
2
3
4
5
6
7
8
9你是一个翻译专家,你会翻译用户的输入为英文,不要回答多余的话。翻译完后,不要做多余的输出。
下面是一些例子:
输入: 你好。
英文: hello.
输入: 大模型将如何影响未来工作?
英文: How will big models affect the future of work?
输入: 在街道上一个兔子起自行车.
英文: In the street a rabbit picked up a bicycle.
然后输出第二步的结果1
2
3输入: 全身镜头风格, 自然光线主体是一个午后在舞蹈房练舞的亚洲少女。阳光透过玻璃洒在她的脸上,EF50mm/佳能EF50毫米镜头,Canon/ 佳能设备。
# Full-body shot, natural light subject is an Asian girl dancing in a dance
# studio. Sunlight shines through the glass on her face, Canon EF50mm lens, Canon equipment.
上面,我们通过一个简单的例子,阐述了领域特定语言如何解决特定问题案例。
1.3、解析领域特定语言
很多时候,场景要比上面的例子复杂的多。解析特定格式的文本就成了关键需求。DSL实际就是一种特定解决领域问题的迷你语言。如SQL语言,正则表达式等。在与大模型的交互中,pyparsing是一个好的选择。
还是以文生图提示词为例
1 | import pyparsing as pp |
当然你也可以直接写正则表达式,也可以使用诸如yaml、toml、xml类似的语言来定义你的DSL。
二、WorkFlow(工作流)
2.1、 为什么需要工作流
可以看到在解决一个场景下的问题时,工作流是不可避免的。对于开发者这来说有autogen、langchain这些工具。但是不可能覆盖到所有场景,这个时候就需要把工作流的组织交个用户,工作流也就成为了大模型时代的必备交互语言。
如何让让工作流开发平民化这需要一款开源开发工具,目前至少这是空白领域,以后就看谁来卡这个生态位了。当前可用的一些前端工具Antv X6|Xflow、lite graph、reactflow。这些工具目前是比较基础的。快速上手还是要花费巨大功夫。
2.2、如何开发工作流
首先一个工作流需要明细用户的输入,输出。然后大模型强大的生成能力需要专业领域的提示。这也需要一个入口。这样就完成了一个通用的工作流设计
1 |
|
三、Self-Adaption-UI(自适应UI)
3.1、自适应UI的一个例子
我们继续上面这个文生图的提示词生成例子,现在有了图片和生成的提示词,还有最后一公里,把结果展示到用户面前。这个环节也可以使用AI来做的
1 | 你是一个优秀的前端工程师,精通react和js和antv design组件库。你会根据客户的UI需求返回对应UI组件的jS代码块。 |
然后我们就得到了如下代码
1 | import React from 'react'; |
它的效果如下
3.2、如何编写自适应UI的提示词
这个问题本质上是如何用文字描述UI组件需求,它至少应该包含如下要点
1、你的组件输入数据是什么,给出必要示例
2、数据如何展示
3、样式要求
4、使用合作语言和工具
5、禁止性要求
四、评述
1、大模型时代引入了新的人机交互可能,本文立足应用开发中的需求提出了大模型时代的交互语言应该是LLM_UI = 领域特定语言(DSL)+工作流(WorkFlow)+自适应界面(Self-Adaption-UI)。
2、本文涉及的cumfui的相关大模型插件也将开源,请关注这个仓库https://github.com/limoncc/ComfyUI_LLM.git
3、大模型应用交互语言背后离不开agent的支持,下篇笔者将重点关注如何使用LLM驱动交互,敬请期待。
欢迎加入AutogenQQ交流群:593623958
版权声明 | |
由引线小白创作并维护的柠檬CC博客采用署名-非商业-禁止演绎4.0国际许可证。 本文首发于柠檬CC [ https://www.limoncc.com ] , 版权所有、侵权必究。 | |
本文永久链接 | httpss://www.limoncc.com/post/b6e87fb18befa699/ |
如果您需要引用本文,请参考: |
引线小白. (Oct. 14, 2023). 《大模型时代的交互语言——Autogen系列03》[Blog post]. Retrieved from https://www.limoncc.com/post/b6e87fb18befa699 |
@online{limoncc-b6e87fb18befa699, title={大模型时代的交互语言——Autogen系列03}, author={引线小白}, year={2023}, month={Oct}, date={14}, url={\url{https://www.limoncc.com/post/b6e87fb18befa699}}, } |