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 353 commits into
OtterMind: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 353 commits into
OtterMind:mainfrom
hejianjun:main

Conversation

@hejianjun

@hejianjun hejianjun commented Jan 29, 2024

Copy link
Copy Markdown

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 hejianjun force-pushed the main branch 2 times, most recently from 173b057 to fb86ddb Compare April 9, 2026 12:32
hejianjun added 26 commits April 24, 2026 23:50
- 新增支持表格数据的分页、排序和列宽调整功能
- 实现单元格点击、双击编辑及撤销操作
- 增加数据行的添加、删除、复制和克隆功能
- 集成右键菜单支持复制行、复制单元格、设为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
- 优化导出过程中的日志实时更新和界面交互体验
- 新增LuceneIndexManager用于全文索引的创建、更新和查询,支持版本冲突检测
- 实现MixedAnalyzer结合中文分词和英文词干提取提升检索效果
- 新增TableServiceImpl实现表及相关元数据的增删改查与缓存管理
- 支持基于Lucene索引的分页查询、刷新缓存、数据版本管理和全文搜索
- 实现虚拟外键关系推断,增强关联表的自动识别能力
- 优化主键、索引及外键的处理逻辑,完善数据完整性管理
- 添加线程池管理与资源关闭,保证服务高效稳定运行
- 新增DeprecatedTable相关数据模型,包括DO、Param和Mapper类
- 实现DeprecatedTableService及其核心实现,支持表的废弃、删除废弃表和查询废弃表列表
- 新增RdbDdlController控制器,提供废弃表操作接口及废弃表列表查询接口
- 在RdbWebConverter中添加DeprecatedTable数据转换方法
- 在前端service/sql.ts中添加废弃表接口调用方法,包括废弃、恢复及废弃表列表请求
- 新增Tree层函数,支持调用废弃和恢复表的service接口并刷新数据
hejianjun added 30 commits June 5, 2026 17:03
- startNewConversation 方法新增参数以绑定数据源、库名和模式信息
- 新对话创建时同时创建后台会话并更新会话列表状态
- 客户端创建对话时支持传递绑定信息,刷新侧边栏列表
- 服务端支持传入 conversationId,避免重复创建
- 确保不存在的会话请求自动创建新会话
- AI会话标题生成流程调整,失败时降级使用首条消息
- prompt构建时排除上一版SQL的历史消息
- 包含多处容错和日志改进提升稳定性
- 新增onNewConversation回调以支持启动新会话时的额外处理
- 引入normalizeNullableText函数统一处理nullable字符串比较
- 优化相同连接判断逻辑,支持null或空字符串字段的比较一致性
- 改进NL_2_SQL会话复用判定,新增shouldReuseConversation变量增强逻辑清晰度
- 更新会话ID生成逻辑,避免不必要的新会话创建
- 增加handleNewConversation回调以重置绑定信息和选中表草稿
- 修正selectedTablesForDisplay逻辑,确保当前会话优先展示表列表
- 在ConversationSidebar组件中绑定onNewConversation事件提升交互扩展性
- 将上一版 SQL 的解析逻辑从 BuildPromptAction 中抽取到 PreviousSqlResolver 组件
- PreviousSqlResolver 优先使用请求中已有的 previousSql,缺失时从数据库加载
- BuildPromptAction 和 SelectTablesAction 中注入并调用 PreviousSqlResolver 处理上一版 SQL
- PromptBuilderImpl 根据 prompt 类型区分追加修正上下文,改进历史对话展示逻辑
- 移除 BuildPromptAction 中重复的数据库访问代码,提升代码复用性与清晰度
- 新增会话栏折叠与展开按钮,优化聊天界面布局
- 引入Redis数据浏览组件,可分页查询和搜索Redis键
- 实现RedisKeyBrowser接口,支持Redis键列表及详情查询
- 优化工作区侧边栏面板折叠和展开交互体验
- 添加Redis后端接口,实现Redis键的增删改查功能
- 新增样式支持折叠状态及Redis数据视图展示
- 移除冗余控制器,简化Redis相关API设计
- 支持多语言增加sidebar折叠展开相关文案提示
- 建立Redis键数据结构分组展示,支持键类型、大小、TTL显示
- 新增RedisKeyStream接口和服务端流式API支持批量分批返回Redis键
- RedisMetaData通过异步方式扫描并批量处理Redis键,支持分批推送
- RedisDataView组件改用流式加载,动态追加键数据提升加载性能体验
- 新增流式加载过程控制,支持主动关闭和切换加载流
- 增强客户端错误与完成事件处理,提高稳定性和用户提示
- 优化Redis键值预览和类型判断,展示更丰富的键值信息
- 更新服务端接口支持批大小参数和SSE事件推送功能
- 断开和组件卸载时取消流加载,防止内存泄漏和数据冲突
- 新增RedisKeyInfo类,使用@DaTa@builder注解
- 定义键名称name字段
- 定义键值value字段
- 定义数据类型type字段,支持string、hash、list、set、zset等
- 定义过期时间ttl字段,-1表示永不过期,-2表示已过期
- 定义键值大小size字段,单位为字节
- 添加类和字段的中文注释以增强代码可读性
- 在RedisDataView组件中添加键详情加载和编辑面板
- 实现对字符串、hash、list、set、zset类型键值的编辑渲染与保存
- 支持编辑键名、键值和TTL,新增hash类型字段行的增删改功能
- 增加编辑器状态管理,包括加载、保存和错误处理反馈
- 路由和服务层新增queryKey和updateKey接口支持加载和保存键详情
- RedisKeyBrowser接口及RedisMetaData实现新增updateKey方法支持键重命名及值写入
- RedisMetaData实现键值读取和写入多种类型数据,支持TTL操作
- 优化RedisDataView样式,添加选中行和编辑器布局样式
- 统一键类型大小写处理,新增可编辑类型判断和键值构建辅助函数
- 修复部分接口重复导入和代码格式问题
- 新增RedisMonitorView组件,实现Redis命令的实时监控界面
- 新增streamMonitor接口,通过SSE实现Redis命令流的实时推送
- 实现RedisCommandMonitor接口,底层通过socket和SSH隧道访问Redis监控命令数据
- 新增RedisMonitorController,提供监控的SSE流API接口
- 支持在客户端通过关键词过滤显示监控日志
- 添加监控日志自动滚动、导出及清除功能
- 优化Redis SCAN命令参数解析逻辑
- 调整SearchResult组件,修复表格展示条件判断
- 新增对应样式文件,用于监控视图布局和样式
- 更新树结构常量,新增Redis监控视图入口标识
- 在树节点判断中添加了REDIS_MONITOR类型
- 解决了右键菜单在监控节点上的触发问题
- 确保doubleClickTrigger菜单项能正确响应新节点类型
- 使用自定义 Iconfont 替换 antd 图标,统一图标风格
- 在 WorkspaceTabs 中集成 RedisMonitorView 组件,支持标签页切换
- 优化 RedisMetaData 连接逻辑,改用 OutputStream 写命令提升效率
- 调整 Redis 监控树节点图标为统一样式
- 新增右键菜单及双击操作,支持树节点快速打开 Redis 监控标签页
- 更新相关常量配置,修改 RedisMonitor 标签页图标为新图标码
- 调整 RedisMonitorView 组件按钮文案及状态显示,提升用户体验
- 新增 Redis key 创建接口及对应参数校验
- 添加 Redis key 删除接口及相关实现
- 在前端 RedisDataView 组件中新增创建与删除 key 的 UI 按钮与功能
- 实现前端新增 key 的类型选择及编辑器支持
- 在保存时支持区分新增与更新逻辑,调用相应接口
- 支持刷新、获取更多和获取全部 Redis key 的按钮操作
- 优化列表和编辑器布局及样式,增加底部操作栏
- 增加删除操作的确认弹窗提示
- 扩展 Redis service 层新增 createKey 和 deleteKey 请求方法
- 兼容旧有查询及更新逻辑,实现完整的 key 管理流程
- 添加对已存在对象存储的判断,避免重复创建
- 增加索引存在性检查,防止重复创建索引导致异常
- 格式化getDataByCursor函数参数声明,提升代码可读性
- 移除多余的空行,优化代码结构
- 在前端 RedisDataView 组件中添加 scanCursor 和 hasMore 状态,支持分页加载
- 修改 loadData 方法,增加游标(cursor)和追加(append)参数,支持增量加载数据
- 实现 getMoreData 方法,基于游标拉取更多 Redis Key,避免重复加载数据
- 按需禁用“获取更多”按钮,提升用户体验,避免无效操作
- KeyQueryRequest 中添加 cursor 字段,支持后端接收扫描游标
- RedisKeyBrowser 接口新增 streamKeys 方法返回 RedisKeyScanResult,实现带游标的扫描逻辑
- RedisKeyScanBatch 和 RedisKeyScanResult 两个类封装批次与最终扫描状态,支持游标和更多标记
- RedisKeyManageController 调整 streamKeys 调用,传递游标参数并推送游标与 hasMore 信息
- RedisMetaData 中实现带游标的 scanKeyInfo 方法,基于 Lettuce 的 SCAN 命令进行游标分页处理
- 优化批次拆分与异步加载,确保按 batchSize 逐批发送数据,控制内存消耗和响应速度
- 封装 ScanCursor 构建方法,统一处理空游标与初始游标的转换逻辑
- 整体实现 Redis Keys 的流式分页加载功能,提升海量数据浏览性能和用户体验
- 移除 RedisKeyScanBatch 类,直接使用 List<RedisKeyInfo> 代替批处理数据结构
- 修改 RedisKeyBrowser 接口及相关实现,batchConsumer 参数改为接受 List<RedisKeyInfo>
- 优化 RedisKeyManageController 中事件发送逻辑,去除多余字段,直接发送键列表
- 修改前端 redis.ts 中批量事件处理,兼容新的数据结构,简化解析逻辑
- 清理相关代码,删除不再使用的字段和方法,提升代码简洁性和可维护性
- 将Redis同步命令替换为异步命令,提升并发性能
- 所有方法调用改为链式CompletableFuture实现异步流程控制
- 异步实现完整键值读取包括类型、值、TTL与内存大小获取
- 支持异步写入不同类型的Redis键值数据
- 异步实现键重命名、删除及TTL管理
- 采用递归异步添加有序集合成员,保证插入顺序
- 重构异常处理,使用exceptionally捕获并记录错误日志
- 移除无用导入及代码冗余,优化代码结构和可读性
- 重构RedisCommandExecutor以支持语句起止行记录及批量执行结果索引
- 增加Redis命令参数字段值映射,支持HSET多字段更新
- RedisCommandParser新增带位置信息的拆分语句功能,保证原脚本行号准确
- 新增测试用例验证多行及复杂命令的拆分和行号计算准确性
- 客户端monaco插件新增Redis命令及子命令补全支持
- 实现Redis key名智能模糊查询补全,并实现缓存减少请求次数
- 根据当前编辑器光标上下文动态判断补全建议类型(命令、子命令、key)
- 明确标注补全项详细信息,提升编辑体验和准确度
- ChatController新增判定Redis数据源方法,支持自然语言转Redis命令场景
- FetchSchemaAction跳过Redis数据源的数据库schema获取逻辑
- PromptBuilderImpl针对Redis数据源构建专属NL2Command提示模板和修正上下文
- RedisKeyBrowser及RedisMetaData调整移除批大小参数,优化Redis键扫描批次大小
- RedisKeyManageController删除Redis键分页批量大小相关字段及调用参数
- RedisDataView组件新增表格自适应高度计算,提升页面展示与滚动体验
- 部分代码增加DataSourceService依赖用于动态判定数据源类型
- 移除KeyQueryRequest中batchSize字段,简化接口设计
- 合并构建完整键信息和简要键信息的方法为一个,使用参数控制返回值详略
- 更新扫描批处理逻辑,批量构建键信息时新增细节值参数设置
- 统一完成值读取、TTL和内存大小的异步异常处理
- 保留旧异步调用但删除重复的辅助方法,简化代码结构
- 修改调用点以适配新的构建键信息接口,保证功能一致性
- 使用 useMemo 优化 columns 定义,避免重复计算
- 添加 tableScrollX 状态和设置,实现横向滚动支持
- 在表格 scroll 属性增加横向滚动配置和虚拟滚动支持
- 计算表格容器宽高时同时获取宽度,动态调整横向滚动值
- 保持纵向滚动最小高度,提升表格展示稳定性
- 增加对初始游标和精准键模式的判断,提升查询效率
- 实现queryExactKey方法,支持针对单个键的快速存在性判断
- 添加isInitialCursor和isExactKeyPattern辅助方法,简化游标和模式判断逻辑
- 调整scanKeyInfo调用逻辑,按需区分精准查询和扫描查询
- 保持游标构建逻辑清晰,提升代码可读性和维护性
- 修改类注释格式,统一换行规范
- 优化buildKeyInfo方法参数缩进格式
- 调整读取字符串类型键的命令,从完整get改为getrange限制长度
- 优化hash类型键的预览读取,使用hscan并限制数量,提高性能
- 保持list和set类型预览逻辑不变
- 在 prompt-templates.yml 中添加自然语言转 Redis 命令的模板定义
- 修改 PromptBuilderImpl,根据数据源类型自动切换为 Redis 命令模板
- 删除冗余的 Redis 命令模板构建方法,简化代码逻辑
- 在 PromptType 枚举中添加 REDIS_NL_2_COMMAND 类型描述
- 优化自然语言处理逻辑以支持 Redis 数据源请求
- 新增 Redis 部分更新接口 KeyPartialUpdateRequest,支持 hash 字段的增删改和 TTL 更新
- RedisMetaData 实现 partialUpdateKey 方法,异步执行 hash 字段增量变更和 TTL 应用
- RedisKeyManageController 增加部分更新接口 /partial-update 路由
- RedisService 新增 partialUpdateKey 调用封装
- RedisDataView 组件:
  - 新增 originalHashFields 状态保存初始 hash 字段快照
  - 高级保存逻辑:区分新增与更新,hash 类型支持增量字段更新操作
  - 增加 computeHashDiff 辅助函数,用于计算 hash 字段的添加与删除
  - 保存过程中无改动时提示“没有修改内容”,防止重复提交
- TableRelationModal 调整导出按钮状态和数据过滤,确保虚拟外键导出数据准确有效
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