当前位置: 首页 > news >正文

哪些网站做农产品电子商务物流大数据查询官网

哪些网站做农产品电子商务物流,大数据查询官网,网页和网站的不同,建网站需要哪些硬件文章目录 概要业务数据库配置Chat2DB安装设置原理剖析 小结 概要 近期笔者在做Text2SQL的研究,于是调研了下Chat2DB,基于车辆订单业务做了一些SQL生成验证,有了一点心得,和大家分享一下.: 业务数据库设置 基于车辆订…

文章目录

    • 概要
    • 业务数据库配置
    • Chat2DB安装设置
    • 原理剖析 
    • 小结

概要

近期笔者在做Text2SQL的研究,于是调研了下Chat2DB,基于车辆订单业务做了一些SQL生成验证,有了一点心得,和大家分享一下.:

业务数据库设置

基于车辆订单业务,模拟新建了以下四张表,并添加了一些测试数据
 1. organization:组织表,包含组织id,组织名称,组织分类等3个字段;
 3. vehicle:车辆信息表,包含组织id,车辆id,车牌号码,使用年限等字段;
 4. refueling_order:车辆加油订单表,包含组织id,车辆id,车牌号码,加油时间,加油费用等字段
 5. **driven_distance**:车辆行驶里程表,包含组织id,车辆id,车牌号码,年份,行驶里程等字段

Chat2DB安装设置

  1. docke安装Chat2DB服务,
    //通过docker,安装运行最新版本的chat2db容器docker run --name=chat2db -ti -p 10824:10824 -v ~/.chat2db-docker:/root/.chat2db  chat2db/chat2db:latest
  2. 安装完毕:打开链接登录系统,http://172.21.108.51:10824/login
  3. 配置数据库连接
  4. 配置Custom Ai,笔者设置体验了Chat2DB以及OpenAI
  5. 进入WorkSpace页面,连接配置好的业务数据库,并选择里面的的四张业务表(这一步非常重要,否则无法生成准确的SQL语句)
  6. 进入Dashboard页面,尝试生成SQL语句,并显示图表

原理剖析

