LLM Agent之数据库应用设计(二)

C3

  • C3: Zero-shot Text-to-SQL with ChatGPT
  • https://github.com/bigbigwatermalon/C3SQL
  • 通过优化schema description+多路投票的解码方案,用zero-shot prompt基本追平DIN的效果

在DIN-SQL提出的Few-shot方案的基础上,C3使用chatgpt作为基座模型,探索了zero-shot的方案,这样可以进一步降低推理成本。并且在生成效果上和DIN-SQL不相上下。

img

论文实现有很多细节,个人感觉比较重要的是以下两个部分,其他细节不做赘述

Clear Prompting

C3也通过Schema Linking先定位问题相关的数据表和查询字段。不过在指令构建上,论文认为在编写指令时,简洁的文本格式(clear layout),以及不引入不相关的表结构(clear context),会降低模型理解难度,对模型效果有很大提升。下面我们分别看下这两个部分

Clear Layout

后面的SQL-Palm也进行了类似的消融实验,对比符合人类自然语言描述的Table Schema,使用符号表征的prompt效果显著更好,在执行准确率上有7%左右的提升。

img

img

Clear Context

把整个数据库的全部表结构放入schema linking Context,一方面增加了推理长度,一方面会使得模型有更大概率定位到无关的查询字段。因此C3通过以下两步先召回相关的数据表和表字段,再进行schema linking

  1. 数据表召回

C3使用以下zero-shot指令,让大模型基于数据表schema,召回问题相关的数据表。这一步作者采用了self-consistency来投票得到概率最高的Top4数据表。当前的一些开源方案例如ChatSQL等,也有采用相似度召回的方案,更适合低延时,面向超大数据库的场景。不过需要先人工先对每张表生成一段表描述,描述该表是用来干啥的,然后通过Query*Description的Embedding相似度来筛选TopK数据表。

instruction = """Given the database schema and question, perform the following actions: 
1 - Rank all the tables based on the possibility of being used in the SQL according to the question from the most relevant to the least relevant, Table or its column that matches more with the question words is highly relevant and must be placed ahead.
2 - Check whether you consider all the tables.
3 - Output a list object in the order of step 2, Your output should contain all the tables. The format should be like: 
["table_1", "table_2", ...]
"""
  1. 表字段召回

在以上得到问题相关的数据表之后,会继续执行表字段召回的操作,同样使用了Self-Consistency多路推理投票得到概率最高的Top5字段。这一步同样可以使用相似度召回,尤其在中文场景,以及垂直领域的数据表场景,直接使用字段名并不足够,也需要对表字段名称生成对应的描述,然后使用相似度进行召回。

