淘优惠

淘优惠

chatgpt账号对登录的设备有限制吗 python中chatgpt插件怎么用

双十一活动 0

淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】

chatrandom账号,cnapchat账号,chat client,chatroulette需要登录

盖世汽车讯 据外媒报道,通用汽车公司正在考虑基于ChatGPT技术在车辆上推出一款能聊天的虚拟助手。

图片来源:通用汽车

报道称,通用汽车正在开发一款车载私人助手,部署在微软云中,并使用与ChatGPT相同的AI模型。两年前,通用汽车与微软在自动驾驶技术方面展开合作,而微软在【【微信】】上已经投入了数十亿美元,并已通过Bing Chat等产品产生效益。

通用汽车公司副总裁Scott Miller表示:“ChatGPT未来将应用在每一个领域。”通用汽车公司一直希望努力打造一款能超越特斯拉的更智能的智能驾驶辅助系统,但ChatGPT似乎已经开辟了另一个全新的热门领域,并有望在技术层面挑战特斯拉。

据通用汽车公司的发言人表示, “消费者可以期待未来的车辆拥有更强大、更新颖的新兴技术。”尽管如此,这家汽车巨头并不是仅仅打算将ChatGPT移植到其汽车的数字中控台上,而是计划针对汽车行业对其进行独特的改造。

有了像ChatGPT这样能嵌入汽车信息娱乐软件的智能助手,司机将得到远不止是仅仅播放Spotify上的歌曲这种简单基础功能。例如,用户可以直接要求助手解释汽车的功能,而不是像过去那样阅读大量的纸质操作手册或枯燥的教学视频。

实际上,智能助手也可以执行更智能的任务,例如根据日程空档时间来安排充电或去维护店等。在某些紧急情况下,这种智能功能也能派上用场。在车辆出现发动机或轮胎故障等硬件问题时,基于嵌入ChatGPT功能的智能助手甚至可以提供一步一步的操作指引。

这可以通过语音提示来完成,也可以通过在数字仪表板上调出相关的品牌支持视频。然而,目前还不清楚通用汽车公司具体何时会发布其下一代的汽车助手,以及更重要的,汽车助手是否会集成在驾驶辅助系统中。

不久前,通用汽车刚推出了其高级驾驶辅助技术(ADAS)的下一代产品―Ultra Cruise,替代了之前的Super Cruise技术。如果未来通用汽车将搭载ChatGPT功能的智能助手系统专门用于其豪华车型,例如凯迪拉克Celestiq等,也不足为奇。


番外篇15:libevent简单理解(附libevent官方代码解析,和跨平台服务器、客户端链接代码)

乐可在线全文免费阅读番外篇,病态诱捕小说全文免费阅读番外篇,星落凝成糖电视剧免费观看番外篇,爱情公寓番外篇
    • 一、事件event和事件管理器e【【微信】】介绍
    • 二、libevent流程简介(注册->检测->分派)
    • 三、libevent的好处
    • 四、代码比较
      • 4.1 原来【【微信】】代码
      • 4.2 libevent封装【【微信】】的代码
        • 4.2.1 单【【微信】】的封装
        • 4.2.2 memcached 多【【微信】】的封装(多个网络线程中处理)
    • 五、异步请求池的实现
    • 六、libevent接口
      • 6.1 struct e【【微信】】* e【【微信】】_new 创建事件管理器
      • 6.2 e【【微信】】 创建事件
      • 6.3 e【【微信】】 设置事件
      • 6.3 e【【微信】】_set 设置事件管理器和事件的映射关系
      • 6.4 e【【微信】】 注册事件,包括时间事件;相当于 epoll_ctl;
      • 6.5 e【【微信】】 注销事件
      • 6.6 int e【【微信】】_loop 进入事件循环
      • 6.7 void e【【微信】】_free(struct e【【微信】】*) 释放e【【微信】】结构体
      • 6.8 int event_reinit(struct e【【微信】】* base) fork子进程,想在子进程继续使用e【【微信】】,那么子进程需要对e【【微信】】重新初始化
      • 6.9 int e【【微信】】_dispatch(struct e【【微信】】* base),程序会一直在while循环执行epoll_wait()函数
        • 注意:e【【微信】】 相当于 malloc + e【【微信】】 + e【【微信】】_set
      • 6.10 bufferevent读写数据API(操作e【【微信】】的不删除缓冲区数据)
      • 6.11 bufferevent连接*【【微信】】ind和e【【微信】】(与前面的区别是认为socket已经初始化好,bind完成,甚至也可以做完listen)
      • 6.12 e【【微信】】
      • 6.13 buffere【【微信】】_connect
      • 6.13 buffere【【微信】】cb设置读写对应的回调函数
      • 6.14 buffere【【微信】】,如果相应事件不置为true,bufferevent是不会读写数据的
    • 七、总体流程
      • 普通的events事件的使用方法
      • 实操:使用libevent编写tcp服务器流程
      • bufferevent事件流程
    • 八、官方测试代码解析
      • hello_world.c(libevent跨平台服务器代码)
      • time-test.c(空)
      • signal-test.c(空)
      • linux版本的libevent客户端代码(转移到其他博文,修改为跨平台代码)
      • linux版本libevent服务端代码(比起上面那个服务器接受的客户端有限,非跨平台)
  • libevent就是对【【微信】】模式简单的封装,用了libevent就不需要关注平台特性,无论是linux、window还是mac平台,将网络io处理转化为事件处理
  • event 时间(类似epoll处理的相关的事件)

事件包括:(自己网络编程的时候耦合太高) 1.连接的建立 3次握手 2.连接断开 4次挥手 3.消息的到达 read() 4.消息发送完毕 write()

  • e【【微信】】 事件管理器(类似epoll\poll\selcet)

1.注册感兴趣的事件-e【【微信】】(我们需要写的) 2.事件管理器检测事件的种类- 3.同步的分派异步的请求处理-callback(我们需要写的)

1.平台无关 2.将网络io转化为事件的处理 3.忽略具体的参数细节,io函数的细节,errno的返回值等 4.对具体事件的封装(事件举例:网络io事件、定时事件、信号事件)

  • 原来进行网络编程的时候,连接断开,连接收发数据耦合在一起了
  • 现在把具体的事件用不同的回调函数解耦合

4.2.1 单【【微信】】的封装

  • 展现效果:libevent每秒运行定时器
  • telnet打开连接效果
  • 连接建立好后,客户端打印hello

4.2.2 memcached 多【【微信】】的封装(多个网络线程中处理)

  • 总体思路:主线程配合按CPU核心数创建的工作线程,accept接受新的fd后将fd交给工作线程,在之后客户端就和工作线程通信完成连接的建立、断开、消息的到达、消息的发送
  • accept后的fd利用负载均衡roundroubing就放入一个对应线程的队列中,主线程往对应工作线程的管理写数据,工作线程收到管道的数据就去队列中取连接,注册连接断开、消息到达和发送的事件到事件管理器e【【微信】】
  • 多个【【微信】】:多个线程都有一个【【微信】】

初始化 libevent;对应理解 epoll_create

  • struct e【【微信】】 *e【【微信】】_new(void);

创建事件,初始化event和相应的回调函数

events:监听的事件 #define E【【微信】】 //超时事件 #define E【【微信】】 //读事件 #define E【【微信】】 //写事件 #define E【【微信】】 //信号事件 #【【微信】】 //周期性触发,不加上这个,表示只能触发一次 #define EV_ET //边缘触发模式

cb 回调函数,原型如下: typedef void (*【【微信】】)(e【【微信】】,【【微信】】,void *arg);

建立 event 与 e【【微信】】 的映射关系;

flags的取值 #define E【【微信】】 只触发一次,如果事件没有呗触发,阻塞等待 #defien E【【微信】】 非阻塞方式检测事件是否被触发,不管事件触发与否,都会立即返回 (大多数情况下都会使用另外一个api:int e【【微信】】_dispatch)

补充 int e【【微信】】_loopexit(struct e【【微信】】* base, const struct timeval* tv); 等待一段事件后退出 int e【【微信】】_loopbreak(struct e【【微信】】* base); 立即退出

注意:e【【微信】】 相当于 malloc + e【【微信】】 + e【【微信】】_set

    buffev , struct e【【微信】】 buf); 将数据写到缓冲区的另外一个写法,实际上bufferevent的内部的两个缓冲区结构就是struct e【【微信】】
  • int bufferevent_read(struct bufferevent* bufev, void* data, 【【微信】】); 将bufferevent的读缓冲区数据读到data中,同时将独到的1数据从bufferevent的读缓冲区清除
  • int buffere【【微信】】(struct bufferevent* bufev , struct e【【微信】】* buf) 跟上个函数一样
  • 作用:创建并绑定套接字,并开启监听
  • 函数

struct e【【微信】】* 【【微信】】ind( struct e【【微信】】* base, //base根节点 e【【微信】】_cb cb, //提取cfd后调用的回调 void* ptr, //传给回调的函数 unsigned flags, // LE【【微信】】 关闭时自动释放 LE【【微信】】 端口重用 LE【【微信】】 分配锁,线程安全 LE【【微信】】BLOCKING 文件描述符为阻塞的的

int backlog, con【【微信】】* sa, 【【微信】】 )

#define e【【微信】】(b , x , cb ,arg) e【【微信】】( (b) , (x) ――》x的放的就是具体的信号【【微信】】|EV_PERSIST, (cb) ,(arg) )

  • 例子

signal_event = e【【微信】】(base, SIGINT, signal_cb, (void *)base);

用户可以在调用buffere【【微信】】_new函数时,传一个-1作为socket的文件描述符,然后调用buffere【【微信】】_connect函数连接服务器,无需自己写代码调用connect函数连接服务器。 buffere【【微信】】_connect函数会调用socket函数申请一个套接字fd,然后把这个fd设置成非阻塞。接着就connect服务器,因为该socket fd是非阻塞的,所以不会等待,而是马上返回,连接这工作交给内核来完成。所以,返回后这个socket还没有真正连接上服务器。那么什么时候连接上呢?内核又是怎么通知通知用户呢? 一般来说,当可以往socket fd可写,那就说明已经连接上了。也就是说这个socket fd变成可写状态,就连接上了。 所以,对于“非阻塞connect”比较流行的做法是:用select或者poll这类多路IO复用函数监听该socket的可写事件。当这个socket触发了可写事件,然后再对这个socket调用getsockopt函数,做进一步的判断即可。

  • 函数原型
  • 函数说明 启用读写事件,其实是调用了e【【微信】】将相应读写事件加入事件监听队列poll。正如文档所说,如果相应事件不置为true,bufferevent是不会读写数据的

  • 函数原型

①创建base:e【【微信】】_new() ②创建节点e【【微信】】 ③节点注册e【【微信】】 ④注销事件e【【微信】】 ⑤释放节点e【【微信】】

①创建套接字: ②绑定 ③监听 ④创建e【【微信】】根节点(从这里开始调用libevent接口) ⑤初始化根节点ifd ⑥注册事件 ⑦循环监听 ⑧收尾 e【【微信】】

创建e【【微信】】管理器 struct e【【微信】】* e【【微信】】_new(void); ②创建新的节点:对已经存在的socket创建bufferevent事件,可用于后面讲到的链接*的回调函数中 函数:

struct bufferevent* buffere【【微信】】_new(struct e【【微信】】* base, e【【微信】】, int options);

参数说明:

base:对应根节点 fd: 文件描述符 options ->bufferevent的选项 E【【微信】】 释放bufferevent自动关闭底层接口 BE【【微信】】 能够在多线程下是安全的

设置节点对应文件描述符事件触发的回调函数,设置完就相当于注册读、写事件,但是还需要另外一个API把注册的读写回调函数生效 函数:

void buffere【【微信】】cb(struct bufferevent* bufe【【微信】】event_data_cb readc【【微信】】itecb, bufferevent_e【【微信】】 e【【微信】】, void* cbarg ); 参数说明: e【【微信】】-》异常回调函数,比如说对端断开了 事件: BE【【微信】】 对方关闭连接 BE【【微信】】 出错 BEV_EVENT_TIMEOUT 超时 BE【【微信】】 建立连接 void* 【【微信】】》传给回调函数的参数

使注册的读写回调函数生效 buffere【【微信】】(struct bufferevent* bufev, 【【微信】】); buffere【【微信】】ruct bufferevent* bufev,【【微信】】); events包括: 【【微信】】 ⑤封装底层socket的connect接口,通过调用此函数,将bufferevent事件与通信的socket进行绑定 函数:

int buffere【【微信】】_connect(struct bufferevent* bev, 【【微信】】* serv ,【【微信】】);

参数:

bev 需要提前初始化的bufferevent事件 serv 对端的IP地址、端口、协议的结构指针 sockLen 描述serv的长度

开始事件循环 e【【微信】】_dispatch(base);

跨平台代码传送门