Skip to content

Modify the calling method of openai, and use function calling to reduce the size of the first input token.#1145

Open
hejianjun wants to merge 124 commits intoCodePhiliaX:mainfrom
hejianjun:main
Open

Modify the calling method of openai, and use function calling to reduce the size of the first input token.#1145
hejianjun wants to merge 124 commits intoCodePhiliaX:mainfrom
hejianjun:main

Conversation

@hejianjun
Copy link
Copy Markdown

@hejianjun hejianjun commented Jan 29, 2024

Updated the interface of openai, refer to.https://cookbook.openai.com/examples/how_to_call_functions_with_chat_models Let ChatGPT actively obtain the data structure of the table
The next step is to add an automatic option to the front-end component of the selection table, which can automatically obtain the database structure to write sql when selecting.
image

@miahemu miahemu changed the title 修改openai的调用方式,使用function calling(函数调用)减少第一次输入的token大小 Modify the calling method of openai, and use function calling to reduce the size of the first input token. Feb 27, 2024
hejianjun added 9 commits April 9, 2026 20:45
- 将 spring-context-indexer 依赖的 scope 从 provided 修改为 optional
- 优化依赖管理以适应不同环境需求
- 更新了 Chat2DB 简化启动类的注释格式,提升代码可读性
- 集成SpotBugs Maven插件进行代码质量检测
- 配置最大分析强度和高风险阈值
- 设置分析结果为XML格式输出
- 配置验证阶段自动执行SpotBugs检查
- 允许分析失败不影响构建流程
- 在pom.xml配置文件中启用htmlOutput为true
- 保持failOnError设置为false以避免构建失败
- 其他现有配置保持不变
- 将状态机事件发送方式由直接发送事件改为使用MessageBuilder封装Payload后发送,并调用subscribe方法
- 统一修改AutoSelectTablesAction、BuildPromptAction、FetchSchemaAction、StreamAction、ChatController等类中状态机事件发送逻辑
- 优化了事件发送的异步订阅处理,避免阻塞调用
- 修改部分日志及错误提示信息格式,提升一致性
- 移除ChartService及DataSourceService中已废弃的queryByIds方法,替换为listQuery方法调用
- 对部分工具类常量添加final修饰,提升代码规范性
- 修正EasyBooleanUtils和EasyIntegerUtils中equals方法的空指针检查
- 优化DesUtil中setSeed时字符编码为UTF-8避免默认编码问题
- 修改分页结果相关类PageResult和WebPageResult中getHasNextPage兼容处理,移除废弃方法标记
- 新增spotbugs排查过滤配置文件,并在pom.xml中加入排除该过滤文件配置
- 删除了AutoSelectTablesAction中发送事件时多余的subscribe()调用
- 删除了BuildPromptAction中发送事件时多余的subscribe()调用
- 统一事件发送代码格式,简化异步处理逻辑
- 修复了代码结尾多余空行格式问题
- 移除sendEvent调用中的subscribe订阅,简化事件触发流程
- 保持事件发送逻辑一致性,避免多余订阅带来的资源占用
- 改进异常处理中的状态机事件触发,提升代码可读性
- 优化流式调用的状态更新,使代码更简洁明了
- 在异步任务中设置登录用户和连接信息上下文
- 启动状态机并发送初始事件
- 异步任务完成后清除上下文和会话信息
- 新增buildContext和removeContext方法管理上下文生命周期
- 保持主线程响应性,提升性能和并发处理能力
- 删除 PromptService 上帝类,消除重复与职责混乱
- 创建 PromptBuilder 及相关模板与验证组件,实现提示词构建建造者模式
- 扩展 DatabaseService,新增查询表结构、数据库表信息等方法
- 修改 BuildPromptAction、AutoSelectTablesAction、FetchSchemaAction 使用 PromptBuilder 与 DatabaseService
- 优化状态机事件调用,改为返回值订阅处理
- 统一提示词模板管理,提高代码重用性和测试性
- 删除无用依赖,简化代码结构,提升扩展性与维护性
- 移除AutoSelectTablesAction、BuildPromptAction和FetchSchemaAction中sendEvent调用的subscribe方法
- 统一状态机事件发送代码,提升代码简洁性与稳定性
- 修正AutoSelectTablesAction中PromptContext的数据源类型字段,由dataSourceType改为destSqlType
- 在pom.xml中添加SpotBugs插件默认不执行的注释说明,便于手动触发静态代码分析任务
hejianjun added 30 commits April 23, 2026 09:37
- 实现SQLExecutor单例,统一管理数据库连接执行操作
- 支持执行查询和更新SQL并返回结构化结果ExecuteResult
- 支持分页查询,MongoDB结果转换处理,及自动行号添加
- 封装数据库元数据获取方法,包括数据库、模式、表、列、索引、函数、存储过程及外键信息
- 通过Druid解析SQL语句,支持MySQL特殊版本兼容逻辑
- 完善SQL执行异常捕获与日志记录
- 支持基于ValueHandler自定义结果集数据处理逻辑
- 定义AI对话过程中可能发生的各种事件
- 包含表状态、自动选择、Schema获取、Prompt构建等事件
- 引入错误和取消操作的事件标识
后端:

- 增强 ErDiagram 模型,新增 comment、columnCount、sourceColumn、targetColumn、virtual 字段

- 新增 ErDiagramQueryParam 查询参数类,支持表名过滤和虚拟外键开关

- 新增 ErDiagramService 接口和 ErDiagramServiceImpl 实现

- 新增 ErDiagramController,提供 /api/rdb/er/diagram 接口

- 新增 ErDiagramQueryRequest 请求类

前端:

- 替换 ECharts 为 ReactFlow 渲染引擎,提供更专业的 ER 图展示

- 新增 Zustand store 管理 ER 图状态

- 新增自定义 TableNode 节点组件,显示表名、注释、列数

- 新增自定义 RelationEdge 边组件,区分真实外键和虚拟外键

- 新增 Toolbar 工具栏:刷新、布局切换、缩放控制、导出 PNG

- 新增 TableFilter 表名过滤搜索组件

- 新增 Legend 图例组件

- 新增 dagre 层级布局和 force 力导向布局算法

- 更新 service/sql.ts 类型定义和 API 路径

- 修复 i18n、图标、Tab 标题不一致问题

- 安装 @xyflow/react、@dagrejs/dagre、html-to-image 依赖

功能:

- 支持表名模糊过滤搜索

- 支持层级/力导向布局切换

- 支持虚拟外键开关(根据命名规范推断的外键)

- 支持缩放控制和适应画布

- 支持点击节点高亮关联表

- 支持导出 PNG 图片