instruction = '''Given the database tables and question, perform the following actions: 
    1 - Rank the columns in each table based on the possibility of being used in the SQL, Column that matches more with the question words or the foreign key is highly relevant and must be placed ahead. You should output them in the order of the most relevant to the least relevant.
    Explain why you choose each column.
    2 - Output a JSON object that contains all the columns in each table according to your explanation. The format should be like: 
    {
        "table_1": ["column_1", "column_2", ......], 
        "table_2": ["column_1", "column_2", ......],
        "table_3": ["column_1", "column_2", ......],
         ......
}

self-consistency

Schema Linking之后,c3没有像DIN一样去判断问题的难度,而是用统一的zero-Prompt来对所有问题进行推理。不过在推理部分引入了Self-Consistency的多路投票方案。

针对每个问题会随机生成多个SQL,然后去数据库进行执行,过滤无法执行的sql,对剩余sql的执行结果进行分组,从答案出现次数最多的分组随机选一个sql作为最终的答案,也就是基于sql执行结果的major vote方案。

效果上c3在spider数据集上,使用干净简洁的zero-shot-prompt+self-consistency,基本打平了Few-shot的DIN-SQL,

img

SQL-Palm

  • SQL-PALM: IMPROVED LARGE LANGUAGE MODEL ADAPTATION FOR TEXT-TO-SQL
  • 尝试了微调方案并显著超越了以上的DIN-SQL

SQL-Palm是谷歌最新的NL2SQL的论文,使用的是他们的Palm2,不过未提供代码。和以上两种方案不同的是,SQL-Palm没有进行问题拆解,而是直接基于few-shot prompt进行sql的推理生成,并且尝试了微调方案,微调后的模型会显著超越DIN-SQL。

指令构建和以上的C3有两点相似

  • Self-consistency: 同样使用了基于执行结果的多路投票来选择sql
  • clean prompt:同样实验对比了偏向于人类自然表达的表结构表述和符号化的简洁表结构描述,结论和以上C3相同。在有few-shot样本时,指令长啥样影响都不大,在zero-shot指令下,符号化的简洁表结构描述效果显著更好。对比如下上图是符号化表结构,下图是自然语言式的表结构描述

img

img

论文同样对模型self-correction做了尝试,尝试方向和DIN不同,不是直接对SQL语句进行校准,而是当SQL执行错误时,基于错误信息让模型进行SQL修正。但是论文提到,并没找到很好的Debug的自修正方案,修正后对效果没有显著提升。

BIRD

  • Can LLM Already Serve as A Database Interface?A BIg Bench for Large-Scale Database Grounded Text-to-SQLs
  • DuSQL: A large-scale and pragmatic Chinese text-to-SQL dataset.
  • https://bird-bench.github.io/

如果说前三篇还有一丢丢“象牙塔文学”,那BIRD确实一步跨入了纪实文学的领域。论文的核心是推出了新的更贴合实际应用场景的超大规模+存在数据噪声+依赖领域知识的NL2SQL基准数据集。在该数据集上,虽然DIN依旧是SOTA,但是和人工标注的执行准确率对比来看,只能说“前路阻且长”

img

只所以在Spider基准中有85%+执行准确率的SOTA模型,在BIRD里面表现骤降,除了BIRD使用的数据集噪声更多,数据集更大更复杂之外,一个核心原因是现实应用中,只像以上3篇论文那样使用原始表格的schema来描述数据表,是远远不够滴。

img

往往需要引入额外的表/字段描述,以及领域知识才能让模型更好理解每张表每个字段的作用,包括但不限于以下几个方面

  • 表名称/字段缩写(Schema Description):现实场景的table name和column name,往往业务同学自己使用都不知道是啥意思,因此治理后的数据仓库中往往需要人工维护表描述和字段描述。例如b_fund_stock_bond_industry_share_d数据表的描述是每日全量基金股票债券持仓占比的,sw_classify_one_type_name字段的描述是申万一级行业分类,就这?只给表名称你想让模型自己猜到?

  • 字段取值说明(Value Illustration):部分表字段的取值是缩写或者专有名词,例如status字段往往会使用代码来指代例如基金申购,赎回等不同状态,这时就需要对字段取值进行说明。

  • 领域知识(Domain Knowledge)

    :领域数据库往往需要补充领域知识才能理解,以下Ref1-3的论文有更具体的说明

    • 计算类(Numeric Reason):例如如何基金单位净值 = 基金总净值/基金总份额
    • 指标类(Indicator):例如询问股票近期波动率,模型需要补充知识说明哪些指标反映波动率
    • 指代类(Synonym):例如用户询问某ETF基金,模型需要知道指数基金也是ETF基金的另一种说法

BIRD在人工进行数据标注时,对每张表都提供了对应的以上字段描述和补充知识信息,用来帮助标注同学理解表内容。在使用大模型生成SQL时,以上知识会作为prompt输入模型,如下

img

并且论文对比了是否使用External Knowledge在测试集和验证集上的效果,提升十分显著。当然因为论文的重点在数据集构建,因此并未对如何更好的引入知识进行更详尽的讨论,期待后文ing~

img

LLM Agent中间插个队,总结下指令微调、对齐数据相关的方案,已经凑够7篇论文可以召唤神龙啦!论文都是以优化指令样本为核心,Data-Centric的观点比较一致:指令微调也就是对齐阶段的数据质量>>数量,少量+多样+高质量的对齐数据,就能让你快速拥有效果杠杠的模型。注意以上三者是充分必要关系,不是说数据越少越好,是三者的有机统一。

如果你对指令微调还不甚了解,建议先看看下解密Prompt系列4. 升级Instruction Tuning

当前对指令微调部分的普遍认知有两个思路

  • 抽象派:把模型输出和人类偏好进行对齐
  • 务实派:赋予模型任务指令的理解和完成能力

两个思路其实殊途同归,重心落在任务+对齐,既基于用户指令应该召回模型预训练学习的哪些知识,以及把这些知识用什么样的格式和风格进行输出,类似于把预训练学习的知识重新排列组合并输出。可以类比探测Bert Finetune对向量空间的影响,只不过指令微调调整的高维空间更加细分多样。

于是才有本章的讨论,那我们构建质量更高,覆盖范围更广的数据,是否比随机造大量的指令数据效果要更好。毕竟你抖音刷1000条杂七杂八的中医养生小知识,可能比不上精读黄帝内经+神农本草不是~

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

在这里插入图片描述

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取==🆓

在这里插入图片描述

  • 38
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LLM是一家知名企业,为各行各业提供全方位的企业应用解决方案。下面将通过一个实际案例来说明LLM在企业应用方面的成功经验。 某电子制造企业合作了LLM,希望提高生产效率和产品质量。LLM的团队首先进行了全面的企业调研,了解其业务流程和存在的问题。随后,他们根据调研结果设计了一套定制化的企业应用系统。 该企业应用系统包含了以下几个核心模块:生产计划管理、设备维护管理、原材料采购与库存管理、质量检测与追溯、销售订单管理以及绩效评估。每个模块都有相应的功能和流程,能够满足企业的具体需求。 通过该企业应用系统,该电子制造企业实现了很多突破。首先,生产计划管理模块能够根据订单情况自动生成生产计划,有效降低了生产周期和提高了生产效率。设备维护管理模块则帮助企业实现了设备的智能化管理,及时进行维护和保养,减少了停机时间和维修成本。 原材料采购与库存管理模块通过与供应商进行信息对接,实现了快速采购和准确控制库存,避免了原材料不足和过多的情况。质量检测与追溯模块在生产过程中进行多次质量检测,确保产品质量达标,并实现了产品追溯,便于问题溯源和召回。销售订单管理模块则提供了一个便捷的订单管理系统,实现了订单的及时处理和跟踪。绩效评估模块通过对各个部门和员工的工作数据进行分析,帮助企业进行绩效评估和个人提升。 通过LLM的企业应用系统,该电子制造企业的生产效率得到了大幅提升,产品质量得到了有效控制。同时,该系统增加了企业的信息化管理,提高了企业的竞争力和市场份额。 这个案例充分展示了LLM在企业应用方面的成功经验,通过对企业的深入了解和全面的系统设计,能够为企业提供量身定制的解决方案,帮助其实现高效运营和持续发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值