从GIT上下载并剖析源码,最核心的Text-2-SQL生成代码部分:

  1. ChatController::completions:Controller入口,接受Web端请求,生成SQL,并通过WebSocket返回
    /*** SQL转换模型** @param queryRequest* @param headers* @return* @throws IOException*/@GetMapping("/chat")@CrossOriginpublic SseEmitter completions(ChatQueryRequest queryRequest, @RequestHeader Map<String, String> headers)throws IOException {//默认30秒超时,设置为0L则永不超时SseEmitter sseEmitter = new SseEmitter(CHAT_TIMEOUT);String uid = headers.get("uid");if (StrUtil.isBlank(uid)) {throw new ParamBusinessException("uid");}//提示消息不得为空if (StringUtils.isBlank(queryRequest.getMessage())) {throw new ParamBusinessException("message");}return distributeAISql(queryRequest, sseEmitter, uid);}​
  2. distributeAISql:根据请求语句,以及系统的Custom AI设置进行SQL生成
    /*** distribute with different AI** @return*/public SseEmitter distributeAISql(ChatQueryRequest queryRequest, SseEmitter sseEmitter, String uid) throws IOException {ConfigService configService = ApplicationContextUtil.getBean(ConfigService.class);Config config = configService.find(RestAIClient.AI_SQL_SOURCE).getData();String aiSqlSource = AiSqlSourceEnum.CHAT2DBAI.getCode();if (Objects.nonNull(config)) {aiSqlSource = config.getContent();}AiSqlSourceEnum aiSqlSourceEnum = AiSqlSourceEnum.getByName(aiSqlSource);if (Objects.isNull(aiSqlSourceEnum)) {aiSqlSourceEnum = AiSqlSourceEnum.OPENAI;}uid = aiSqlSourceEnum.getCode() + uid;switch (Objects.requireNonNull(aiSqlSourceEnum)) {case OPENAI :return chatWithOpenAi(queryRequest, sseEmitter, uid);case CHAT2DBAI:return chatWithChat2dbAi(queryRequest, sseEmitter, uid);case RESTAI :case FASTCHATAI:return chatWithFastChatAi(queryRequest, sseEmitter, uid);case AZUREAI :return chatWithAzureAi(queryRequest, sseEmitter, uid);case CLAUDEAI:return chatWithClaudeAi(queryRequest, sseEmitter, uid);case WENXINAI:return chatWithWenxinAi(queryRequest, sseEmitter, uid);case BAICHUANAI:return chatWithBaichuanAi(queryRequest, sseEmitter, uid);case TONGYIQIANWENAI:return chatWithTongyiChatAi(queryRequest, sseEmitter, uid);case ZHIPUAI:return chatWithZhipuChatAi(queryRequest, sseEmitter, uid);}return chatWithOpenAi(queryRequest, sseEmitter, uid);}
  3. chatWithOpenAi:通过选择的业务表结构以及客户的问题生成prompt,来从大模型获取所需的SQL语句
    /*** 使用OPENAI SQL接口** @param queryRequest* @param sseEmitter* @param uid* @return* @throws IOException*/private SseEmitter chatWithOpenAi(ChatQueryRequest queryRequest, SseEmitter sseEmitter, String uid)throws IOException {String prompt = buildPrompt(queryRequest);if (prompt.length() / TOKEN_CONVERT_CHAR_LENGTH > MAX_PROMPT_LENGTH) {log.error("提示语超出最大长度:{},输入长度:{}, 请重新输入", MAX_PROMPT_LENGTH,prompt.length() / TOKEN_CONVERT_CHAR_LENGTH);throw new ParamBusinessException();}List<Message> messages = new ArrayList<>();prompt = prompt.replaceAll("#", "");log.info(prompt);Message currentMessage = Message.builder().content(prompt).role(Message.Role.USER).build();messages.add(currentMessage);buildSseEmitter(sseEmitter, uid);OpenAIEventSourceListener openAIEventSourceListener = new OpenAIEventSourceListener(sseEmitter);OpenAIClient.getInstance().streamChatCompletion(messages, openAIEventSourceListener);LocalCache.CACHE.put(uid, JSONUtil.toJsonStr(messages), LocalCache.TIMEOUT);return sseEmitter;}
  4. 最后根据docker日志,可以发现chat2db 的mysql prompt组成,从这里可以发现真相其实并不复杂,整个Chat2DB可以说了除了通用的数据库方面的增删改查,最核心的部分其实就是根据表结构和用户问题生成prompt了
    请根据以下table properties和SQL input将自然语言转换成SQL查询. MYSQL SQL tables, with their properties:["CREATE TABLE `driven_distance` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT,\n  `organization_id` bigint(20) DEFAULT NULL,\n  `vehicle_id` bigint(20) DEFAULT NULL,\n  `license_plate` varchar(255) DEFAULT NULL,\n  。。。"]SQL input: 2023年,每个季度的加油金额各是多少元?

小结

经过测试,通常的业务查询基本上都能准确生成,另外通过上述一路使用和分析,笔者发现Text2SQL的技术几大要点

  1. 业务简库:跟3D渲染一样,离线渲染用精模,实时渲染用简模。Text2SQL一定要基于业务库做一个“素描”精简库 
  2. 自组Prompt:根据业务上下文所需的库表结构,拼接prompt
  3. 选择合法靠谱的大模型:ChatGPT4肯定是最好的,但在国内目前商业不合法,大家要根据自己业务进行尝试和选型
  4. 用户数据权限:通过拦截器,在prompt中加入当前用户ID,组织id等用户信息,从而巧妙实现用户数据权限等问题

http://www.hengruixuexiao.com/news/50624.html

相关文章:

  • 重庆电商网站建设今日广州新闻头条
  • 手机网站开发模拟微信管理系统
  • 个人做外贸网站平台亚马逊跨境电商
  • 网站中的滚动字幕怎么做成都seo推广员
  • 做网站销售好累方象科技服务案例
  • 手机网站用什么做的刷网站seo排名软件
  • apmserve设置多个网站域名信息查询系统
  • 宝塔wordpress ssl证书seo搜索引擎优化推荐
  • 公司做网站注意什么今天微博热搜前十名
  • 想学网站建设 如何开始在哪买网站链接
  • wordpress获取主题路径河南网站建设优化技术
  • excel做网站二维码简述网络营销的特点及功能
  • 做网站信科网站建设长沙互联网推广公司
  • 目前做win7系统最好的网站山西seo
  • 做设计的搜素材上什么网站seo推广营销公司
  • fusion app百度爱采购怎么优化排名
  • 临漳网站制作提升关键词
  • 用AIDE怎么建设网站北京推广优化公司
  • wordpress模板页面说明上海企业seo
  • 旅游网网站建设系统优化
  • 宿迁558网络专业做网站pageadmin建站系统
  • 做背景图获取网站设计网站logo
  • 乡村旅游网站的建设磁力搜索器kitty
  • 柳市做网站网站管理系统
  • 太原seo报价seo网站建设优化
  • 网页和网站的区别成功营销十大经典案例
  • 网站流量统计平台深圳在线制作网站
  • 高校 门户网站 建设背景网络营销模式有哪些
  • 免费ui设计网站百度账号客服24小时人工电话
  • 我想做app推广怎么做seo课