摘要:项目名称:基于 AI 的数据库模拟数据生成工具项目导师:乐别项目简述:在数据库测试和开发场景中,模拟数据生成是重要的工具,用于帮助开发人员验证代码逻辑和功能。已有的工具(ODC 的模拟数据功能 等)能够根据列的数据类型(如字符串、整数、日期等)生成随机模拟数据
开源之夏个人专访与项目经验分享持续开放中,欢迎正在参与和已从开源之夏毕业的学生、导师一同加入专访行动,填写文末专访问卷,与大家分享你的开源经验与收获!
本期项目经验分享来自北京邮电大学的研二学生李铭扬,在OSPP2025 中他承担的项目是:基于 AI 的数据库模拟数据生成工具 。
# 项目基本信息项目名称: 基于 AI 的数据库模拟数据生成工具
项目导师:乐别项目简述:在数据库测试和开发场景中,模拟数据生成是重要的工具,用于帮助开发人员验证代码逻辑和功能。已有的工具(ODC 的模拟数据功能 等)能够根据列的数据类型(如字符串、整数、日期等)生成随机模拟数据,但这些数据往往无语义性,无法贴近实际业务场景。此项目旨在通过结合 AI 技术 对字段语义进行自动理解和推断,实现数据生成的业务化、智能化。
项目链接:https://summer-ospp.ac.cn/org/prodetail/25e200048
本项目旨在为现有的 OceanBase 随机数据生成工具注入 AI 能力,使其能够通过大语言模型(LLM)生成具有现实业务意义的模拟数据 。经过方案评估,笔者决定通过网络请求调用外部大模型 API(如 DeepSeek)来实现此功能 。该方案的核心是将 AI 的不确定性工程化,确保生成过程的稳定、可控与高效 。具体实现围绕以下四大模块展开:
1. 分段式提示词工程 (Prompt Engineering)
笔者在项目开发初期遇到了当生成数目较大时,会超出模型 API 最大 token 限制而导致生成出的 sql 文件异常的问题。为解决上述问题,笔者设计了一套复杂且有状态的分段式 Prompt 生成系统 。该系统将一次大的数据生成任务拆分为首段”、“中间续段”和“末段”,并为每个阶 段动态构建不同的指令 。
状态传递:在生成“中间续段”时,笔者会将已生成的行数 (alreadyGenerated) 作为上下文传入 Prompt,明确指示模型在此基础上继续生成全新的数据,从而有效解决了多批次调用时主键重复的问题 。
融合用户配置: Prompt 会动态地将用户在配置文件中定义的uniqueConstraints(唯一约束)和 columnComments(字段注释)等信息整合进去 。这为模型提供了丰富的上下文,解决了因列名模糊(如 attr_x)导致生成质量下降的问题 。下面是其中的部分代码:
分段式 Prompt 生成系统部分代码展示
2. 智能、流式的数据生成引擎
为将分段式 Prompt 落地并提升用户体验、方便测试,笔者构建了一个智能化的数据生成引擎。该引擎通过流式(Streaming)API 调用,实时地将模型生成的数据块输出到控制台和最终的 SQL 文件中 。
任务自动拆分:引擎内置了一个 Token 估算单元,可以根据表结构预估单行数据的 Token 消耗 。结合此估算结果,它会自动将总任务量拆分为多个合理的批次,确保每次 API 调用都在 Token 限制内。
核心调度:SqlStreamingPagedGenerator.java 作为引擎的核心调度器,它会按顺序调用 PagedSqlPrompt 生成不同阶段的指令,并管理整个流式生成过程,最终确保生成一个语法完整、数据连续的 SQL 文件。下面是数据生成的部分代码示例。
实时数据清洗:由于 LLM 的返回内容有时会包含 Markdown 标记(如 ```sql)或“Here is the SQL script:”之类的解释性文字,笔者开发了 SqlStreamSanitizer 模块。该模块在 数据生成方法中被调用,对接收到的每一个数据块(delta)进行实时的增量清洗,确保最终输出到控制台和文件的内容是纯净的 SQL。
智能化的数据生成引擎部分代码展示
3. 灵活的用户自定义配置
笔者通过对原有的数据配置内容进行修改,实现了允许用户通过 JSON 配置文件对生成逻辑进行精细化控制的功能,以覆盖 AI 的默认行为或为特定业务场景提供指导 。笔者在开发中注意到AI在面对类似与 attr_1、s1 等无明显意义的数据时,返回的数据显得杂乱无章,于是设计了一个 comment 字段,用户可以通过它为任何语义模糊的列提供自然语言描述,显著提升了在复杂场景下的数据生成质量。
4. 无缝集成与向下兼容
笔者将新功能无缝集成到现有的 ODC 随机数据生成项目中,作为一个可切换的“智能生成”模式 ,用户可通过配置文件中的字段内容进行模式的切换。
配置开关:通过在主配置文件中增加 llmConfig 配置项,用户可以方便地通过 enabled: true/false 来启用或禁用 AI 生成模式 。
逻辑解耦:笔者在原有的核心工厂类 ObMockerFactory.java 中增加了新的逻辑分支。它会根据配置决定是进入原有的随机生成流程,还是调用新的 AI 生成模块 。这种设计确保了新旧功能完全解耦,实现了完美的向下兼容 。
笔者目前已经圆满完成了项目的全部核心功能,成功为 ODC 数据模拟工具引入了智能化的数据生成能力 。所有功能代码均已提交 Pull Request,并通过了社区的代码审查和自动化测试。同时笔者完成了覆盖所有核心功能的自测流程,并修复了过程中发现的关键 bug(如多批次主键重复、模糊列名生成质量不高等),确保了代码的交付质量 。同时,笔者也完成了详细的《ODC v0.1.0 基于 AI 的数据库模拟数据生成工具提测文档》和README文档的更新,为项目对接和后续使用者提供了清晰的指引 。下面是运行代码后生成的 sql 数据文件简单示例。
--自我介绍--
OSPP:请简单介绍一下你自己。
李铭扬:大家好,我是李铭扬。我目前在北京邮电大学攻读硕士二年级,本科也毕业于此。我从大一开始接触编程,得益于学校浓厚的技术氛围,我积极投身于众多实战项目,积累了丰富的开发与团队协作经验。在专业学习之外,我兴趣广泛,热爱台球、足球,也热衷于挑战如“魂系”系列的高难度游戏。
OSPP:你的专业学习和这个项目所涉及的 AI、数据库技术领域是如何产生交集的?是什么让你对“用 AI 解决数据问题”这个方向产生了兴趣?
李铭扬:我的研究生毕业论文方向聚焦于 Agent Memory 领域,在研究初期,我就已经亲手编写并部署过相关项目,积累过相关实践经验。得益于这份积累,当我看到这个项目介绍时,一个清晰的实现蓝图便在我脑海中浮现,这种高度的匹配性让我毫不犹豫地选择了它。我对“用 AI 解决实际问题”这个方向始终保持着浓厚兴趣。大模型的快速迭代正在深刻地重塑编程生态,我在日常学习和研究中也深度应用 AI 来提升效率。我坚信 AI 的变革性潜力远未完全展现,因此,积极投身 AI 应用项目,不仅能帮我积累宝贵的实战经验,更是我主动适应未来企业用人需求、保持竞争力的关键一步。
OSPP:你是何时第一次接触开源的?可以分享一下你的开源故事吗?
李铭扬:我第一次接触开源是在我初学代码的阶段,当时我为了解决某个技术问题而在开源论坛借鉴了别人的项目实现。像这样参与开源之夏并为开源仓库提交自己的代码还是第一次,这让我感觉到一股成就感和自豪感,也印证着我以及从懵懂的学习者成长为了一名合格的项目开发者。
--参与开源之夏--
OSPP:是什么机缘让你选择开源之夏?在选择项目任务和撰写申请书的时候有哪些考虑和准备?
李铭扬:我是在同实验室学长和同学的推荐下得知开源之夏的。在选择项目时,这个“基于 AI 的数据库模拟数据生成工具”项目立即吸引了我,因为它和我的研究方向高度相关。在撰写申请书时,我详细描述了我对项目的构思与实现方案,同时也向导师介绍了我自身的学习经历与相关项目经验,最终有幸得到了这个机会。
OSPP:能否用一个生动的比喻,向不太了解技术的同学解释一下你的项目解决了什么问题?
李铭扬:当然可以。可以把传统的数据工具想象成一个只会做随机口味冰淇淋的机器。你告诉它“我想要一个甜筒”,它只能给你一个随机口味,可能是草莓味,也可能是……辣椒味。因为它只知道“甜筒”这个形状,不理解“口味”(业务语义),所以产出的数据是无意义的随机值 。而我的项目,就是给这台机器装上了一个“AI 大脑”。现在你对它说“我想要一个‘地址’”,它就能理解“地址”的含义,然后精准地为你生成一个现实生活中实际存在的地址。它甚至还能理解更复杂的需求,比如“一个 18 到 75 岁之间的‘年龄’”。我的项目解决的就是让数据生成工具从“随机”变得“智能”,能听懂人话,生成真正有业务意义的数据 。
OSPP:项目要求使用模型进行语义推断。在实践中,你是如何让 AI 模型准确理解各种数据库列名的真实含义的?在项目开发过程中,遇到的最大技术挑战是什么?
李铭扬:在如何让 AI 模型准确理解各种数据库列名的真实含义上,我的解决方法是提示词工程,通过简单规范的提示词让大模型对列名真实含义进行理解。当遇到含义模糊的列名时,我选择让人与模型进行协同,让用户在配置中添加对字段的描述,以辅助模型进行理解。在开发过程中,我遇到的最大技术挑战其实是“API 调用超出 Token 限制”。当用户要求生成的数据量较大时,一次请求和响应很容易超出模型 API 的最大 Token 限制,导致生成失败 。
--收获与期待--OSPP:在成熟的代码框架上进行二次开发,和从零开始写项目,感觉有什么不同?
李铭扬:我觉得最大的价值在于服务实际。在学校里,我们写的代码更多是课程作业或者科研 demo,但开源项目是一个真实的系统,有用户、有社区、有迭代节奏。你写的功能不仅要“跑通”,还要能被别人用、和现有框架无缝兼容。这种真实环境的要求,会让人快速成长,也能体会到“代码在被真正使用”的意义。
OSPP:完成这个项目后,你对未来的学习或职业规划有什么新的想法吗?
李铭扬:本项目很好地体现了当下的一个发展趋势,即 AI 与各个领域、项目的结合。这也激发并清晰了我的个人职业规划。我认为,在 AI 浪潮席卷各行各业的今天,能否主动应用 AI 来提升开发效率,已不再是加分项,而是衡量一名程序员核心竞争力的关键指标。这也让我得出一个结论:无论未来我从事什么岗位,“持续学习”都将是我最重要的行事准则。在企业需求日新月异的背景下,这不仅是适应变化的被动选择,更是我主动保持自身”不可替代性“的有效途径。
OSPP:有什么想对开源之夏、社区、导师或小伙伴们说的话吗?
李铭扬:非常感谢开源之夏和 ODC 社区提供了这么好的一个项目和平台!能将 AI 技术应用到数据库工具中,解决一个真实存在的工程问题,对我来说是一次非常宝贵的经历。特别感谢我的导师在项目期间的指导,也希望我的这一点点工作能为 ODC 社区带来价值。各位小伙伴们我们一起努力,为开源社区贡献我们的力量!
来源:小向说科技
