SpringBoot接口 - 如何生成接口文档之集成Smart-Doc

上文我们看到可以通过Swagger系列可以快速生成API文档, 但是这种API文档生成是需要在接口上添加注解等,这表明这是一种侵入式方式; 那么有没有非侵入式方式呢, 比如通过注释生成文档? 本文主要介绍非侵入式的方式及集成Smart-doc案例。我们构建知识体系时使用Smart-doc这类工具并不是目标,而是 要了解非侵入方式能做到什么程度和技术思路, 最后 平衡下来多数情况下多数人还是会选择Swagger+openapi技术栈的。

准备知识点

需要了解Swagger侵入性和依赖性, 以及Smart-Doc这类工具如何解决这些问题, 部分内容来自 官方网站。

为什么会产生Smart-Doc这类工具?

既然有了Swagger, 为何还会产生Smart-Doc这类工具呢? 本质上是Swagger侵入性和依赖性。

我们来看下目前主流的技术文档工具存在什么问题:

  1. 侵入性强,需要编写大量注解,代表工具如:swagger,还有一些公司自研的文档工具

  1. 强依赖性,如果项目不想使用该工具,业务代码无法编译通过。

  1. 代码解析能力弱,使用文档不齐全,主要代表为国内众多开源的相关工具。

  1. 众多基于注释分析的工具无法解析jar包里面的注释(sources jar包),需要人工配置源码路径,无法满足DevOps构建场景。

  1. 部分工具无法支持多模块复杂项目代码分析。

什么是Smart-Doc?有哪些特性?

smart-doc是一款同时支持JAVA REST API和Apache Dubbo RPC接口文档生成的工具,smart-doc在业内率先提出 基于JAVA泛型定义推导的理念, 完全基于接口源码来分析生成接口文档,不采用任何注解侵入到业务代码中。你只需要 按照java-doc标准编写注释, smart-doc就能帮你生成一个简易明了的Markdown、HTML5、Postman Collection2.0+、OpenAPI 3.0+的文档。
  • 零注解、零学习成本、只需要写标准JAVA注释。

  • 基于源代码接口定义自动推导,强大的返回结构推导。

  • 支持Spring MVC、Spring Boot、Spring Boot Web Flux(controller书写方式)、Feign。

  • 支持Callable、Future、CompletableFuture等异步接口返回的推导。

  • 支持JavaBean上的JSR303参数校验规范,包括分组验证。

  • 对JSON请求参数的接口能够自动生成模拟JSON参数。

  • 对一些常用字段定义能够生成有效的模拟值。

  • 支持生成JSON返回值示例。

  • 支持从项目外部加载源代码来生成字段注释(包括标准规范发布的jar包)。

  • 支持生成多种格式文档:Markdown、HTML5、Asciidoctor、Postman Collection、OpenAPI 3.0。 Up- 开放文档数据,可自由实现接入文档管理系统。

  • 支持导出错误码和定义在代码中的各种字典码到接口文档。

  • 支持Maven、Gradle插件式轻松集成。

  • 支持Apache Dubbo RPC接口文档生成。

  • debug接口调试html5页面完全支持文件上传,下载(@download tag标记下载方法)测试。

实现案例

从smart-doc 1.7.9开始官方提供了Maven插件,可以通过在项目中集成smart-doc的Maven插件,然后运行插件直接生成文档。 我们的案例基于smart-doc-maven-plugin,生成文档。示例参考官方 配置文档而写。

配置

添加maven的插件

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>com.github.shalousun</groupId><artifactId>smart-doc-maven-plugin</artifactId><version>2.4.8</version><configuration><!--指定生成文档的使用的配置文件,配置文件放在自己的项目中--><configFile>./src/main/resources/smart-doc.json</configFile><!--指定项目名称,推荐使用动态参数,例如${project.description}--><!--如果smart-doc.json中和此处都未设置projectName,2.3.4开始,插件自动采用pom中的projectName作为设置--><!--<projectName>${project.description}</projectName>--><!--smart-doc实现自动分析依赖树加载第三方依赖的源码,如果一些框架依赖库加载不到导致报错,这时请使用excludes排除掉--><excludes><!--格式为:groupId:artifactId;参考如下--><!--也可以支持正则式如:com.alibaba:.* --><exclude>com.alibaba:fastjson</exclude></excludes><!--includes配置用于配置加载外部依赖源码,配置后插件会按照配置项加载外部源代码而不是自动加载所有,因此使用时需要注意--><!--smart-doc能自动分析依赖树加载所有依赖源码,原则上会影响文档构建效率,因此你可以使用includes来让插件加载你配置的组件--><includes><!--格式为:groupId:artifactId;参考如下--><!--也可以支持正则式如:com.alibaba:.* --><include>com.alibaba:fastjson</include></includes></configuration><executions><execution><!--如果不需要在执行编译时启动smart-doc,则将phase注释掉--><phase>compile</phase><goals><!--smart-doc提供了html、openapi、markdown等goal,可按需配置--><goal>html</goal></goals></execution></executions></plugin></plugins>
</build>

其中./src/main/resources/smart-doc.json是配置文件。

{"serverUrl": "http://127.0.0.1", //服务器地址,非必须。导出postman建议设置成http://{{server}}方便直接在postman直接设置环境变量"pathPrefix": "", //设置path前缀,非必须。如配置Servlet ContextPath 。@since 2.2.3"isStrict": false, //是否开启严格模式"allInOne": true,  //是否将文档合并到一个文件中,一般推荐为true"outPath": "D://md2", //指定文档的输出路径"coverOld": true,  //是否覆盖旧的文件,主要用于markdown文件覆盖"createDebugPage": true,//@since 2.0.0 smart-doc支持创建可以测试的html页面,仅在AllInOne模式中起作用。"packageFilters": "",//controller包过滤,多个包用英文逗号隔开,2.2.2开始需要采用正则:com.test.controller.*"md5EncryptedHtmlName": false,//只有每个controller生成一个html文件时才使用"style":"xt256", //基于highlight.js的代码高设置,可选值很多可查看码云wiki,喜欢配色统一简洁的同学可以不设置"projectName": "pdai-springboot-demo-smart-doc",//配置自己的项目名称,不设置则插件自动获取pom中的projectName"skipTransientField": true,//目前未实现"sortByTitle":false,//接口标题排序,默认为false,@since 1.8.7版本开始"showAuthor":true,//是否显示接口作者名称,默认是true,不想显示可关闭"requestFieldToUnderline":true,//自动将驼峰入参字段在文档中转为下划线格式,//@since 1.8.7版本开始"responseFieldToUnderline":true,//自动将驼峰入参字段在文档中转为下划线格式,//@since 1.8.7版本开始"inlineEnum":true,//设置为true会将枚举详情展示到参数表中,默认关闭,//@since 1.8.8版本开始"recursionLimit":7,//设置允许递归执行的次数用于避免一些对象解析卡主,默认是7,正常为3次以内,//@since 1.8.8版本开始"allInOneDocFileName":"index.html",//自定义设置输出文档名称, @since 1.9.0"requestExample":"true",//是否将请求示例展示在文档中,默认true,@since 1.9.0"responseExample":"true",//是否将响应示例展示在文档中,默认为true,@since 1.9.0"ignoreRequestParams":[ //忽略请求参数对象,把不想生成文档的参数对象屏蔽掉,@since 1.9.2"org.springframework.ui.ModelMap"],"dataDictionaries": [{ //配置数据字典,没有需求可以不设置"title": "http状态码字典", //数据字典的名称"enumClassName": "tech.pdai.springboot.smartdoc.constant.ResponseStatus", //数据字典枚举类名称"codeField": "responseCode",//数据字典字典码对应的字段名称"descField": "description"//数据字典对象的描述信息字典}],"errorCodeDictionaries": [{ //错误码列表,没有需求可以不设置"title": "title","enumClassName": "tech.pdai.springboot.smartdoc.constant.ResponseStatus", //错误码枚举类"codeField": "responseCode",//错误码的code码字段名称"descField": "description"//错误码的描述信息对应的字段名}],"revisionLogs": [{ //文档变更记录,非必须"version": "1.1", //文档版本号"revisionTime": "2022-07-01 22:12:01", //文档修订时间"status": "update", //变更操作状态,一般为:创建、更新等"author": "pdai", //文档变更作者"remarks": "init user api" //变更描述},{ //文档变更记录,非必须"version": "1.2", //文档版本号"revisionTime": "2022-07-01 22:12:02", //文档修订时间"status": "update", //变更操作状态,一般为:创建、更新等"author": "pdai", //文档变更作者"remarks": "add address api" //变更描述}],"customResponseFields": [{ //自定义添加字段和注释,一般用户处理第三方jar包库,非必须"name": "code",//覆盖响应码字段"desc": "响应代码",//覆盖响应码的字段注释"ownerClassName": "org.springframework.data.domain.Pageable", //指定你要添加注释的类名"ignore":true, //设置true会被自动忽略掉不会出现在文档中"value": "00000"//设置响应码的值}],"requestHeaders": [{ //设置请求头,没有需求可以不设置"name": "token",//请求头名称"type": "string",//请求头类型"desc": "desc",//请求头描述信息"value":"token请求头的值",//不设置默认null"required": false,//是否必须"since": "-",//什么版本添加的改请求头"pathPatterns": "/app/test/**",//请看https://gitee.com/smart-doc-team/smart-doc/wikis/请求头高级配置?sort_id=4178978"excludePathPatterns":"/app/page/**"//请看https://gitee.com/smart-doc-team/smart-doc/wikis/请求头高级配置?sort_id=4178978},{"name": "appkey",//请求头"type": "string",//请求头类型"desc": "desc",//请求头描述信息"value":"appkey请求头的值",//不设置默认null"required": false,//是否必须"pathPatterns": "/test/add,/testConstants/1.0",//正则表达式过滤请求头,url匹配上才会添加该请求头,多个正则用分号隔开"since": "-"//什么版本添加的改请求头}],"requestParams": [ //设置公共参数,没有需求可以不设置{"name": "configPathParam",//请求名称"type": "string",//请求类型"desc": "desc",//请求描述信息"paramIn": "path", // 参数所在位置 header-请求头, path-路径参数, query-参数"value":"testPath",//不设置默认null"required": false,//是否必须"since": "2.2.3",//什么版本添加的该请求"pathPatterns": "/app/test/**",//请看https://gitee.com/smart-doc-team/smart-doc/wikis/请求高级配置?sort_id=4178978"excludePathPatterns":"/app/page/**"//请看https://gitee.com/smart-doc-team/smart-doc/wikis/请求高级配置?sort_id=4178978}],"responseBodyAdvice":{ //自smart-doc 1.9.8起,非必须项,ResponseBodyAdvice统一返回设置(不要随便配置根据项目的技术来配置),可用ignoreResponseBodyAdvice tag来忽略"className":"tech.pdai.springboot.smartdoc.entity.ResponseResult" //通用响应体}
}

运行测试

可以通过Maven命令生成文档

//生成html
mvn -Dfile.encoding=UTF-8 smart-doc:html

在IDEA中,也可以通过maven插件构建

maven构建日志如下

[INFO] Scanning for projects...
[INFO] 
[INFO] --------------< tech.pdai:115-springboot-demo-smart-doc >---------------
[INFO] Building 115-springboot-demo-smart-doc 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] >>> smart-doc-maven-plugin:2.4.8:html (default-cli) > compile @ 115-springboot-demo-smart-doc >>>
[INFO] 
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ 115-springboot-demo-smart-doc ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 0 resource
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ 115-springboot-demo-smart-doc ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] <<< smart-doc-maven-plugin:2.4.8:html (default-cli) < compile @ 115-springboot-demo-smart-doc <<<
[INFO] 
[INFO] 
[INFO] --- smart-doc-maven-plugin:2.4.8:html (default-cli) @ 115-springboot-demo-smart-doc ---
[INFO] ------------------------------------------------------------------------
[INFO] Smart-doc Start preparing sources at: 2022-07-01 22:43:54
[INFO] Artifacts that the current project depends on: ["org.springframework.boot:spring-boot-starter-web","org.springframework.boot:spring-boot-configuration-processor","org.projectlombok:lombok"]
[INFO] Smart-doc has loaded the source code path: [{"path":"D:/git/tech-pdai-spring-demos/115-springboot-demo-smart-doc/src/main/java"}]
[INFO] Smart-doc Starting Create API Documentation at: 2022-07-01 22:43:54
[INFO] API documentation is output to => D://md2
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.196 s
[INFO] Finished at: 2022-07-01T22:43:55+08:00
[INFO] ------------------------------------------------------------------------

构建后的html如下:

也可以看到还自动提供了mock的数据,以及测试接口的按钮。还包含自定义的返回枚举类型等。

展示效果,可以参看https://api.doubans.com/

生成更多类型的文档

smart-doc 还支持生成如下类型的文档:

//生成markdown
mvn -Dfile.encoding=UTF-8 smart-doc:markdown
//生成adoc
mvn -Dfile.encoding=UTF-8 smart-doc:adoc
//生成postman json数据
mvn -Dfile.encoding=UTF-8 smart-doc:postman
// 生成 Open Api 3.0+, Since smart-doc-maven-plugin 1.1.5
mvn -Dfile.encoding=UTF-8 smart-doc:openapi

进一步理解

结合smart-doc官方文档,我们通过几个问题进一步理解smart-doc。主要内容来源于 官方文档。

注释信息是有限的,smart-doc如何从注释拓展文档内容呢?

我们知道注释的信息是有限的,swagger技术栈的方式通过定义注解来约束并拓展文档中的内容,那么smart-doc如何从注释拓展文档内容呢?

一方面smart-doc的实现初衷是通过使用javadoc文档注释来去除注解式的侵入,因此smart-doc每增加一个功能首先都是去考虑javadoc原生的tag,

下面对smart-doc使用的一些javadoc的注释tag做介绍。

tag名称

使用描述

@param

对于在Spring Boot接口层,对于简单类型的参数必须在使用@param时写上注释描述,对于Entity类型smart-doc则不会检查

@deprecated

可以在注释中用于标记接口已经废弃,作用同@Deprecated注解

@apiNote

@apiNote是JAVA新增的文档tag,smart-doc使用@apiNote的注释作为方法的详细描述,因此可以使用@apiNote来写一段长注释。如果一个方法不写 @apiNote注释说明,smart-doc直接使用方法默认注释填充

另一方面,原生的tag是不够的,所以smart-doc又通过自定义tag来支持更多功能的拓展

tag名称

描述

@ignore

@ignoretag用于过滤请求参数对象上的某个字段,设置后smart-doc不输出改字段到请求参数列表中。关于响应字段忽略的请看【忽略响应字段】如果@ignore加到方法上,则接口方法不会输出到文档。从1.8.4开始@ignore支持添加到Controller上进行忽略不想生成文档的接口类。@ignore也可以用于方法上忽略某个请求参数。

@required

如果你没有使用JSR303参数验证规范实现的方式来标注字段,就可以使用@required去标注请求参数对象的字段,标注smart-doc在输出参数列表时会设置为true。

@mock

从smart-doc 1.8.0开始,@mocktag用于在对象基本类型字段设置自定义文档展示值。设置值后smart-doc不再帮你生成随机值。方便可以通过smart-doc直接输出交付文档。

@dubbo

从smart-doc 1.8.7开始,@dubbotag用于在Dubbo的API接口类上添加让smart-doc可以扫描到Dubbo RPC的接口生成文档。

@restApi

从smart-doc 1.8.8开始,@restApitag用于支持smart-doc去扫描Spring Cloud Feign的定义接口生成文档。

@order

从smart-doc 1.9.4开始,@ordertag用于设置Controller接口或者API入口的自定义排序序号,@order 1就表示设置序号为1。

@ignoreResponseBodyAdvice

从smart-doc 1.9.8开始,@ignoreResponseBodyAdvicetag用于忽略ResponseBodyAdvice设置的包装类。

@download

从smart-doc 2.0.1开始,@downloadtag用于标注在Controller的文件下载方法上,生成debug页面时可实现文件下载测试。并且支持下载文件带请求头参数测试。

@page

从smart-doc 2.0.2开始,@pagetag用于标注在Controller的方法上表示该方法用来渲染返回一个静态页面,生成debug页面时如果发起测试,测试页面会自动在浏览器开启新标签显示页面。

@ignoreParams

从smart-doc 2.1.0开始,@ignoreParamstag用于标注在Controller方法上忽略掉不想显示在文档中的参数,例如:@ignoreParams id name,多个参数名用空格隔开

@response

从smart-doc 2.2.0开始,@responsetag标注在Controller方法上可以允许用这自己定义返回的json example。建议只在返回基础类型时使用,如:Result<String>类型这种泛型是简单原生类型的响应。

@tag

@since 2.2.5, @tag用于将Controller方法分类, 可以将不同Contoller下的方法指定到多个分类下, 同时也可以直接指定Controller为一个分类或多个分类

Maven多模块中使用插件有没有比较好的实践?

在独立的Maven项目中使用smart-doc,当前可以说是如丝般爽滑。但是在Maven的多模块项目中使用smart-doc-maven-plugin时,很多同学就有疑问了, smart-doc插件我到底是放在什么地方合适?是放在Maven的根pom.xml中?还是说各个需要生成API接口文档的模块中呢? 下面就来说说根据不同的项目结构应该怎么放插件。

完全的父子级关系的maven项目:

├─parent
├──common
│   pom.xml
├──web1
│   pom.xml
├──web2
│   pom.xml
└─pom.xml

上面的maven结构假设是严格按照父子级来配置的,然后web1和web2都依赖于common, 这种情况下如果跑到web1下或者web2目录下直接执行mvn命令来编译 都是无法完成的。需要在根目录上去执行命令编译命令才能通过,而smart-doc插件会通过类加载器去加载用户配置的一些类,因此是需要调用编译的和执行命令 是一样的。这种情况下建议你建smart-doc-maven-plugin放到根pom.xml中,在web1和web2中放置各自的smart-doc.json配置。 然后通过-pl去指定让smart-doc生成指定 模块的文档。操作命令如下:

# 生成web1模块的api文档
mvn smart-doc:markdown -Dfile.encoding=UTF-8  -pl :web1 -am
# 生成web2模块的api文档
mvn smart-doc:markdown -Dfile.encoding=UTF-8  -pl :web2 -am

如果不是按照严格父子级构建的项目,还是以上面的结构例子来说。common模块放在类parent中,但是common的pom.xml并没有定义parent。 common模块也很少变更,很多公司内部可能就直接把common单独depoly上传到了公司的Nexus仓库中,这种情况下web1和web2虽然依赖于common, 但是web1和web2都可以在web1和web2目录下用命令编译,这种情况下直接将smart-doc-maven-plugin单独放到web1和web2中是可以做构建生成文档的。

【多模块测试用例参考】

注意: 怎么去使用插件并没有固定的模式,最重要的是熟练Maven的一些列操作,然后根据自己的项目情况来调整。技巧娴熟就能应对自如。 对于插件的使用,从smart-doc-maven-plugin 1.2.0开始,插件是能够自动分析生成模块的依赖来加载必要的源码,并不会将所有模块的接口文档合并到一个文档中。

如果生成文档时遇到问题,该如何调试?

在使用smart-doc-maven-plugin插件来构建生成API文档的过程中可能会出现一些错误问题。官方文档中提供了调试的方案:
  1. 添加smart-doc依赖

因为smart-doc-maven-plugin最终是使用smart-doc来完成项目的源码分析和文档生成的, 通常情况下真正的调试的代码是smart-doc。但这个过程主要通过smart-doc-maven-plugin来排查。

<dependency><groupId>com.github.shalousun</groupId><artifactId>smart-doc</artifactId><version>[最新版本]</version><scope>test</scope>
</dependency>

注意: 使用smart-doc的版本最好和插件依赖的smart-doc版本一致。

  1. 添加断点

添加断点如图所示

  1. Debug模式运行构建目标

maven插件在idea中运行debug非常简单,操作如下图。

这样就可以直接进入断点了。

提示: 上面是通过插件去作为入口调试smart-doc的源码,如果你想调试插件本身的源码执行过程,则将插件的依赖添加到项目依赖中,如下:

<dependency><groupId>com.github.shalousun</groupId><artifactId>smart-doc-maven-plugin</artifactId><version>【maven仓库最新版本】</version>
</dependency>

然后通过上面的类似步骤调试smart-doc-maven-plugin的源码

示例源码

https://download.csdn.net/download/DeveloperFire/87554658

推荐阅读

ChatGPT专题报告:GPT,大模型多模态应用展望.pdf

ChatGPT应用场景分析.pdf

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

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

相关文章

深度学习必备书籍——《Python深度学习 基于Pytorch》

作为一名机器学习|深度学习的博主&#xff0c;想和大家分享几本深度学习的书籍&#xff0c;让大家更快的入手深度学习&#xff0c;成为AI达人&#xff01;今天给大家介绍的是&#xff1a;《Python深度学习 基于Pytorch》 文章目录 一、背景二、内容简介三、新版特色四、作者介绍…

你的下一任老板可能是AI

文丨郝鑫 编丨刘雨琦 “刚开局心态就崩了&#xff0c;面对真人都没那么紧张&#xff0c;磕磕绊绊没答几句&#xff0c;就被提醒超时&#xff0c;眼睛不知道看哪里&#xff0c;动作显得僵硬奇怪&#xff0c;每道题都草草收场&#xff0c;到最后直接放弃&#xff0c;和AI大眼瞪…

chatgpt赋能Python-python_os_ping

Python OS Ping&#xff1a;测试网络连接状态的最佳方式 Python是一种广泛使用的动态编程语言&#xff0c;由于其容易学习和使用的特点&#xff0c;Python成为了最受欢迎的编程语言之一。Python OS Ping是Python编程语言的一个重要功能&#xff0c;它可以使用基于操作系统的命…

四级作文模板

四级作文模板 1&#xff1a;议论文&#xff08;eassy&#xff09;1.1观点选择&#xff08;option,choice,choice,decision&#xff09;1.1.1 模板1.1.2 模板运用 1.2现象解释&#xff08;Why,What&#xff09;1.2.1 模板1.1.2 模板运用 1.3 问题解决&#xff08;How to,solutio…

GPT2实现考公申论文章生成

向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习 公众号&#xff1a;datayx 近几年来&#xff0c;考公的人数越来越多&#xff0c;而申论作为考公非常重要的一部分&#xff0c;也是另很多人头痛的一部分。很多人在考试之前都会背一些优秀范…

ChatGPT:【万能话术模板】+99个提示词

一&#xff1a;万能话术提示模板 【方便观看版】 【方便复制版】 现在你是一位[ ]创作者。你的任务是以[ ]为标题写一份[ ]的文章。 文章内容包含[ ] [ ] [ ]3部分。 听众是 [ ]&#xff0c;他们喜欢 [ ]&#xff0c;看重[ ]。 你的写作风…

用大数据“喂养”出来的AI模型ChatGPT 爆火是大数据、大算力、强算法的支撑,中国缺乏的什么?

先来了解一下ChatGPT的基本情况 ChatGPT本质属于生成式人工智能&#xff0c;属于无监督或半监督的机器学习。与之相关的还有Discriminative modeling区分式模型&#xff0c;区分式模型大多属于监督式学习。 生成性人工智能目前有两种主要的框架&#xff1a;GAN&#xff08;Gene…

人工智障聊天机器人

目录 项目构想 项目感想 项目API调用 项目语言以及库 项目目录 文件构成 代码清单 main&#xff1a;2.Speech_Recognition.py 1. Sound_Recording.py 3.tuling.py 4.Specch_Sythesis.py 问题总结 1.调用playsound库进行播放音频时会出现使用后资源不释放产生以下…

【大数据AI人工智能】意识机器:ChatGPT 能否拥有自我意识?

导语 2022年11月30日,一个现象级应用程序诞生于互联网,这就是OpenAI开发的ChatGPT。从问答到写程序,从提取摘要到论文写作,ChatGPT展现出了多样化的通用智能。于是,微软、谷歌、百度、阿里、讯飞,互联网大佬们纷纷摩拳擦掌准备入场……但是,请先冷静一下…… 现在 all i…

不写代码、靠“玩” ChatGPT 年入百万,提示工程师正变成硅谷新宠

以下文章转发自来源于硅星人 &#xff0c;作者章姝敏 随着 ChatGPT 等 AI 工具的风靡&#xff0c;越来越多人将其作为日常生活和工作的助手。为了能更好地与它对话&#xff0c;一个新兴职业——提示工程师应运而生。用自然语言对话&#xff0c;听起来再日常不过了&#xff0c;为…

2023年最新人工智能入门指南(学习清单)

ChatGPT最近很火&#xff0c;为了帮助想入门人工智能的小伙伴们准备了一份超详细的学习清单 前言 为帮助大家快速入门机器学习、深度学习&#xff0c;根据我自己多年的学习和工作经验&#xff0c;总结了这份保姆级的学习清单&#xff0c;让大家在学习时不走弯路。 这份清单主…

ARM简介及其发展历史

前言 ARM名声很大&#xff0c;最近在学习STM32&#xff0c;也借机梳理一下关于ARM的各种概念和信息。 本文主要内容&#xff1a;ARM一词的含义&#xff0c;ARM的发展历史&#xff0c;ARM cortex系列处理器简介与ARM在不同市场的应用情况。 一. ARM一词的4种含义 1.1 ARM公司 …

【探索 Kubernetes|容器基础进阶篇 系列 4】理解现代云原生时代的引擎

文章目录 系列文章目录&#x1f479; 关于作者一、前言|回顾二、静态和动态视图三、爆火的容器编排工具 Kubernetes 的诞生四、Kubernetes 要解决的问题是什么&#xff1f;五、理解 Kubernetes 全局架构图Master&#xff08;控制节点&#xff09;Node&#xff08;计算节点&…

究诸经典,探寻大模型演变之踪迹

编者按&#xff1a;在仅仅五年的时间里&#xff0c;大语言模型、transformers几乎完全改变了自然语言处理领域。 为了便于快速、扎实、深入地学习大语言模型&#xff0c;本文整理一个简单的经典学术资料列表&#xff0c;供正在入门中的机器学习研究人员和开发者参考。 以下是译…

从ChatGPT看爆火技术概念及医疗领域科技与应用场景

作者&#xff1a;京东健康 陈刚 一、前言 最近OpenAI在官网上宣告了多模态大模型 GPT-4 的诞生&#xff0c;它可能是迄今为止最好的多模态模型。 主要更新内容如下&#xff1a; 1. 逻辑分析能力更加全面、「考试」能力大幅提升 2. 拥有了 识图 能力&#xff0c;可以进行更多元…

ChatGPT生成的程序漏洞百出,程序员的饭碗算是保住了

自去年11月Chat GPT概念推出以来&#xff0c;瞬间风靡全球、热度不减&#xff0c;仅用不到两个月的时间就使月活跃用户数达到1亿。凭借1750亿左右的参数量和关注度创造了互联网应用程序的神话。 对于用户来讲&#xff0c;ChatGPT的出现引领传统互联网彻底迈入AI新时代。由于其在…

【ChatGPT追女孩子攻略】见招拆招

使用ChatGPT写情话可以带给我们很多乐趣和惊喜&#xff0c;这种技术可以为你的爱人创作一篇充满真情实感的情书。在使用这项技术时&#xff0c;首先要明确表达的主题和情感。 接着&#xff0c;向ChatGPT输入一些关于自己和恋人之间的故事或细节&#xff0c;让它能够更好地理解…

2023年的深度学习入门指南(2) - 给openai API写前端

2023年的深度学习入门指南(2) - 给openai API写前端 上一篇我们说了&#xff0c;目前的大规模预训练模型技术还避免不了回答问题时出现低级错误。 但是其实&#xff0c;人类犯的逻辑错误也是层出不穷。 比如&#xff0c;有人就认为要想学好chatgpt&#xff0c;就要先学好Pyth…

chatGPT解读(chatGPT前世今生之今生)

12期&#xff1a;chatGPT解读&#xff08;chatGPT前世今生之今生&#xff09; 验 关注该公众号 证 chatGPT解读 我们带着几个问题&#xff0c;一起去看看chatGPT吧。 上周讲了GPT-1&#xff0c;GPT-2&#xff0c; GPT-3的整体演化过程。那么&#xff0c;既然chatGPT是在…

2023年的深度学习入门指南(13) - 写后端

2023年的深度学习入门指南(13) - 写后端 我们前面学习了用python在本机上写前端&#xff0c;也学习了使用HTML在本机写前端。同理&#xff0c;我们可以写Windows应用&#xff0c;mac应用&#xff0c;iOS应用&#xff0c;Android应用等等以适合各种终端。其实&#xff0c;最通用…