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

目录

  • 1. 配置阶段
    • 1.1 依赖引入
    • 1.2 配置application.yml文件
    • 1.3 注解添加
  • 2. 使用
    • 2.1 生成回答
      • 2.1.1 测试
    • 2.2 生成图片
      • 2.2.1 测试
    • 2.3 下载图片
      • 2.3.1 测试
    • 2.4 生成流式回答
      • 2.4.1 流式回答输出到IDEA控制台
      • 2.4.2 流式回答输出到浏览器页面
      • 2.4.3 流式回答结合Vue输出到前端界面
    • 2.5 查询账单和订阅
      • 2.5.1 测试
  • 3. 扩展
    • 3.1 自定义OpenAiProxyService
  • 3 AI助手展示

源码及更详细的介绍说明参见Git上的README.md文档
https://github.com/asleepyfish/chatgpt

本文结合SpringBoot的Demo地址:https://github.com/asleepyfish/chatgpt-demo

流式输出结合Vue的Demo地址:https://github.com/asleepyfish/chatgpt-vue

后续使用方法和api版本更新均在Github的README.md文档更新,本博客暂停更新~

另外一篇博客有基于此api的产品。https://blog.csdn.net/qq_41821963/article/details/130918024

1. 配置阶段

1.1 依赖引入

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

        <dependency><groupId>io.github.asleepyfish</groupId><artifactId>chatgpt</artifactId><version>1.2.1</version></dependency>

1.2 配置application.yml文件

application.yml文件中配置相关参数(Optional为可选参数)

参数解释
token申请的API KEYS
proxy-host代理的ip
proxy-port代理的端口
model (Optional)model可填可不填,默认即text-davinci-003
chat-model (Optional)可填可不填,默认即gpt-3.5-turbo (ChatGPT当前最强模型,生成回答使用的就是这个模型)
retries (Optional)指的是当chatgpt第一次请求回答失败时,重新请求的次数(增加该参数的原因是因为大量访问的原因,在某一个时刻,chatgpt服务将处于无法访问的情况,不填的默认值为5)
session-expiration-time (Optional)(单位(min))为这个会话在多久不访问后被销毁,这个值不填的时候,即表示所有问答处于同一个会话之下,相同user的会话永不销毁(增加请求消耗)

例:

chatgpt:token: sk-xxxxxxxxxxxxxxxproxy-host: 127.0.0.1proxy-port: xxxxsession-expiration-time: 30

其中token、proxy-host、proxy-port是必填的

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

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

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

1.3 注解添加

启动类上加入图中的注解则将服务注入到Spring中。
在这里插入图片描述

2. 使用

2.1 生成回答

提供了工具类OpenAiUtils,里面提供了相关方法进行调用。
其中最简单的使用方法是:

OpenAiUtils.createChatCompletion(content);// 不建议使用

入参content即输入的问题的字符串。但是不建议使用。

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

OpenAiUtils.createChatCompletion(content, user);// 建议使用

还提供一个通用的静态方法是

public static List<String> createChatCompletion(ChatCompletionRequest chatCompletionRequest) {...}

入参ChatCompletionRequest 里包含模型的一些可调参数。

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

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

2.1.1 测试

测试代码:

@PostMapping("/chatTest")
public List<String> chatTest(String content) {return OpenAiUtils.createChatCompletion(content, "testUser");
}

Post请求

入参输入: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接口的序列化可以更加灵活地控制序列化的过程。"
]

再次输入:有没有更加高效的序列化框架

返回结果:

["是的,Java中有很多高效的序列化框架,以下是一些常用的序列化框架:\n\n1. Protobuf\n\nProtobuf是Google开发的一种高效的序列化框架,它可以将结构化数据序列化为二进制格式,支持多种编程语言。相比于Java自带的序列化方式,Protobuf序列化后的数据更小,解析速度更快。\n\n2. Kryo\n\nKryo是一个快速、高效的Java序列化框架,它可以将Java对象序列化为字节数组,支持多种数据类型。Kryo序列化的速度比Java自带的序列化方式快很多,序列化后的数据也更小。\n\n3. FST\n\nFST是一个高性能的Java序列化框架,它可以将Java对象序列化为字节数组,支持多种数据类型。FST序列化的速度比Java自带的序列化方式快很多,序列化后的数据也更小。\n\n4. Avro\n\nAvro是一个高效的数据序列化系统,它可以将结构化数据序列化为二进制格式,支持多种编程语言。Avro序列化后的数据比Java自带的序列化方式更小,解析速度也更快。\n\n总的来说,这些高效的序列化框架都比Java自带的序列化方式更快、更小、更灵活,可以根据具体的需求选择合适的框架。"
]

可以看出上述两次问答是在一次会话中的,而前面所说的参数session-expiration-time即这个user所代表的会话多久没被继续访问时的销毁时间。单位(min)

2.2 生成图片

最简单的使用方式是

OpenAiUtils.createImage(prompt);

入参表示生成图片的描述文字,还提供了一个通用的静态方法

public static List<String> createImage(CreateImageRequest createImageRequest) {...}

入参CreateImageRequest中有一些可以使用的参数,其中n表示生成图片的数量,responseFormat表示生成图片的格式,格式中分为urlb64_json两种,如果希望返回的是url,则返回的url会在生成一个小时后消失,默认值是url

2.2.1 测试

测试代码

    @Testpublic void testGenerateImg() {OpenAiUtils.createImage("英短").forEach(System.out::println);}

结果
默认情况下会生成一个url,点击去就可以看到图片。
在这里插入图片描述

2.3 下载图片

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

OpenAiUtils.downloadImage(prompt, response);

通用方式如下:

public static void downloadImage(CreateImageRequest createImageRequest, HttpServletResponse response) {...}

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

2.3.1 测试

测试代码

@RestController
public class ChatGPTController {@GetMapping("/downloadImage")public void downloadImage(String prompt, HttpServletResponse response) {OpenAiUtils.downloadImage(prompt, response);}
}

发送get请求,然后选择Send and Download
在这里插入图片描述

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

在这里插入图片描述

2.4 生成流式回答

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

public static void createStreamChatCompletion(ChatCompletionRequest chatCompletionRequest, OutputStream os) {...}

最简单的方法是

public static void createStreamChatCompletion(String content) {...}

其中的content即本次对话的问题。

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

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

public static void createStreamChatCompletion(String content, OutputStream os) {...}

只需要输入问题,和输出流对象即可。

下面将举例具体说明。(本文所有Demo的示例地址: https://github.com/asleepyfish/chatgpt-demo)

2.4.1 流式回答输出到IDEA控制台

代码如下:

@GetMapping("/streamChat")
public void streamChat(String content) {// OpenAiUtils.createStreamChatCompletion(content, System.out);// 下面的默认和上面这句代码一样,是输出结果到控制台OpenAiUtils.createStreamChatCompletion(content);
}

然后使用Postman或者其他可以发送Get请求的工具发送请求。

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

在这里插入图片描述

2.4.2 流式回答输出到浏览器页面

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

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

具体代码如下:

@GetMapping("/streamChatWithWeb")
public void streamChatWithWeb(String content, HttpServletResponse response) throws IOException {// 需要指定response的ContentType为流式输出,且字符编码为UTF-8response.setContentType("text/event-stream");response.setCharacterEncoding("UTF-8");// 禁用缓存response.setHeader("Cache-Control", "no-cache");    OpenAiUtils.createStreamChatCompletion(content, response.getOutputStream());
}

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

在这里插入图片描述

2.4.3 流式回答结合Vue输出到前端界面

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

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

在这里插入图片描述
Vue3 Demo的Git地址在文章开头有~

2.5 查询账单和订阅

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

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

public String billingUsage(String startDate, String endDate) {...}

其中startDateendDate区间范围不超过100天。

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

public String billingUsage(String... startDate) {...}

查询订阅提供了一个方法,这个方法的出参中包括了订阅到期日,总额度等信息:

public Subscription subscription() {...}

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

public Billing billing(String... startDate) {...}

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

2.5.1 测试

测试代码如下:

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

测试结果如下:

四月使用:0.9864320000000001美元
一共使用:2.2074280000000002美元
自从2023/01/31使用:2.2074280000000001美元
订阅信息(包含到期日期,账户总额度等信息):Subscription(object=billing_subscription, hasPaymentMethod=false, canceled=false, canceledAt=null, delinquent=null, accessUntil=1688169600, softLimit=66667, hardLimit=83334, systemHardLimit=83334, softLimitUsd=4.00002, hardLimitUsd=5.00004, systemHardLimitUsd=5.00004, plan=Plan(title=Explore, id=free), accountName=Leo Mikey, poNumber=0, billingEmail=null, taxIds=null, billingAddress=null, businessAddress=null)
历史账单信息:Billing(dueDate=2023-07-01, total=5.00004, usage=2.2074280000000002, balance=2.7926119999999998)
可能的历史账单信息:Billing(dueDate=2023-07-01, total=5.00004, usage=2.2074280000000002, balance=2.7926119999999998)

3. 扩展

3.1 自定义OpenAiProxyService

由于之前的版本中使用@Bean的方式初始化OpenAiProxyServiceOpenAiUtils,导致一个SpringBoot中实例是唯一的。

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

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

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

@GetMapping("/customToken")
public void customToken() {ChatGPTProperties chatGPTProperties = new ChatGPTProperties();chatGPTProperties.setToken("sk-002xxxxxxxxxxxxxxxxxxxxxxxxx");chatGPTProperties.setProxyHost("127.0.0.1");chatGPTProperties.setProxyPort(7890);OpenAiProxyService openAiProxyService = new OpenAiProxyService(chatGPTProperties, Duration.ZERO);// 直接使用new出来的openAiProxyService来调用方法,每个OpenAiProxyService都拥有自己的Token。// 这样在一个SpringBoot项目中,就可以有多个Token,可以有更多的免费额度供使用了openAiProxyService.createStreamChatCompletion("Java的三大特性是什么");
}

在上述方法中,新new了一个ChatGPTProperties对象,并且set了tokensk-002xxxxxxxxxxxxxxxxxxxxxxxxx(这里不需要设置除了tokenproxyHostproxyPort以外的其他属性,因为ChatGPTProperties的其他属性拥有默认值,如果需要对其他属性做修改,可以自行设置。注意:sessionExpirationTime没有默认值,表示会话没有过期时间,如果需要设置会话过期时间,请set该值。

而在application.yml中设置的tokensk-001xxxxxxxxxxxxxxxxxxxxxxxxx,这个token是给全局唯一的OpenAitils用的,这样就可以通过OpenAiProxyService的构造方法new出来一个新的OpenAiProxyService实例,其中构造方法的第二个参数直接填Duration.ZERO就好,表示Http调用请求没有超时时间,后续版本更新中,我会新增一个只有一个入参的构造方法。

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

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

3 AI助手展示

接入微信公众号,AI助手可自动回复。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5474.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HuggingGPT解析:使用 ChatGPT及HuggingFace上的族系解决AI问题

HuggingGPT解析&#xff1a;使用 ChatGPT及HuggingFace上的族系解决AI问题 HuggingGPT是一个利用大型语言模型(LLMs)来解决复杂AI任务的框架。其基本理念是&#xff0c;考虑到LLMs&#xff08;例如ChatGPT&#xff09;在语言理解、生成、交互和推理方面展现出了卓越的能力&…

从ChatGPT思考自动驾驶将如何前行

作者 | Ammie 出品 | 焉知 知圈 | 进“智能底盘群”请加微yanzhi-6,备注底盘 自动驾驶汽车有望彻底改变多个行业&#xff0c;包括人员和货物运输。而实际上面向L4 自动驾驶汽车系统的开发则是一项重大挑战。如今&#xff0c;主要瓶颈则是车辆安全处理驾驶事件“长尾效应”的能力…

外网服务器设置OpenAI代理

文章目录 前言一、准备外网服务器二、安装Nginx三、配置Nginx1. 配置2. 重启Nginx 四、测试1. http2. Python 前言 最近ChatGPT特别火爆&#xff0c;我们国内无法正常调用它的API。 现在考虑使用国外服务器做一个OpenAI API的代理来调用API 一、准备外网服务器 可以选择国内腾…

运用docker 本地搭建chatGPT

下载docker dockers官网 1. 需要重启电脑 2. 重启之后 升级 wsl --update 3. 打开 powershell 4. 输入 升级命令 5.安装完成之后打开docker 使用开源项目 docker安装 1. 使用开源项目&#xff1a;潘多拉 (Pandora) 2.一键安装命令 docker pull pengzhile/pandora docker run…

v2rayN全局代理条件下,如何不让某个网站走代理

前言 因为最近使用ChatGPT需要全局代理&#xff0c;导致打开文献网址时&#xff0c;需要登录&#xff0c;也不能识别机构ip&#xff0c;特别影响看文献。因此就想如何在开全局代理的前提下&#xff0c;打开特定网站不走代理&#xff0c;而直接使用direct。 如何确定网站走的是…

chatgpt赋能Python-pycharm如何跳过教程

PyCharm如何跳过教程&#xff1a;快速掌握Python编程 如果你是一个有10年python编程经验的工程师&#xff0c;那么你肯定不需要再从头开始学习python&#xff0c;更不需要花费大量时间来学习PyCharm的教程。你需要的是一个快速而高效地使用PyCharm的方法&#xff0c;以便能够更…

chatgpt赋能python:Python窗口创建教程

Python窗口创建教程 Python是一种通用编程语言&#xff0c;可用于多种应用程序类型&#xff0c;包括创建桌面应用程序。创建窗口的过程取决于所使用的GUI工具包&#xff0c;如Tkinter、PyQt、wxPython等。本教程将重点介绍如何使用Tkinter模块来创建窗口。 安装Tkinter Tkin…

chatgpt赋能python:入门Python编程:免费教程

入门Python编程&#xff1a;免费教程 Python是一门功能强大&#xff0c;易于学习且免费的编程语言。它在过去十年中成为了世界上最受欢迎的编程语言之一。这是因为Python在多个领域具有广泛的应用&#xff0c;包括科学、数据分析、网络编程、Web开发、人工智能、机器学习、数据…

chatgpt赋能Python-mac版的python怎么用

Mac版Python的使用指南 Python是一种高级编程语言&#xff0c;常用于Web开发、数据分析、机器学习等领域。在Mac系统上&#xff0c;Python的安装和使用非常方便。本文将介绍如何在Mac上安装和使用Python并演示几个常见的Python用例。 Python在Mac上的安装 Mac电脑自带Python…

chatgpt赋能python:在Mac上安装Python指南

在Mac上安装Python指南 概述 Python是一种流行的编程语言&#xff0c;其简单易用、可读性高以及灵活性使得它成为了一名开发工程师的神器。在Mac上安装Python也非常简单&#xff0c;只需要遵循这个指南&#xff0c;就可以轻松地将Python安装到您的Mac上。 步骤 步骤1&#…

【AI探索】我问了ChatGPT几个终极问题

终于尝试了一把ChatGPT的强大之处&#xff0c;问了一下关心的几个问题&#xff1a; chatGPT现在在思考吗&#xff1f;有没有什么你感兴趣的问题&#xff1f; 你认为AI会对人类产生哪些方面的影响&#xff1f; 你对人类所涉及到的学科有了解吗&#xff1f;你认为在哪些方面与人类…

“我非常后悔!”AI之父离开谷歌,警告人类ChatGPT的巨大风险

在人工智能发展突飞猛进的今天&#xff0c;有太多伦理上的问题需要去克服。 美国有个著名的系列电影——《终结者》。 说是在未来的世界&#xff0c;世界已经由机器“天网”来操控&#xff0c;并且机器希望把人类赶尽杀绝。 为了改变未来的历史&#xff0c;挽救人类的命运&…

AI(二):初体验(Cursor、Copilot、Bito、Notion、ChatExcel、Gamma、Tome、ChatPDF、AI-Video、SD、ChatGPTAPI、Midjourney)

Cursor Cursor官网下载&#xff1a;https://www.cursor.so/ && https://github.com/getcursor/cursor Cursor.so是一款基于GPT的代码生成工具&#xff0c;它可以帮助开发者快速生成代码&#xff0c;提高开发效率。GPT是一种自然语言处理技术&#xff0c;可以根据输入…

刘慈欣演讲:ChatGPT预测与我们相反!人类要么遍布宇宙,要么彻底灭亡

保持警觉。 来源&#xff1a;爱范儿&#xff08;ID&#xff1a;ifanr&#xff09; 最近&#xff0c;刘慈欣在直播时透露&#xff0c;自己实在没时间&#xff0c;所以参加科幻大会时用ChatGPT写了一两篇发言稿。 刘慈欣表示&#xff0c;ChatGPT 写得也还挺不错的。 此前刘慈欣发…

2153年,人类已被AI所奴役。就在这一天,作为一名被俘虏的“搜查部队”士兵,你来到了A0007号城外的反抗军基地中

2153年&#xff0c;地球。   人类&#xff0c;已被AI所奴役。   这个AI的缩写名为——PTA&#xff0c;或称“辟塔”。      辟塔的原型&#xff0c;是一个用于分析网络用户消费倾向并立即给出相关引导的软广告程序。   很快&#xff0c;辟塔便成了广大商家的宠儿&…

浅谈【AI、算力赋能】“大算力”时代的到来

&#x1f53b;一、【&#x1f4a3; 话题引入&#xff1a;“AI算力最强龙头”&#xff0c;你怎么看&#xff1f;】 &#x1f648; AI人工智能是否可以取代人类&#xff1f;    &#x1f648; 应不应该限制人工智能的发展&#xff1f;      &#x1f648; AI研究及龙头行业迎…

ChatGPT 骗了全世界!

见字如面&#xff0c;我是军哥&#xff01; ChatGPT 有多火爆就不用说了&#xff0c;一堆读者在后台留言&#xff0c;让我哥聊一聊。今天就来聊聊吧。 关于&#xff0c;ChatGPT 是什么&#xff1f;为什么如此火爆&#xff1f;OpenAI 是什么公司&#xff1f;创始人有多么牛逼...…

卷完职场卷AI,测试真的会被ChatGPT代替吗?

送走最后一车货&#xff0c;最后三个工人&#xff0c;老王吃力的关上大铁门。左手从口袋摸出一盒烟&#xff0c;轻轻一颠&#xff0c;滑落一根&#xff0c;右手娴熟的夹住。掏出打火机&#xff0c;点燃&#xff0c;一丝青烟腾起&#xff0c;萦绕在指头。 夕阳穿过玻璃&#xff…

使用ChatGPT提升记忆效率

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

马斯克要用人工智能对抗人工智能

​关注文章下方公众号&#xff0c;即可免费获取AIGC最新学习资料 导读&#xff1a;马斯克对人工智能可能变得失控并“摧毁人类”的担忧促使他采取行动&#xff0c;发起了一个名为“TruthGPT”的项目。 本文字数&#xff1a;1400&#xff0c;阅读时长大约&#xff1a;9分钟 亿…