Java调用ChatGPT(基于SpringBoot和Vue)实现连续对话流式输出和自定义baseUrl202305

pom.xml中引入依赖(当前最新版本为1.3.2,可前往Github页面查看当前最新版本)

例:

上面的session-expiration-time参数很重要,是用来表示这个会话在多久不访问后被销毁,从而实现联系上下文的连续对话。

实现方式是通过ChatCompletionRequest中的user来区分某个会话,而session-expiration-time表示这个会话在多久不访问后被销毁。

如果这里看不懂请看2.1节示例

OpenAiUtils.createChatCompletion(content);//不建议使用1入参content即输入的问题的字符串。但是不建议使用。

这里建议使用下面的方式,通过传入user的值,再结合session-expiration-time参数,可以实现指定某次会话,或者某个用户的连续对话。

OpenAiUtils.createChatCompletion(content,user);//建议使用1还提供一个通用的静态方法是

OpenAiUtils类中还提供了多个可供选择的静态方法,可以自行查看。

上述方法的返回参数是一个list,是因为调整参数返回答案n可以一次性返回多条不同的解答(n为ChatCompletionRequest类中一个参数)。

测试代码:

入参输入:Java序列化的方式

返回结果:

["\n\nJava序列化是将Java对象转换为字节序列的过程,以便在网络上传输或将其保存到磁盘上。Java提供了两种序列化方式:\n\n1.基于Serializable接口的序列化\n\nSerializable接口是Java提供的一个标记接口,用于标记一个类可以被序列化。如果一个类实现了Serializable接口,那么它的所有非瞬态字段都会被序列化。序列化的过程可以通过ObjectOutputStream类来实现,反序列化的过程可以通过ObjectInputStream类来实现。\n\n2.基于Externalizable接口的序列化\n\nExternalizable接口也是Java提供的一个标记接口,用于标记一个类可以被序列化。与Serializable接口不同的是,Externalizable接口需要实现writeExternal和readExternal方法,这两个方法分别用于序列化和反序列化。在序列化的过程中,只有被writeExternal方法显式写入的字段才会被序列化,而在反序列化的过程中,只有被readExternal方法显式读取的字段才会被反序列化。\n\n总的来说,基于Serializable接口的序列化更加简单,但是它会序列化所有非瞬态字段,包括一些不需要序列化的字段,而基于Externalizable接口的序列化可以更加灵活地控制序列化的过程。"]123再次输入:有没有更加高效的序列化框架

最简单的使用方式是

OpenAiUtils.createImage(prompt);1入参表示生成图片的描述文字,还提供了一个通用的静态方法

测试代码

在3.2的基础上做了优化,直接使用responseFormat为b64_json然后解析成图片返回。简单使用方式如下:

OpenAiUtils.downloadImage(prompt,response);1通用方式如下:

publicstaticvoiddownloadImage(CreateImageRequestcreateImageRequest,HttpServletResponseresponse){...}1当CreateImageRequest对象中设置的返回参数n大于1时,会将图片打包成一个zip包返回,当n等于1时直接返回图片。

我用的get工具是idea里面下载的插件FastRequest的,用Postman也是可以的,但是要选择SendandDownload,上图中绿色的箭头是Send,蓝色的是SendandDownload。

生成流式回答的方法是OpenAiUtils的createStreamChatCompletion方法,本工具类重载了同名的多个参数的方法,其中最通用的方法是

publicstaticvoidcreateStreamChatCompletion(ChatCompletionRequestchatCompletionRequest,OutputStreamos){...}1最简单的方法是

publicstaticvoidcreateStreamChatCompletion(Stringcontent){...}1其中的content即本次对话的问题。

这里需要主义的是,上述第一个方法中的OutputStreamos其实是一个必传的对象,上述的最简单的方法实际上是默认传递的System.out这个os对象,也就是将流式问答的结果显示到IDEA的控制台。

如果需要将流式问答的结果显示到其他界面可以自发的传入OutputStreamos对象,这里有一个简便的方法是

publicstaticvoidcreateStreamChatCompletion(Stringcontent,OutputStreamos){...}1只需要输入问题,和输出流对象即可。

代码如下:

@GetMapping("/streamChat")publicvoidstreamChat(Stringcontent){//OpenAiUtils.createStreamChatCompletion(content,System.out);//下面的默认和上面这句代码一样,是输出结果到控制台OpenAiUtils.createStreamChatCompletion(content);}123456然后使用Postman或者其他可以发送Get请求的工具发送请求。

本次测试的结果如下面的Gif图所示

上述的方法中输出流传入的是System.out对象,该对象实际上就是一个PrintStream对象,会把输出结果展示到控制台。

如果需要将输出结果在浏览器展示,可以从前端传入一个HttpServletResponseresponse对象,拿到这个response以后将response.getOutputStream()这个输出流对象传入createStreamChatCompletion方法的入参中。同时,为了避免结果输出到浏览器产生乱码和支持流式输出,需要ContentType和CharacterEncoding。

具体代码如下:

@GetMapping("/streamChatWithWeb")publicvoidstreamChatWithWeb(Stringcontent,HttpServletResponseresponse)throwsIOException{//需要指定response的ContentType为流式输出,且字符编码为UTF-8response.setContentType("text/event-stream");response.setCharacterEncoding("UTF-8");//禁用缓存response.setHeader("Cache-Control","no-cache");OpenAiUtils.createStreamChatCompletion(content,response.getOutputStream());}123456789测试结果过程的Gif图如下所示:

调用的后端方法同2.4.2节方法streamChatWithWeb,前端只需要在界面传入问题,点击提问按钮即可返回结果流式输出到文本框中。

测试结果过程的Gif图如下所示:

查询账单提供了两个方法,金额单位均为美元(USD),且均未对小数位截取,可以根据需要自行选择保留结果小数点位数。

第一个是可以传入开始和结束日期,按照指定日期区间查询的方法:

publicStringbillingUsage(StringstartDate,StringendDate){...}1其中startDate和endDate区间范围不超过100天。

第二个方法是一个入参为可变参数的方法,当不传入参时,查询从2023年1月1日距今的账单的方法,如果有人的订阅日早于2023年1月1日可以传入自定义账单起始日期:

publicStringbillingUsage(String...startDate){...}1查询订阅提供了一个方法,这个方法的出参中包括了订阅到期日,总额度等信息:

publicSubscriptionsubscription(){...}1由于查询总额度和查询使用量是两个接口,这里封装了一个方法来将几个比较有用的参数统一返回的方法,方法如下:

publicBillingbilling(String...startDate){...}1这个方法的入参也是一个可变入参,不传参时,startDate默认为2023-01-01,如果账单开始日早于该天,可以传入指定的startDate。出参Billing中有四个参数:dueDate(额度到期日),total(额度总量),usage(已使用量),balance(余额)。

测试代码如下:

@GetMapping("/billing")publicvoidbilling(){StringmonthUsage=OpenAiUtils.billingUsage("2023-04-01","2023-05-01");log.info("四月使用:{}美元",monthUsage);StringtotalUsage=OpenAiUtils.billingUsage();log.info("一共使用:{}美元",totalUsage);StringstageUsage=OpenAiUtils.billingUsage("2023-01-31");log.info("自从2023/01/31使用:{}美元",stageUsage);Subscriptionsubscription=OpenAiUtils.subscription();log.info("订阅信息(包含到期日期,账户总额度等信息):{}",subscription);//dueDate为到期日,total为总额度,usage为使用量,balance为余额BillingtotalBilling=OpenAiUtils.billing();log.info("历史账单信息:{}",totalBilling);//默认不传参的billing方法的使用量usage从2023-01-01开始,如果用户的账单使用早于该日期,可以传入开始日期startDateBillingposibleStartBilling=OpenAiUtils.billing("2022-01-01");log.info("可能的历史账单信息:{}",posibleStartBilling);}1234567891011121314151617测试结果如下:

这部分可以和第4节放在一起看

@PostMapping("/baseUrl")publicvoidbaseUrl(){//先在application.yml中配置chatgpt.base-urlSystem.out.println("models列表:"+OpenAiUtils.listModels());}12345如果用户不想和Spring集成,则可以使用main方法调用的方式。

下面为了测试方便性,均以main方法做示例,结合SpringBoot使用OpenAiUtils调用的方法请参考github上的demo示例。

在main方法中直接使用请参考第3节扩展部分自定义OpenAiProxyService。

如下所示:

ChatGPTPropertiesproperties=ChatGPTProperties.builder().token("sk-xxx").proxyHost("127.0.0.1").proxyPort(7890).build();OpenAiProxyServiceopenAiProxyService=newOpenAiProxyService(properties);System.out.println("models列表:"+openAiProxyService.listModels());System.out.println("=============================================");System.out.println("text-davinci-003信息:"+openAiProxyService.getModel("text-davinci-003"));12345678测试结果(截取如下):

Stringedit(Stringinput,Stringinstruction){...}1测试代码如下:

ChatGPTPropertiesproperties=ChatGPTProperties.builder().token("sk-xxx").proxyHost("127.0.0.1").proxyPort(7890).build();OpenAiProxyServiceopenAiProxyService=newOpenAiProxyService(properties);Stringinput="Whatdayofthewekisit";Stringinstruction="Fixthespellingmistakes";System.out.println("编辑前:"+input);//下面这句和openAiProxyService.edit(input,instruction,EditModelEnum.TEXT_DAVINCI_EDIT_001);是一样的,默认使用模型TEXT_DAVINCI_EDIT_001System.out.println("编辑后:"+openAiProxyService.edit(input,instruction));System.out.println("=============================================");input="publicstaticvoidmian([String]args){\n"+"system.in.println("helloworld");\n"+"}";instruction="Fixthecodemistakes";System.out.println("修正代码前:\n"+input);System.out.println("修正代码后:\n"+openAiProxyService.edit(input,instruction,EditModelEnum.CODE_DAVINCI_EDIT_001));1234567891011121314151617测试结果如下:

ChatGPTPropertiesproperties=ChatGPTProperties.builder().token("sk-xxx").proxyHost("127.0.0.1").proxyPort(7890).build();OpenAiProxyServiceopenAiProxyService=newOpenAiProxyService(properties);//单文本Stringtext="Onceuponatime";System.out.println("文本:"+text);System.out.println("文本的嵌入向量:"+openAiProxyService.embeddings(text));System.out.println("=============================================");//文本数组String[]texts={"Onceuponatime","Therewasaprincess"};System.out.println("文本数组:"+Arrays.toString(texts));EmbeddingRequestembeddingRequest=EmbeddingRequest.builder().model(EmbeddingModelEnum.TEXT_EMBEDDING_ADA_002.getModelName()).input(Arrays.asList(texts)).build();System.out.println("文本数组的嵌入向量:"+openAiProxyService.embeddings(embeddingRequest));12345678910111213141516测试结果截取如下:

最简单的一种使用方法如下,其他重载方法可通过代码查看。

Stringtranscription(StringfilePath,AudioResponseFormatEnumaudioResponseFormatEnum){...}1下面是一首许嵩的《想象之中》的转录测试。

ChatGPTPropertiesproperties=ChatGPTProperties.builder().token("sk-xxx").proxyHost("127.0.0.1").proxyPort(7890).build();OpenAiProxyServiceopenAiProxyService=newOpenAiProxyService(properties);StringfilePath="src/main/resources/audio/想象之中-许嵩.mp3";System.out.println("语音文件转录后的json文本是:"+openAiProxyService.transcription(filePath,AudioResponseFormatEnum.JSON));//Filefile=newFile("src/main/resources/audio/想象之中-许嵩.mp3");//System.out.println("语音文件转录后的json文本是:"+openAiProxyService.transcription(file,AudioResponseFormatEnum.JSON));12345678910测试结果截取如下:

语音文件转录后的json文本是:{"text":"想像之中想像之中雨過一道彩虹抬起了頭瑟瑟灰色天空想像之中付出會有結果毫無保留信奉你的承諾想像之中這次要愛很久我領略過你眼裡的溫柔熱戀以後你忽然的冰凍但若兩人丟給我去承受想像中很不同想像中一切都和後來不同我承認曾經那麼心動你沒想像中那麼戀舊回憶換不回你的溫柔最後也不是故作冷漠轉過頭我怎麼又一滴淚落我沒想像中那麼脆弱分開後形容也沒消瘦一起踏過了幾座春秋過了愛不是追逐佔有想像之中這次要愛很久我領略過你眼裡的溫柔熱戀以後你忽然的冰凍但若兩人丟給我去承受想像中很不同想像中一切都和後來不同我承認曾經那麼心動你沒想像中那麼戀舊回憶換不回你的溫柔最後也不是故作冷漠轉過頭我怎麼又一滴淚落我沒想像中那麼脆弱分開後形容也沒消瘦一起踏過了幾座春秋過了愛不是追逐佔有你沒想像中那麼戀舊回憶換不回你的溫柔最後也不是故作冷漠轉過頭我怎麼又一滴淚落我沒想像中那麼脆弱分開後形容也沒消瘦一起踏過了幾座春秋領悟了愛不是追逐佔有"}1上述文字输出的时候是繁体,具体使用可以使用重载方法中一个代码TranscriptionRequest入参的方法,其中的language可以指定返回的语言,具体使用可以前往官网查看。

翻译功能可以将任意的音频文件翻译成英文。

Stringtranslation(StringfilePath,AudioResponseFormatEnumaudioResponseFormatEnum){...}1下面是一首许嵩的《想象之中》的翻译测试。

ChatGPTPropertiesproperties=ChatGPTProperties.builder().token("sk-xxx").proxyHost("127.0.0.1").proxyPort(7890).build();OpenAiProxyServiceopenAiProxyService=newOpenAiProxyService(properties);StringfilePath="src/main/resources/audio/想象之中-许嵩.mp3";System.out.println("语音文件翻译成英文后的json文本是:"+openAiProxyService.translation(filePath,AudioResponseFormatEnum.JSON));//Filefile=newFile("src/main/resources/audio/想象之中-许嵩.mp3");//System.out.println("语音文件翻译成英文后的json文本是:"+openAiProxyService.translation(file,AudioResponseFormatEnum.JSON));12345678910测试结果截取如下:

但是有时候需要在项目里自定义多个OpenAiProxyService实例,来装配不同的ChatGPTProperties信息(可以实例化多个Token(sk-xxxxxxxxxxx)使用)。

所以在1.1.6版本中新增了自定义OpenAiProxyService功能。在维持原有SpringBoot项目中全局的一个OpenAiUtils实例的基础上,现在可以自定义不同的OpenAiProxyService实例,并且实例之间的属性是完全隔离的。

下面是一个Demo用来展示使用方法。

这样直接使用new出来的openAiProxyService来调用方法,每个OpenAiProxyService都拥有自己的Token。

在一个SpringBoot项目中,就可以有多个Token,可以有更多的免费额度供使用了。

但是很多人没用国外的服务器,也没有自己的代理,在这里提供一种解决方法,通过使用这种方法,来实现无需国外服务器,也无需代理即可访问OpenAi服务。

在这里先简单介绍一下反向代理的概念。

反向代理是一种用于隐藏服务端真实地址的技术。比如说真实地址是B,但是我们不希望用户直连B,让B的地址暴露,我们就可以使用反向代理,让A的请求转发到B。

然后输入API-Key,点击开始部署(这里我测试只需要长度保持一致,后面几位的api-key可以随便填)。

先设置application.yml,只需要设置token和baseUrl即可。

启动SpringBoot项目。

使用Post工具调用下面的接口生成图片。

结果如下:

访问该链接,就可以得到一个生成的图片~

下面是使用Main方法进行调用的具体代码,只需要设置token和baseUrl即可。

THE END
1.天堂8中文在线最新版在线:简单操作,快速战斗带来无穷挑战天堂8中文在线最新版:简易操作,快速战斗,挑战无极限在现今的数字化时代,网络游戏已经成为了人们休闲娱乐的重要方式之一,天堂8中文在线最新版以其独特的游戏模式和丰富的游戏内容,吸引了大量的玩家,本文将详细介绍这款游戏的简单,山东维奥来特电气有限公司http://weallet.com/23140.html
2.乐鱼全站网页版登录入口(官方)网站/网页版登录入口V8.2.69. 「免费试玩」 乐鱼全站网页版登录入口官网-APP下载支持:winall/win7/win10/win11系统类型:乐鱼全站网页版登录入口下载(2024全站)乐鱼全站网页版登录入口最新版本IOS/安卓官方入口V2(安全平台)登录入口《乐鱼全站网页版登录入口》这里有许多的京南各地的旅行圣地,用户能够在上面发现更多好玩http://www.share.youshengdaojia.com/LAn/detail/iozENtkl.html
3.乐鱼全站网页版登录入口(官方)网站/网页版登录入口V.9.68.178. 「快速娱乐」 乐鱼全站网页版登录入口官网-APP下载支持:winall/win7/win10/win11系统类型:乐鱼全站网页版登录入口下载(2024全站)最新版本IOS/安卓官方入口V74(安全平台)登录入口《乐鱼全站网页版登录入口》 9. 「免费试玩」 乐鱼全站网页版登录入口官网-APP下载http://www.m.share.maqiduowenhua.cn/tyl/detail/mgrzmt.html
4.无障碍辅助浏览工具初始化 后退 前进 刷新 文本模式 放大字体 缩小字体 语音开关 光标 配色 放大页面 缩小页面 指读 连读 显示屏 http://sd.spb.gov.cn/sdsyzglj/wza/index.htm
5.www.chinacec.org.cn/xxxr59112071.shtml菜品上也更加丰富。鸿姐老火锅、神搓搓火锅·酒馆、川庭毛肚火锅的自助套餐内,SKU均超过了80个,捞缘甚至有百余种SKU,而楠火锅也在原有菜品上新增了炸物等等。 自助模式上,也相对灵活。这些被爆改自助的火锅品牌,可以分为两类:一是全线改为自助模式;二是半自助模式,推出限时、限店、限品或限券的自助套餐,万一http://www.chinacec.org.cn/xxxr59112071.shtml
6.GitHub排名第一!免费最强“抢票神器”在手,程序员抢票再不用跪求史上超强抢票助手,紧随12306更新 从项目的更新日志可以看到,这个项目的第一次更新是在2017.5.13,之后一共进行了32次更新,其中大部分是作者本人,也有一些开发者提供了支持。 这个项目基本上是紧随着12306网站的功能更新而更新的,比如去年春运增加的候补功能,在票卖完的情况下预先付款,等其他人退票之后自动补上。该项目https://www.51cto.com/article/608368.html
7.安卓地址入口app平台dota改键精灵使用方法 dota改键精灵是一款专门用于魔兽争霸游戏中各种按键,快捷键修改的dota改键工具,多种方案可供选择,自定义包裹快捷键、技能快捷键、2键合一、3键合一等。dota改键精灵使用方法:1.运行程序2.按照说明设置快捷键3.共有26个方案,要保存此方案请按保存键4.设置完毕进入游戏,程序开始运行5.按ALT+http://www.gl8.co/217891.html
8.A8助手永久免费使用免费GPT4/AI写作 AI论文一键生成 Midjourney AI作图 小虎队软件 淘号阁游戏账号交易-找回包赔 免费看足球比赛直播 讯飞星火AI助手 下歌吧高清音乐 AI写歌/30秒一首歌 免费蓝光影视 免费AI写作 320.AI-全球顶级AI汇聚地 千图网-2亿素材图库 绿色撸美元 https://www.bidianer.com/site/348474
9.DeepL翻译:全世界最准确的翻译解锁DeepL全部功能 –免费试用DeepL Pro 免费试用Pro30天 你正在使用DeepL免费版 翻译多达1,500个字符 翻译3份不可编辑文档/月 10个术语表条目 解锁DeepL Pro全部功能 最大程度数据安全 无限制文本翻译 翻译并编辑更多文档 查看更多功能 使用DeepL应用程序,翻译更快捷 https://www.deepl.com/translator
10.www.lapierrebikes.com.cn/xxxr27532140/20240930/81830134看b站a8直播小天狼网站 江南主管 雀7IIII2扣安稳 黄色黄色一级美女 10.15MB 96好评 中国爆后疯子游戏助手 08.68MB 50%好评42人) 午夜伦理视频 日本亚洲免费观看三级片 一级a性色生活久久ppypp网页版 无码国内操B直播大片 04.98MB 75%好评464人) 成人a级性爱视频 HDXⅩⅩ1819摘花出血http://www.lapierrebikes.com.cn/xxxr27532140/20240930/81830134
11.UAEMMC编程器UA助手OPPO新款飞线刷机解锁软件A5A7A8A9XK1UAEMMC编程器 UA助手OPPO新款飞线刷机解锁软件 A5 A7 A8 A9X K1 R15X R15梦境版解屏幕密码锁工具 AETOOL 洛阳,洛阳设计联盟信息网价:299,洛阳设计联盟信息网掌柜:,http://luoyang.witdes.cn/design/c51/t6ae1c6eb5918.html
12.APP?官方下载登录500vip彩票app手机版苹果,hga010皇冠app苹果,澳门赌城备用网址,PNG平台大全,优优捕鱼星空体育官网登录入口,澳门美高梅国际,AG Game客户端下载,888.sk集团官网,2020送彩金平台243线老虎机技巧,全天免费计划网页版,八马网址,电子路单app,9393体育是皇冠吗235棋牌2021年5.20更新版baoli,2022年澳门正版资料免费公开1877,http://m.wdkgu.cn/EXB/moa/nnCyf.html
13.体重记录助手2024官方下载电脑版 称重系统软件 预览 评论59 简介 燃烧我的卡路里!减肥 !! 加油!! 体重记录助手一款简单易用的体重记录软件,通过体重记录,对体重进行分析,让减肥增肌更简单,帮助您有计划有规律的管理自己的体重,帮助您在减肥之路上走得更远。您不需要劳心劳神的估算每种食物的重量,体重记录助手独有的食物名https://android.myapp.com/myapp/detail.htm?apkName=com.cssqyuejia.wmanagement&apkCode=6&info=285F808AD4EF04A8ECF09E886C630568
14.视听工具助手通过熟练运用文本编辑器手机版,用户能够高效整理笔记,提升学习和工作效率,让生活更加有序充实。 日批软件免费下载的五大步骤轻松上手新手必备a8直播看片使用小窍门 2024-12-14 08:54:40|75 次 **a8直播看片简介**a8直播看片是一款广受欢迎的直播观看软件,专注于提供高质量的直播内容http://vtttv.cn/
15.登录?入口?APP手机版welcome官网手机登录,万利网站,313888.app,132彩票专业版app下载,188体育外围注册www路0149554路com,XJSP4.APP,腾讯分分彩唯一官方网站,九幺澳门,bc988.ccPG电子麻将胡乐大奖视频,118注册,七季助手最新版本更新内容,02彩票软件下载,有一种单双必赢怎么赌www.494444.c0m,4944cc香港免费大全,https://hl10.co,957http://m.btrmtsy.cn/20241215/94968.html
16.34个谷歌浏览器扩展程序合集推荐浏览下载软件教程https://chrome.google.com/webstore/detail/%E8%87%AA%E5%8A%A8%E9%9A%90%E8%97%8F%E4%B8%8B%E8%BD%BD%E6%A0%8F/mefdpaemmomekeifimipnkakhokigbgg/details 7、百度贴吧助手 百度贴吧自动签到,自定义表情,阅读魔法书,翻转帖子中图片,设置朋友昵称,自定义背景图,一键换号,大召唤系统,吧务工具扫描https://www.jb51.net/softjc/114500.html
17.登录入口APP手机版?PG问鼎官方,2024年今晚香港开码结果,bet官网登录入口,9658游戏中心下载9658捕鱼,管家婆精准资料免费大全香港HG6686平台,888集团易记域名,bet体育在线投注网址,6合助手安卓版app彩票软件,AG百家了海洋之神8590优惠大厅,5360彩票官方网址,ballbet贝博靠谱吗,尊龙人生手机版,121手机站冰球突破MGM官网链接,319彩票手机官网,http://m.npago.cn/20241218/453218298538.html
18.登录?入口?APP手机版a8投注网有哪个知道?,6117大发官网版苹果,967彩票app下载安卓,5分彩计算公式,7788彩票app下载922彩票下载,92捕鱼游戏中心下载,ylseoul永乐官网,288彩票下载苹果,5360彩票软件登录360助手7.0.26全部版本,ag环亚手机登录地址,33ios版下载地址,600wcom彩票网,cq9蹦迪35723游戏,588棋牌com6.0版本官网版安卓版,500彩票网http://m.nrmeyppf.com/20241213/8785.html
19.登录?入口APP手机版2024新澳门会员料,澳门球盘,lol菠菜是什么意思,lol外围竞菜,手机凤凰网官方版2020年每月每日打麻将财神财神方位,爱游戏体育官网入口网页版登录,免费赢钱的英雄联盟压外围,153彩票app下载,国际和旗舰厅,6合助手官方下载,欢迎光临奇人网精准计算澳门09电竞平台官网,九游体育入口网址,2016欧冠赛程时间表,21捕鱼游戏http://m.6666688.cc/20241213/2553511526.html
20.登录?入口APP手机版威尼斯电子游戏官网,beat365滚球,足球直播视频在线观看免费,爱博体育官网下载,爱中彩票网页BC贷入口在哪里,sg新霸电子下载,澳门法老王手机版,welcome怎么读,vr竞速娱乐官网,澳门4777777开奖资料,澳门官方正规赌场,澳门彩天天大众网官网,android助手中文版SA真人厅,royai88娱乐,云顶上分,澳门123开奖2023年开奖记录,http://m.zhangtongo.cn/20241214/3912.html
21.登录?站点进入网站专属?免费送彩金不限ld,1122体育app网址,和记最新官方网址,澳门八二站9378,最新AG真人网址推荐91563.Co,86919.lol,c3c7.com,www.53040ss.com,https://www.17cbb.top19体育app下载,我发777耀龙登录网页版,AG捕鱼王客户端下载,宝博旧版游戏大厅官网版,11选五杀号软件8433_ckcc,全沙粤门彩票百家乐,24t6.con,澳门http://m.orientaltec.cn/20241214/144568231311.html
22.登录?站点?进入网站专属?中铝e办2024年最新版本更新,开元平台官方网站入口,亚星游戏官网登录333,hhlz.org,澳门6合开彩挑码助手网页版NG41。cc,澳门最新资料2024年开奖号码查询,四虎现在网站,WWW203COm,香蕉king兑换码最新内容hppttf.aqd.vip,emc官网登录入口,黄色软件下载安装荷花导航,9652.im,今晚上特马充50体育平台,41亿彩票网,122cchttp://m.stuckb.cn/20241214/493.html
23.APP?注册入口登录cq9电子跳高高免费版,金沙彩票站app,加拿大28预测开奖官网咪牌,爱动体育下载,天恒彩票注册澳门大丰收论坛官网,365正规官365正规官网,ob娱乐APP,beplay体育买球犯法不,168澳洲幸运5开奖官网查询金年会金字招牌诚信至上欢迎您,beat365中文官方网站|主页,AG8官网登录网址,55娱乐彩票官网下载app,米兰网页版在线登录明博体育http://m.478yx.com/20241218/1884.html
24.登录?入口APP手机版500彩票1759爱彩,森林舞会免费单机版下载,阳光在线代理,牛牛棋牌小游戏,澳门开奖345开奖摩卡娱乐,365免费每一天内容,电子游戏mg的技巧,ez,1995澳门论坛资料大全246ag平台真人娱乐网,bg大游官方网站,浩博,千炮捕鱼2016旧版本大全,186棋牌官网版安卓版0158BET官网手机APP下载,闲玩棋牌,火博体育官网网页版,987软件下载,http://m.jiuxiao999.com/20241218/894.html
25.登录?入口APP手机版博业体育网页版登录,意昂体育3主管儿童1765827彩钢房,噢州幸运10免费计划,九狐9339app,港澳六合宝355www.aa84g.com,937442香港,224226.com下载,88体育是正规平台吗,1980平台网址免费彩金自助申请,AG真人11选五中奖助手 p7p路cc PG电子赏金女王游戏 www.hkmh.app oh8.kus0.vip 105官网彩票安卓版2017http://m.teeet.cn/BPY/moa/RJVTzo.html
26.网址?入口链接手机版登录ag为什么这么强,爱游戏网页版网址,金亚洲彩,pt老虎机三倍猴子,tu涂游斗地主澳门挂牌正版挂牌完整挂牌记录,澳门电子城,bet16瑞丰体育,ag压大就输,在线老虎机澳门赌场炸金花网址,pt深海大赢家游戏大厅,U乐国际youle,清泰棋牌,安卓官方网站国际服下载安装电子平台送免费体验金,新葡萄娱乐官网版7906,劲爆体育,ag亚游集团http://m.iccuov.com/TPP/cod/laENyMbGTwZ.html
27.速速登录,尊享无限优惠:登录登录站点抢先利彩工具彩票助手,KRACHT官网,伟德开户网站,澳客网(官网),佰盈彩官网登录入口97167国际至尊品牌,999捕鱼游戏中心手机版,中国体育官网首页,500比分篮球,白山棋牌7299vip彩票官网下载,96福彩网手机app,035棋牌官方版下载,红双喜彩票官网qq,7彩网官方下载97622国际游戏网页版糖果派对,8868体育官网进入,腾讯分分彩凤凰平台http://m.adevlcl.cn/20241217/2395.html