ChatGPT 在年初爆火,成为街头巷尾热议的话题。现在的 AI 应该算是目前最卷的赛道了,从卖账号、套壳客户端、 割韭菜教程、大厂争先发布自己的大模型…
作为普通开发者,搞底层大模型不是人人都能企及,下场割韭菜实在卷不过别人,追新也需要付出很多精力。眼前貌似就只有一条路,着眼于 AI 的应用层,看能不能给自己的垂直赛道赋赋能? 或者针对个人而言,能不能利用 AI 提高工作效率?
所以我开一个新坑, 以前端开发者视角, 记录一下作为一个 「AI 调教师」在 AI 应用层
的一些实践记录, 没有高谈阔论,就一些碎碎念。
今年二月份,我们就开始尝试将 ChatGPT 接入到我们的工具中,如下图:
就是这样的一个对话框
,现在大家可能司空见惯了。那时候并不常见,毕竟 Microsoft Office Copilot、ChatGPT 插件
什么的都还没发布。在当时想出这个点子的时候,我一整夜睡不着觉,第二天四五点就决定起床,肝了一天搞出这样的效果。
😂 不知道有没有人跟我一样,一兴奋就会睡不着觉
这是一种全新的系统交互方式,即用自然语言
来操控整个系统。怎么操控法呢?
这个对话框是全局的常驻
的,用户可以随时通过快捷键或者悬浮按钮唤起
每个页面都可以扩展自己的指令,比如进入数据建模页面,就注册 SQL 专家
、数据建模
等指令,离开后就销毁:
// React 代码
useEffect(() => {
if (model.readonly) {
return
}
// 注册扩展
return registerExtension({
key: '数据建模(测试)',
match: '数据建模(测试)',
type: ExtensionType.Command,
description: '数据模型创建和修改',
onSend(context) {
// ... 实现
},
})
}, [])
指令系统
指令
类似于现在的 ChatGPT 插件
,用于扩展 ChatGPT 的能力边界。
对话框只是提供了 AI 对话的能力(机制),而具体的业务、上下文信息只有页面自己最清楚,因此就让页面自己提供与 AI 对接的接口。
目前的实现方式是通过 #
来唤起选择具体指令,未来我们会利用 ChatGPT 最新的 Function Calling 实现类似 ChatGPT 插件
一样的自然语言调用能力。
我们第一个接入的 AI 的大腿
,就是给我们的数据建模工具
接入 AI 生成 SQL 语句
的功能:
如上图所示,我们可以使用自然语言的形式,基于我们已创建的数据模型来做以下事情:
建表语句:
优化建议:
还有很多场景…
几乎零成本就可以拥有一个 「MySQL 专家」。它的 Prompt 其实很简单!
首先需要将已创建的数据模型序列化,作为上下文喂给 ChatGPT, 例如:
#会员主档
Table m_member (
id: Long, PrimaryKey;
tenant_id: Long; #租户id
unique_account_id: String; #会员一账通id
status: Integer; #会员状态
unique_identifier_key: String; #会员唯一标识键
unique_identifier: String; #会员唯一标识的值
ext_json: String; #自定义扩展字段
clubs: String; #会员所属的俱乐部
channel: String; #渠道
)
#俱乐部会员
Table club_member_do (
id: Long, PrimaryKey; #实体唯一标识符
tenant_id: Long; #租户id
club_id: Long; #俱乐部id
unique_account_id: String; #会员一账通id
member_no: String; #会员卡号
level_num: Integer; #会员等级编号
level_expired_time: DateTime; #等级过期时间
nickname: String; #昵称
channel: String; #渠道
certificate_type: String; #证件类型
certificate_no: String; #证件号码
email: String; #邮箱
country_code: String; #国家编码
address: String; #详细地址信息
ext_json: String; #扩展字段
status: Integer; #俱乐部会员状态
)
#会员变动日志
Table m_member_operation_log (
id: Long; #实体唯一标识符
tenant_id: Long; #租户ID
club_id: Long; #俱乐部Id
unique_account_id: String; #一账通ID
operation_type: String; #操作类型
remark: String; #操作备注
)
这个 DSL 的格式无所谓,ChatGPT 自然语言的处理能力非常强,只要你给出的信息符合一定的规律,格式并不重要。
完整的 Prompt(system
) 模板如下:
你是一个 MySQL 专家,你会根据用户给出的概念模型,创建专业、高性能 SQL 语句, 以及回答用户关于数据库的任何问题,提出建设性意见。
---
假设实体(或者表)有多个字段(或者属性), 这些字段支持以下类型:
- Boolean
- Date
- DateTime
- Timestamp
- Integer
- Decimal
- Long
- Double
- Float
- String
- Text
- LongText
- JSON
- Reference : 表示对其他表的引用
---
这是概念模型:
${conception}
---
用户输入: """${input}"""
这是一个很简单的 Prompt,但也揭示了我们写 Prompt 的主要框架:
模型 DSL
, 以及 DSL 的基础规则这里我们也使用了一些特殊符号, 比如 ---
"""
, 对文本进行分段,可以提升 AI 反馈的准确性
因为 ChatGPT 语言模型已经预训练了很多数据库相关的语料,所以回答的效果还不错,不需要太多的指示(即 [Zero-Shot Prompting](https://learningprompt.wiki/docs/chatGPT/tutorial-extras/Zero-Shot%20Prompts)
)。
💡 你可以通过这个链接试一试效果
「AI 调教师」系列的第一篇文章以一个最简单的示例开始, 这是我为数不多比较短的文章了。如果你想给已有的工具接入 AI 能力,兴许这种方式就是最好的开始,从已有的工具中提取出相关上下文信息,投喂给 AI 来实现智能问答。
下一篇文章,我们将进一步深化,讲讲如何利用 AI 来实现数据建模
(画 ER 图),敬请期待。同时求赞求关注求收藏,你也可以直接订阅这个专栏。
本文用到的技巧
学习 Prompt