- 区分真实外键(灰色实线)和虚拟外键(橙色虚线)
- 新增导出数据和导出文档的接口及控制器支持
- 在结果表格组件中实现导出不同格式和范围的数据功能
- 增加导出任务的轮询查询,实现进度展示和导出文件下载
- 添加导出操作的进度条及导出结果的提示反馈
- 实现表格数据的多选、聚焦、编辑和撤销功能
- 优化表格单元格样式,支持不同状态的高亮和标记
- 支持更新数据的SQL展示、执行和错误处理
- 新增中英文国际化词条,完善按钮、提示和消息文本
- 新增支持表格数据的分页、排序和列宽调整功能
- 实现单元格点击、双击编辑及撤销操作
- 增加数据行的添加、删除、复制和克隆功能
- 集成右键菜单支持复制行、复制单元格、设为null和默认值操作
- 支持通过MonacoEditor查看和编辑单元格内容
- 实现SQL导出功能,支持CSV和Insert格式导出全量或当前页数据
- 添加导出进度监控和导出任务轮询下载功能
- 优化表格行和单元格的高亮与错误提示样式
- 支持多选行操作及批量撤销修改
- 对接后端接口完成数据获取、更新和SQL执行操作
- 增强表格状态栏显示查询描述、耗时和结果行数
- 采用自定义hooks封装CURD表格数据及多选、粘贴功能
- 支持根据查询结果动态生成表格列配置
- 实现导出按钮及刷新按钮,方便用户操作表格数据
- 完善表格无数据和加载状态的显示交互逻辑
- 实现基于SQL的多格式数据导出功能支持CSV、SQL插入语句、Excel等格式
- 支持导出当前页面数据和整个结果集
- 提供导出结果数据和数据库模式文档导出的异步任务创建逻辑
- 实现导出任务状态及进度的实时更新和异常处理
- 支持大数据量导出流式处理,减少内存占用
- 通过工厂模式动态选择对应导出服务实现
- 内置导出文件临时文件创建及命名规范
- 封装上下文环境和连接信息,保证异步任务执行的上下文隔离
- 整合多种工具类和第三方库优化导出流程与文件写入流程
- 新增数据导出控制器,提供导出数据和导出数据库结构文档的REST API接口
- 实现导出数据功能,支持根据查询条件导出结果数据文件
- 实现导出文档功能,支持导出数据库表结构和字段信息文档
- 删除TaskBizService中冗余的CSV和Insert导出私有方法,优化代码结构
- 新增 TaskBizService 实现数据导出相关业务逻辑
- 支持导出多种格式包括 CSV、INSERT、EXCEL、MARKDOWN、WORD、PDF、HTML
- 实现异步任务创建、进度更新和状态管理
- 支持通过解析 SQL 自动获取表名
- 提供导出表结构文档功能,支持分页查询和多种格式导出
- 引入任务创建参数 TaskCreateParam 定义任务属性及序列化支持
- 完善异常处理并支持连接上下文管理和资源释放
- 新增ErDiagramServiceImpl,实现ER图查询服务
- 支持根据数据源和数据库信息查询全部表数据及相关列、索引和外键信息
- 支持根据表名关键字过滤表
- 构建ER图节点表示表,包含表名、注释及列数量
- 构建ER图边表示真实外键关系,只包含数据库中存在的表关系
- 支持配置包含虚拟外键,推断命名规范的虚拟外键关系
- 返回完整的ER图数据结构包含节点和边列表
- 重构queryErDiagram方法,拆分查询表、构建节点和构建边的逻辑
- 精简导入包,移除未使用的依赖
- 使用流式API简化节点列表构建代码
- 提取buildEdge方法统一构造边对象,简化真实外键与虚拟外键处理
- 通过参数控制是否包含虚拟外键,增强灵活性
- 移除冗余代码注释,提高代码可读性
- 新增表创建、删除、修改及查询接口实现
- 支持表的主键初始化及更新逻辑处理
- 实现批量构建SQL语句的功能
- 集成Lucene索引管理用于表结构缓存和搜索
- 支持分页查询及搜索表和列,自动刷新缓存
- 实现虚拟外键的自动发现与删除功能
- 支持表的索引、列、外键及类型信息查询
- 设计表树形节点搜索及构建逻辑
- 添加线程池资源的优雅关闭方法
- 支持表数据截断操作
- 新增数据导入请求参数DataImportRequest,支持指定目标表名、文件类型、数据库和schema
- 实现ImportStrategy接口及CSV、Excel具体导入策略,统一数据导入抽象
- 创建ImportBizService处理数据导入业务逻辑,支持异步导入及任务进度更新
- 构建ImportController提供REST接口供前端调用数据导入功能
- 添加前端ImportDataModal组件,支持文件上传、文件类型选择及导入进度展示
- 补充中英文国际化文案,完善导入相关提示和消息
- 支持导入任务状态轮询,实时更新导入进度和结果提示
- 创建导入数据控制器 ImportController,提供文件导入数据库表的接口
- 实现导入接口的请求参数和返回数据封装
- 引入导入业务服务 ImportBizService 处理导入逻辑
- 客户端 task.ts 新增导入数据请求方法,支持文件上传和附加参数
- 定义导入相关接口类型,规范导入参数和返回数据结构
- 统一使用 fetch 发送导入请求并处理响应结果
- 新增CsvImportStrategy支持CSV文件导入
- 新增ExcelImportStrategy支持Excel(XLSX/XLS)文件导入
- 两种导入策略均基于EasyExcel按批处理数据,提高导入效率
- 实现ImportBizService进行统一管理,支持异步导入任务创建与执行
- 引入任务状态和进度更新机制,保证导入过程的监控与回调
- 处理文件安全保存及临时文件清理,确保文件操作安全性
- 异常处理统一捕获并抛出业务异常,保证错误信息一致性
- 新增CsvImportStrategy实现CSV文件的数据导入策略
- 新增ExcelImportStrategy支持XLS和XLSX文件导入
- 增加ImportBizService,管理导入任务创建、异步导入执行和状态更新
- 实现导入进度更新和异常处理机制,保证导入任务状态准确反馈
- 添加中英文多语言国际化资源,支持导入相关界面文本显示
- 优化文件临时保存和清理,防止异步任务文件丢失或泄漏风险
- 新增 AbstractImportStrategy 抽象类,通用读取并批量导入数据逻辑
- 增加 CsvImportStrategy 和 ExcelImportStrategy 实现不同文件类型支持
- 实现 ImportBizService,处理上传文件保存、异步导入及导入任务状态管理
- 新增前端 ImportDataModal 组件,支持选择文件、类型及导入进度展示
- 实现客户端轮询导入任务状态,显示导入日志及进度百分比
- 新增 task.ts 服务文件,封装导入相关接口调用
- 完善上传文件的安全保存和导入过程中的异常处理机制
- 将捕获的异常类型由通用 Exception 改为更具体的 SQLException
- 优化异常处理逻辑,提升错误识别的准确性
- 保持原有业务异常抛出不变,确保错误信息完整传递
- 引入 I18nUtils 进行错误信息国际化支持
- 针对 BusinessException 使用国际化消息替代默认异常信息
- 保持其他异常使用原始异常消息字节设置
- 提升错误提示的多语言适配能力
- 新增AbstractImportStrategy,支持Excel文件数据按列映射批量插入数据库
- 新增ImportContext封装导入任务所需上下文信息
- 新增ImportBizService,负责异步执行文件导入任务及状态管理
- 完善导入异常处理,提供多语言错误提示支持
- 新增国际化资源,涵盖导入相关的错误和提示信息
- 异步任务执行过程中,保证文件安全保存及清理,避免临时文件丢失
- 实现导入进度实时更新,支持任务状态跟踪和错误反馈
- 添加 SqlImportStrategy 实现 ImportStrategy 接口
- 读取并解析 SQL 文件中的多条语句,支持多行和末尾无分号语句
- 执行批量 SQL 语句并进行进度汇报,每200条更新一次
- 异常时抛出业务异常并记录错误日志
- 支持判断文件类型为 SQL 并应用对应导入策略
- 新增抽象导出策略AbstractExportStrategy,统一导出流程及进度更新
- 实现CsvExportStrategy支持CSV格式导出,基于EasyExcel库写文件
- 实现ExcelExportStrategy支持Excel格式导出,基于EasyExcel库写文件
- 实现InsertExportStrategy支持INSERT SQL格式导出,基于druid库构造语句
- 添加ExportContext封装导出所需参数和回调
- 新增ExportStrategyFactory用于根据导出类型获取对应策略
- TaskBizService集成异步导出功能,支持多种导出类型任务创建及状态更新
- 客户端新增ExportDataModal支持用户选择导出类型及展示导出进度日志
- 工作区左侧组件引入ExportDataModal,支持无连接时提示创建连接
- 国际化消息文件增加导出相关提示和错误消息内容
- 新增store管理导出模态框的打开函数接口,方便全局调用
- 新增 SchemaDocExportStrategy 抽象策略及相关实现类,支持SQL、Excel、HTML、Markdown、PDF等格式导出
- 实现导出上下文SchemaDocExportContext,统一管理导出所需数据和配置
- 设计导出策略工厂SchemaDocExportStrategyFactory,根据导出类型选择对应策略
- 添加前端导出数据库模式文档相关组件和弹窗ExportSchemaDocModal
- 实现导出任务异步执行和导出进度轮询显示
- 细化表格及索引信息处理,保证多格式文档一致性和国际化支持
- 优化导出异常处理和日志记录,增强用户体验
- 移除了设置页码为1的代码
- 移除了设置页面大小为最大整数的代码
- 保持导出逻辑中表选择器的列和索引列表不变
- 优化了导出文档的查询参数处理流程
- 新增 ExportSchemaDocModal 组件,实现多格式导出数据库结构文档
- 增加导出任务创建、轮询查询状态及日志展示功能
- 支持导出类型包括 SQL、Markdown、Excel、Word、HTML、PDF
- 实现导出任务完成自动下载和错误处理提示
- 新增 task 服务接口,包含导出文档、导出数据、导入数据及任务查询API
- 优化导出过程中的日志实时更新和界面交互体验
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant