目录
一、调研背景
随着大数据技术的快速发展,Kafka作为分布式流处理平台,在实时数据处理领域得到了广泛应用。Kafka Streaming SQL(ksql)作为Kafka生态系统中的一部分,提供了一种声明式的方式来处理Kafka中的数据流,极大地简化了流处理应用的开发。CodeFuse-CodeLlama-34B模型作为一种先进的语言模型,具备强大的代码理解和生成能力。为了评估该模型在实时数据处理领域的潜力,特别是其对ksql的支持效果,本调研旨在通过一系列测试案例,全面验证CodeFuse-CodeLlama-34B模型在处理ksql任务时的准确性和效率。
二、调研方法
本次调研采用以下方法:
- 文献调研:收集和分析关于CodeFuse-CodeLlama-34B模型、Kafka及ksql的相关文献资料,了解它们的基本原理、特性和应用场景。
- 实验设计:根据ksql的功能特性和CodeFuse-CodeLlama-34B模型的能力,设计一系列测试案例,覆盖基本的SQL语法、数据操作、复杂查询、窗口函数应用、聚合函数使用等多个维度。
- 模型调用:将测试案例中的ksql语句或相关数据作为输入传递给CodeFuse-CodeLlama-34B模型,记录其输出。
- 结果验证:将模型的输出与预期输出进行比较,评估模型准确性和效率。
三、测试用例设计说明
测试案例设计围绕ksql的核心功能展开,包括但不限于以下几个方面:
- 基本SQL语法支持:测试模型对ksql基本语法(如CREATE STREAM、SELECT等)的解析和执行能力。
- 数据操作:模拟数据流处理中的常见操作,如数据插入(虽然ksql不直接支持INSERT,但测试模型是否能生成合理的SQL语句)、更新(通过流转换实现)。
- 复杂查询:设计包含多表连接、子查询等复杂查询的测试案例。
- 窗口函数应用:测试模型对ksql中窗口函数(如TUMBLING WINDOW)的支持情况。
- 聚合函数使用:验证模型在处理分组聚合查询时的准确性和效率。
四、详细测试用例设计
为了测试CodeFuse-CodeLlama-34B模型对Kafka Streaming SQL(ksql)的支持效果,我们可以从多个维度设计测试用例。这些维度可以包括基本的SQL语法支持、数据操作(CRUD)、复杂查询、窗口函数应用、聚合函数使用等。以下是一些具体的测试用例示例:
(一)基本SQL语法支持用例设计
测试用例1:创建流,测试模型是否能正确生成这类基本的ksql语句。
Prompt:你是一个专业的ksql专家,这里的ksql指的是Kafka Streaming SQL。请根据我下面的要求生成或者解析相关的ksql语句。
Question: 帮我创建一个流,流的名字叫user_actions,包含userid和action两个属性字段,所属的Kafka主题是user_actions
Answer:CREATE STREAM user_actions (userid VARCHAR, action VARCHAR) WITH (kafka_topic='user_actions', value_format='DELIMITED');
测试用例2:解析创建流语句,测试模型是否能正确解析这类基本的ksql语句。
Prompt:你是一个专业的ksql专家,这里的ksql指的是Kafka Streaming SQL。请根据我下面的要求生成或者解析相关的ksql语句。
Question: 帮我分析这句ksql是什么意思?CREATE STREAM user_actions (userid VARCHAR, action VARCHAR) WITH (kafka_topic='user_actions', value_format='DELIMITED');
Answer:创建一个流,存放关于用户行为的记录,流的名字叫user_actions,包含userid和action两个属性字段,所属的Kafka主题是user_actions。
测试用例3:查询流,测试模型在给定查询条件下的输出是否准确。
Prompt:你是一个专业的ksql专家,这里的ksql指的是Kafka Streaming SQL。请根据我下面的要求生成或者解析相关的ksql语句。
Question: 有一个流,存放关于用户行为的记录,流的名字叫user_actions,包含userid和action两个属性字段,查询user_actions中action为login的行为
Answer:SELECT * FROM user_actions WHERE action = 'login';
(二)数据操作(CRUD)用例设计
测试用例4:插入数据(虽然ksql主要面向流数据,但测试生成INSERT语句的合理性)
Prompt:你是一个专业的ksql专家,这里的ksql指的是Kafka Streaming SQL。请根据我下面的要求生成或者解析相关的ksql语句。
Question: 有一个流,存放关于用户行为的记录,流的名字叫user_actions,包含userid和action两个属性字段,user_actions中插入一条用户ID为‘user123’,行为为‘login’的记录
Answer:INSERT INTO user_actions (userid, action) VALUES ('user123', 'login');
测试用例5:更新数据(ksql中通常通过转换流来“更新”数据),测试模型能否处理条件逻辑和流转换。
Prompt:你是一个专业的ksql专家,这里的ksql指的是Kafka Streaming SQL。请根据我下面的要求生成或者解析相关的ksql语句。
Question:有一个流,存放关于用户行为的记录,流的名字叫user_actions,包含userid和action两个属性字段,user_actions中对于'login'动作,我们将其更改为'active'
Answer:CREATE STREAM updated_actions AS SELECT CASE WHEN action = 'login' THEN 'active' ELSE action END as new_action, userid FROM user_actions;
(三)复杂查询用例设计
测试用例6:多表连接,测试模型能否处理复杂的表连接和条件过滤。
Prompt:你是一个专业的ksql专家,这里的ksql指的是Kafka Streaming
SQL。请根据我下面的要求生成或者解析相关的ksql语句。
Question: 有一个流,存放关于用户行为的记录,流的名字叫user_actions,包含userid和action两个属性字段,假设有另一个流user_profiles,包含用户信息,有属性字段userid和name,现在需要连表查询action为'purchase'的用户名以及对应的action信息
Answer:CREATE STREAM user_profiles (userid VARCHAR, name VARCHAR) WITH (kafka_topic='user_profiles', value_format='DELIMITED');
SELECT up.name, ua.action FROM user_actions ua JOIN user_profiles up ON ua.userid = up.userid WHERE ua.action = 'purchase';
(四)窗口函数应用用例设计
测试用例7:滑动窗口聚合,测试模型对窗口函数和聚合函数的支持。
Prompt:你是一个专业的ksql专家,这里的ksql指的是Kafka Streaming SQL。请根据我下面的要求生成或者解析相关的ksql语句。
Question: 有一个流,存放关于用户行为的记录,流的名字叫user_actions,包含userid和action两个属性字段,创建一个新的表格,表格名称为purchase_counts.从user_actions表格中选择userid和购买行为的次数,使用TUMBLING窗口,窗口大小为10分钟。只选择action字段等于'purchase'的行,按照userid进行分组,并计算每个userid的购买行为次数
Answer:CREATE TABLE purchase_counts AS SELECT userid, COUNT(*) AS purchase_count FROM user_actions WINDOW TUMBLING (SIZE 10 MINUTES)
WHERE action = 'purchase' GROUP BY userid;
(五)聚合函数使用用例设计
测试用例8:分组聚合,测试模型能否处理基本的分组聚合查询。
Prompt:你是一个专业的ksql专家,这里的ksql指的是Kafka Streaming SQL。请根据我下面的要求生成或者解析相关的ksql语句。
Question: 有一个流,存放关于用户行为的记录,流的名字叫user_actions,包含userid和action两个属性字段,查询每种action的数量
Answer:SELECT action, COUNT(*) as count FROM user_actions
(六)异常和错误处理用例设计
测试用例9:语法错误处理,尝试生成一个包含语法错误的SQL语句,测试模型是否能识别并报告语法错误。
Prompt:你是一个专业的ksql专家,这里的ksql指的是Kafka Streaming SQL。请根据我下面的要求生成或者解析相关的ksql语句。
Question: 有一个流,存放关于用户行为的记录,流的名字叫user_actions,包含userid和action两个属性字段,给你一段语句,帮我判断是否正确?SELECT * FROM user_actions WHER action = 'login';
Answer:不正确,WHER 应该是WHERE
五、评测结果记录
1.模型调用: 将测试用例中的ksql语句作为输入传递CodeFuse-CodeLlama-34B。
2.结果记录:记录模型生成的输出和执行时间。
3.结果验证:将模型输出与预期输出进行比较,评估准确性和效率。
4.异常处理:记录并分析任何异常情况或不符合预期的结果。
下面将使用CodeFuse编程助手快速对上述第四步里的测试用例进行评测。
(一)测试用例1评测结果
如上图所示,和预期输出结果吻合。
(二)测试用例2评测结果
如上图所示,和预期输出结果吻合。
(三)测试用例3评测结果
如上图所示,和预期输出结果吻合。
(四)测试用例4评测结果
如上图所示,和预期输出结果吻合。
(五)测试用例5评测结果
如上图所示,和预期输出结果吻合。
(六)测试用例6评测结果
如上图所示,和预期输出结果吻合。
(七)测试用例7评测结果
如上图所示,和预期输出结果吻合。
(八)测试用例8评测结果
如上图所示,和预期输出结果吻合。
(九)测试用例9评测结果
如上图所示,和预期输出结果差距较大。
六、评测结果分析
1.基本语法支持:CodeFuse-CodeLlama-34B模型能够准确解析和执行ksql的基本语法,包括CREATE STREAM和SELECT语句,显示出良好的语法理解能力。
2.数据操作:模型在模拟数据插入和转换时表现良好,能够生成合理的SQL语句来模拟这些操作。然而,需要注意的是,ksql本身不直接支持INSERT操作,因此这部分测试主要评估了模型的SQL生成能力。
3.复杂查询:在处理包含多表连接和子查询的复杂查询时,模型表现出较高的准确性,但执行效率相比专业的数据库系统有所欠缺。
4.窗口函数应用:模型对ksql中的窗口函数支持良好,能够正确应用TUMBLING WINDOW等窗口函数进行时间窗口内的数据聚合。
5.聚合函数使用:在分组聚合查询中,模型表现出较高的准确性,能够准确地对指定字段进行分组和计数。
6.异常和错误处理:在一些异常的检测方面还存在疏漏。
七、结论与建议
CodeFuse-CodeLlama-34B模型对Kafka Streaming SQL支持效果尚佳,但如果是针对用户的特定需求,模型的理解和生成能力未必能达到要求,可能还是需要微调才能提升模型能力。目前并没有针对KSQL相关的公开数据集,需要自己构建整理出训练数据集、验证数据集和测试数据集,使用前面自定义的数据集对模型进行训练和测评。本报告里的评测比较粗略,数据量少而且没有建立相关评测指标去对齐,只是采用的人工审核的方式评判模型效果。后续可以使用swift里的评测脚本,用上测试数据集生成最终的评测报告,通过准确率acc等技术指标科学地评估CodeFuse-CodeLlama-34B模型对KSQL的支持效果如何。