注册
环信即时通讯云

环信即时通讯云

单聊、群聊、聊天室...
环信开发文档

环信开发文档

Demo体验

Demo体验

场景Demo,开箱即用
RTE开发者社区

RTE开发者社区

汇聚音视频领域技术干货,分享行业资讯
技术讨论区

技术讨论区

技术交流、答疑
资源下载

资源下载

收集了海量宝藏开发资源
iOS Library

iOS Library

不需要辛辛苦苦的去找轮子, 这里都有
Android Library

Android Library

不需要辛辛苦苦的去找轮子, 这里都有

如何看待 AI 和 ChatGPT?

当下互联网和移动互联网的流量已经触顶,虽然偶尔还会出现一些爆款的产品,但是流量总量摆在那里,各个产品之间流量只是此消彼长而已。就互联网技术而言,现在大厂们出的互联网技术,基本是那种花很大力气但是收效并不大。在这种情况下,ChatGPT 或者 AI 会是下一个引...
继续阅读 »

当下互联网和移动互联网的流量已经触顶,虽然偶尔还会出现一些爆款的产品,但是流量总量摆在那里,各个产品之间流量只是此消彼长而已。就互联网技术而言,现在大厂们出的互联网技术,基本是那种花很大力气但是收效并不大。在这种情况下,ChatGPT 或者 AI 会是下一个引爆点吗?


1、ChatGPT


首先,让我们来了解下 ChatGPT。


ChatGPT 刚出来那会儿我就用了几次。当时我还调侃了一下,



客观来说,ChatGPT 的效果还是挺震撼的。尤其是用它来生成一些基本的算法和 Android 代码的时候,


IMG_0856.png


对于我来说,我可能会用它来帮助我做润色文本,修正英语翻译中的错误等一些基础性的工作。


ChatGPT 的问题是你无法保证它的结果总是正确,


IMG_0859.png


有时候还会给人一种说正确的废话的感觉。


尽管 ChatGPT 在回答问题方面已经很强大,但把 ChatGPT 和搜索引擎关联起来简直是误导。搜索引擎和 ChatGPT 的区别在于,搜索引擎给你提供的是参考,而 ChatGPT 直接告诉你了一个可能的答案。搜索引擎需要你自己去甄别,这在一定程度上可以保证你得到的答案的正确性。在搜索引擎的应用场景中,ChatGPT 只适合充当一个助手。另一个问题在于,在产品层面,很难将两者有机的结合在一起。因为两者提供的功能是存在重叠的。


ChatGPT 很火,在我看来起最重要的价值是,它是一种重要的人机交互能力。虽然,几年之前涌现出了大批不同品牌的智能音箱,但是那些智能音箱的“智能”还无法和 ChatGPT 媲美。ChatGPT 可以帮助机器更好地理解人类的语言。ChatGPT 的上下文关联的能力还可以通过对话修正 ChatGPT 的答案。想象一下 ChatGPT 和机器人结合在一起的场景。科幻片中的机器人指日可待。这也是我觉得 ChatGPT 这种人工智能的产品形态最大的潜力。


ChatGPT 只是 AI 应用的一个方面,加上之前的 AlphaGo 等,足以彰显 AI 的巨大潜力。


2、谁将被 AI 取代?


在未来,ChatGPT 以及未来的 AI 产品必将会取代一部分人工,甚至现在都已经有了这个苗头。这可不是危言耸听,
比如当下非常火的 AICG 技术。我们可以用 AI 来生成插画。这将取代一部分插画师的角色。


截屏2023-03-16 23.35.16.png


我们可以用 AI 生成模特效果图(现在已经有公司在研究这个),这可能取代一部分模特的角色。可以说,任何重复性的工作都可以被人工智能取代。


不过以上只是从使用价值来讨论 AI. 如果说从情感价值呢?


就比如说,一只猫和一个 ChatGPT 音箱,谁能给我们提供更多的情感价值呢?我觉得是猫。猫的价值在于不可预测性。它有自己的想法、行为。如果从输入信息来看,AI 输入的是二维平面的,但是猫输入的是三维的空间。所以,在这方面,当下的人工智能还无法和猫相比。


不过,假如有一天,AI 机器人已经足够强大,你会愿意和 AI 机器人谈恋爱吗?这可能是不久我们就要面对的问题。


3、AI 即未来


我之前的文章里也提到过互联网红利将尽。事实上有些头部互联网已经在寻找下一个风口。比如之前火过的 Web3 和元宇宙。


对于 web3,我之前提到过,它本质上并没有新的技术产生,是基于产品逻辑的创新。web3 的本质诉求是用户的数据归属和隐私安全。web3 是一次创新,但还不足以引领下一次变革。对于元宇宙,我个人无法理解为什么要放弃现实生活去追求虚拟的生活,还要求虚拟的世界尽可能接近现实。所以,元宇宙更像是大厂推动起来的一个伪风口。


但 AI 不一样!AI 很有可能会推动下一次产业的革新,而且是彻底的革新。生产方式都可能会由此发生翻天覆地的变化。 判断一个技术是否足以称得上变革,一个评价标准是它是否能够提升社会的生产效率。比如,石器时代是从赤手空拳进化到用石器而提升了效率,此外,还有蒸汽和电气带动的工业革命。从这个层面讲,AI 甚至比互联网能带来更大的变革。


But,AI 可能会带来一系列的社会问题。相比于失业而言,更严重的问题在于,但在一个不够公平的社会里,新的生产方式的变革可能会导致社会贫富的分化更加严重。因为,相对公平的社会里可以通过对 AI 企业征收更多的税,然后把税收用在公共福利上让普通人享受社会发展的红利。而不公平的社会里,普通人不仅无法享受到科技、社会进步带来的福利,还可能会因为 AI 失去工作。


4、参与 AI


最近我也有一个想法“是不是现在不学习 AI 就晚了”。AI 学习需要一定的数学门槛,此外,数据和计算资源也是一个门槛。比如,ChatGTP 用到的大模型就需要大量的数据进行训练,需要调几千个参数。这不是小作坊能够搞得起的。但不妨碍我们学习一些入门的 AI,做一些小的产品。大体上还是要了解一些 AI,不然很容易跟社会脱节。


今天我也看到了百度发布的文心一言。花费很短的时间仓促得地做出来,总给人一种趋之若鹜的感觉。


我也常常想一个问题,是不是任何行业都是外国人发现了一个行业,然后一帮中国人进去死命的卷。


科技的创新并不是靠商业判断规划出来的,只有靠兴趣的推动还需要一些冒险精神才能发现新大陆。另一方面也说明,靠中国式的内卷和低容错的生活节奏是很难孕育出创新的。当然我们可以通过看准了机遇之后快速推进。但,说到底,这种方式在科技进步的道路上只能做一个追随者而不是领导者。


总结


新的时代在呼唤着新的英雄,也许下一个乔布斯已经准备在车库里组装自己的产品了。AI 必将引领一次新的变革,让我们拭目以待。


作者:开发者如是说
来源:juejin.cn/post/7211116982513827900
收起阅读 »

“ChatGPT 们” 所需算力真是“贵滴夸张”!

先抛几个数据: 当下,每天有超过 2 亿的人在疯狂地抛出各式各样的问题请求 ChatGPT 回复 如果要完成这 2 亿+ 的咨询量,初始投入需要 3 万+ 块英伟达 A100 GPU 来计算 而 A100 是当下这个星球拥有最强 AI 算力的芯片,买一块至少要...
继续阅读 »

先抛几个数据:


当下,每天有超过 2 亿的人在疯狂地抛出各式各样的问题请求 ChatGPT 回复


如果要完成这 2 亿+ 的咨询量,初始投入需要 3 万+ 块英伟达 A100 GPU 来计算


而 A100 是当下这个星球拥有最强 AI 算力的芯片,买一块至少要 7W+ RMB💴


image.png


意思就是:光计算这些有意义/无意义的问题,就要花费:21 亿+ RMB 💴


这还不算每天的电费/维护费等,众所周知,这种庞大计算类似矿机,很费电


一块 A100,功率 400W,30000 块 A100 ,就是 12_000_000 W,是 12 MW(12 个 100 万瓦)


image.png


目前,“GPT们”就像是井喷一样出现了各类产品,先不管算的结果怎么样,大家先支棱起来、先算起来


有预测:十年后,“GPT们” 一天所需算力的生产功率相当于半个核电站产生的功率,这是离谱且夸张的!全球算力几乎快要无法满足“GPT们”了


image.png


所以,以 ChatGPTPlus(每月20刀) 为代表的 “GPT们” 很贵,因为它本来算力消费就很贵,“用 GPT 编程比招一个普通程序员更贵”的段子并非玩笑。


所以,为什么算力如此重要?为什么微软要和韩国SK集团布局自建核电站?为什么咱们要强调西数东算、云计算等等?从这里也能窥见一斑。


不夸张的说,在未来,国力强弱一方面将通过算力强弱来体现。


image.png


2016年6月的不同国家之间的超级计算机500强的分布


image.png


超级计算机模拟风洞实验


小思考:在未来,算力的瓶颈将如何突破?


—— 目前芯片仍处在传统冯·诺伊曼架构之下,存储和计算区域是分离的,搬运数据“从存储到计算”花费巨大的功耗,如果能实现“存算一体”(就像大脑一样)将提升算力进入新的量级。


所以“存算一体”可能是个方向~


作者:掘金安东尼
链接:https://juejin.cn/post/7210028417617395772
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

在国内如何不用梯子就使用ChatGPT

首先看效果图 如何国内访问 由于OpenAI官方服务器在国内被限制,所以想要在国内直接访问ChatGPT并不容易。但是,今天格子衫将介绍一种无需使用梯子的方法,就可以通过API接口访问ChatGPT。 要使用这种方法,您需要获取一个ApiKey。下面是如何...
继续阅读 »

首先看效果图


1678790956947.jpg


1678790977126.jpg


如何国内访问


由于OpenAI官方服务器在国内被限制,所以想要在国内直接访问ChatGPT并不容易。但是,今天格子衫将介绍一种无需使用梯子的方法,就可以通过API接口访问ChatGPT。


要使用这种方法,您需要获取一个ApiKey。下面是如何获取ApiKey的步骤:


获取 Api Key


首先,您需要注册一个OpenAI的账号(文末有其他方式)。



  1. 使用浏览器打开Account API Keys - OpenAI API,如果没有登录,会跳转到登录页面,按照页面登录即可。

  2. 登录完成以后,再次访问刚才的 Account API Keys - OpenAI API,就可以获取ApiKey了,按照下图操作即可获取ApiKey。


Create api key


点击 Create new secret key,会生成如下图所示的秘钥。


请点击右侧的“复制”按钮将ApiKey复制到剪贴板中,然后立即将它保存到一个安全的地方。这样,即使您的剪贴板内容被覆盖或丢失,您仍然可以访问到ApiKey。你应该跟保存密码一样保存它。


Create api key success


**注意:**ApiKey只会显示一次。如果您不小心丢失了它,您需要重新生成一个ApiKey。这可能需要您再次使用梯子访问OpenAI官方服务器,有点麻烦。


接下来,拿着这个 ApiKey,去访问国内版ChatGPT,把ApiKey输入到下图所示的指定位置;


image-20230312143953871


然后无需梯子就可以直接访问 ChatGPT了,直接在聊天窗口输入即可,可以和ChatGPT进行对话了!如下图所示:


image-20230312144941252


感兴趣的小伙伴们快行动起来吧!


地址是 chatv.fu520.top/


作者:智慧的格子衫
链接:https://juejin.cn/post/7210320199689764924
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

当我把ChatGPT拉进群聊里,我的朋友都玩疯了

前言 近期ChatGPT可以说是太火了,问答、写论文、写诗、写代码,只要输入精确的prompt,他的表现总是让人惊喜。本着打不过就加入的原则。要是把ChatGPT拉入群聊中,会是怎样一番场景?说做就做,花了1个晚上捣鼓了一个小Demo【ChatGPT群聊助手】...
继续阅读 »

前言


近期ChatGPT可以说是太火了,问答、写论文、写诗、写代码,只要输入精确的prompt,他的表现总是让人惊喜。本着打不过就加入的原则。要是把ChatGPT拉入群聊中,会是怎样一番场景?说做就做,花了1个晚上捣鼓了一个小Demo【ChatGPT群聊助手】,凭借它的“聪明才智”,应该可以搞定我的网友、女朋友、老妈的提问...


温馨提示:如果你从没体验过ChatGPT,给大家准备了一个新手体验Demo,免注册!免登陆!免代理!!!!!!,拉到文末可以快速查看噢。


使用效果


效果可看下图


微信图片_20230308154658.png


应用前景


虽Demo仅在小范围的群聊中测试,但ChatGPT语义理解和交互能力确实强大,不仅能联系对话的上下文,还能及时纠正代码bug。不经让人想到,若能将ChatGPT应用于聊天机器人软件,完成回答问题、提供服务、甚至解决问题的任务,帮助人们解决重复性或大量的人工工作,代替传统聊天机器人应用于客服、电商、教育和金融等行业。


相对于传统聊天机器人,ChatGPT可根据用户的要求和特性,及时调整回答的策略以便更准确的回答问题,有更人性化的体验。现在被广泛使用的智能客服还不够智能,ChatGPT所具备的能力,正是客服领域所需要的。


1 准备工作


在国内无法注册ChatGPT账户,因此需要准备如下:


能接收短信的国外手机号: 只需花几块钱,使用国外虚拟号码在线接收短信。可以去一些第三方平台如:sms-activate.org/cn


国外IP: 可以通过一些工具来实现,如通过工具使用美国节点IP。


这里需要注意的是,sms-activate.org选取手机号码国家的时候,建议选择印度,如果选择印度尼西亚,会在openAI报如下错误:


You’ve made too many phone verification requests. Please try again later or contact us through our help center at help.openai.com

微信图片_20230308154704.png


以上是必须的前提工作,有了以上准备工作后,就可以去chat.openai.com/auth/login注册账号了。


2 实现思路


2.1 技术现状


chatGPT提供了基于Web版的交互界面,不便于编程式调用。于是,我们可以通过模拟浏览器去登录,然后把交互过程封装成API接口。


2.2 实现过程


ChatGPT作为一个机器人角色加入群聊,需要在PC端转发ChatGPT问答。因此,我们可以在PC电脑上完成ChatGPT接口的封装,并加入群聊。然后通过即构IM(群聊)将数据实时传输,实现群聊里面与ChatGPT聊天。


微信图片_20230308154709.png


3 PC端封装代码实现


3.1 封装chatGPT调用


我们使用chatgpt-api库来封装调用chatGPT,因此先要安装好依赖库:


npm install chatgpt

安装好chtgpt库后,使用起来就非常简单了:


var ChatGPT, ConversationId, ParentMessageId;
var API_KEY = ;//这里填写KEY
(async () => {
const { ChatGPTAPI } = await import('chatgpt');
ChatGPT = new ChatGPTAPI({ apiKey: API_KEY})
})();
//向ChatGPT发出提问
function chat(text, cb) {
console.log("正在向ChatGPT发送提问:",text)
ChatGPT.sendMessage(text, {
conversationId: ConversationId,
parentMessageId: ParentMessageId
}).then(
function (res) {
ConversationId = res.conversationId
ParentMessageId = res.id
cb && cb(true, res.text)
console.log(res)
}
).catch(function (err) {
cb && cb(false, err);
});
}

注意到,在第二行需要填写API_KEY,登录OpenAI后,打开链接platform.openai.com/account/api…即可获取,如下图所示


微信图片_20230308154713.png


3.2 收发群聊消息


关于即构IM,如果大家感兴趣可以进入官网doc-zh.zego.im了解更多。总所周知,在即时聊天和实时音视频方面,即构IM是个人开发者或者中小型企业首选。因为我们只关注一对一私聊或者群聊,因此,在官方提供的SDK的基础上,我们做了二次封装。具体的封装代码请看附件,这里只贴出封装后的使用代码:


const Zego = require('./zego/Zego.js');

var zim;
function onError(err) {
console.log("on error", err);
}
//发送消息
function sendZegoMsg(isToGroup, text, toID){
Zego.sendMsg(zim, isToGroup, text, toID, function (succ, err) {
if (!succ) {
console.log("回复即构消息发送失败:", msg, err);
}
})
}
//收到消息回调
function onRcvZegoMsg(isFromGroup, msg, fromUID) {
var rcvText = msg.message ;

}
function main() {
let zegoChatGPTUID = "chatgpt"
zim = Zego.initZego(onError, onRcvZegoMsg, zegoChatGPTUID);

}
main();

在收到消息时,判断是否有@chatgpt关键字,如果有的话提取消息内容,然后去调用chatGPT封装好的接口等待ChatGPT回复,并将回复的内容往聊天群里发送。


4 手机端加入群聊与ChatGPT聊天


有了PC端实现后,接下来在手机端只需通过即构IM SDK向群里面@chatgpt发送提问消息即可,当然了,也可以在一对一私聊的时候@chatgpt然后调用chatGPT接口。这些都是可以根据实际需求定制开发,篇幅原因,这里我们只将群聊。


同样的,我们只关注收发消息,因此对即构官方提供的SDK做了二次封装。如果想了解更多细节可以前往官方文档阅读。


对登录ZIM、创建Token等代码这里不详细描述,感兴趣读者可以查看代码附件,代码很简单容易看懂。


首先封装Msg对象,表示消息实体类:


public class Msg {
public String msg;
public long time;
public String toUID;
public String fromUID;
public MsgType type;

public enum MsgType {
P2P,
GROUP
}
}

发送消息二次封装,同一群聊和一对一聊天接口:


public static void sendMsg(ZIM zim, Msg msg, ZIMMessageSentCallback cb) {
// 发送“单聊”通信的信息

ZIMTextMessage zimMessage = new ZIMTextMessage();
zimMessage.message = msg.msg;

ZIMMessageSendConfig config = new ZIMMessageSendConfig();
// 消息优先级,取值为 低:1 默认,中:2,高:3
config.priority = ZIMMessagePriority.LOW;
// 设置消息的离线推送配置
ZIMPushConfig pushConfig = new ZIMPushConfig();
pushConfig.title = "离线推送的标题";
pushConfig.content = "离线推送的内容";
pushConfig.extendedData = "离线推送的扩展信息";
config.pushConfig = pushConfig;
if (msg.type == Msg.MsgType.P2P)
zim.sendPeerMessage(zimMessage, msg.toUID, config, cb);
else
zim.sendGroupMessage(zimMessage, msg.toUID, config, cb);
}

二次封装接收消息,统一通过onRcvMsg函数接收消息。


private void onRcvMsg(ArrayList<ZIMMessage> messageList) {
if (lsArr == null) return;
for (ZIMMessage zimMessage : messageList) {
if (zimMessage instanceof ZIMTextMessage) {
ZIMTextMessage zimTextMessage = (ZIMTextMessage) zimMessage;
if (zimMessage.getTimestamp() < this.startTime)
continue;
String fromUID = zimTextMessage.getSenderUserID();
ZIMConversationType ztype = zimTextMessage.getConversationType();
String toUID = zimTextMessage.getConversationID();
Msg.MsgType type = Msg.MsgType.P2P;
if (ztype == ZIMConversationType.PEER) type = Msg.MsgType.P2P;
else if (ztype == ZIMConversationType.GROUP) type = Msg.MsgType.GROUP;
String data = zimTextMessage.message;
Msg msg = new Msg(type, data, zimMessage.getTimestamp(), fromUID, toUID);
for (MsgCenterListener l : lsArr) l.onRcvMsg(msg);
}
}
}
private ZIMEventHandler handler = new ZIMEventHandler() {

@Override
public void onReceivePeerMessage(ZIM zim, ArrayList<ZIMMessage> messageList, String fromUserID) {
onRcvMsg(messageList);
}



@Override
public void onReceiveGroupMessage(ZIM zim, ArrayList<ZIMMessage> messageList, String fromGroupID) {
onRcvMsg(messageList);
}

@Override
public void onTokenWillExpire(ZIM zim, int second) {
onRenewToken();
}
};

需要注意的是,因为我们目前场景只需关注文本消息,因此没有图片、文件之类的消息做过多考虑。如果有类似需求的读者可以根据官方文档进一步封装。


另外,为了简化,避免每次用户主动拉chatgpt进入一个新群,我们先约好一个超大群ID:group_chatgpt。每次新用户登录就加入这个大群就好。如果有更加细粒度控制需求,可以根据不同用户来创建不同群,然后向chatgpt机器人发送群ID,在PC端开发对应的自动加入对应群功能就好。


对于加群逻辑,也做了二次封装:


public void joinGroup(String groupId) {
zim.joinGroup(groupId, new ZIMGroupJoinedCallback() {
@Override
public void onGroupJoined(ZIMGroupFullInfo groupInfo, ZIMError errorInfo) {
for (MsgCenterListener l : lsArr)
l.onJoinGroup(groupId);
}
});

至此,整个流程开发完成,尽情享受ChatGPT吧。


5 开发者福利


除ChatGPT之外,Demo中使用的开发者工具ZIM SDK也是提升工作效率的利器,ZIM SDK提供了全面的 IM 能力,满足文本、图片、语音等多种消息类型,在线人数无上限,支持亿量级消息并发。同时支持安全审核机制,确保消息安全合规。


ZIM SDK提供了快速集成、接口丰富、成熟的即时通讯解决方案。满足多种业务场景通讯需求,适用于打造大型直播、语聊房、客服系统等场景。即构即时通讯产品 IM 开春钜惠低至1折,限时折扣专业版1200元http://www.zego.im/activity/ze…,也可搭配元宇宙和直播间其他产品组合使用。感兴趣的开发者可到即构官网去注册体验doc-zh.zego.im/article/115…


6 完整代码



作者:RTC_程序猿_Wang
链接:https://juejin.cn/post/7208188844617269306
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

ChatGPT API入门探索,制作AI孙子

最近ChatGPT的热度非常高,OPEN AI也是在不久前刚刚宣布开放ChatGPT商用API。 写这篇文章的契机在于前几天一位群友分享了一个日本程序员基于ChatGPT开发了一个AI佛:HOTOKE AI 例如当用户提问“我不知道生存的目的”,AI佛会做出如...
继续阅读 »

最近ChatGPT的热度非常高,OPEN AI也是在不久前刚刚宣布开放ChatGPT商用API。


写这篇文章的契机在于前几天一位群友分享了一个日本程序员基于ChatGPT开发了一个AI佛:HOTOKE AI


例如当用户提问“我不知道生存的目的”,AI佛会做出如下回答:


image.png


感觉还是挺有意思的,他会从佛教及心理学的角度去给你分析与解释。


但作为一名程序员,我们肯定对背后的原理更感兴趣,于是我又问了他和GPT有什么区别:


image.png


这个回答还是有点出乎我的意料的,于是我更感兴趣了,直接网上找起了教程,也研读了一下OPEN API的文档。所以这篇文章更像是一个学习笔记,也希望能吸引到一些同样感兴趣的小伙伴。


文章最后我们会开发一个基于ChatGPT的AI孙子(就是培养出高启强的那个孙子)


ChatGPT


相信大家能点进来的都知道ChatGPT是啥, 这part就过了吧。


OPEN AI API


Examples


OPEN AI API提供了很多种模型供用户选择,在官网上也提供了很多示例,包括各种各样的模型及其生成的结果。
这是官网示例的地址:platform.openai.com/examples


image.png


我们以Q&A为例:


image.png
可以看到它用的模型是text-davinci-003,然后他说"我是一个高度智能的问答机器人。如果你问的问题有确切答案,我就会给出答案,如果你问的问题是在搞我或者没有明确答案,我会回答不知道"。然后下面就是一些示例。


提示工程(Prompt Engineering)


我们还可以点右上角的Open in Playground来自己尝试下


image.png
可以看到右侧侧边栏有许多参数可以调节,根据调节的参数不同,生成的答案也会有所区别。参数就不细说了,感兴趣的同学可以自己去看,当你鼠标移到那个参数上时,会有对应的解释框弹出来解释这个参数的作用。


这里简单演示了如何去通过提示,引导AI之后回答出你所想要的答案,所以提示(Prompt)就变的尤为重要。事实上,现在提示工程师(Prompt Engineer)已经成为一个炙手可热的岗位,他们的主要任务就是引导AI去学习及训练。
官方文档也用了相当大的篇幅去介绍如何去提示:platform.openai.com/docs/guides…


这里就简单翻译一下开头:


概述

我们的模型可以做任何事情,从生成原创故事到执行复杂的文本分析。因为它们可以做这么多事情,所以你必须明确描述你想要什么。告诉他该怎么做,而不只是简单陈述,这就是一个好提示的秘籍。


创作提示有三个基本准则。




  • 展示和讲述。通过指示、例子或两者的结合,明确你想要什么。如果你想让模型按字母顺序排列一个项目清单,或按情绪对一个段落进行分类,就向它展示你想要的东西。




  • 提供高质量的数据。如果你试图建立一个分类器或让模型遵循一个模式,确保有足够的例子。确保校对你的例子 —— 模型足够聪明,它可以识别拼写错误,并且告诉你,但它也可能认为这是你故意写错的,这都会影响他的回答。




  • 检查你的设置。temperature和top_p参数控制了模型在产生响应方面的确定性。如果你要求它产生一个只有一个正确答案的响应,那么你就想把这些设置得低一些。如果你在寻找更多不同的反应,那么你可能想把它们设置得更高。人们使用这些设置的第一大错误是,假定它们是对"聪明"或"创造性"控制。




到这里大家应该也就知道了,那个AI佛就是通过程序员选择合适的模型,以及对他加以训练,比如告诉他当用户提问时,他需要从佛教及心理学的角度去回答用户的问题。


模型(Models)


模型可以说是非常重要的一部分,也是Open AI的核心。


image.png


ChatGPT用的就是GPT-3.5模型,他主要是面向大众,所以被训练的更加安全,不会输出一些出格的内容。


在GPT-3.5中又包含了几个子模型:


image.png


目前官方推荐的是gpt-3.5-turbo,称此模型能生成最好的结果,并且只需要text-davinci-003十分之一的算力。


价格


目前gpt-3.5-turbo的价格是每一千个token需要0.002🔪。所谓token可以理解为他处理的单词数,1000个token大概可以生成750个单词。
image.png


AI孙子


接下来我们尝试简单写一个AI孙子。


首先当然是创建一个项目,我用的就是简单的create-react-app去创建一个react应用:
npx create-react-app ai-sunzi


使用express写一个简单的服务端:


image.png


重写App.js,我们只需要一个textarea和一个提交按钮


image.png


访问http://localhost:3000 确保可以访问服务端,返回“Hello World!”:


image.png


接下来我们需要去Open AI官方文档中查看如何使用它的API,文档中有一个例子,如何在nodejs中引入包:


image.png


我们把他复制到我们代码中,有些地方还是需要改动一下,比如包的引入不能直接使用import。再将API Key复制到configuration中(API Key需要注册并登录OpenAI,可以免费领取):


image.png


然后我们再查看文档中Completion部分:


completion.png


将其复制到我们代码中并测试:


image.png


此处我将max_token修改为100,因为中文字符所占字节数长一些。随后将prompt参数改为“无论用户输入什么,只需回答这是一个测试”
再次访问localhost:3000可以看到确实可以返回“这是一个测试”。


说明我们的后端已经从OPEN AI得到了返回的数据。


再接下来就简单了,我们只需要把前端和后端连上,再修改prompt,让这个AI表现的像孙子:


image.png


将textarea中的message传入至prompt参数中,再从OPEN AI得到返回的答案,就大功告成了。
以下为一些测试:


image.png


image.png


image.png


Reference: http://www.youtube.com/watch?v=bB7…


作者:RyanGG
来源:juejin.cn/post/7209862607976644645
收起阅读 »

60分钟的文心一言发布会:我带你5分钟看完

李彦宏缓缓走入会场。 亮了,他亮了。 文心一言具有五大功能: 文学创作(写诗歌,写小说) 商业文案创作(给公司起名,写宣传语) 数理逻辑推算(做题) 中文理解(理解华夏文化) 多模态生成(文字、图片、音频、视频) 其中,前三个功能ChatGPT都有,我...
继续阅读 »

李彦宏缓缓走入会场。


live_capture_05_35.png


亮了,他亮了。


live_capture_05_59.png


文心一言具有五大功能:



  1. 文学创作(写诗歌,写小说)

  2. 商业文案创作(给公司起名,写宣传语)

  3. 数理逻辑推算(做题)

  4. 中文理解(理解华夏文化)

  5. 多模态生成(文字、图片、音频、视频)


其中,前三个功能ChatGPT都有,我感觉百度搞不过它。


比如:


live_capture_10_47.png


再比如:


live_capture_12_45.png


但是,后两个功能是ChatGPT不具备的。


首先说中文理解。


老李说文心一言的重点是用中文训练。AI模型能深入中国文化到什么程度呢?


拿洛阳纸贵举例子,他连着问了模型几个问题。


live_capture_15_31.png


尤其是第二个问题,洛阳纸贵,那么当时到底多少钱呢?


live_capture_14_03.png


模型可以结合唐朝时期的物价以及相关文献记载,给出来答案:当时洛阳的纸由八百文涨到两三千文。


甚至让它以“洛阳纸贵”写一篇藏头诗,模型也写了出来。虽然比不上我写的,但是起码它藏头。


我们再来看看ChatGPT对于中文的理解是什么效果。


问ChatGPT洛阳纸贵什么意思,然后再问洛阳的纸多少钱。


123.png


很明显,它对第二个问题回答的不是很好。它没有清楚的理解我的问题,反而还指出了我的错误。它没有说具体多少钱,它说这不是贵的问题,只是一种现象。


而对于藏头诗,ChatGPT也是无能为力。


456.png


它可能知道什么是诗,但并不知道什么是藏头诗。因为,这就有点深入中国文化了。


但是,我相信,你让它解释藏头诗,它凭借搜索引擎是能找到并打印出来的。但是,你让它写,很遗憾。


ChatGPT没有的,文心一言有的,第二个功能就是多模态。


多模态是AI的一个专业名词,比如文本是一种模态,图片是一种模态。多模态就是多种形式。


我们知道,ChatGPT是一个文本单模态的语言模型。


我李哥演示了一个从文字到图片到语音再到视频的例子。


live_capture_17_40.png


海报图片设计出来了。


live_capture_15_52.png


然后再用四川方言讲出来。


live_capture_16_28.png


最后生成视频。


live_capture_17_13.png


其实,后面的几种模态并非是首发,只是一种整合。


语音合成是老技术了,这不用说。


图文转视频的功能,去年开始,在各大自媒体平台也纷纷上线了。包括头条号在内,写完一篇文章,可以自动生成视频。


但是,大多都是素材库的标签拼凑。生成的效果较差,有时候百度自己生成的,自己都无法通过审核。


但是,让ChatGPT干这些,它除了文本模态之外,它都会回复你它只是一个语言模型。


789.png


讲完了五大功能。后面说了三大产业机会。


live_capture_26_30.png


中间休息,亮出了很多AIGC的案例。


live_capture_00_13.png


live_capture_00_22.png


live_capture_00_32.png


live_capture_00_42.png


休息完了,百度首席技术官,王海峰老师对文心一言的技术做了简单解读。


live_capture_01_24.png


其实主要还是说了利用飞桨开源平台实现的。


live_capture_01_57.png


live_capture_04_57.png


然后介绍了文心一言模型的功能组成。


live_capture_10_40.png


live_capture_12_47.png


live_capture_14_10.png


live_capture_19_05.png


live_capture_21_41.png


最后说,飞桨平台好!


live_capture_21_47.png


结束前,官方平台宣布,企业用户可以申请内测。


live_capture_24_06.png


方法在图片里面了,搜索关键词“百度智能云”填写表单就可以。


有个邀请体验说明是这样的:



我们期待与您尽快展开合作,但由于初期名额有限,目前暂不能满足所有人的申请,因此请您仔细填写需求,我们会结合业务场景、访问量等级等信息综合评估,并在您通过评估后尽快给您反馈,本次邀测仅面向企业用户,谢谢您的理解。



最后,我感觉李哥和王老师在讲的时候,声音有些发颤。可能理工男面对大型发布会都有怯场的情况,也可能他们对平台不自信。


整个发布会,都是在播放视频,并没有现场实际操作平台。这也是为了达到最好的发布效果。李哥说,实际操作的话会比较慢,大家需要等。


我感觉,抛去技术不谈,文心一言在中国肯定是有市场的。


因为,我在直播间发布了很多信息,都没有显示。但是,当我和大家万众一心时,我的评论赫然出现在字幕上。


2023-03-16_140740.png


这一点,ChatGPT无论如何是无法做到的!


我们不黑不吹,后续的情况,只能等待用户的反馈了。


作者:TF男孩
来源:juejin.cn/post/7211055301204705338
收起阅读 »

ChatGPT前端领域初探

什么是ChatGPT 官方解释:ChatGPT是一个智能聊天机器人,来自于OpenAI,它能够使用人工智能技术进行对话,并回答用户提出的问题和请求。它由GPT(Generative Pre-trained Transformer)算法支持,可以模拟人类对话和回...
继续阅读 »

什么是ChatGPT


官方解释:ChatGPT是一个智能聊天机器人,来自于OpenAI,它能够使用人工智能技术进行对话,并回答用户提出的问题和请求。它由GPT(Generative Pre-trained Transformer)算法支持,可以模拟人类对话和回答各种问题,包括日常生活、科技、娱乐、健康、财经等领域。ChatGPT可以通过各种渠道进行访问,如网站、社交媒体或移动应用程序。


ChatGPT优势


ChatGPT有以下几个优势:



  1. 可以模拟真人对话:ChatGPT使用GPT算法,可以生成自然语言,使得对话非常流畅和自然,就好像在与一个真人交流一样。

  2. 能够自我学习:ChatGPT使用机器学习技术,可以通过不断的学习来提高自己的答案和回复质量。

  3. 24小时在线:ChatGPT可以在任何时间回答用户的问题,不需要等待人类客服的接待时间。

  4. 处理大量请求:ChatGPT可以处理大量请求,在同一时间内可以同时与多个用户进行对话。

  5. 提高客户满意度:ChatGPT可以回答用户的问题并提供有用的信息,这可以提高用户的满意度和忠诚度。

  6. 提高效率:ChatGPT可以快速响应和解答用户问题,减少人工客服的工作量和时间。


接下来,我们来聊一聊它对前端开发产生了什么样的影响


体验流程


我们需要先拥有一个相应的账户才能体验,这里我直接放上体验流程的链接:sms-activate.org,按照本流程对于没有接触过ChatGPT的童鞋们可以体验一下,这里我就不展开详细解释了。tips:电脑需要科学上网哦~~


辅助开发


重点来了,我们需要先分析我们在日常开发中哪些方面可以用到它,根据开发的流程我们可以从以下几点分析:




  1. 需求阶段:我们做业务开发的前提是以需求为准,对于需求而言,实现的方式多种多样,我们应该分析一下,应该用什么技术去实现,具体对应到哪种框架、第三方依赖库等等。




  2. 编码阶段:这个阶段是业务逻辑的实现阶段,要完成需求中的功能。举个🌰:做登录注册模块,输入账号和密码时一般都需要校验格式(复杂情况),这时正则表达式不失为一个好的办法,此时我们的主角就该登场了~~ 话不多说,直接上图:


    image.png


    经验证:^[a-zA-Z0-9]{6,}$ 符合预期
      let reg = /^[a-zA-Z0-9]{6,}$/
    let str = '0203'
    let str2 = 'yk0203'
    console.log(reg.test(str), 'str') // false
    console.log(reg.test(str2), 'str2') // true



这个正则限制比较简单,来个复杂点的吧:


image.png


image.png tips:解释满分。


这里我就不做test了,更复杂的大家可以自己尝试~~



  1. 代码优化:我们在在编码阶段完成功能后,应该考虑代码优化之道,优化代码包括多个层面,提高代码的复用性就是其中一个方面,直接上demo说明一下:


image.png
在这个demo中,我们定义了两个函数,一个用于计算两个数的和,另一个用于计算两个数的差。通过调用这两个函数,我们可以实现复用性,避免在不同的地方重复编写相同的计算代码。此外,我们还可以通过将这些函数放入一个模块中,从而实现更高程度的复用性。将这两个函数放入一个名为"calculator.py"的模块中,然后在其他文件中引入这个模块,就可以在其他地方轻松地重用这些函数。然后我又向它发起提问:


image.png


image.png
我们使用JavaScript语言实现了与前面Python demo相同的功能。将这两个函数放入一个名为"Calculator.js"的模块中,然后在其他文件中引入这个模块,就可以在其他地方轻松地重用这些函数。其实这种思想在前端已经老生常谈了。



  1. 代码重构:一般来说,一个项目经过多个人先后开发并维护,每个人的开发习惯也不尽相同,最终导致代码中很多逻辑不是很清晰,尤其是那些很久之前的项目,再加上当时没有添加注释,维护效率不高,这个时候我们可以考虑下重构下部分代码,用图来说话:


image.png
这里只是一个简单的demo,项目中重构代码要比这个复杂(慎重考虑是否进行代码重构),说到这里,养成良好的编码习惯就显得特别重要啦,比如定义方法时语义化,适当给方法添加注释等,我们的主角也是也可以帮忙添加注释的,请看:


image.png


function factorial(n) { 
if (n === 0) return 1;
else return n * factorial(n-1);
}
//示例输出
console.log(factorial(5)); //120
console.log(factorial(10)); //3628800

image.png


// 定义递归函数,计算阶乘 
function factorial(n) {
if (n === 0) {
// 当 n 等于 0 时,阶乘结果为 1
return 1;
} else {
// 当 n 不等于 0 时,调用函数自身来计算阶乘
return n * factorial(n-1);
}
}
// 示例输出
console.log(factorial(5)); //120
console.log(factorial(10)); //3628800

然后我又追问:


image.png
综上,我们想要主角帮我们处理问题,就应该把条件罗列清晰,否则主角也给不了最完善的回答,它有时在处理基本数学问题时出错,有时无法全面理解逻辑,并且甚至会提供完全错误的事实来支持其答案。OpenAI 已经承认了这个问题,并表示“ChatGPT 有时会写出听起来合理但是不正确或无意义的答案”。ChatGPT 是一种辅助工具,能够理解复杂的问题。但最好也不要完全相信它所说的一切。


tips:提问和回答的截图均来自VScode的ChatGPT中文版扩展插件(站在了大佬的肩膀上),有兴趣的童鞋可以自行搜索体验一波~


ChatGPT的现状与未来


目前,OpenAI官方已经官宣了GPT-4,只不过还没完全开放,并且门槛较高,发展前景还是相当nice的。


总结


总体看来,未来可期~~,对于希望在工作中提升效率的开发人员来说是一柄利剑。然而,它的回答也不是100%准确的,因此在将其用于更高级的任务之前,需进行深究。到此,ChatGPT的初探到此结束,感谢各位看官。有问题欢迎评论区留言。


作者:青灬河
来源:juejin.cn/post/7210653822849548346
收起阅读 »

GPT-4 就要来了,你准备好了吗

GPT-4 即将面世,它到底是擎天柱还是威震天? 呆鸟说:“ChatGPT 是具备人机对话能力的人工智能,一经问世,就给世人带来了前所未有的新奇体验。短短几个月时间,它就占据了人们的视野。有人好奇,有人担忧,有人看到了致富的机会,也有人担心 AI 会夺走我们...
继续阅读 »

GPT-4 即将面世,它到底是擎天柱还是威震天?



呆鸟说:“ChatGPT 是具备人机对话能力的人工智能,一经问世,就给世人带来了前所未有的新奇体验。短短几个月时间,它就占据了人们的视野。有人好奇,有人担忧,有人看到了致富的机会,也有人担心 AI 会夺走我们的饭碗。ChatGPT 的升级版 GPT-4 也即将问世,面对更强大的 AI,我们应当何去何从呢”



GPT-3 是 ChatGPT 的核心,它是一个超大规模的大语言模型(large language models,LLMs)。GPT-3 的英文全称是生成式预训练转换器-3(generative pre-trained transformer 3),是基于 Transformer 架构开发的大型语言模型,拥有超过 1750 亿个参数。公众可以通过 OpenAI API 访问。ChatGPT 的 API 用户界面简单易用,只需“输入文本”,即可“输出文本”,无需用户具备任何专业技术知识。


据传,OpenAI 正在开发 GPT-4,该模型的参数可能高达 100 万亿,但 OpenAI 的首席执行官 Sam Altman 反驳了这一说法。


那么,GPT-4 与 GPT-3 到底有何不同,它是否会颠覆我们现有的认知?本文将一一对此进行说明。


预计 GPT-4 将在 2023 年发布


汽车人首领 ~ 擎天柱
汽车人首领 ~ 擎天柱


虽然尚未正式官宣,但 IT 界对 GPT-4 的传言数不胜数,预计 OpenAI 很有可能会在今年发布 GPT-4。尽管有传言称微软必应的聊天功能中使用了新版 GPT,但目前测试用户必须排队等待才能使用由 ChatGPT 支持的新必应,而且也无法确定新必应的聊天功能是否使用了新版本的 GPT。


在 ChatGPT 发布之前,即 2022 年底,OpenAI 只允许指定的合作伙伴、付费客户和学术机构使用 GPT-3。预计在GPT-4 发布之前,OpenAI 也会采取类似的方式限制 GPT-4 的使用人员。


GPT-4 可能不会比 GPT-3 训练更多的数据


有传言称,GPT-4 的参数规模将比 GPT-3 大 100 倍,即 17 万亿个参数。但 Altman 曾表示,GPT-4 的参数规模可能并不会比 GPT-3 大很多,因为改进的重点应该是利用现有数据的能力,而不是添加更多的数据。


与 GPT-3 竞争的 Megatron 3(注:Megatron 是变形金刚里霸天虎的首领,中文名为威震天)也是一种大语言模型,它训练的数据比 GPT-3 多,但在测试效果并没有超越 GPT-3,这表明在 AI 领域,规模更大并不一定意味着效果更好。改进算法将降低 GPT-4 和 ChatGPT 的运行成本,这将是 ChatGPT 想要取代谷歌成为最流行搜索引擎的重要因素。


霸天虎首领 ~ 威震天
霸天虎首领 ~ 威震天


GPT-4 将生成更好的编程语言代码


ChatGPT 令人印象最深刻的一点是它不仅可以生成人类语言,还可以生成 Javascript、Python、C++ 等编程语言的代码,可以说是软件开发、Web 开发和数据分析统统都能搞定。


有消息称,目前,OpenAI 正在积极招聘擅长使用人类语言描述代码功能的程序员,预计 GPT-4 将推动 AI 突破生成编程代码的新境界。这种趋势将进一步推动开发工具的革命,例如,微软旗下的 Github 推出的 Copilot 使用的就是经过微调的 GPT-3,提供了把人类自然语言转换为代码的能力。


GPT-4 将使 AI 生成编程代码的能力迈向新的境界。除了生成人类语言,ChatGPT 还能生成 JavaScript、Python、C++ 等编程语言的代码,在软件开发、Web开发和数据分析等领域都将有广泛的应用。


据称,OpenAI 正在招聘能以人类语言描述代码功能的程序员,这将进一步推动开发工具的革命。例如,微软旗下的 Github 推出的 Copilot 使用的就是经过微调的 GPT-3,能够把人类自然语言转换为代码。


总之一句话,就是让程序员开发干掉程序员的程序


GPT-4 不会添加图形功能


有人曾预测 GPT-4 将整合 GPT-3 的文本生成和 Dall-E 2(OpenAI 的另一款 AI 产品)的图像创作功能,如果 能提供数据可视化功能,ChatGPT 将更加完美。但 Altman 否认了这一点,并表示 GPT-4 仍只提供文本生成的功能。


Dall-E 生成的图像
Dall-E 生成的图像


有人会对 GPT-4 失望


虽然 GPT-3 的闪亮登场让整个世界都兴奋不已,但 GPT-4 的表现可能并不会让人再次惊艳。计算机第一次写诗的时候,你可能会觉得震撼,但几年后,即使能让 AI 把诗写得更优美,也不会再给人带来同样的震撼。


Altman 在今年一月的一次采访中曾说过,“有关 GPT-4 的传言很荒谬,都是空穴来风,只怕是希望越大,失望越大。”


那么,我亲爱的读者们,你们对此是怎么看的呢?


有兴趣写书的联系我


Nuxt3 小册推荐


作者:呆鸟
来源:juejin.cn/post/7205842390842114085
收起阅读 »

面向 ChatGPT 开发 ,我是如何被 AI 从 “逼疯” 到 “觉悟” ,未来又如何落地

对于 ChatGPT 如今大家应该都不陌生,经过这么长时间的「调戏」,相信大家应该都感受用 ChatGPT 「代替」搜索引擎的魅力,例如写周报、定位 Bug、翻译文档等等,而其中不乏一些玩的很「花」的场景,例如: ChatPDF :使用 ChatPDF...
继续阅读 »

对于 ChatGPT 如今大家应该都不陌生,经过这么长时间的「调戏」,相信大家应该都感受用 ChatGPT 「代替」搜索引擎的魅力,例如写周报、定位 Bug、翻译文档等等,而其中不乏一些玩的很「花」的场景,例如:




  • ChatPDF :使用 ChatPDF 读取 PDF 之后,你可以和 PDF 文件进行「交谈」,就好像它是一个完全理解内容的「人」一样,通过它可以总结中心思想,解读专业论文,生成内容摘要,翻译外籍,并且还支持中文输出等





  • BiBiGPT : 一键总结视频内容,主要依赖字幕来做总结,绝对是「二创」作者的摸鱼利器。





所以把 ChatGPT 理解为「搜索引擎」其实并不正确,从上述介绍的两个落地实现上看, ChatGPT 不是单纯的统计模型,它的核心并不是完全依赖于它的「语料库」,更多来自于临场学习的能力「 in-context learning」,这就是 ChatGPT 不同于以往传统 NLP「一切都从语料的统计里学习」的原因



当然,我本身并非人工智能领域的开发者,而作为一个普通开发者,我更关心的是 ChatGPT 可以如何提升我的开(mo)发(yu)效率,只是没想到随手一试,我会被 ChatGPT 的 「 in-context learning」 给「逼疯」。



ChatGPT & UI


相信大家平时「面向」 ChatGPT 开发时,也是通过它来输出「算法」或者「 CURD」 等逻辑居多,因为这部分输出看起来相对会比较直观,而用 ChatGPT 来绘制前端 UI 的人应该不多,因为 UI 效果从代码上看并不直观 ,而且 ChatGPT 对与 UI 的理解目前还处于 「人工智障」的阶段。



但是我偏偏不信邪。。。。。



因为近期开发需求里恰好需要绘制一个具有动画效果的 ⭐️ 按键,面对这么「没有挑战性」的工作我决定尝试交给 ChatGPT 来完成,所以我向 ChatGPT 发起了第一个命令:



「用 Flutter 画一个黄色的五角星」




结果不负众望,关键部分如下代码所示,Flutter 很快就提供了完整的 Dart 代码,并且还针对代码提供了代码相关实现的讲解,不过运行之后可以看到,这时候的 ⭐️ 的样式并不满足我们的需求。



此时顶部的角也太「肥」了 。




所以我随着提出了调整,希望五角星的五个角能够一样大,只是没想到我的描述,开始让 ChatGPT 放飞自我



也许是我的描述并不准确?




在我满怀期待的 cv 代码并运行之后,猝不及防的「五角星」差点没让我喷出一口老血,虽然这也有五个角,但是你管这个叫 「五角星」 ???



这难道不是某个红白机游戏里的小飞机??




甚至于在看到后续 ChatGPT 关于代码的相关讲解时,我觉得它已经开始在「一本正经的胡说八道」,像极了今天早上刚给我提需求的产品经理



哪里可以看出五个角相同了???




接着我继续纠正我的需求,表示我要的是 「一个五个角一样大的黄色五角星」 ,我以为这样的描述应过比较贴切,须不知·····



如下代码所示,其实在看到代码输出 for 循环时我就觉得不对了,但是秉承着「一切以实物为准」的理念,在运行后不出意外的发生了意外,确实是五个角一样大,不过是一个等边五边形。



算一个发胖的 ⭐️ 能解(jiao)释(bian)过去不?




再看 ChatGPT 对于代码的描述,我发现我错了,原来它像的是「理解错需求还在嘴硬的我」,只是它在说「这是一个五角星」的时候眼皮都不会眨一下



AI:确实五个角一样大,五个角一样大的五边形为什么就不能是五角星?你这是歧视体型吗?




所以我继续要求:「我要的是五角星,不是五边形」,还好 ChatGPT 的临场学习能力不错,他又一次「重新定义五角星」,不过我此时我也不抱希望,就是单纯想看看它还能给出什么「惊喜」



不出意外,这个「离谱」的多边形让我心头一紧,就在我想着是否放弃的时候,身为人类无法驯服 AI 「既爱又恨」的复杂情绪,让我最终坚持一定要让 ChatGPT 给我画出一个 ⭐️。



不过心灰意冷之下,我选择让 ChatGPT 重新画一个黄色五角星,没想道这次却有了意外的惊喜,从下面的图片可以看到,此时的 ⭐️ 除了角度不对,形状已经完全满足需求。



所以一个问题我多问几遍,也许就能接近我要的答案?




事实上这也是目前 ChatGPT 的现状,因为「临场学力」能力等因素影响,同一个问题它可能会给出不同的答案,而有的答案其实和我们要的根本不沾边



那么,接下来只要让 ChatGPT 把 ⭐️ 旋转一下角度,应该就可以完成需求····了吧?所以我提出「帮我旋转 180度」的要求。



结果不出意外的还是发生了意外,可能 ChatGPT 理解的 180 度和我不大一样,如下图所示,确实旋转了,只是还是歪的,而基于前面的尝试,我觉得有必要再给它一次机会。



终于,在我换了以下描述之后,ChatGPT 似乎「开窍」了,终于让我如愿以偿的得到了我想要的 ⭐️ 代码。



可以看到,其实这段代码并不复杂,你自己写或者去搜索引擎扒一扒大概会比用 ChatGPT 更快,但是 ChatGPT 的魅力就在于:它也许会错,但是总有一次它会「蒙对」,如果现在还不对,那么未来也会有算对的时候,这就是我感受到的 AI 魅力所在



既然五角星都出来,那么接下来我们来完成最后一步的动画效果,我们希望的是点击 ⭐️ 的时候可以有一个爆炸粒子的动画,所以我提出了:



「希望加上一个动画效果,就是点击的时候星星爆炸成颗粒的动画效果」




结果还是「一口老血」,如下图所示,「星星确实爆炸了」,只是这个爆炸动画看起来是那么的「一言难尽」,感兴趣的可以 cv 下面的源代码自己体验下,不出意外接下来又是新的一轮人类和 AI 的「斗智斗勇」。




class YellowStar extends StatefulWidget {
@override
_YellowStarState createState() => _YellowStarState();
}

class _YellowStarState extends State<YellowStar> with TickerProviderStateMixin {
bool _isExploded = false;
late AnimationController _animationController;
late Animation<double> _animation;

@override
void initState() {
super.initState();
_animationController = AnimationController(
duration: const Duration(milliseconds: 500),
vsync: this,
);
_animation = CurvedAnimation(
parent: _animationController,
curve: Curves.easeInOut,
);
}

@override
void dispose() {
_animationController.dispose();
super.dispose();
}

void _handleTapDown(TapDownDetails details) {
setState(() {
_isExploded = true;
_animationController.forward(from: 0.0);
});
}

void _resetStar() {
setState(() {
_isExploded = false;
_animationController.reset();
});
}

@override
Widget build(BuildContext context) {
return GestureDetector(
onTapDown: _handleTapDown,
onTap: _resetStar,
child: AnimatedContainer(
duration: const Duration(milliseconds: 500),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: _isExploded
? BorderRadius.circular(50)
: BorderRadius.zero,
),
child: _isExploded
? _buildParticles()
: Container(
width: 100,
height: 100,
child: CustomPaint(
painter: YellowStarPainter(),
),
),
),
);
}

Widget _buildParticles() {
return AnimatedBuilder(
animation: _animation,
builder: (context, child) {
return Container(
width: 100,
height: 100,
child: Stack(
children: List.generate(
50,
(index) {
double radius = _animation.value * 50;
double angle = 2 * pi * index / 50;
double x = 50 + cos(angle) * radius;
double y = 50 + sin(angle) * radius;
return Positioned(
left: x,
top: y,
child: Container(
width: 4,
height: 4,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.yellow,
),
),
);
},
),
),
);
},
);
}
}



class YellowStarPainter extends CustomPainter {
final double starSizeRatio = 0.4;
final double centerOffsetRatio = 0.2;
final double rotationOffset = -pi / 2;

@override
void paint(Canvas canvas, Size size) {
double starSize = min(size.width, size.height) * starSizeRatio;
double centerX = size.width / 2;
double centerY = size.height / 2;
double centerOffset = starSize * centerOffsetRatio;

Path path = Path();
Paint paint = Paint()
..color = Colors.yellow
..style = PaintingStyle.fill;

for (int i = 0; i < 5; i++) {
double radians = 2 * pi / 5 * i + rotationOffset;
double x = centerX + cos(radians) * starSize / 2;
double y = centerY + sin(radians) * starSize / 2;
if (i == 0) {
path.moveTo(x, y);
} else {
path.lineTo(x, y);
}

radians += 2 * pi / 10;
x = centerX + cos(radians) * centerOffset;
y = centerY + sin(radians) * centerOffset;
path.lineTo(x, y);
}

path.close();
canvas.drawPath(path, paint);
}

@override
bool shouldRepaint(CustomPainter oldDelegate) => false;
}

经过一轮「鏖战」如下图所示,面对同一个问题,ChatGPT 总能找到不同的实现方式来回答你,只是这些实现里有的无法运行的,有的是运行没有效果的,有的甚至是给你输出了一个 //TODO 爆炸动画 ,总之就是让你「血压飙升」。





当然,「胜利终将属于人类」,如下图所示,在经历了无数次「血压飙升」的场景之后,最终我还是得到了我想要的:点击 ⭐️,然后出现了💥的动画效果,尽管还是不完美,但是基本满足了我后续开发的需求。



这个代码完完全全由 ChatGPT 输出,我一句没改,完整代码贴在了后面。





class YellowStarPage extends StatefulWidget {
@override
_YellowStarPageState createState() => _YellowStarPageState();
}

class _YellowStarPageState extends State<YellowStarPage>
with SingleTickerProviderStateMixin
{
late AnimationController _animationController;
bool _isExploded = false;

@override
void initState() {
super.initState();
_animationController =
AnimationController(vsync: this, duration: Duration(milliseconds: 500))
..addListener(() {
setState(() {});
});
}

@override
void dispose() {
_animationController.dispose();
super.dispose();
}

void _handleStarTap() {
if (!_isExploded) {
_isExploded = true;
_animationController.forward(from: 0);
Future.delayed(Duration(milliseconds: 500), () {
setState(() {
_isExploded = false;
});
});
}
setState(() {});
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Yellow Star')),
body: Center(
child: GestureDetector(
onTap: _handleStarTap,
child: Container(
width: 300,
height: 300,
child: AnimatedBuilder(
animation: _animationController,
builder: (context, child) {
return CustomPaint(
painter: YellowStarPainter(_animationController.value,
isExploded: _isExploded),
);
},
),
),
),
),
);
}
}

class YellowStarPainter extends CustomPainter {
final double starSizeRatio = 0.4;
final double centerOffsetRatio = 0.2;
final double rotationOffset = -pi / 2;

final double animationValue;
final bool isExploded;

YellowStarPainter(this.animationValue, {this.isExploded = false});

@override
void paint(Canvas canvas, Size size) {
double starSize = min(size.width, size.height) * starSizeRatio;
double centerX = size.width / 2;
double centerY = size.height / 2;
double centerOffset = starSize * centerOffsetRatio;

Path path = Path();
Paint paint = Paint()
..color = Colors.yellow
..style = PaintingStyle.fill;

if (isExploded) {
double particleSize = starSize / 30;
paint.strokeWidth = 1;
paint.style = PaintingStyle.fill;
paint.color = Colors.yellow;
Random random = Random();

for (int i = 0; i < 30; i++) {
double dx = random.nextDouble() * starSize - starSize / 2;
double dy = random.nextDouble() * starSize - starSize / 2;
double x = centerX + dx * (1 + animationValue);
double y = centerY + dy * (1 + animationValue);

canvas.drawCircle(Offset(x, y), particleSize, paint);
}
} else {
for (int i = 0; i < 5; i++) {
double radians = 2 * pi / 5 * i + rotationOffset;
double x = centerX + cos(radians) * starSize / 2;
double y = centerY + sin(radians) * starSize / 2;
if (i == 0) {
path.moveTo(x, y);
} else {
path.lineTo(x, y);
}

radians += 2 * pi / 10;
x = centerX + cos(radians) * centerOffset;
y = centerY + sin(radians) * centerOffset;
path.lineTo(x, y);
}

path.close();
canvas.drawPath(path, paint);
}
}

@override
bool shouldRepaint(CustomPainter oldDelegate) => true;
}


最后,给大家欣赏一下我让 ChatGPT 画一只米老鼠的「心路历程」,很明显这一次「人类一败涂地」,从目前的支持上看,让 ChatGPT 输出复杂图像内容并不理想,因为它不的笔画「不会拐弯」。




真的是又爱又恨。



最后


经过上面的一系列「折腾」,可以看到 ChatGPT 并没有我们想象中智能,如果面向 GPT 去开发,甚至可能并不靠谱,因为它并不对单一问题给出固定答案,甚至很多内容都是临场瞎编的,这也是因为大语言模型本身如何保证「正确」是一个复杂的问题,但是 ChatGPT 的魅力也来自于此:



它并不是完全基于语料来的统计来给答案



当然这也和 ChatGPT 本身的属性有关系, ChatGPT 目前的火爆有很大一部分属于「意外」,目前看它不是一个被精心产品化后的 2C 产品,反而 ChatPDFBiBiGPT 这种场景化的包装落地会是它未来的方向之一。


而现在 OpenAI 发布了多模态预训练大模型 CPT-4GPT-4 按照官方的说法是又得到了飞跃式提升:强大的识图能力;文字输入限制提升至 2.5 万字;回答准确性显著提高;能够生成歌词、创意文本,实现风格变化等等



所以我很期待 ChatGPT 可以用 Flutter 帮我画出一只米老鼠, 尽管 ChatGPT 现在可能会让你因为得到 1+1=3 这样的答案而「发疯”」,但是 AI 的魅力在于,它终有一天能得到准确的结果


作者:恋猫de小郭
来源:juejin.cn/post/7210605626501595195
收起阅读 »

保姆级JAVA对接ChatGPT教程,实现自己的AI对话助手

1.前言 大家好,我是王老狮,近期OpenAI开放了chatGPT的最新gpt-3.5-turbo模型,据介绍该模型是和当前官网使用的相同的模型,如果你还没体验过ChatGPT,那么今天就教大家如何打破网络壁垒,打造一个属于自己的智能助手把。本文包括API K...
继续阅读 »

1.前言


大家好,我是王老狮,近期OpenAI开放了chatGPT的最新gpt-3.5-turbo模型,据介绍该模型是和当前官网使用的相同的模型,如果你还没体验过ChatGPT,那么今天就教大家如何打破网络壁垒,打造一个属于自己的智能助手把。本文包括API Key的申请以及网络代理的搭建,那么事不宜迟,我们现在开始。


2.对接流程


2.1.API-Key的获取


首先第一步要获取OpenAI接口的API Key,该Key是你用来调用接口的token,主要用于接口鉴权。获取该key首先要注册OpenAi的账号,具体可以见我的另外一篇文章,ChatGPT保姆级注册教程



  1. 打开platform.openai.com/网站,点击view API Key,


image.png



  1. 点击创建key


image.png



  1. 弹窗显示生成的key,记得把key复制,不然等会就找不到这个key了,只能重新创建。


image.png


将API Key保存好以备用


2.2.API用量的查看


这里可以查看API的使用情况,新账号注册默认有5美元的试用额度,之前都是18美元,API成本降了之后试用额度也狠狠地砍了一刀啊,哈哈。


image.png


2.3.核心代码实现


2.3.1.pom依赖


http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.webtap
webtap
0.0.1
jar


org.springframework.boot
spring-boot-starter-parent
2.1.2.RELEASE




org.springframework.boot
spring-boot-starter-web


org.springframework.boot
spring-boot-starter-thymeleaf


nz.net.ultraq.thymeleaf
thymeleaf-layout-dialect


org.springframework.boot
spring-boot-starter-data-jpa


org.springframework.boot
spring-boot-devtools


org.springframework.boot
spring-boot-starter-test


org.springframework.boot
spring-boot-starter-mail



mysql
mysql-connector-java


org.apache.commons
commons-lang3
3.4


commons-codec
commons-codec


org.jsoup
jsoup
1.9.2



com.alibaba
fastjson
1.2.56


net.sourceforge.nekohtml
nekohtml
1.9.22


com.github.pagehelper
pagehelper-spring-boot-starter
1.4.1


org.projectlombok
lombok


org.apache.httpcomponents
httpasyncclient
4.0.2


org.apache.httpcomponents
httpcore-nio
4.3.2



org.apache.httpcomponents
httpclient
4.3.5


commons-codec
commons-codec




commons-httpclient
commons-httpclient
3.1


commons-codec
commons-codec




org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.1


com.github.ulisesbocchio
jasypt-spring-boot-starter
2.0.0







org.springframework.boot
spring-boot-maven-plugin






2.3.2.实体类ChatMessage.java


用于存放发送的消息信息,注解使用了lombok,如果没有使用lombok可以自动生成构造方法以及get和set方法


@Data
@NoArgsConstructor
@AllArgsConstructor
public class ChatMessage {
//消息角色
String role;
//消息内容
String content;
}

2.3.3.实体类ChatCompletionRequest.java


用于发送的请求的参数实体类,参数释义如下:


model:选择使用的模型,如gpt-3.5-turbo


messages :发送的消息列表


temperature :温度,参数从0-2,越低表示越精准,越高表示越广发,回答的内容重复率越低


n :回复条数,一次对话回复的条数


stream :是否流式处理,就像ChatGPT一样的处理方式,会增量的发送信息。


max_tokens :生成的答案允许的最大token数


user :对话用户


@Data
@Builder
public class ChatCompletionRequest {

String model;

List messages;

Double temperature;

Integer n;

Boolean stream;

List stop;

Integer max_tokens;

String user;
}

2.3.4.实体类ExecuteRet .java


用于接收请求返回的信息以及执行结果



/**
* 调用返回
*/

public class ExecuteRet {

/**
* 操作是否成功
*/

private final boolean success;

/**
* 返回的内容
*/

private final String respStr;

/**
* 请求的地址
*/

private final HttpMethod method;

/**
* statusCode
*/

private final int statusCode;

public ExecuteRet(booleansuccess, StringrespStr, HttpMethodmethod, intstatusCode) {
this.success =success;
this.respStr =respStr;
this.method =method;
this.statusCode =statusCode;
}

@Override
public String toString()
{
return String.format("[success:%s,respStr:%s,statusCode:%s]", success, respStr, statusCode);
}

/**
*@returnthe isSuccess
*/

public boolean isSuccess() {
return success;
}

/**
*@returnthe !isSuccess
*/

public boolean isNotSuccess() {
return !success;
}

/**
*@returnthe respStr
*/

public String getRespStr() {
return respStr;
}

/**
*@returnthe statusCode
*/

public int getStatusCode() {
return statusCode;
}

/**
*@returnthe method
*/

public HttpMethod getMethod() {
return method;
}
}

2.3.5.实体类ChatCompletionChoice .java


用于接收ChatGPT返回的数据


@Data
public class ChatCompletionChoice {

Integer index;

ChatMessage message;

String finishReason;
}

2.3.6.接口调用核心类OpenAiApi .java


使用httpclient用于进行api接口的调用,支持post和get方法请求。


url为配置文件open.ai.url的值,表示调用api的地址:https://api.openai.com/ ,token为获取的api-key。
执行post或者get方法时增加头部信息headers.put("Authorization", "Bearer " + token); 用于通过接口鉴权。



@Slf4j
@Component
public class OpenAiApi {

@Value("${open.ai.url}")
private String url;
@Value("${open.ai.token}")
private String token;

private static final MultiThreadedHttpConnectionManagerCONNECTION_MANAGER= new MultiThreadedHttpConnectionManager();

static {
// 默认单个host最大链接数
CONNECTION_MANAGER.getParams().setDefaultMaxConnectionsPerHost(
Integer.valueOf(20));
// 最大总连接数,默认20
CONNECTION_MANAGER.getParams()
.setMaxTotalConnections(20);
// 连接超时时间
CONNECTION_MANAGER.getParams()
.setConnectionTimeout(60000);
// 读取超时时间
CONNECTION_MANAGER.getParams().setSoTimeout(60000);
}

public ExecuteRet get(Stringpath, Map headers) {
GetMethod method = new GetMethod(url +path);
if (headers== null) {
headers = new HashMap<>();
}
headers.put("Authorization", "Bearer " + token);
for (Map.Entry h : headers.entrySet()) {
method.setRequestHeader(h.getKey(), h.getValue());
}
return execute(method);
}

public ExecuteRet post(Stringpath, Stringjson, Map headers) {
try {
PostMethod method = new PostMethod(url +path);
//log.info("POST Url is {} ", url + path);
// 输出传入参数
log.info(String.format("POST JSON HttpMethod's Params = %s",json));
StringRequestEntity entity = new StringRequestEntity(json, "application/json", "UTF-8");
method.setRequestEntity(entity);
if (headers== null) {
headers = new HashMap<>();
}
headers.put("Authorization", "Bearer " + token);
for (Map.Entry h : headers.entrySet()) {
method.setRequestHeader(h.getKey(), h.getValue());
}
return execute(method);
} catch (UnsupportedEncodingExceptionex) {
log.error(ex.getMessage(),ex);
}
return new ExecuteRet(false, "", null, -1);
}

public ExecuteRet execute(HttpMethodmethod) {
HttpClient client = new HttpClient(CONNECTION_MANAGER);
int statusCode = -1;
String respStr = null;
boolean isSuccess = false;
try {
client.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF8");
statusCode = client.executeMethod(method);
method.getRequestHeaders();

// log.info("执行结果statusCode = " + statusCode);
InputStreamReader inputStreamReader = new InputStreamReader(method.getResponseBodyAsStream(), "UTF-8");
BufferedReader reader = new BufferedReader(inputStreamReader);
StringBuilder stringBuffer = new StringBuilder(100);
String str;
while ((str = reader.readLine()) != null) {
log.debug("逐行读取String = " + str);
stringBuffer.append(str.trim());
}
respStr = stringBuffer.toString();
if (respStr != null) {
log.info(String.format("执行结果String = %s, Length = %d", respStr, respStr.length()));
}
inputStreamReader.close();
reader.close();
// 返回200,接口调用成功
isSuccess = (statusCode == HttpStatus.SC_OK);
} catch (IOExceptionex) {
} finally {
method.releaseConnection();
}
return new ExecuteRet(isSuccess, respStr,method, statusCode);
}

}

2.3.7.定义接口常量类PathConstant.class


用于维护支持的api接口列表


public class PathConstant {
public static class MODEL {
//获取模型列表
public static String MODEL_LIST = "/v1/models";
}

public static class COMPLETIONS {
public static String CREATE_COMPLETION = "/v1/completions";
//创建对话
public static String CREATE_CHAT_COMPLETION = "/v1/chat/completions";

}
}

2.3.8.接口调用调试单元测试类OpenAiApplicationTests.class


核心代码都已经准备完毕,接下来写个单元测试测试下接口调用情况。



@SpringBootTest
@RunWith(SpringRunner.class)
public class OpenAiApplicationTests {

@Autowired
private OpenAiApi openAiApi;
@Test
public void createChatCompletion2() {
Scanner in = new Scanner(System.in);
String input = in.next();
ChatMessage systemMessage = new ChatMessage('user', input);
messages.add(systemMessage);
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
.model("gpt-3.5-turbo-0301")
.messages(messages)
.user("testing")
.max_tokens(500)
.temperature(1.0)
.build();
ExecuteRet executeRet = openAiApi.post(PathConstant.COMPLETIONS.CREATE_CHAT_COMPLETION, JSONObject.toJSONString(chatCompletionRequest),
null);
JSONObject result = JSONObject.parseObject(executeRet.getRespStr());
List choices = result.getJSONArray("choices").toJavaList(ChatCompletionChoice.class);
System.out.println(choices.get(0).getMessage().getContent());
ChatMessage context = new ChatMessage(choices.get(0).getMessage().getRole(), choices.get(0).getMessage().getContent());
System.out.println(context.getContent());
}

}


  • 使用Scanner 用于控制台输入信息,如果单元测试时控制台不能输入,那么进入IDEA的安装目录,修改以下文件。增加最后一行增加-Deditable.java.test.console=true即可。


image.png
image.png




  • 创建ChatMessage对象,用于存放参数,role有user,system,assistant,一般接口返回的响应为assistant角色,我们一般使用user就好。




  • 定义请求参数ChatCompletionRequest,这里我们使用3.1日发布的最新模型gpt-3.5-turbo-0301。具体都有哪些模型大家可以调用v1/model接口查看支持的模型。




  • 之后调用openAiApi.post进行接口的请求,并将请求结果转为JSON对象。取其中的choices字段转为ChatCompletionChoice对象,该对象是存放api返回的具体信息。


    接口返回信息格式如下:


    {
    "id": "chatcmpl-6rNPw1hqm5xMVMsyf6PXClRHtNQAI",
    "object": "chat.completion",
    "created": 1678179420,
    "model": "gpt-3.5-turbo-0301",
    "usage": {
    "prompt_tokens": 16,
    "completion_tokens": 339,
    "total_tokens": 355
    },
    "choices": [{
    "message": {
    "role": "assistant",
    "content": "\n\nI. 介绍数字孪生的概念和背景\n A. 数字孪生的定义和意义\n B. 数字孪生的发展历程\n C. 数字孪生在现代工业的应用\n\nII. 数字孪生的构建方法\n A. 数字孪生的数据采集和处理\n B. 数字孪生的建模和仿真\n C. 数字孪生的验证和测试\n\nIII. 数字孪生的应用领域和案例分析\n A. 制造业领域中的数字孪生应用\n B. 建筑和城市领域中的数字孪生应用\n C. 医疗和健康领域中的数字孪生应用\n\nIV. 数字孪生的挑战和发展趋势\n A. 数字孪生的技术挑战\n B. 数字孪生的实践难点\n C. 数字孪生的未来发展趋势\n\nV. 结论和展望\n A. 总结数字孪生的意义和价值\n B. 展望数字孪生的未来发展趋势和研究方向"
    },
    "finish_reason": "stop",
    "index": 0
    }]
    }



  • 输出对应的信息。




2.3.9.结果演示


image.png


2.4.连续对话实现


2.4.1连续对话的功能实现


基本接口调通之后,发现一次会话之后,没有返回完,输入继续又重新发起了新的会话。那么那么我们该如何实现联系上下文呢?其实只要做一些简单地改动,将每次对话的信息都保存到一个消息列表中,这样问答就支持上下文了,代码如下:


List messages = new ArrayList<>();
@Test
public void createChatCompletion() {
Scanner in = new Scanner(System.in);
String input = in.next();
while (!"exit".equals(input)) {
ChatMessage systemMessage = new ChatMessage(ChatMessageRole.USER.value(), input);
messages.add(systemMessage);
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
.model("gpt-3.5-turbo-0301")
.messages(messages)
.user("testing")
.max_tokens(500)
.temperature(1.0)
.build();
ExecuteRet executeRet = openAiApi.post(PathConstant.COMPLETIONS.CREATE_CHAT_COMPLETION, JSONObject.toJSONString(chatCompletionRequest),
null);
JSONObject result = JSONObject.parseObject(executeRet.getRespStr());
List choices = result.getJSONArray("choices").toJavaList(ChatCompletionChoice.class);
System.out.println(choices.get(0).getMessage().getContent());
ChatMessage context = new ChatMessage(choices.get(0).getMessage().getRole(), choices.get(0).getMessage().getContent());
messages.add(context);
in = new Scanner(System.in);
input = in.next();
}
}

因为OpenAi的/v1/chat/completions接口消息参数是个list,这个是用来保存我们的上下文的,因此我们只要将每次对话的内容用list进行保存即可。


2.4.2结果如下:


image.png


image.png


4.常见问题


4.1.OpenAi接口调用不通


因为https://api.openai.com/地址也被限制了,但是接口没有对地区做校验,因此可以自己搭建一个香港代理,也可以走科学上网。


我采用的是香港代理的模式,一劳永逸,具体代理配置流程如下:



  1. 购买一台香港的虚拟机,反正以后都会用得到,作为开发者建议搞一个。搞活动的时候新人很便宜,基本3年的才200块钱。

  2. 访问nginx.org/download/ng… 下载最新版nginx

  3. 部署nginx并修改/nginx/config/nginx.conf文件,配置接口代理路径如下


server {
listen 19999;
server_name ai;

ssl_certificate /usr/local/nginx/ssl/server.crt;
ssl_certificate_key /usr/local/nginx/ssl/server.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

#charset koi8-r;


location /v1/ {
proxy_pass ;
}
}


  1. 启动nginx

  2. 将接口访问地址改为nginx的机器出口IP+端口即可


如果代理配置大家还不了解,可以留下评论我单独出一期教程。


4.2.接口返回401


检查请求方法是否增加token字段以及key是否正确


5.总结


至此JAVA对OpenAI对接就已经完成了,并且也支持连续对话,大家可以在此基础上不断地完善和桥接到web服务,定制自己的ChatGPT助手了。我自己也搭建了个平台,不断地在完善中,具体可见下图,后续会开源出来,想要体验的可以私信我获取地址和账号哈


image.png


作者:王老狮
链接:https://juejin.cn/post/7208907027841171512
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

“ChatGPT 们” 所需算力真是“贵滴夸张”!

先抛几个数据: 当下,每天有超过 2 亿的人在疯狂地抛出各式各样的问题请求 ChatGPT 回复 如果要完成这 2 亿+ 的咨询量,初始投入需要 3 万+ 块英伟达 A100 GPU 来计算 而 A100 是当下这个星球拥有最强 AI 算力的芯片,买一块至少要...
继续阅读 »

先抛几个数据:


当下,每天有超过 2 亿的人在疯狂地抛出各式各样的问题请求 ChatGPT 回复


如果要完成这 2 亿+ 的咨询量,初始投入需要 3 万+ 块英伟达 A100 GPU 来计算


而 A100 是当下这个星球拥有最强 AI 算力的芯片,买一块至少要 7W+ RMB💴


image.png


意思就是:光计算这些有意义/无意义的问题,就要花费:21 亿+ RMB 💴


这还不算电费/维护费等,众所周知,这种庞大计算类似矿机,很费电


一块 A100,功率 400W,30000 块 A100 ,就是 12_000_000 W,是 12 MW(12 个 100 万瓦)


image.png


目前,“GPT们”就像是井喷一样出现了各类产品,先不管算的结果怎么样,大家先支棱起来、先算起来


有预测:十年后,“GPT们” 一天所需算力的生产功率相当于半个核电站产生的功率,这是离谱且夸张的!全球算力几乎快要无法满足“GPT们”了


image.png


所以,以 ChatGPTPlus(每月20刀) 为代表的 “GPT们” 很贵,因为它本来算力消费就很贵,“用 GPT 编程比招一个普通程序员更贵”的段子并非玩笑。


所以,为什么算力如此重要?为什么微软要和韩国SK集团布局自建核电站?为什么咱们要强调西数东算、云计算等等?从这里也能窥见一斑。


不夸张的说,在未来,国力强弱一方面将通过算力强弱来体现。


image.png


2016年6月的不同国家之间的超级计算机500强的分布


image.png


超级计算机模拟风洞实验


小思考:在未来,算力的瓶颈将如何突破?


—— 目前芯片仍处在传统冯·诺伊曼架构之下,存储和计算区域是分离的,搬运数据“从存储到计算”花费巨大的功耗,如果能实现“存算一体”(就像大脑一样)将提升算力进入新的量级。


所以“存算一体”可能是个方向~


推荐阅读:


# 计算型存储/存算一体如何实现? - bonnie的回答


# 5分钟新知关注芯片算力|存算一体为什么是AI时代主流计算架构?



作者:掘金安东尼
来源:juejin.cn/post/7210028417617395772
收起阅读 »

ChatGPT组合拳-插件+自定义命令

前言 这几个月来ChatGPT已经融入了我的日常开发中,大大的提高了生产效率,比如写周报,可以提供一些关键字就能生成一段周报。在解决问题方面,除了一些疑难杂症,GPT大部分都很不错的解决,同时在没有思路的时候也能提供一点灵感。但是在使用过程中也会对有的答案的质...
继续阅读 »

前言


这几个月来ChatGPT已经融入了我的日常开发中,大大的提高了生产效率,比如写周报,可以提供一些关键字就能生成一段周报。在解决问题方面,除了一些疑难杂症,GPT大部分都很不错的解决,同时在没有思路的时候也能提供一点灵感。但是在使用过程中也会对有的答案的质量感到不满或者GPT并不能很好的理解我们意图的情况,这种情况就和Prompt有关系了,如何与GPT对话也是一门艺术,好的Prompt可以提高GPT的效率和准确性。


插件


开门见山,先介绍一个网站 prompts.chat


这个网站中提供了各式各样的Prompt参考,我们可以在其中查找需要的,或者自己根据需要改进。但仅仅如此还不够,因为我们每次重新开始对话都需要找Prompt再复制给GPT。


那有没有什么东西能使我们的体验再丝滑一点,这就不得不介绍一款插件了。


_}OD1$)DA$(K35ATYETLC_0.jpg


AIPRM for ChatGPT


这款插件大家在浏览器的插件商店可以直接搜索。安装好GPT界面会变成这样


image.png


上面的区域是其他人分享后社区精选的Prompt模板,下面的区域可以选择返回的语言、语调、文字风格。

image.png


当我们点击某个模板后,下面区域也会随之显示,接下来我们讲一下如何自己编写一个模板。

编写模板


我们点击Own Prompts


image.png


这里显示的就是我们自己编写的模板,简单添加一个。

image.png


选择模板后的样子


image.png


进行对话测试模板是否生效


image.png


接下来我们来看看这款插件的原理,其实就是把我们的输入嵌入到Prompt Template中,所以在编写Prompt Template时必须有[PROMPT],和字符串模板一样。


image.png


如此一来,我们每次打开对话只需要选择我们预先写好的模板就可以了,但仅仅如此还不够,因为我们每一次对话只能使用一个插件,如果我们场景比较多呢?


7$%H4%UN_7(FRGI0JOJ`$X1.gif


自定义命令


自定义命令,看着有点高级感,其实一点就通,与GPT的对话中我们有这么一种操作


image.png


image.png


image.png


再结合AIPRM for ChatGPT,you know?


image.png


作者:Defineee
链接:https://juejin.cn/post/7208847676405661753
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

从 GPU 到 ChatGPT

硬件 “没有硬件支持,你破解个屁” GPU 什么是 GPU? GPU 是 Graphics Processing Unit 的缩写,中文翻译为图形处理器。GPU 最初是为了提高电脑处理图形的速度而设计的,主要负责图像的计算和处理。GPU 通过并行计算的方式...
继续阅读 »

硬件


“没有硬件支持,你破解个屁”



GPU



什么是 GPU?


GPU 是 Graphics Processing Unit 的缩写,中文翻译为图形处理器。GPU 最初是为了提高电脑处理图形的速度而设计的,主要负责图像的计算和处理。GPU 通过并行计算的方式,可以同时执行多个任务,大大提高了图形和数据处理的速度和效率。


近年来,由于其并行计算的特性,GPU 也被应用于一些需要大量计算的领域,如机器学习、深度学习、数据挖掘、科学计算等。在这些领域中,GPU 可以加速训练模型、处理海量数据等计算密集型任务,显著提高了计算效率和速度。因此,GPU 已成为现代计算机的重要组成部分,被广泛应用于各种领域。


GPU 是如何工作的?


GPU 的工作原理和 CPU 类似,都是通过执行指令来完成计算任务的。不同的是,CPU 是通过串行执行指令的方式来完成计算任务的,而 GPU 是通过并行执行指令的方式来完成计算任务的。GPU 的并行计算方式可以同时执行多个任务,大大提高了计算效率和速度。


可以参考这个视频来了解 GPU 的工作原理:http://www.bilibili.com/video/BV1VW…


GPU 和 CPU 的区别


GPU 和 CPU 的区别主要体现在以下几个方面:




  1. 架构设计不同:CPU 的设计注重单线程处理能力,通常有少量的计算核心和更多的高速缓存。GPU 则是面向并行处理的设计,通常拥有大量的计算核心,但缓存较小。




  2. 计算方式不同:CPU 在处理任务时,主要通过执行指令流的方式进行计算。而 GPU 则是通过执行大量的线程,同时进行并行计算,以提高计算效率。GPU 的并行计算能力可以同时处理许多相似的任务,适用于大规模的计算密集型任务,例如图像处理、机器学习等。




  3. 用途不同:CPU 主要用于通用计算任务,例如文件处理、操作系统运行、编程等。GPU 则主要用于图形处理、游戏、计算密集型任务,例如机器学习、深度学习等。




总结来说,GPU 和 CPU 都有各自的优势和适用场景,它们通常是相互协作的。例如,在机器学习中,CPU 通常用于数据的预处理和模型的训练过程,而 GPU 则用于模型的计算推理过程。


我们常说的显卡就是 GPU 吗?


是的,我们通常所说的显卡(Graphics Card)就是安装了 GPU 的设备。显卡除了包含 GPU 之外,还包括显存、散热器、显卡 BIOS 等部件。显卡通过将 CPU 传输的数据转换为图像信号,控制显示器输出图像。


在一些需要大量图像处理或计算的应用场景中,GPU 可以比 CPU 更高效地完成任务。因此,现代的显卡也广泛应用于机器学习、深度学习等领域的加速计算,甚至被用于科学计算、天文学、地质学、气象学等领域。


关于显卡,你可能听说过“集成显卡”、“独立显卡”,其实,显卡的集成和独立通常是指显存的不同管理方式,它们有以下区别:




  1. 集成显卡:集成显卡通常是指将显存集成在主板芯片组或处理器内部的显卡。这种显卡通常性能较差,适用于一些简单的应用场景,例如日常办公、网页浏览等。




  2. 独立显卡:独立显卡通常是指显存独立于主板芯片组或处理器,有自己的显存和显存控制器。这种显卡性能更加强大,适用于游戏、图形处理、科学计算等需要大量显存和计算性能的应用场景。




  3. 共享显存:共享显存通常是指显存与系统内存共享使用,也就是一部分系统内存被划分为显存使用。这种方式适用于一些轻度图形处理的应用场景,例如电影播放、网页浏览等。




总的来说,集成显卡通常性能较差,适用于简单应用场景,独立显卡性能更加强大,适用于需要大量显存和计算性能的应用场景,而共享显存则是一种折中的方案,适用于一些轻度图形处理的应用场景。


GPU 厂商


海外头部 GPU 厂商:



  1. Nvidia:Nvidia 是目前全球最大的 GPU 制造商之一,Nvidia 主要生产针对游戏玩家、数据中心和专业用户等不同领域的 GPU 产品。

  2. AMD:全球知名的 GPU 制造商之一。AMD 主要生产用于个人电脑、工作站和服务器等不同领域的 GPU 产品。

  3. Intel:目前也开始进军 GPU 市场。Intel 主要生产用于个人电脑、工作站和服务器等不同领域的 GPU 产品。


国内 GPU 厂商:


海光信息、寒武纪、龙芯中科、景嘉微等。


芯片“卡脖子” 说的就是 GPU 吗?


是,但不全是。


"芯片卡脖子"是指全球半导体短缺现象,也称为"芯片荒"或"半导体荒",指的是 2020 年以来由新冠疫情和其他因素导致的全球半导体供应不足的局面。这种供应短缺已经影响了多个行业,包括汽车、电子产品、通信设备等。中国作为世界上最大的半导体市场之一,也受到了这种供应短缺的影响。


我国在半导体领域的自主研发和制造水平相对较低,依赖进口芯片来支撑其经济和工业发展。受全球芯片短缺影响,我国的一些关键行业,特别是汽车、电子和通信行业,出现了供应短缺和价格上涨等问题,对其经济造成了一定的影响。为了应对这种情况,政府加强了对半导体行业的支持,鼓励本土企业增加芯片研发和生产能力,以减轻对进口芯片的依赖。


具体与 GPU 相关的:2022 年 8 月 31 日,为符合美国政府要求,Nvidia 和 AMD 的高端 GPU 将在中国暂停销售,包括 Nvidia 的 A100、H100 以及 AMD 的 MI100 和 MI200 芯片


英伟达在 SEC 文件上官方确认此事,称是 8 月 26 日收到美国政府的通知。



SEC 文件是由上市公司、上市公司内部人士、券商提交给美国证券交易委员会(SEC) 的财务报表或者其他正式文件。




nvidia (英伟达)



根据 2021 年第四季度的市场研究报告,英伟达在全球离散显卡市场占有率为 51.2%,位列第一,超过了其竞争对手 AMD 的市场份额。而在全球 GPU 市场(包括离散显卡和集成显卡)中,英伟达的市场占有率为 18.8%,位列第二,仅次于 Intel 的市场份额。


nvidia 的产品矩阵



  1. GeForce 系列:主要面向消费者市场,包括桌面显卡和笔记本电脑显卡等,以高性能游戏和多媒体应用为主要应用场景。

  2. Quadro 系列:主要面向专业工作站市场,包括电影和电视制作、建筑设计、科学计算、医疗影像等领域,具有高性能、高稳定性和优秀的图形渲染能力。

  3. Tesla 系列:主要面向高性能计算市场,包括科学计算、深度学习、人工智能等领域,具有极高的计算性能和数据吞吐量,支持多 GPU 集群计算。

  4. Tegra 系列:主要面向移动和嵌入式市场,包括智能手机、平板电脑、汽车、无人机等领域,具有高性能、低功耗、小尺寸等特点。

  5. Jetson 系列:主要面向人工智能应用市场,包括机器人、自动驾驶、智能视频分析等领域,具有高性能、低功耗、小尺寸等特点。



可能你对上面这些产品系列、型号和名词不太了解,没有什么概念,那这样,咱们先建立个价格概念。我们以当下在人工智能领域广泛应用的 GPU A100 为例,看一下它的价格:



就是因为这个价格,所以 A100 也被称为“英伟达大金砖”.


为什么要单独说英伟达呢?因为算力是 人工智能的“力量源泉”,GPU 是算力的“主要供应商”。而英伟达是全球最大的 GPU 制造商,并且它的 GPU 算力是最强的,比如 A100 GPU 算力是 10.5 petaFLOPS,而 AMD 的 MI100 GPU 算力是 7.5 petaFLOPS。


不明白什么意思?Peta 是计量单位之一,它代表的是 10 的 15 次方。因此,1 petaFLOPS(PFLOPS)表示每秒可以完成 10 的 15 次浮点运算。所以,A100 GPU 算力为 10.5 petaFLOPS,意味着它可以每秒完成 10.5 万亿次浮点运算。


AI


什么是人工智能 (Artificial Intelligence-AI)?


人工智能是指一种计算机技术,它使得计算机系统可以通过学习、推理、自适应和自我修正等方法,模拟人类的智能行为,以实现类似于人类的智能水平的一系列任务。这些任务包括语音识别、自然语言处理、图像识别、机器翻译、自动驾驶、智能推荐和游戏等。
人工智能的核心是机器学习,它是通过使用大量数据和算法训练计算机系统,使其能够识别模式、做出预测和决策。人工智能还涉及到其他领域,如自然语言处理、计算机视觉、机器人技术、知识表示和推理等。
人工智能被广泛应用于各种领域,如医疗、金融、交通、制造业、媒体和游戏等,为这些领域带来了更高的效率和创新。


人工智能细分领域



人工智能领域有很多分支领域,以下列举一些比较常见的:



  1. 机器学习(Machine Learning):研究如何通过算法和模型让计算机从数据中学习和提取规律,以完成特定任务。

  2. 深度学习(Deep Learning):是机器学习的一种,使用多层神经网络来学习特征和模式,以实现对复杂任务的自动化处理。

  3. 自然语言处理(Natural Language Processing, NLP):研究如何让计算机理解、分析、处理人类语言的方法和技术。

  4. 计算机视觉(Computer Vision):研究如何让计算机“看懂”图像和视频,并从中提取有用的信息和特征。

  5. 机器人学(Robotics):研究如何设计、构建和控制机器人,让它们能够完成特定任务。

  6. 强化学习(Reinforcement Learning):是一种机器学习的方法,通过与环境的交互和反馈来学习最优行动策略。

  7. 知识图谱(Knowledge Graph):是一种将知识以图谱的形式进行组织、表示和推理的方法,用于实现智能搜索、推荐等应用。

  8. 语音识别(Speech Recognition):研究如何让计算机识别和理解人类语音,以实现语音输入、语音控制等功能。


当然以上这些分支领域互相也有交叉和相互影响,比如深度学习在计算机视觉、自然语言处理和语音识别等领域都有应用;计算机视觉和自然语言处理也经常结合在一起,比如在图像字幕生成和图像问答等任务中。此外,人工智能还与其他领域如控制工程、优化学、认知科学等存在交叉。


NLP


我们具体地来看一下自然语言处理(NLP)这个分支领域,它是人工智能的一个重要分支,也是人工智能技术在实际应用中最为广泛的应用之一。


NLP(Natural Language Processing,自然语言处理)旨在让计算机能够理解、解析、生成和操作人类语言。


NLP 技术可以用于文本分类、情感分析、机器翻译、问答系统、语音识别、自动摘要、信息抽取等多个方面。实现 NLP 技术通常需要使用一些基础的机器学习算法,例如文本预处理、词嵌入(word embedding)、分词、词性标注、命名实体识别等等。这些算法可以从大量的语料库中学习到语言的结构和规律,并通过统计分析和机器学习模型进行自然语言的处理和应用。


近年来,随着深度学习技术的发展,NLP 领域也出现了一些基于深度学习的新模型,例如 Transformer 模型和 BERT 模型等。这些模型通过使用大规模语料库进行预训练,可以在多个 NLP 任务中取得优秀的表现。同时,也涌现了一些新的应用领域,例如对话系统、智能客服、智能写作、智能问答等。


Transformer 是什么?


上文我们提到人工智能的分支领域之间会有交叉,Transformer 算是深度学习和 NLP 的交叉领域。



Transformer 模型是深度学习中的一种神经网络模型,该模型是由 Google 开源的。


Transformer 模型最初是在 2017 年发表的论文"Attention Is All You Need"中提出的,随后被加入到 TensorFlow 等深度学习框架中,方便了广大开发者使用和扩展。目前,Transformer 模型已经成为自然语言处理领域中最流行的模型之一。



TensorFlow 是一种用于实现神经网络模型的开源深度学习框架。因此,可以使用 TensorFlow 实现 Transformer 模型。实际上,TensorFlow 团队已经提供了一个名为“Tensor2Tensor”的库,其中包含了 Transformer 模型的实现。此外,许多研究人员和工程师也使用 TensorFlow 实现自己的 Transformer 模型,并将其用于各种 NLP 任务中。




Transformer 特别擅长处理序列数据,其中包括了 NLP 领域的自然语言文本数据。在 NLP 领域中,Transformer 模型被广泛应用于各种任务,例如机器翻译、文本摘要、文本分类、问答系统、语言模型等等。相比于传统的基于循环神经网络(RNN)的模型,Transformer 模型通过使用注意力机制(self-attention)和多头注意力机制(multi-head attention)来建模序列中的长程依赖性和关系,有效地缓解了 RNN 模型中梯度消失和梯度爆炸的问题,从而在 NLP 任务上取得了很好的表现。因此,可以说 Transformer 是 NLP 领域中的一种重要的深度学习模型,也是现代 NLP 技术的重要组成部分。


Transformer 模型的实现


Transformer 模型只是一个抽象的概念和算法框架,具体的实现还需要考虑许多细节和技巧。在实际应用中,需要根据具体的任务和数据集进行模型的设计、参数调整和训练等过程。此外,还需要使用特定的软件框架(如 TensorFlow、PyTorch 等)进行实现和优化,以提高模型的效率和准确性。


实现 Transformer 模型可以使用深度学习框架,如 TensorFlow、PyTorch 等。一般来说,实现 Transformer 模型的步骤如下:



  1. 数据准备:准备训练和测试数据,包括语料数据和标签数据等。
    模型架构设计:确定模型的结构,包括 Transformer 的编码器和解码器部分,以及注意力机制等。

  2. 模型训练:使用训练数据对模型进行训练,并对模型进行调优,以达到较好的预测效果。

  3. 模型评估:使用测试数据对模型进行评估,包括损失函数的计算、精度、召回率、F1 值等。

  4. 模型部署:将训练好的模型部署到生产环境中,进行实际的应用。


业界流行的实现方式是使用深度学习框架,如 TensorFlow 或 PyTorch,在现有的 Transformer 模型代码基础上进行二次开发,以满足自己的需求。同时,也有一些第三方的 Transformer 库,如 Hugging Face 的 Transformers 库,可供直接使用,方便快捷。


还有没有其他模型 ?


类似于 Transformer 的模型有许多,其中一些主要的模型包括:



  1. BERT(Bidirectional Encoder Representations from Transformers):BERT 是由 Google 在 2018 年推出的预训练语言模型,采用了 Transformer 模型的编码器部分,并使用双向的 Transformer 模型来对输入的文本进行建模。

  2. GPT(Generative Pre-trained Transformer):GPT 是由 OpenAI 在 2018 年推出的预训练语言模型,采用了 Transformer 模型的解码器部分,主要用于生成文本。

  3. XLNet:XLNet 是由 CMU、Google 和 Carnegie Mellon University 的研究人员在 2019 年提出的一种预训练语言模型,它使用了自回归 Transformer 模型和自回归 Transformer 模型的结合,具有更好的生成性能和语言理解能力。

  4. T5(Text-to-Text Transfer Transformer):T5 是由 Google 在 2019 年推出的一种基于 Transformer 的通用文本转换模型,可以处理各种 NLP 任务,如文本分类、问答、文本摘要等。

  5. RoBERTa(Robustly Optimized BERT Pretraining Approach):RoBERTa 是 Facebook 在 2019 年推出的预训练语言模型,它通过对 BERT 训练过程进行优化,提高了在多种 NLP 任务上的性能表现。


这些模型都基于 Transformer 架构,并通过不同的优化和改进来提高性能和应用范围。下面一张图是模型的家族树:



GPT 模型


2018 年 OpenAI 公司基于 Transformer 结构推出 GPT-1 (Generative Pre-training Transformers, 创造型预训练变换模型),参数量为 1.17 亿个,GPT-1 超越 Transformer 成为业内第一。2019 年至 2020 年,OpenAI 陆续发布 GPT-2、GPT-3,其参数量分别达 到 15 亿、1750 亿,其中,GPT-3 训练过程中直接以人类自然语言作为指令,显著提升了 LLM 在多种语言场景中的性能。


ChatGPT



ChatGPT 是美国 OpenAI 公司研发的对话 AI 模型,是由人工智能技术支持的自然语言处理(NLP,Natural Language Processing)工具,于 2022 年 11 月 30 日正式发布。它能够学习、理解人类语言,并结合对话上下文,与人类聊天互动,也可撰写稿件、翻译文字、编程、编写视频脚本等。截至 2023 年 1 月底,ChatGPT 月活用户已高达 1 亿,成为史上活跃用户规模增长最快的应用


与现存的其他同类产品相比,ChatGPT 的独特优势在于:



  1. 基于 GPT-3.5 架构,运用海量语料库训练模型,包括真实生活中的对话,使 ChatGPT 能做到接近与人类聊天

  2. 应用新技术 RLHF (Reinforcement Learning with Human Feedback,基于人类反馈的强化学习),从而能更准确地理解并遵循人类的思维、价值观与需求

  3. 可在同一阶段内完成模型训练

  4. 具有强大算力、自我学习能力和适应性,且预训练通用性较高

  5. 可进行连续多轮对话,提升用户体验

  6. 更具独立批判性思维,能质疑用户问题的合理性,也能承认自身知识的局限性,听取用户意见并改进答案。


GPT-3.5


ChatGPT 使用的 GPT-3.5 模型是在 GPT-3 的基础上加入 Reinforcement Learning from Human Feedback(RLHF,人类反馈强化学习)技术和近段策略优化算法,其目的是从真实性、无害性和有用性三个方面优化输出结果,降低预训练模型生成种族歧视、性别歧视等有害内容的风险。


ChatGPT 训练的过程主要有三个阶段。




  1. 第一步是训练监督策略,人类标注员对随机抽取的提示提供预期结果,用监督学习的形式微调 GPT-3.5,生成 Supervised Fine-Tuning(SFT)模型,使 GPT-3.5 初步理解指令,这一步与先前的 GPT-3 模型训练方式相同,类似于老师为学生提供标答的过程。

  2. 第二步是奖励模型,在 SFT 模型中随机抽取提示并生成数个结果,由人类标注员对结果的匹配程度进行排序,再将问题与结果配对成数据对输入奖励模型进行打分训练,这个步骤类似于学生模拟标答写出自己的答案,老师再对每个答案进行评分。

  3. 第三步是 Proximal Policy Optimization(PPO,近段策略优化),也是 ChatGPT 最突出的升级。模型通过第二步的打分机制,对 SFT 模型内数据进行训练,自动优化迭代,提高 ChatGPT 输出结果的质量,即是学生根据老师反馈的评分,对自己的作答进行修改,使答案更接近高分标准。


ChatGPT 的优势在于:



  1. 使用 1750 万亿参数的 GPT-3 为底层模型进行预训练,为全球最大的语言模型之一

  2. 算力上得到微软支持,使用上万片 NVIDIA A100 GPU 进行训练,模型的运行速度得到保障(从这里就看出硬件的重要性了,A100 “卡脖子”确实很难受,不过之前各厂都囤货了,短期应该能满足现状,而且作为 A00 的平替 A800 即将出货,训练效率快速提升,应该也能满足需求。)

  3. 算法上使用奖励模型和近端优化策略进行迭代优化, 将输出结果与人类预期答案对齐,减少有害性、歧视性答案,使 ChatGPT 更拟人化,让用户感觉沟通的过程更流畅。


GPT-4



据德国媒体 Heise 消息,当地时间 3 月 9 日一场人工智能相关活动上,四名微软德国员工在现场介绍了包括 GPT 系列在内的大语言模型(LLM),在活动中,微软德国首席技术官 Andreas Braun 表示 GPT-4 即将发布。


GPT-4 已经发展到基本上「适用于所有语言」:你可以用德语提问,然后用意大利语得到答案。借助多模态,微软和 OpenAI 将使「模型变得全面」。将提供完全不同的可能性,比如视频。


AIGC 模型


在人工智能内容生成领域,除了 OpenAI, 还有其他玩家,来看一下目前头部玩家的情况:



人工智能突破摩尔定律



摩尔定律是由英特尔公司创始人之一戈登·摩尔于 1965 年提出的一项预测。这项预测认为,在集成电路上可容纳的晶体管数量每隔 18 至 24 个月会翻一番,而成本不变或者成本减少。


简单来说,摩尔定律预测了随着时间的推移,计算机芯片上能集成的晶体管数量将以指数级别增长,而成本将持续降低。这意味着计算机性能将在同样的芯片面积上不断提高,同时计算机的成本也会不断降低。


摩尔定律在过去几十年的计算机工业中发挥了重要的作用,它是计算机发展的重要标志之一,但近年来随着摩尔定律趋于极限,一些人开始怀疑其可持续性。



摩尔定律的定义归纳起来,主要有以下三种版本:



  1. 集成电路上可容纳的晶体管数目,约每隔 18 个月便增加一倍。

  2. 微处理器的性能每隔 18 个月提高一倍,或价格下降一半。

  3. 相同价格所买的电脑,性能每隔 18 个月增加一倍。


随着模型的迭代,对算力的需求也越来越大了:


目前看人工智能对算力的需求已经突破了摩尔定律


未来


目前我已在编程、邮件书写、知识学习等多个场景开始使用 chatGPT,未来有计划开发 chatGPT的应用程序,让更多人能够体验到 chatGPT 的魅力。


未来已来,缺少的不是技术,而是想象力!


作者:xiaohezi
链接:https://juejin.cn/post/7209262585005785145
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

ChatGPT保姆级教程,一分钟学会使用ChatGPT!

最近ChatGPT大火!微软退出首款ChatGPT搜索引擎,阿里等国内巨头也纷纷爆出自家产品,一夜之间,全球最大的科技公司仿佛都回到了自己年轻时的样子! 然而,ChatGPT这么火,这么好玩的东西,国人都被卡在注册上了?! 今天老鱼给大家汇总了国内能使用Cha...
继续阅读 »

最近ChatGPT大火!微软退出首款ChatGPT搜索引擎,阿里等国内巨头也纷纷爆出自家产品,一夜之间,全球最大的科技公司仿佛都回到了自己年轻时的样子!


然而,ChatGPT这么火,这么好玩的东西,国人都被卡在注册上了?!


今天老鱼给大家汇总了国内能使用ChatGPT的方法,解锁更多ChatGPT玩法!


完整文档打开姿势: ChatGPT怎么玩)
在这里插入图片描述


一.准备工作


和注册美区 Apple ID 一样的流程:



  1. 挂个代理,伪装在日本、新加坡或者美国,建议新加坡;亲测香港是100%不可行的

  2. 准备一个国外手机号,GoogleVoice 虚拟号会被识别,亲测不行,使用接码平台

  3. Chrome 浏览器。


二. 注册接码平台


打开网站:sms-activate.org/ 使用邮箱注册
注意:邮件里链接点击后可能回404,多试几次就好了。
在这里插入图片描述
然后,选择充值 1 美元,支持使用支付宝。
在这里插入图片描述
充值完毕,在左侧搜索 OpenAI,从销量看印尼最高,亲测也可用。(印度也可以)
选择后系统会分配一个手机号,留着备用。
在这里插入图片描述


三. 注册 OpenAI


打开链接
beta.openai.com/signup
选择使用 Google 登录即可(建议)
在这里插入图片描述


在这里输入第二步中分配给你的手机号,然后点击【Send code via SMS】按钮。
在这里插入图片描述


回到刚刚的接码平台,就能看到收到的验证码了。
PS:注意购买后的短信有效期是20分钟,需要快速操作哦~
在这里插入图片描述


我们把验证码拷贝出来输入到OpenAI的注册界面即可
在这里插入图片描述


四. 体验ChatGPT


重新登录:chat.openai.com/auth/login


然后访问:chat.openai.com/chat


这时你就可以开始尽情和机器人聊天了
在这里插入图片描述
在这里插入图片描述
如果你没有上述条件去玩ChatGPT,那么看这里解锁更多简单玩法 ChatGPT怎么玩 )


作者:程序员老鱼
链接:https://juejin.cn/post/7198097078005841980
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

4个工具,让 ChatGPT 如虎添翼!

让 ChatGPT 如虎添翼! ChatGPT 很好用,其核心是prompt的运用,其回答质量很大程度取决于你的提问质量。 我算是 ChatGPT 的高频用户了,几乎日活。半个月前我在星球写道: 冲了Plus之后,使用更加频繁,说几点ChatGPT近期感受: ...
继续阅读 »

让 ChatGPT 如虎添翼!


ChatGPT 很好用,其核心是prompt的运用,其回答质量很大程度取决于你的提问质量。


我算是 ChatGPT 的高频用户了,几乎日活。半个月前我在星球写道:


冲了Plus之后,使用更加频繁,说几点ChatGPT近期感受:
1、它发挥多大效能取决于你的知识储备,它只能锦上添花,无法雪中送炭
2、提问是门技术,无论是向他人求助,还是之前用搜索引擎,大部分人连提问都搞不定
3、未来ChatGPT必然更加强大,会更好用,但依然无法解决上面俩个问题
4、未来N年他会持续进化,国内做模型大概率邯郸学步
5、真正的机会在应用侧,大面积复制国外各种现有应用,但是肯定也会高出更多玩法
6、这个赛道很长,无论你对它什么态度,可能最终都会影响你,就像之前的搜索引擎和推荐算法


最近我尝试了很多辅助工具,简直如虎添翼,效率大幅提升,这里就推荐几个最好用的吧。


ChatGPT-Shortcut


让生产力加倍的 ChatGPT 快捷指令,按照领域和功能分区,可对提示词进行标签筛选、关键词搜索和一键复制。


newzone.top/chatgpt/


ChatGPT Shortcut 是根据领域和功能划分的 ChatGPT 快捷指令表,可通过标签筛选、关键词搜索和一键复制来使用提示词,旨在简化你的工作流程并提高生产力。即使是初学者,你只需复制提示词,稍加修改后发送给 ChatGPT,就能获得指定输出,让你的生产力加倍!


ChatGPT Shortcut 页面默认显示全部的提示词,页面分为标签区、搜索区和提示词展示区。


AIPRM for ChatGPT


这是一个插件,单击一下,就可以访问精选的 ChatGPT 提示,这些提示是专门为 SEO、SaaS、营销和更多 ChatGPT 的精选提示模板列表而设计的。


插件安装:
chrome.google.com/webstore/de…


官网:http://www.aiprm.com/


AIPRM for ChatGPT 最方便的地方在于能够设定输出语言、文字用语、文字风格,想它风趣一点或是严肃一点,现在可以轻松做到。


ChatPDF



基于 ChatGPT API 的读取 PDF 工具 ChatPDF:可以直接把需要阅读的 pitch deck、白皮书、文档、论文、图书喂给它,让它做总结和提问。



ChatPDF 简直是学习神器,上传 PDF 文件后,可以对它提问任何关于这份 PDF 的问题,非常适合快速提取各种 paper 论文的摘要,也支持中文输出。


http://www.chatpdf.com/


上传pdf即可,然后你就可以基于pdf的内容去提问了



bob-plugin-openai-translator



基于 ChatGPT API 的文本翻译、文本润色、语法纠错 Bob 插件,让我们一起迎接不需要巴别塔的新时代!


github.com/yetone/bob-…


此插件已支持使用 ChatGPT API 对句子进行润色和语法修改,只需要把目标语言选成跟源语言一样即可,全面替代 Grammarly!而且理论上任何语言都可以润色,不只是英语。



目前仅支持macOS用户,非 macOS 用户可以使用我开发的基于 ChatGPT API 的划词翻译浏览器插件 openai-translator 以解燃眉之急。


github.com/yetone/open…



LightGBM中文文档


机器学习统计学,476页


机器学习圣经PRML中文版


经典著作《机器学习:概率视角


作者:机器学习与统计学
来源:juejin.cn/post/7208413354905223227
收起阅读 »

我: 向我推销这支笔 ,来看ChatGPT如何回答...

OpenAI: GPT系列模型:OpenAI的GPT系列模型是非常出名的语言模型,例如GPT-2、GPT-3等。这些模型可以生成人类般的语言,用于文本生成、对话系统等领域。 DALL-E:这是一个能够将自然语言描述转换为图像的系统。它可以生成与文本描述相对...
继续阅读 »

OpenAI:




  1. GPT系列模型:OpenAI的GPT系列模型是非常出名的语言模型,例如GPT-2、GPT-3等。这些模型可以生成人类般的语言,用于文本生成、对话系统等领域。

  2. DALL-E:这是一个能够将自然语言描述转换为图像的系统。它可以生成与文本描述相对应的图像,从简单的物体到复杂的场景都可以。

  3. Codex:这是一个基于人工智能的代码生成器,可以为程序员自动生成代码。它是由OpenAI与GitHub合作开发的。

  4. Gym:Gym是OpenAI的一个强化学习平台,为开发人员提供了一个可以测试和比较强化学习算法的标准化环境。

  5. RoboSumo:这是一个机器人足球比赛仿真平台,用于测试和开发机器人控制算法

  6. MuseNet:MuseNet是OpenAI的一个音乐生成系统,可以自动生成各种类型的音乐,从古典音乐到流行音乐等。

  7. GPT-Neo:这是OpenAI的一个基于GPT-3的开源模型,它具有类似GPT-3的功能,但是开源,可以由任何人使用。

  8. CLIP:这是OpenAI的一个视觉和语言模型,可以将视觉和语言信息结合起来,从而实现更复杂的任务,如图像分类、视觉问答等。



除此之外,OpenAI还开发了许多其他的人工智能应用和工具,如人工智能道德和安全方面的研究、自动语音识别、自动驾驶系统等。






今天有的伙伴问我:“为什么单单就中国不开放开来用,为什么我要用chatgpt还要去注册个外国的手机号才能搞这玩意,要不然我就只能用免费的公用的,动不动就“sorry,当前访问人数太多,请稍后再试”,绝了,为什么要排除我们国家。”



先来看看很多伙伴用的免费的公用的chatgpt地址,确实可以用,但是现在chatgpt很火,很多人很好奇,应该是同一时间段很多人都在访问,都在调用这个chatgpt的api,所以经常会出现这种情况。


image.png


为什么不是所有国家和地区都支持OpenAI?


OpenAI 是一家致力于帮助人类推进人工智能研究的科研机构,它在全球范围内提供免费的语言处理技术和其他人工智能工具。


然而,由于技术和法律限制,并非所有国家和地区都能够使用OpenAI的服务。


因此,OpenAI的服务并不能覆盖所有国家和地区。


官网地址: openai.com/api/


注册或者登陆地址为:openai.com/api/


注册 一道坎


我们注册完,写好一切,到某一步,就需要填写手机号,一个账号对应一个手机号,所以就会用到这个countries的接口:


countries: api.openai.com/dashboard/p…


(直接在浏览器打开就可以看到列出来的全部国家信息),看到有中国地区的,但是呢,当你点击发送验证码的时候,后台又会去调用一个接口去verify验证一下这个国家能不能用,到目前(2023-2-17)为止,中国地区是不能用的:


image.png


它这里整个官网啊、后台管理系统啊,用的是react框架搭建的,采用的是前后端分离的模式。


我们国内的过不去没法注册,没办法用啊,免费公众的用一直报错。解决办法就是[买一个外国的手机号]或者租一个,这里面呢也有免费号码可以提供,但就是最近chatgpt太火了免费也轮不到。现在很多可支持支付宝或者微信。主要是你懂得。一般价格在几块钱4块钱、5块钱这样子。也可以去搜索引擎看看有没有免费的OpenAI账号可以借来看看,玩一玩。


截屏2023-02-17下午5.34.47.png


进来玩一玩


overview 总览


截屏2023-02-17下午5.32.36.png


这就是一些基本的。 左边叫你看一下它的文档,学习并快速创建一个简单的应用;右边呢,就是叫你去看它现在现成的例子,就是叫你去玩的看的。


先别玩,先再看一下它的介绍还有什么:


image.png


chatgpt (你问它答)


chatgpt的网址在这里


一进来,它就给我一个提示,说2-10号更新的公告, chatgpt plus 可以 有beta版可用,不过你要通过申请排队,表单申请内容有一系列,其中有问你用这个chatgpt用来干嘛的,理由是什么,会用在哪里,将来有兴趣把它用在哪里。


没事, chatgpt 可用就行。我们来看看chatgpt。


image.png


没错,公用的不用登录账号的网址,跟这个一模一样。只不过偶尔那里会堵一点。


最近chatgpt 可是 火到 冲天,我们国内,或者国外都在讨论这个东西。还有一些人因为chatgpt什么的被骗,案例蛮多的最近,收费还不低,大家一定要擦亮你闪亮的小眼睛,分辨清楚,别轻易交钱就是了。


来问问chatgpt了,看看它到底牛在哪。


第一问


问它帮我写其他语言的代码


请帮我把以下java代码 翻译成 javascript 代码, 代码如下:

public class mmm {
public static void man(String[] args) {
String s1 = "hello";
String s2 = "HELLO".toLowerCase();

System.out.println(s1);
System.out.println(s2);

if (s1.equals(s2)) {
System.out.println("s1 === s2");
} else {
System.out.println("s1 !== s2");
}

}
}

下面是它回答我的:


let s1 = "hello";
let s2 = "HELLO".toLowerCase();

console.log(s1);
console.log(s2);

if (s1 === s2) {
console.log("s1 == s2");
} else {
console.log("s1 != s2");
}


请注意,JavaScript与Java有所不同,因此您需要确保语法和操作符正确。在这个例子中,我们将`System.out.println()`替换为了`console.log()`,将`String.equals()`替换为了`===`。此外,我们需要用`let`而不是`String`来声明变量。

image.png


它不仅能帮你转成JavaScript的写法,还给你解释了为什么这样做。


1、System.out.println()替换为了console.log()


2、String.equals()替换为了===


3、用let而不是String来声明变量


chatgpt次数是免费的,随你问。但如果问关于专业的或者代码的相关问题,学会提问的技巧哦,就跟搜索引擎一样就行,多加关键字关键词,github上有关于如何提问的文章,写的很好,放在这里了。《提问的智慧》 中文版的在这里 《提问的智慧 How to ask questions the smart way》


第二问


为什么不能除以零


这是它的回答:


image.png


第三问


给我一些关于年龄超过35程序员的职业规划的具体建议


这个问题对于我们这个行业来说,一直在问,今天我问问这个chatgpt它有什么好的想法


image.png


第四问


向我推销这支笔


image.png


image.png


image.png


外国人对于chatgpt的一些相关问答记录在这里了


http://www.emergentmind.com/


可以去看看翻一翻。


text completion 文字补充


借一步说话哈,它这个注册了这个东西,有用的并不单单是进来玩一下案例,还有一个api key。就是用这个api key这个钥匙去调用他们这个公司提供的接口,就这样这么简单,这个key可自行创可以删。


像它说的这个completion model,就是可以用来文本补充提示的这个功能的可用的模型有哪些。


通过GET https://api.openai.com/v1/models这个接口去调用查看可用模型列表。


返回来的数据结构就是这个:


image.png


回到正题,说到这个文字补充。


比如说你敲了文本“正如笛卡尔说的,我思故”,它就会帮你补充"我在"


"正如笛卡尔说的我思故我在"


点击确定按钮 发了一个请求,看一下


image.png


请求 api.openai.com/v1/moderati…


request 请求参数:


{
input: '正如笛卡尔说的我思故", // 这就是敲的文本
model: 'text-moderation-playground' // 这就是哪个模型类型
}


response 响应回来的:


image.png


返回来一些类别关于我们打的这段字的类别。如果我们敲的一些文本触发到这些类别,就会给予警告。


image.png


历史问过的会保存在你浏览器本地的localstorage里面:


image.png


AI画图


AI画图功能


image.png


AI画图的名字叫做: DALL.E


AI图像生成:


提供了三种与图像交互的方法:


1、基于文本提示从头开始创建图像


2、基于新文本提示创建对现有图像的编辑


3、创建现有图像的变体


这个DALL.E AI画图功能呢,还处在测试阶段,默认速率是限制每分钟 50张图,多的没有了。


如果你想要每分钟出超过50张,加钱。


image.png


那我现在,是在第一个月,有50个免费的使用机会,用完以后我就要买了。


废话不多说,来看看,有多神乎。


这是它这个功能的官网宣传图


image.png


image.png


image.png


image.png


AI图片生成模块 接口文档


生成的图像大小可以是 256 X 256 的,512 X 512 的, 1024 X 1024 的。尺寸越小生成速度越快。


用nodejs请求这么写


const res = await openai.createImage({
promt: '一只白色暹罗猫',
n: 1, // 这里 n 的取值范围是 1到10
size: '1024 X 1024',

// 可加可不加
response_format: 'URL' 或者 'Base64', // URL 会在一个小时后过期
})

image_url = res.data.data[0].url

文档它也说了,你写这个promt描述越详细,结果你得到的图像会越接近你想要得到的效果。


image.png


它这个后台本身就有个现成的案例给我们玩,只不过要钱, 基本的就是这样。


image.png


就是你写描述,它给你图。满不满意,看你描述得如何。


我描述了一下: A Mexican woman wearing a pearl necklace


一个戴着珍珠项链的墨西哥女人


image.png


很写实,确实一个戴着珍珠项链的墨西哥女人,那我写女人,不写美女,效果很写实,但不够惊艳,浪费了我一次机会。


突发奇想我去谷歌搜一下同样的描述,出来了一个这样的。


image.png


它这里做了一些可供我们操作的按钮:


截屏2023-02-18下午2.52.57.png


1、可以打开这张图的详情页,单独看某一张图


2、可以对某一张图进行修改(就是调整、抠图啊、裁剪啊,大小啊之类的)


3、进行改造,就是这张图你不满意,我再进行改造一下


4、下载单独这一张图


5、为这一张图生成报告


请求的接口是这个 https://labs.openai.com/api/labs/tasks/task-xxx


image.png


返回来的就是 一个 data 数组, 然后react就把这个数组循环渲染出各个图片链接,图片链接应该是放在某个cdn桶里。


然后这里呢请求的图片列表的同时,也同时扣了一次机会。


可以对比一下,这也就是他们成立一个公司开发OpenAI这一系列产品的可怕之处,确实是有料。


一个戴着珍珠项链的墨西哥女人 改成 戴着珍珠项链的18岁墨西哥女孩 An 18-year-old Mexican girl with a pearl necklace


image.png


还是搜一下'日本美女'吧


image.png


第一位日本美女出场


image.png


脸、眼睛、手、怪不得人家画画的说,画人物手比较难画,可能是吧我不是美术生,就记得一句话“画人难画手”✋。


其他的我就不一一举例了。


它这东西怎么想的, 啧啧...


最后我放一张我自己认为的日本美女。想了一下,自己去搜吧,放这里不太合适。




以上着重看了 你问我答 (chatgpt), 文本补充 (Text completion)、你说我出画 (Image generation)这三点。


image.png


还剩下 代码补充(生成代码、编辑代码、代码解释); 嵌入 (搜索、分类和比较文本); 模型训练 (训练模型) 这三块。


总结


我让chatgpt这个AI来帮我写结尾吧。


image.png


看了整篇文字数,废话很多,洋洋洒洒3千多。这个新技术确实像chatgpt它自己总结的一样,势不可挡,不容小觑。


潜力


1、自然语言处理

2、计算机视觉

3、自动化决策


应用在


1、医疗保健

2、交通运输

3、金融服务

4、能源


作者:盏灯
链接:https://juejin.cn/post/7201388504914591805
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

今年很火的 AI 绘画怎么玩

1.前言 2022年绝对可以说是AIGC元年,从google搜索的趋势来看,在2022年AI绘画及AI生成艺术的搜索量激增。 AI绘画在这一年的爆发一个很重要的原因就是 Stable Diffusion 的开源,这也来不开这几年 Diffusion Mode...
继续阅读 »

1.前言


2022年绝对可以说是AIGC元年,从google搜索的趋势来看,在2022年AI绘画及AI生成艺术的搜索量激增。


640.jpg


AI绘画在这一年的爆发一个很重要的原因就是 Stable Diffusion 的开源,这也来不开这几年 Diffusion Model 扩散模型在这几年里的迅猛发展,结合了 OPENAI 已经发展得很成熟的文本语言模型 GPT-3,从文本到图片的生成过程变得更加容易。


2.GAN(生成对抗网络)的瓶颈


从14年诞生,到18年的StyleGAN,GAN在图片生成领域获得了长足的发展。就好像自然界的捕食者与被捕食者相互竞争共同进化一样,GAN的原理简单来说就是使用两个神经网络:一个作为生成器、一个作为判别器,生成器生成不同的图像让判别器去判断结果是否合格,二者互相对抗以此训练模型。


640.png


GAN(生成对抗网络)经过不断发展其有了不错的效果,但有些始终难以克服的问题:生成结果多样性缺乏、模式坍缩(生成器在找到最佳模式后就不再进步了)、训练难度高。这些困难导致 AI 生成艺术一直难以做出实用的产品。


2.Diffusion Model(扩散模型)的突破


在 GAN 多年的瓶颈期后,科学家想出了非常神奇的 Diffusion Model(扩散模型)的办法去训练模型:把原图用马尔科夫链将噪点不断地添加到其中,最终成为一个随机噪声图像,然后让训练神经网络把此过程逆转过来,从随机噪声图像逐渐还原成原图,这样神经网络就有了可以说是从无到有生成图片的能力。而文本生成图片就是把描述文本处理后当做噪声不断添加到原图中,这样就可以让神经网络从文本生成图片。


6401.png


Diffusion Model(扩散模型)让训练模型变得更加简单,只需大量的图片就行了,其生成图像的质量也能达到很高的水平,并且生成结果能有很大的多样性,这也是新一代 AI 能有难以让人相信的「想象力」的原因。


当然技术也是一直在突破的,英伟达在1月底推出的StyleGAN的升级版StyleGAN-T就有了十分惊艳的进步,在同等算力下相比于Stable Diffusion生成一张图片需要3秒,StyleGAN-T仅需0.1秒。并且在低分辨率图像StyleGAN-T要比Diffusion Model要好,但在高分辨率图像的生成上,还是Diffusion Model的天下。由于StyleGAN-T并没有像Stable Diffusion那样获得广泛的应用,本文还是以介绍Stable DIffusion为主。


3.Stable Diffusion


在今年早些时间,AI作画圈经历了 Disco Diffusion、DALL-E2、Midjouney 群雄混战的时代,直到 Stable Diffusion 开源后,才进入一段时间的尘埃落定,作为最强的 AI 作画模型,Stable Diffusion 引起了 AI 社群的狂欢,基本上每天都有新的模型、新的开源库诞生。尤其是在Auto1111的WebUI版本推出后,无论是部署在云端还是本地,使用Stable Diffusion都变成一个非常简单的事情,并且随着社区的不断开发,很多优秀的项目,比如Dreambooth、deforum都作为 Stable Diffusion WEBUI版的一个插件加入进来,使得像微调模型、生成动画等功能都能一站式完成。


6402.png


4.AI绘画玩法及能力介绍


下面介绍下目前使用 Stable Diffusion 可以有哪些玩法以及能力


11.jpg


12.jpg


14.jpg


15.jpg


5.目前主要应用情况介绍


19.jpg


31529880d6c24b11bc54dde744214084.jpeg


6.自己搭一个Stable Diffusion WEBUI服务


6.1 云端版本


这里使用AutoDL提供的云端算力来搭建,也可以使用其他平台比如 Google Colab或者百度飞桨等。


1.首先在AutoDL上注册账号并且租一台 A5000/RTX3090 显卡的云主机。http://www.autodl.com/market/list


2.以此主机创建镜像,镜像可在 http://www.codewithgpu.com 上选择已经打包好的算法镜像。这里以 http://www.codewithgpu.com/i/AUTOMATIC… 这个镜像为例,选择后创建。


6403.png


3.创建后开机并启动JupterLab,


6404.png


运行下面指令启动服务即可。如果遇到系统盘空间不足的情况,也可以将stable-diffusion-webui/文件夹移入数据盘 autodl-tmp再启动。如果遇到启动失败,可以根据你机器的位置配置一下学术资源加速。


cd stable-diffusion-webui/
rm -rf outputs && ln -s /root/autodl-tmp outputs
python launch.py --disable-safe-unpickle --port=6006 --deepdanbooru

6.2 本地版本


如果你有一块显卡还不错的电脑,那可以部署在本地,这里介绍下Windows版本的搭建:


1.首先需要安装Python 3.10.6,并且添加环境变量到Path中


2.安装git


3.Clone Stable Diffusion WEBUI 的工程代码到本地


4.将模型文件放置于 models/Stable-Diffusion目录下,相关模型可以去huggingface.co/ 下载


5.运行 webui-user.bat,通过本机电脑ip及7860端口访问服务。


7.总结


本文介绍了AI绘画的一些相关的信息,感兴趣的朋友也可以自己把服务部署起来,自己试着学习用DreamBooth或者最新的Lora微调一下大模型。相信在2023年,随着 AIGC 热度的不断提高,我们的工作和生活都会因为 AI 带来巨大的改变。前段时间 ChatGPT的推出给我们带来了巨大的震撼,就好像刚进入互联网时期搜索信息的能力一样,今后学会使用 AI 来辅助我们的工作也将是一个非常重要的能力。


8.参考资料




  1. 从起因到争议,在 AI 生成艺术元年聊聊 AI
    sspai.com/post/76277




  2. 神经网络学习笔记6——生成式AI绘画背后的的GAN与Diffusion初解
    blog.csdn.net/qq_45848817…




  3. How diffusion models work: the math from scratch

    theaisummer.com/diffusion-m…




  4. GAN 结构概览

    developers.google.com/machine-lea…




  5. The absolute beginners guide to Midjourney – a magical introduction to AI art
    http://www.entrogames.com/2022/08/abs… magical-introduction-to-ai-art/




  6. The viral AI avatar app Lensa undressed me—without my consent
    http://www.technologyreview.com/2022/12/12/… lensa-undressed-me-without-my-consent/




  7. instruct-pix2pix
    huggingface.co/timbrooks/i…




文/misotofu


作者:得物技术
链接:https://juejin.cn/post/7201050872574574653
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

一键接入 ChatGPT,让你的QQ群变得热闹起来

项目效果 ChatGPT 的出现对于人们的生活和工作都有着重要的影响,作为一个强大的自然语言处理模型,可以理解和生成自然语言,所以 ChatGPT 非常适合作为聊天机器人,回答你的任何问题 在日常生活中想要更加方便的使用 ChatGPT,当然是将其设置成微信...
继续阅读 »

项目效果



  • ChatGPT 的出现对于人们的生活和工作都有着重要的影响,作为一个强大的自然语言处理模型,可以理解和生成自然语言,所以 ChatGPT 非常适合作为聊天机器人,回答你的任何问题

  • 在日常生活中想要更加方便的使用 ChatGPT,当然是将其设置成微信聊天机器人和QQ聊天机器人,随时随地解答你的问题,为你解决疑惑

  • 当然,不推荐您将其设置成微信聊天机器人,因为微信的检测机制,很容易导致你这个号废掉,本人已经亲自踩过坑,但是如果您有很多小号,请随意;因此这里只教大家QQ聊天机器人的搭建方式



🎈 安装环境



  • 支持在 Liunxwindow 上部署,也支持一键启动命令

  • 该项目 chatgpt-mirai-qq-botgithub 上已经进行开源,任何人都可以进行下载

  • 因为只做快速聊天体验,所以本人只部署 window 版本,想要 Liunx 版本的,可自行查看项目中的文档

  • 下载最新版稳定的 window 源码包:github.com/lss233/chat…

  • 本地解压后,双击其中的 初始化.cmd 即可进行环境初始化,一路回车,等待运行成功即可



🎈 配置文件



  • 在初始化的最后,将会打开配置文件 chatgpt/config.cfg,在这个文件中进行配置

  • 配置完成后,保存关闭,初始化环境即是成功

  • 如果暂时不知道怎么配置,也可以保存关闭,后期手动打开 chatgpt/config.cfg 配置即可

  • 关于配置文件中需要配置解释的如下

  • mirai.qq: 这个 qq 必须配置,一般是你的小号,用来作为聊天机器人的 qq

  • api_key: 这个 window 版本默认即可,无需修改,如果是 liunx 则需要修改成 123456789

  • http_url: 这个 window 版本默认即可,无需修改,如果是 liunx 则需要修改成 http://mirai:8080,具体细节可以去项目中的 issues 中查看

  • ws_url:http_url 一样

  • openai:关于 openai 中的配置是最重要的,你会看到可以配置多个账号,这是为了防止被 openai 限制,所以如果你有多个 openai 的账号,可以减轻请求压力,不过一般只填其中一个就行了,因此这里我们只需要完善第一个账号信息即可

  • mode: 可以选择 browser 也可以选择 browserlessbrowser 模式是通过浏览器自动化登录openai,可以看到登录过程,browserless 是走第三方代理,无需浏览器登录,这里我选择的是browserless

  • email/password: 不用不必多说

  • session_token/access_token/api_key: 如果你填了email/password,这个就不用管,不同的登录方式罢了

  • proxy: 这个是字面意思,如果你在国内,这个就必须要填,而且地址最好是漂亮国所在区域,这个参数一般只要修改端口即可,具体看你自己 proxy 的端口

  • system.accept_group_invite: 这个是对QQ的限制,是否接受用户拉你机器人到群里,这个我一般填false,被别人用多了,也增加风险

  • system.accept_friend_request: 这个是对QQ的限制,是否接受用户加你好友,一般人喜欢私聊一些问题,这个我选择true

  • presets: 关于预设,无需修改,默认正常就是使用 chatgpt 进行回复,喜欢不同风格的回复,自己聊天的时候加载就行,这个功能还是很好玩的,不同的预设回复你的时候,语气都不一样。


# 这里是 ChatGPT for QQ 的所有配置文件
# 请注意:以 "#" 开头的文本均为注释
# 不会被程序读取
# 如果你想要使用某个设置,请确保前面没有 "#" 号

[mirai]
qq = 请修改为你机器人的QQ号

manager_qq = 请修改为机器人管理员的QQ号

# 以下设置如果不了解,可以不用理会
api_key = "1234567890"
http_url = "http://localhost:8080"
ws_url = "http://localhost:8080"

[openai]
# OpenAI 相关设置

# 第 1 个账号信息
[[openai.accounts]]
# 模式选择, browser - 浏览器登录, browserless = 无浏览器登录
# 如果你使用浏览器登录卡在 Found session token,就使用无浏览器登录
mode = 'browserless'

# 你的 OpenAI 邮箱
email = "xxxx"
# 你的 OpenAI 密码
password = "xxx"

# 对于通过 Google 登录或者微软登录的同学,可以使用 session_token 登录
# 此时的 password 可以直接删除 (email 必填)
# session_token 获取方法:https://github.com/lss233/chatgpt-mirai-qq-bot/issues/96
# 提示:如果使用此模式,请删除下方 session_token 前面的 "#" 号,并给上方的 password 前面加上 "#"
# session_token = "一串 ey 开头的东西"

# 你的 OpenAI access_token,登录后访问`https://chat.openai.com/api/auth/session`获取
# 提示:如果使用此模式,请删除下方 access_token 前面的 "#" 号,并给上方的 email、password 前面加上 "#"
# access_token = "一串 ey 开头的东西"

# 如果你想使用的是 API 版的 ChatGPT,请使用
# api_key = "sk-xxxx"

# 如果你在国内,需要配置代理
# 提示:如果使用此功能,请删除下方 proxy 前面的 "#" 号
# proxy="http://127.0.0.1:1080"

# 是否为 ChatGPT Plus 用户(是的话设置为 true)
paid = false

# 是否开启标题自动重命名
# 若为空或保持注释即不开启
# 支持的变量: {session_id} - 此对话对应的上下文 ID,若产生在好友中,则为好友 QQ 号,若产生在群聊中,则为群号
# 具体见 README 中的介绍
# title_pattern="qq-{session_id}"

# 是否自动删除旧的对话,开启后用户发送重置对话时会自动删除以前的会话内容
# auto_remove_old_conversations = true

# # 第 2 个账号信息,access_token 登录示例
# [[openai.accounts]]
# mode = 'browserless'
# access_token = "xxxxx"
# # proxy="http://127.0.0.1:1080"
# paid = false

# # 第 3 个账号信息, api_key 登录示例
# [[openai.accounts]]
# api_key = "sk-xxxx"

# 如果你想增加更多账号,复制的文本继续添加即可

# [system]
# 是否自动同意进群邀请
accept_group_invite = false
# 是否自动同意好友请求
accept_friend_request = false

[presets]
# 切换预设的命令: 加载预设 猫娘
command = "加载预设 (\w+)"
loaded_successful = "预设加载成功!"
scan_dir = "./presets/"

[presets.keywords]
# 预设关键词 <-> 实际文件
"正常" = "presets/default.txt"
"猫娘" = "presets/catgirl.txt"
# "default" = "presets/default.txt" # 默认预设,开启后所有的会话都会先读这个预设,谨慎使用!

🎈 启动Mirai



  • 在初始化完环境后,会多出两个可执行文件,先点击 Mirai.cmd

  • 这个脚本主要用来登录你的 QQ 机器人账号的,把你的上面配置里面填写的 QQ 设置成机器人

  • 登录机器人命令:login <机器人QQ账号> <机器人QQ密码> <登录协议>

  • 回车即可登录成功,也就是说QQ机器人登录成功了,当然这部分也有可能是最难的,欢迎私信



🎈 启动ChatGPT



  • 最后点击启动 ChatGPT.cmd ,这个可执行文件,就是用来登录 openai

  • 登录成功后,说明 QQ 机器人已经连接上了 ChatGPT,此时即可跟机器人畅所欲言的聊天了



作者:极客飞兔
链接:https://juejin.cn/post/7206219564090130487
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

ChatGPT ! 二次元老婆!活的!活的!真的已经实现出来啦

若有侵权,请联系删帖 各位我现在的心情,太激动了,真的简直太激动了,甚至差点抽过去。真的我实在不能用语言描述我现在兴奋的心情 二次元老婆,纸片人老婆真的可以来了,真的可以活过来啦,活的,活的二次元老婆,国外大神做出来啦 (^o^)/ 事情是这样的 我刚刚看的...
继续阅读 »

7b2014c87e3b47e7a1b5ac9f29712b6c_noop.png



若有侵权,请联系删帖



各位我现在的心情,太激动了,真的简直太激动了,甚至差点抽过去。真的我实在不能用语言描述我现在兴奋的心情


二次元老婆,纸片人老婆真的可以来了,真的可以活过来啦,活的,活的二次元老婆,国外大神做出来啦 (^o^)/


事情是这样的


我刚刚看的新闻,地址在这里:程序猿用ChatGPT创造的虚拟老婆,被真女友强制「安乐死」


国外这个小哥真的让纸片人老婆活过来啦,真的,她有自己你设定的性格,有自己的口头禅,而且还有摄像头可以事实识别你得东西,主动跟你会说话,还有随着说话事实切换自己的画面,这些都是事实演算出来的


是的,大家猜的不错,这是现在大火的 ChatGPT。整个技术层面我不是太懂,我简单说一下:



  • 用摄像头实时检测你的动作,识别物体

  • 用 ChatGPT 根据你的动物和出现的物体,生成对话

  • 可以用那种那爽上天的语调跟你说话

  • 用 Stable Diffusion2 实时生成老婆图像


真的,各位看官,这是一个大生意,是所有二刺猿们的终极梦想,现在有人做出来了,各位看官要是有大佬、投资家、高管,请马上、立刻、动身去美国找到这个小哥,买断这个技术或者马上跟进开发


我要活过来的二次元老婆,一刻钟都等不了了,真的,求求你们啦,求你们快点吧,呜呜呜呜呜呜呜,一年 1 个 W 都行,我想要呀 ε(┬┬﹏┬┬)3


请让我隆重的跟各位介绍二次元老婆


1. 不仅外观打扮随时切换、互动也非常迅速


9e49ec3672b24f71b1eb9328cd9b55b5_noop.gif


看看,看看,老婆是会动的,会跟你说话的,好想要,好想 (/≧▽≦)/


2. 甚至还能“看”见你做的事情,并对它进行评价



英雄联盟?好恶心!不过好吧,我可以陪你玩



b42b8c0ea337481d9c2b2b3c5d78741c_noop.gif


3. 老婆可以打情骂俏


震惊不震惊,打情骂俏 哎,想不想要,我想要啊 o(*≧▽≦)ツo(*≧▽≦)ツo(*≧▽≦)ツo(*≧▽≦)ツo(*≧▽≦)ツ


和你得交流并不局限于文字,老婆不仅有自己的二次元头像,还有甜美的嗓音
你】



“要不要去吃汉堡王?”
老婆的回答是:哒咩!
它有股闻着像放久了的薯条的味道,而且他们的可乐从来不给续杯。我要去Wendy’s。



在这个过程中,老婆还会根据两人的对话内容切换头像风格,问候时还是可爱的萝莉风,拒绝时就秒变御姐


4. 还有更多


真的还有更多,二次元老婆会主动回应你的各种行为,真的,我就不搬啦,大家可以去上面的地址看原文,我真的不能搬运啦


我的真的从来不发这种东西,但是这次真的 戳中 了我的弱点,被暴击啦 (づ。◕‿‿◕。)づ


项目可行性


真的,我认为这个项目非常有可行性,根据文章的描述,这该技术最大的支出是支持实时演算的服务器费用,2 周 1000 刀


要是换到国内来说,比如头条这样的大厂,来搭建服务器集群专门来提供服务,成本是可以分担下来的,最多就是费流量,提供包月服务,一个月 99 不过分吧


二次元老婆,活的,真不想要,别说 99,199 我都掏钱啊


要是再把神经网络,各种机器学习算大加进去,让你的老婆可以不停的学习各种妹子的性格,香不香,想想就香甜无比啊


另外这个技术具有巨大的商品加持优势,比如说手机,红魔 8pro 大家知不知道,要是让 mora 可以这样活过来,按照你设定的性格跟你过日子,这样的手机,谁不想买啊


这就是妥妥的 二次元社区 最大强的 流量密码啊,各种大大,要是能看到我的分享,请赶快跟进啊,求求你们啦 ヘ|・∀・|ノ*~●


作者:前行的乌龟
来源:juejin.cn/post/7188167873011908665
收起阅读 »

一次关于ChatGPT数据分析的失败探索

前言 最近ChatGPT的热潮席卷全球,衍生出其与职业危机的一系列讨论,引发了不少人的焦虑。 以上是网上获取的一份可能被威胁到的岗位清单(程序员总是在挨打的前沿),大家也或多或少体验过了让它写代码、改bug或者进行创作,我看到数据分析也是这份清单的前列,所以...
继续阅读 »

前言


最近ChatGPT的热潮席卷全球,衍生出其与职业危机的一系列讨论,引发了不少人的焦虑。


e34ba832760743d546255cae58e6ef0.png


以上是网上获取的一份可能被威胁到的岗位清单(程序员总是在挨打的前沿),大家也或多或少体验过了让它写代码、改bug或者进行创作,我看到数据分析也是这份清单的前列,所以想着对ChatGPT进行一次有关数据分析的探索。

分析未半而中道崩殂


做这次分析其实还有一个原因,我昨晚在油管上刷到了一个使用ChatGPT做证券分析分析的视频,其中这位博主的对话中提供了比亚迪的财报url,gpt似乎是进行了能对url内容进行识别。


image.png


gpt的学习数据截止于2021年9月并且非联网的,如果问一些实时性的问题它就可能跟你瞎掰了,但是能识对url内容进行识别那不就是联网了吗(可能gpt偷偷进化了)。
于是我准备了一份【2020年死亡公司名单】

image.png


excuse me?什么情况??于是我在网上找了半天,看到了tw上有人用Google sheets的形式提供数据,但是得出了错误的结果

c6dcc12df655324e69e2958c705120e.png


啪的一下,很快啊,我马上导入到google sheets,gpt立马给我返回了一系列分析。

image.png


不过先别急着高兴,来对比一下表格里的数据看看

image.png


错的还是蛮离谱的,我再问了一遍,它甚至都不愿意敷衍我

image.png


于是我又拿油管那位博主的财报url进行测试,并对返回数据与财报进行验证。

image.pngimage.png


最后得出结论,gpt返回的分析与我所提供的url没有一分钱关系,所以数据也是错误的。

柳暗花明又一村


既然url无法访问,那我们只能通过简单粗暴直接给数据的方式了。


image.png


让我们来看一下处理结果,gpt对这份数据的处理是没问题的,我们的输入数据是无序且带有时分的,理解无误并帮我们做了排序处理。

image.png


不过这样限制非常大,可以看到这里的数据进行了更变,这里使用的是b站狂飙每个相关视频每日的播放数据,原因也很明显,受于token的限制,原先的数据很容易就过长了。所以直接输入数据并不是一个理智的选择。

君子善假于物也


通过两种尝试,gpt现在还不能把饭直接喂我们嘴里,把数据交给它可行性低,所以我们只能配合excel进行操作,这比较适用于一些经常使用excel的人群,比如我经常需要处理重复或者繁琐的任务,但是又不会写代码,这个时候就可以把任务交给gpt。


image.png


image.png


总结


这次对数据分析的探索其实和预期相差很大,不过也感受的了gpt的潜力,如果联网能力将指数提升,就目前而言它可能是一个高效率的辅助工具。比如一个丝毫不懂vba或者excel的人,可以在gpt的协助下使用excel做一些数据分析、数据可视化的工作,这对以前来说可能需要花大量的时间百度或者向人请教。gpt的出现无疑是让效率提升了数倍,可以让非专业人士跨入一些专业的初级门槛,那相关的专业人员是否就会被取代呢?其实取代人类并不是AI而是会使用AI的人类,所以不论是哪个行业,都需要不断学习和拥抱AI技术。


作者:Defineee
来源:juejin.cn/post/7207737674216472636
收起阅读 »

国内有哪些对标 ChatGPT 的大语言模型? 5 大竞品

ChatGPT 是基于 大语言模型 的聊天机器人,而这个大语言模型是一个人工智能领域概念、技术。 大语言模型通常有十亿、百亿级的参数,需要非常强大的算力、和非常多的用于训练的数据资源。它对海量的无标注数据进行预训练、通过微调和零样本学习来变形、应用。 对大模型...
继续阅读 »

ChatGPT 是基于 大语言模型 的聊天机器人,而这个大语言模型是一个人工智能领域概念、技术。


大语言模型通常有十亿、百亿级的参数,需要非常强大的算力、和非常多的用于训练的数据资源。它对海量的无标注数据进行预训练、通过微调和零样本学习来变形、应用。


对大模型的“变形”(DIY),不仅能增强 AI 技术的通用性,还能扩展应用场景、人人都可以用“大模型”,这样也利于形成了一个开放的生态,激发大众创新。


GPT 时代,国内学界和企业也相继基于大语言模型推出自研的大模型。比如:


百度的“文心一言”、复旦大学的“MOSS”、腾讯的“HunYuan大模型”、阿里的“通义大模型”、华为的“盘古大模型”等等。


自研单位大模型
百度文心一言
复旦大学MOSS
腾讯HunYuan
阿里通义
华为盘古

本篇就将简要介绍这 5 个国内的这些大语言模型~ <喜欢三连👍👍👍笔芯>


百度-文心一言


以上这么多国内大语言模型,目前,最引人注目的就是“文心一言”,它也可以生成各种类型的文本,比如诗歌、小说、新闻等。同时,它被认为是中国 AI 新旧时代划分里程碑式的产品。


怎样体验?


1.通过百度智能云 API 接口调用文心一言的服务;


2.进入官网 wenxin.baidu.com/ 体验;


image.png


image.png


文本的理解和创作还是“敬请期待”。。


在开放 API 体验 AI 根据文字、风格作画:


image.png


前的产品中心只有“文心百中”和“文心一格”两个产品。


看下“文心百中” 提供的体验示例:


image.png


实际用起来,跟 ChatGPT / New Bing / Notion AI 比,感觉差距还很大~ 文心百中还是停留在搜索结果上,没有做到联系上下文整合。


image.png


文心一格主要提供一些:联想脑洞生成相关图片推荐,试了下,也不够准确。。


用一成语小结:任重道远


复旦大学-MOSS


MOSS 命名上和电影《流浪地球》的 AI MOSS 同名,寓意人和人工智能共同拯救地球。目前,它的参数规模约是 ChatGPT 的 十分之一,仍处在内测阶段,预计三月底开源。


image.png


MOSS 的优势是什么?


MOSS 因为参数规模小,所以更节省计算资源和存储空间,易于部署和应用。


另外,MOSS 在设计时还考虑了人类的伦理道德准则,不会产生有偏见或可能有害的回答,这样可以避免一些潜在的法律风险和商业伦理问题。这点上,ChatGPT 则没有明确地处理。


腾讯-HunYuan


HunYuan 利用了腾讯的研发力量,完整覆盖 NLP 大模型、CV 大模型、多模态大模型及其它行业领域任务模型,可谓是:集大成者。


它的目标是打造行业领先的 AI 预训练大模型,以统一平台,对技术复用,使 AI 技术适用于更多场景,并且降低成本。


HunYuan 的参数量级是 万亿!从这点看,腾讯的 HunYuan 格局(画饼)就比 文心一言、MOSS 要大的多的多~~


对于公众 HunYuan 目前也是在内测优化中,未来值得期待。


但 HunYuan 的 NLP 部分,HunYuan-NLP 已经在多个腾讯产品中得到应用,一样也是用于生成文本,比如对话生成、小说续写、广告生成等。


image.png


阿里-通义


阿里的通义模型是一系列基于【自然语言处理和多模态理解与生成】的 AI 模型,旨在打造国内首个 AI 统一底座。


它包括以下几个核心模型:


1.AliceMind-PLUG:语言大模型,能够在多个中文语言理解任务上超越人类水平。


2.AliceMind-mPLUG:多模态理解与生成统一模型,能够处理图文、视频等多种数据类型,并进行跨模态搜索、生成等任务。


3.M6-OFA:多模态统一底座模型,能够根据不同的场景和设备动态调整模型大小和性能。


4.S4:超大模型落地关键技术框架,能够支持百亿级别参数的训练和推理。


image.png


阿里的这个部署算是最早一批了,值得期待。


目前,我们可以在 魔搭社区 modelscope.cn/home 找到通义大模型的部分开源代码。比如你可以体验中文版的GPT-3 等。


华为-盘古


盘古,这个大家也常听到吧?也属于是大名鼎鼎。


盘古大模型是一系列超大规模的预训练模型,包括NLP、CV、多模态和科学计算等。


其中,盘古NLP大模型是 全球最大 的千亿参数中文语言预训练模型,它能够进行内容生成和内容理解等任务。


盘古CV大模型是 全球最大 的30亿参数视觉预训练模型,它能够进行分类、分割和检测等任务。


这两个全球最大是亮点~ 目前,盘古大模型在华为云:http://www.huaweicloud.com/ 上提供服务。


image.png


小结


整个看完下来,我的感觉就是:虽然我们现在的 大模型 GPT 商用还没有像 ChatGPT 或 New bing 或 Notion AI 那么直接能给到大众去使用,但是国内这些最优秀的一批企业/高校也一直在推进这个事情。


技术存在差距,不承认也不行,就像之前所分享的,ChatGPT 能站到大众面前,也经过了美国各科技公司十多年的沉淀、演进,所以我们可能还是起步有点迟了。


但不怕慢就怕站,我们知道训练 AI 大模型 是个方向,就走起来就好了,加油吧~ Maybe 顶峰再见~




OK,以上便是本篇分享,希望各位工友喜欢~ 欢迎点赞、收藏、评论 🤟


我是掘金安东尼 🤠 100 万人气前端技术博主 💥 INFP 写作人格坚持 1000 日更文 ✍ 关注我,安东尼陪你一起度过漫长编程岁月 🌏


😹 加我微信 ATAR53,拉你入群,定期抽奖、粉丝福利多多。只学习交友、不推文卖课~





作者:掘金安东尼
来源:juejin.cn/post/7208188644293050405
收起阅读 »

如何让 ChatGPT 读懂超长保险条款?

前言 在去年年底 ChatGPT 刚火的时候我就有一个想法,它能不能帮我读一下晦涩难懂的保险条款,告诉我它到底在讲什么?到底什么病能赔多少钱?甚至能告诉我里面是不是藏有一些坑? 但是当我把条款内容复制到 ChatGPT 时,我们会发现,它直接告诉你:“太长了,...
继续阅读 »


前言


在去年年底 ChatGPT 刚火的时候我就有一个想法,它能不能帮我读一下晦涩难懂的保险条款,告诉我它到底在讲什么?到底什么病能赔多少钱?甚至能告诉我里面是不是藏有一些坑?
但是当我把条款内容复制到 ChatGPT 时,我们会发现,它直接告诉你:“太长了,它受不了”。


image.png
当我们自己打开 openai 的文档platform.openai.com/docs/api-re…),我们才明白:哦,原来它接受的最大长度是 4096tokens。但这个 一个 token 到底是多长呢?暂时还不知道,反正就是有这么个上限。很显然,我们的保险条款远远的超过了它的上限,因为我才复制两三页的内容它就 Error 了。
image.png
但我们还是纳闷,不应该啊,ChatGPT 不应该很强吗?它的官方例子可是摆了几十个案例,看网上的各种文章,它似乎在文字与编码领域,远超绝大数人类,怎么会连个保险条款都无法承受。
image.png


我想从这个案例中看看有没有其他路子,可惜确实没有合适的案例能解决我这种超长文本的诉求。于是我停止了这个想法,并先回家过了个快乐的新年。


但在最近,在我的不屑但可能没啥意义的努力下,我几乎完成了这个想法。先放几个截图给大家看看。


问蚂蚁爆款「好医保长期医疗」几个问题的答案:
image.png
问市面上很火的「达尔文7号重疾」的问题及答案:
image.png
如果你仔细看,你会发现,它已经能非常准确的回答这几个很多保险小白常问的问题了。
那我到底是怎么实现的呢?这篇文章来一探究竟。


先纠正一下


在我开始正文之前,先让 ChatGPT 跟大家做个简单介绍。
image.png
所以本文标题其实不对,准确说应该是「如何让 openai 的 API 帮我读懂保险条款」。因为我其实是调用了 openai 提供的 API 能力来满足需求的。更准确来说是调用了其 GPT-3 的一些模型,而不是挂代理直接问 ChatGPT。但为了大部分读者容易理解,就先取一个不恰当的标题了。


后文中,我将会以 GPT 通用指代我所调用的 openai 的 API 服务。


核心解决方案


话说在新年回来后,ChatGPT 仍愈演愈烈,因此我又来了点儿兴趣,并尝试把 GPT 接入我一个年久失修的个人公众号。就在这个接入的过程中,为了解决接入遇到的不少问题,我看了不少文档。果然是开卷有益,实干兴邦啊。过程中我又接触学习了一些有用知识。其中最重要的是两个点知识:


其一是:GPT 的多轮对话是如何实现的? 其实很简单,就是把历史对话都存起来,然后按照时序重新拼接,再加上这次的问题,合并一起作为 prompt再传给 GPT 即可。


其二就是,如何让 GPT 理解超长文本知识并做问题回答? 我在逛 openai 官方文档的时候,发现了其实人家早早就想到了这个问题,并贴心的准备好了教程文档。这在我上一篇 ChaGPT 的文章中也已提到:
公众号如何接入 ChatGPT 及 一些感想




  1. How to build an AI that can answer questions about your website:platform.openai.com/docs/tutori…

  2. Question Answering using Embeddings:github.com/openai/open…



它的思路其实很好理解,详细来说,主要是分几步:




  1. 先将巨量的文档知识拆块,并使用 openai 提供的Embeddings能力将该部分内容向量化,并做映射存储。向量化的目的是为了做两部分文本的相似性匹配。关于它的文档在这:platform.openai.com/docs/guides…




  2. 当用户提问时,将用户的「提问文本」也做向量化。




  3. 遍历已拆块并向量化的文档内容,将之与向量化后的「提问文本」做内容相似性比较,找到最为相似的文档内容向量。




  4. 根据之前的映射关系,找到这段「向量」映射着的原始文档内容块。并把这个内容块作为上下文传给 GPT。




  5. GPT 会根据这段上下文回答用户的提问。




原来如此,那么我只要把保险条款分段向量化,再根据用户提问匹配到相应的那段内容再回答不就好了吗。简单,上手吧。


把大象放进冰箱需要几步?


这个问题似乎正如「把大象放入冰箱」。描述起来很简单,真正要做起来就举步维艰。


在我们面前最大的问题就是,到底怎么把这个文档做分割?


最简单的方案自然是,把保险条款按页码一页一页分块,如果一页内容也超了,那我们就半页半页分块。 但这忽略了一个最大的问题,就像大象的各个器官并非水平均分分布一样,知识内容并非是按页码分割的。一个知识可能第三页正好起了个标题,第四页才是详细的描述。而向量化匹配的时候,却可能只匹配到第三页的内容。比如这个「好医保长期医疗」的责任免除条款,就很容易丢失下半部分的免除责任,造成回答准确性降低。
image.png
除此外,这样的分割还容易让 GPT “学坏”。因为粗暴的按页分割,很容易把无关的知识传给 GPT,导致它可能会因为这些无关的信息返回错误的答案。比如如下关于用户信息告知的条款:
前一页内容如下:
image.png
后一页内容如下:
image.png
如果你询问的问题是:“如果投保时年龄填写错误,理赔时会怎么样”。
那很有可能你只会将第一页内容传给 GPT,它将会告诉你保司不承担任何责任,并不退回保险费。
image.png
而用我实现的服务所拼接的知识块,得到的版本答案如下:
image.png
显然这个问题得到了准确回答。


以上两个案例比较生动的说明了分割的重要性。


如何分割文档



懂得了很多道理,也依旧过不好这一生。 - ChatGPT也不知道是谁说的



如何分割文档?其实这个也很好想方案,只是比较难搞。
保险条款是有文章结构的,只要咱们可以按文章标题给文档做结构化就好了。 最终文档就会成为这样的一个文档树:


interface INode {
title: string;
content: string;
children: INode[]
}

type DocTree = INode[]

然后我们在深度遍历这个文档树,去识别每个节点所包含的所有内容的长度,达到一定阈值就剪下来作为一个「知识块」。这就像剪一个西兰花 🥦,按自己可以含进去的大小,一朵朵剪下来。


1.gif


通过这样的手段,我们就能在满足知识文本长度的限制下,切下最为连续完整的知识内容。 这其实很简单,但如果一定要装逼取个算法名的话,那我称之为:西兰花算法。


但在我们切割西兰花之前,还有一个棘手的问题,怎么把一个条款文档先变成一棵西兰花(一颗文档树)?


第 0 步:先明白tokens咋回事


因为后文很多内容都跟这个tokens相关,所以我必须得提前介绍一下。
有时间的同学可以直接看官网介绍文档:
没时间的同学可以继续听我简单总结一下:



  1. tokens 不是指 prompt 字符串的长度;

  2. token指的是一段话中可能被分出来的词汇。比如:i love you,就是三个token,分别为 「i」「love」「you」。

  3. 不同语言token计算不一样,比如中文的「我爱你」其实是算 5 个 token,因为它会先把内容转成 unicode。读过我公众号那篇文章的同学,你们就会知道,有些 emoji 的token长度会超出你的想象。image.png

  4. 你可以用这个网站在线体验你的文字的token长度:platform.openai.com/tokenizer

  5. node.js环境中,你可以用 gpt-3-encoder 这个 npm 包来计算 tokens的长度。


OK,掌握这些知识就足够理解我们后文的内容了。


第 1 步:标题的识别


我们可以先看看市面比较火爆的医疗与重疾险产品的条款。发现其实保险大部分条款是有一定格式标准的。几乎都是嵌套数字标题 + 内容。那是否可以依据一定的规则,识别出那部分是标题,然后根据标题做切割即可?比如说,根据 「数字 + ·? + 数字?」的正则做匹配。
虽然我正则写不来,但是 ChatGPT 写的来呀


image.png


const text = '1 React 1.1 react hooks 的使用技巧 1.2 react suspense 的作用 2 Vue 2.1 Vue compostion api 的使用技巧';
const regex = /(\d+\.?\d*)\s(\w+)/g;
const matches = text.matchAll(regex);

const result = [];

for (const match of matches) {
result.push(match[1] + ' ' + match[2]);
}

console.log(result);
// output
['1 React', '1.1 react', '1.2 react', '2 Vue', '2.1 Vue']

虽然它的回答不够完美,但是基本够我们继续下一步编码了。于是我尝试把 PDF 的全文内容复制出来,并做分割。然后我就会发现几个很麻烦的地方:



  1. 数字不是只在标题中出现,正文中也很容易出现各种数字。

  2. 有些注释内容,也有数字+内容的出现


image.png
所以我们复制出来的文本是这样的:


module.exports = `2.3 等待期
自本合同生效(或最后复效)之日起 90 日内,被保险人因意外伤害4以外的原因, 被保险人因意外伤害发生上述情形的,无等待
被确诊患有本合同约定的轻症疾病5、中症疾病6、重大疾病7的,我们不承担保险
责任,这 90 日的时间称为等待期。
期。
轻症疾病 中症疾病
重大疾病
本合同的保险责任分为基本部分和可选部分。
,本合 ,退还
等待期内,我们的具体做法见下表:
等待期内发生的情形
我们的做法
不承担本合同“2.4 保险责任”中约定的保险责任
同继续有效
不承担本合同“2.4 保险责任”中约定的保险责任
您已交的本合同保险费8(不计利息),
本合同终止
2.4 保险责任
1 保单生效对应日:本合同生效日每年(或半年、季、月)的对应日为保单年(或半年、季、月)生效对应日。若当月 无对应的同一日,则以该月最后一日为保单生效对应日。
2 保单年度:自本合同生效日或年生效对应日零时起至下一个年生效对应日零时止为一个保单年度。
3 保险费约定交纳日:分期交纳保险费的,首期保险费后的年交、半年交、季交或月交保险费约定交纳日分别为本合同
的保单年生效对应日、半年生效对应日、季生效对应日或月生效对应日。`

所以,如果只是粗暴的根据某种标题规则来做分割,那我们只会得到错乱的结果。


那我们人眼是如何从页面中知道它是标题的呢?我们自然是根据这个文案的位置、大小,综合了我们的历史经验来判断它是不是标题。也就是说,要想真正从一段文本中做很好的标题识别以及内容分割,必须要获取这段文本的其他元数据。


我的下意识,自然是希望还有 AI 的能力。我把 PDF 转图片,都传给某个 AI,它很聪明,帮我 OCR 识别文档并做好了充分的文档结构化。


但我在 openai 官网并没有找到这样的 api 能力提供。由于我的 AI 储备非常薄弱,我也很难在网上找到可以满足我诉求的开源工具。而且根据我很可能不成熟的感觉,我感觉现在训练出来的开源 AI 模型,顶多只是识别出文字以及文字所在的绝对位置,也很难帮我直接把文档给按照标题结构化了。真有这样的需求,可能需要我自己准备大量材料来训练。这似乎再一次难倒了我。


于是我又想到了 pdf.js这个工具。我们 C端 部分投保协议就是利用这个工具包,把 PDF 文档转成 DOM 渲染到页面上。虽然我之前并没有使用过,但我相信它肯定可以拿到 PDF 上很多元数据,否则不可能做到还原成 DOM 去渲染。我甚至想,它有没有可能直接帮我转成一颗 根据标题已经结构化好的 DOM 树。


在我使用pdf.js后,我发现,刚才稍微想的有点多了,但也足够用了。它能把 PDF 文档的文字块以及这个文字块的文字与大小信息 解构出来。比如这样:


[{
"str": "2.4",
"dir": "ltr",
"width": 13.2,
"height": 10.56,
"transform": [10.56, 0, 0, 10.56, 346.03, 285.05],
"fontName": "g_d0_f1",
"hasEOL": false,
"pageNum": 4
},
{
"str": " 保险责任",
"dir": "ltr",
"width": 42.24,
"height": 10.56,
"transform": [10.56, 0, 0, 10.56, 364.39, 285.05],
"fontName": "g_d0_f12",
"hasEOL": false,
"pageNum": 4
}]

其中的 widthheight决定了文字块的大小,transform决定了文字块在文档上的绝对位置信息。pdf.js也是根据这些信息,把 PDF 内容以绝对位置与大小一个个的转成 DOM 并绘制在网页上。它不理解前后语序与内容结果,它只是粗暴的拼装。


但这对我来说已经够用了,有了这些信息,我就能分析出哪些文字块是标题,哪些文字块是正文的正常数字,哪些内容块是底部的注释内容。比如说:



  1. 出现最多的字体大小,有理由相信这就是正文字体大小

  2. 持续出现的一个很靠左的 X 坐标,且该坐标内容基本是数字,有理由相信,这就是数字标题或数字注释所在的 X 坐标

  3. 虽然符合上述第二条规则,但却比正文字体小很多,有理由相信,这是注释前的数字


等等等等吧,除此外,我们还需要判断什么时候到注释内容,什么是页码内容。因为这些内容都要做一些特殊处理。另外就是不同文档可能有些特殊的边界情况要处理一下。


虽然说这依旧很人肉,不智能,但至少能把路走通了。至于有些不是以 x.x.x 这样的数字做标题的文档,比如:第一章、第一节什么的,还是能拓展的,但就先不考虑了。


第 2 步:过长内容摘要化


事情走到这一步,大问题就没有了。但实际应用的时候,我们还是会发现一个小问题,就是很多小节的内容其实比较长,我们能做相似性映射的知识块其实往往不仅一块。当我们拼接多块知识的时候,内容又超出了。而如果我们只拼接一块内容,知识又不够完整。这又让我们抓耳挠腮了。


我仔细看了看这些小节的内容,我觉得,其实这段文本,要是用文言文来说,可能还可以再短一点(汉语真是博大精深)。但是我觉得如果让 GPT 帮我把它转成文言文的话,用户提问的问题很可能就映射不到了。当然,我也真的试了一下,发现 text-davinci-003这个模型似乎在文言文领域也不太行,保险条款它很难转成文言文。


但我有了另外一个思路,就是保险条款其实废话还是有些多的,我可以让 GPT 帮我做一些摘要性的总结,且尽量不丢失最核心的有效知识。在我网上搜索这块相关的知识时,发现 NLP 领域有一种叫「命名实体识别baike.baidu.com/item/%E5%91…)」的技术,常用于搜索引擎、信息提取、问答系统中。不管三七二十一了,openai 这么强大,那我就这么让它帮我这么做吧。


async function getSummary({ content, tokenLength }) {
const promptContext = `'''{{content}}'''基于命名实体识别构建内容摘要:`;
const contentTokenLength = tokenLength || encode(content).length;
const promptContextTokenLength = encode(promptContext).length;

const completion = await openai.createCompletion({
model: 'text-davinci-003',
prompt: promptContext.replace('{{content}}', content),
// 1000 ~ 4096,最大也不能超过1000
max_tokens: Math.min(
4096 - contentTokenLength - promptContextTokenLength,
1000,
),
temperature: 0,
});

return strip(completion?.data?.choices?.[0].text, ['\n']);
}

实际测试下来,这样的方式相比直接总结摘要,从最终效果来看,返回的结果会稳定很多,且返回的知识不会只说到一半。具体原因也不懂,有资深的大佬可以帮忙指点一下。


经过这样摘要化以后,我们就能把一段较长的知识文本给有效缩短。当用户问起相关知识时,可以调用更多的知识块来回答用户。


第 3 步:超长内容极限压缩


事情走到这一步,你可能以为就真没啥问题了。但实际上我们又遇到了个小麻烦。就是有部分小节的内容依旧还是太长了。就像一颗基因变异的西兰花 🥦。


image.png
我已经剪到最小的分支了,但这个最小的分支依旧超过了max_tokens的限制。这又难倒我了,现在我该怎么分割它?这似乎回到了我最开始遇到的问题。
不过好在,这些变异的西兰花并没有动画灵能百分百中的那么夸张,大部分还只是 略超 max_tokens一些,几乎不会超过其两倍。而自己观察这些超出去的内容,往往是两种类型。



  1. 较长的表格,比如药品列表,如下图1。

  2. 一些责任或疾病的详细介绍,如下图2。


image.pngimage.png
我们发现这些小节的内容,其实并不适合分割。比如药品列表要是分割成两块接近max_tokens的知识内容,一次性问答只能获取其中一块知识。这就会导致回答错误。比如你问有多少种药品可以报销,它自然会算错。责任也是一样。


但这些小节有另外一个方向,就是压缩内容。里面有很多文字其实是相似的,比如一堆的社保目录内/外。比如责任内容中频繁出现的:恶性肿瘤``保险金``被保险人等等。我们只要做一本字典,把这些很长的重复性文字,用另外一种特殊的较短的字符指代。这段长文本就会瞬间被压缩到较短的文本,我们再连同字典一起发给 GPT,让它再翻译回来并做摘要化,于是就绕过了max_tokens的限制。


但问题又来了,说的容易,代码怎么知道哪些文字是一段词语?如果代码不知道哪些文字是一段词语,又怎么做字典映射。总不能自己先把所有可能的词汇都预先想好吧。虽然保险有一些专业术语可以提前预设,但总归有更多的未知的。


这就引出了 NLP 领域的另外一门技术,分词。很开心的是,在中文领域,且在 node.js 生态中,有一个比较好用的分词工具「结巴分词-github.com/yanyiwu/nod…」。 不出意外,这也是 ChatGPT 告诉我的。


image.png
运用这个结巴分词,我们就可以把一段内容分割成一个个词汇,同时也支持传入用户预设的词汇字典。这样我们就能知道哪些词汇在一段文本中被重复使用多次。对于这些词汇,我们再用一个最短的字符去映射它。


const nodejieba = require('nodejieba');

nodejieba.load({
userDict: './userdict.utf8',
});

const longText = '相学长白天吃饭,相学长中午也吃饭,相学长晚上还吃饭';

const words = nodejieba.cut(longText);

console.log(words);

// output
['相学长','白天','吃饭',',','相学长','中午','也','吃饭',',','相学长','晚上','还','吃饭'];

为了映射的字符尽量的短,我也是挠了一下脑袋,本来最简单就是一个特殊字符加上从1递增的数字就好了,比如这样:*${index}。但是这个方式经过我实测,压缩完的tokens效果还不够极致。考虑到我们都是基本是中文环境,我最终选择了 26个字母大小写 + 24个拉丁字母大小写作为索引:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZαβγδεζηθικλμνξοπρστυφχψωΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ



根据第 0 步的知识,我们知道,千万别用 emoji 去做字典索引。



这样我们就得到最多100个索引,当然如果内容中已有出现具体的字母,最好还是针对该段内容剔除该字母。经过实际测试,这样的压缩效果会比数字映射法稍微好一些。且经过实测,这样问 openai 依旧能得到正确答案。举个例子:
上文中的,相学长白天吃饭,相学长中午也吃饭,相学长晚上还吃饭
会被转化成,a白天b,a中午也b,a晚上还b|上文中,a:相学长,b:吃饭
我们把这句话拿去问 GPT:相学长每天都在做什么。它能给出正确的回答:相学长每天都在吃饭


image.png
除了字典法压缩外,其实还有一个也比较显著的手段。就是把全角字符全部转成半角字符。在我的实际测试中,一段 8247 个tokens长度的内容。换半角相比不换半角,能多压缩 580 个tokens,简直是效果惊人!


其实不仅仅超过max_tokens的文本需要压缩。我建议超过 3000 tokens的文本都得压缩一下。因为 openai 最大的 4096 个token限制。并非是限制 prompt。而是限制 prompt+ 它的答案。也就是说,当我们做摘要化的时候,如果我们提供的原始内容越长,它能返回的摘要就越短。这显然不符合我们的诉求。所以,虽然文章中这里写着是第三步,但实际操作时,压缩其实是第二步,压缩需要在摘要化之前。


也是因为max_tokens的计算涵盖了 GPT 的回答内容,所以当我们根据用户提问拼接知识块的时候,不能按照 max_tokens的限制去打满内容,尽量留出 几百到一千的 tokens给 GPT 做回答。


在我实操过程中呢,其实还存在一个文档的内容,怎么压缩也压缩不到预期的长度。我确实选择了逃避,因为这段内容是无数个疾病的详细介绍,我骗自己说这些详细介绍并没太大用。因此最终我做了一个特殊处理,如果是这个超长的疾病介绍,我就只保留了疾病标题,去掉了疾病的内容。


针对这种,再压缩也解决不了的问题,我目前确实还没找到非常好的解法。


最终经过我们对 PDF 文档的分割、压缩、小节内容摘要化、转成嵌套文档树,最终再上一个西兰花算法。我们就能完成对这个 PDF 文档的合理分割了。最终我们再把分割后的内容做向量化处理,就能实现一个比较好的基于超长保单文档的保险产品问答服务。


其实其他领域的文档也差不多,只要这个文档结构比较好切割。


代码已开源


相关代码开源,有兴趣的同学自己下载继续研究吧~ github.com/wuomzfx/pdf…
关于到底怎么做向量化、怎么做匹配,我在本文就不多说了,这个还是比较容易了。包括其他还有一些特殊的处理,比如怎么把注释内容拼接到正文里。这些都可以在源码中方便寻找到。其他可能还稍微需要一点工具知识的,就是 node 中如何做两个 embedding 向量的相似性匹配。用 @stblib/blas这个 npm 包就行。DEMO 示例:


const ddot = require('@stdlib/blas/base/ddot');

const x = new Float64Array(questionEmbedding);
const y = new Float64Array(knowledgeEmbedding);

const result = ddot(x.length, x, 1, y, 1),

如果还有哪里不明白的,欢迎评论区或者先尝试问下 ChatGPT~


最后一点小感悟


感觉人工智能的时代真的要到来了,连我这种 AI 小白,似乎都已经能完成一个可能真的能投入使用的服务。我再整个小程序,糊个页面,把一些异常容错机制再完善完善。再稍微整个爬虫,从保险行业协会网站帮用户快捷找到相关的保险条款。我几乎就能实现一个帮助用户回答保险产品的应用了。


亦或者,我可以自己预设一些问题。通过这些问题,我可以从保险条款中结构化出很多有效的信息,比如保额保费、责任细节、投保年限、续保年限等等。结构化之后,我又可以直接做不同产品的对比,根据用户的要求推荐比较合适的保险产品。这是一件挺有可能的事情,我尝试把之前的两个问答作为对比再次问 GPT 推荐哪款产品,它的回答比较中肯且有用。


image.png


总之,新的 AI 基础设施,已经能成为现在大部分工程师的有利工具。在某些垂直领域做一些深入研究,通过这些工具,AI 就能发挥出意想不到的作用,我们可以快速的产出各种有意思的产品。就好像 HTML5 跟 小程序 带来一系列有意思的 轻量APP 一样。相信,AI 浪潮在这两年就要席卷而来了~~


作者:相学长
链接:https://juejin.cn/post/7206950454097690680
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

ChatGPT火了,我连夜详解AIGC原理,并实战生成动漫头像

一、AIGC:人工智能的新时代AIGC可能会是人工智能的下一个时代。尽管很多人还不知道AIGC是什么。当还有大批人宣扬所谓人工智能、元宇宙都是概念,并且捂紧了口袋里的两百块钱的时候,人工智能行业发生了几件小事。首先,由人工智能生成的一幅油画作品《太空歌剧院》,...
继续阅读 »

一、AIGC:人工智能的新时代

AIGC可能会是人工智能的下一个时代。尽管很多人还不知道AIGC是什么。

当还有大批人宣扬所谓人工智能、元宇宙都是概念,并且捂紧了口袋里的两百块钱的时候,人工智能行业发生了几件小事。

首先,由人工智能生成的一幅油画作品《太空歌剧院》,获得了艺术博览会的冠军。

有人感觉这有什么?各种比赛多了去了,不就是获个奖吗?

可是这次不一样,这是一幅油画作品。在此之前,好的油画只能由人工绘制。但是现在人工智能也可以绘制了,而且还拿了冠军。

很多人类艺术家仰天长叹:“祖师爷啊,我这代人,在目睹艺术死亡!

上一次艺术家们发出这样的感慨,还是1839年,那时照相机问世了。

随后,ChatGPT横空出世。它真正做到了和人类“对答如流”。

它也可以做数学题、创作诗歌、写小说,甚至也能写代码、改bug。

再说一个震惊的报道:由ChatGPT生成的论文,拿下了全班的最高分。导师找到学生,说他上交的论文,段落简洁、举例恰当、论据严谨,甚至引经据典,古今中外,无所不通,教授不敢相信。学生瑟瑟发抖,他说,这是AI生成的,我只是想应付一下作业

另外,美国89%的大学生都在用ChatGPT做作业。以色列总统在周三发表了一个演讲,内容也是由人工智能写的。

现在全球都在讨论,这类人工智能技术,看似是带来了巨大的商业价值,实则可能会给人类带来严重的打击。

这项技术就是AIGC(AI-Generated Content),翻译成中文就是:人工智能生成内容

二、AIGC实战:智能生成动漫头像

其实,利用人工智能生成内容资源,很早就有了。记得有一年的双十一购物节,上万商家的广告图就是人工智能生成的。只是现在的数据、算法、硬件,这三个条件跟上了,这才让它大放异彩,全民可用。

下面,我就以人工智能生成动漫头像为例,采用TensorFlow框架,从头到尾给大家讲一下AIGC的全过程。从原理到实现都很详细,自己搭建,不调API,最后还带项目源码的那种

2.1 自动生成的意义

那位问了,自动生成内容有什么好处?我的天啊,省事省力省钱呐!

下图是一个游戏中的海洋怪物。这便是人工智能生成的。

这个大型游戏叫《无人深空(No Man's Sky)》。号称有1840亿颗不同的星球,每个星球都有形态各异的怪物。这游戏玩着得多爽啊?简直就是视觉震撼呐。这些怪物要是人工来做,得招聘多少团队,得花费多少时间?

用人工智能生成的话,你可以像去网吧一样,跟老板说:嗨,多开几台机子

当然,下面我要做的,没有上面那样地绚丽,甚至很原始。

但是过程类似,原理一致。效果就是AI生成动漫头像:

2.2 自动生成的原理

AIGC的原理,用中国古话可以一语概括,那就是:读书破万卷,下笔如有神

以生成猫咪的照片来举例子,基本上AIGC的套路是下面这样的:

首先,程序会设计两个角色。一个叫生成器,一个叫鉴别器。

为了便于理解,我们称呼生成器为艺术家,称鉴别器为评论家。

艺术家负责生产内容,也就是画猫。不要觉得拥有艺术家头衔就很了不起,他可能和你一样,画不好。但是,就算乱画,也得画。于是,他就画啊画啊画。

评论家呢,相比艺术家就负责一些了。他首先调研了大量猫的照片。他知道了猫的特点,有俩眼睛,有斑纹,有胡须。这些特征,他门儿清。

下面有意思的就来了

艺术家这时还啥也不懂,随便画一笔,然后交给评论家,说画好了。评论家拿旁光一看,瞬间就给否了。还给出一些意见,比如连轮廓都没有。

艺术家一听,你要轮廓那我就画个轮廓。他加了个轮廓,又交了上去。评论家正眼一看,又给否了。不过,他还是给出一些意见,比如没有胡须。

就这样,这俩人经过成千上万次的友好磋商(评论家幸好是机器,不然心态崩了)。到后来,艺术家再拿来画作,评论家会看好久,甚至拿出之前的照片挨个对照。最后他甚至还想诈一下艺术家,说你这是假的,艺术家说这次是真的。这时,评论家说好吧,我确实找不出问题了,我看也是真的

至此,剧终。

搞一个造假的,再搞一个验假的。然后训练。随着训练加深,生成器在生成逼真图像方面逐渐变强,而鉴别器在辨别真伪上逐渐变强。当鉴别器无法区分真实图片和伪造图片时,训练过程达到平衡。

上面这一套操作叫“生成对抗网络(Generative Adversarial Networks)”,简称叫GAN。我感觉,这套流程有点损,叫“干”没毛病。

2.3 数据准备

鉴别器是需要学习资料学习的。因此,我准备了20000张这样的动漫头像。

这些数据来自公开数据集Anime-Face-Dataset。数据文件不大,274MB。你很容易就可以下载下来。这里面有60000多张图片。我用我的电脑训练了一下。200分钟过去了,一个epoch(把这些数据走一遍)都还没有结束。那……稍微有效果得半个月之后了。

乡亲们,我这里是AI小作坊,干不了大的。于是乎,我就取了20000张图片,并且将尺寸缩小到56×56像素,再并且将彩色改为黑白。这样一来,效率马上就提高了。2分钟就可以训练一圈。如此,我训练500圈也就是不到一天的时间。这是可以承受的。

上面处理图片的代码:

import cv2
# 存放源图片的文件夹
dir_path = "anime"
all_files=os.listdir(dir_path)
# 循环里面的每一个文件
for j,res_f_name in enumerate(all_files):
res_f_path = dir_path+"/"+res_f_name
# 读入单通道
img1 = cv2.imread(res_f_path, 0)
# 重新定义尺寸为56
img2=cv2.resize(img1,(56,56),interpolation=cv2.INTER_NEAREST)
# 转存到face文件夹下
cv2.imwrite("face/"+res_f_name, img2)
# 超过20000退出循环
if j > 20000: break

相信加上注释后,还是通俗易懂的。

文件准备好了。尽管维度降了,但看起来,这个辨识度还过得去。

下一步要转为TensorFlow格式化的数据集。

from PIL import Image
import pathlib
import numpy as np

# 将图片文件转为数组

dir_path = "face"
data_dir = pathlib.Path(dir_path)
imgs = list(data_dir.glob('*.jpg'))
img_arr = []
for img in imgs:
img = Image.open(str(img))
img_arr.append(np.array(img))
train_images = np.array(img_arr)
nums = train_images.shape[0]

train_images = train_images.reshape(nums, 56, 56, 1).astype('float32')
# 归一化
train_images = (train_images - 127.5) / 127.5
# 转为tensor格式
train_dataset = tf.data.Dataset.from_tensor_slices(train_images).shuffle(nums).batch(256)

我很想说一下数据形态的变化过程。因为这和后续的神经网络结构有关联。

首先,我们的图片是56×56像素,单通道。所以,图片的数据数组img_arr的形状是(20000, 56, 56)。也就是说有20000组56×56的数组。这里面的数是int型的,取值为0到255,表示从纯黑到纯白。

((20000, 56, 56),
array([[ 0, 0, 0, 0, 0, …… 0],
[ 18, 18, 126, 136, 175, …… 0],
[ 0, 0, 253, 253, 0, …… 0]], dtype=uint8))

然后用reshape做一个升维,并且用astype('float32')做一个浮点转化。

升维的目的,是把每一个像素点单独提出来。因为每一个像素点都需要作为学习和判断的依据。浮点转化则是为了提高精确度。

到这一步train_images的形状变为(20000, 56, 56, 1)

((20000, 56, 56, 1),
array([[ [0.], [0.], [0.], [0.], [0.], …… [0.]],
[ [18.], [18.], [126.], [136.], [175.], …… [0.]],
[ [0.], [0.], [253.], [253.], [0.], …… [0.]]], dtype=float32))

接着,进行一个神奇的操作。执行了(train_images-127.5)/127.5这一步。这一步是什么作用呢?我们知道,色值最大是255,那么他的一半就是127.5。可以看出来,上一步操作就是把数据的区间格式化到[-1,1]之间。

如果你足够敏感的话,或许已经猜到。这是要使用tanh,也就是双曲正切作为激活函数。

这个函数的输出范围也是在-1到1之间。也就是说,经过一系列计算,它最终会输出-1到1之间的数值。这个数值我们反向转化回去,也就是乘以127.5然后加上127.5,那就是AI生成像素的色值。

2.4 生成器

首先我们来建立一个生成器。用于生成动漫头像的图片。

def make_generator_model():
model = tf.keras.Sequential()
model.add(layers.Dense(7*7*256, use_bias=False, input_shape=(160,)))
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())

model.add(layers.Reshape((7, 7, 256)))
assert model.output_shape == (None, 7, 7, 256)
model.add(layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False))
assert model.output_shape == (None, 7, 7, 128)
model.add(layers.BatchNormalization())
model.add(layers.LeakyReLU())
……
model.add(layers.Conv2DTranspose(1, (5, 5), strides=(2, 2), padding='same', use_bias=False, activation='tanh'))
assert model.output_shape == (None, 56, 56, 1)

return model

# 生成一个试试
generator = make_generator_model()
noise = tf.random.normal([1, 160])
generated_image = generator(noise, training=False)

因为我最终会放出全部源码,所以这个地方省略了几层相似的神经网络。

从结构上看,输入层是大小为160的一维噪点数据。然后通过Conv2DTranspose实现上采样,一层传递一层,生成变化的图像。最终到输出层,通过tanh激活函数,输出56×56组数据。这将会是我们要的像素点。

如果输出一下,生成器生成的图片。是下面这个样子。

这没错,一开始生成的图像,就是随机的像素噪点。它只有一个确定项,那就是56×56像素的尺寸。

这就可以了。它已经通过复杂的神经网络,生成图片了。这个生成器有脑细胞,但刚出生,啥也不懂。

这就像是艺术家第一步能绘制线条了。如果想要画好猫,那就得找评论家多去沟通。

2.5 鉴别器

我们来建立一个鉴别器。用于判断一张动漫头像是不是真的。

def make_discriminator_model():
model
= tf.keras.Sequential()
model.add(layers.Conv2D(64, (5, 5), strides=(2, 2), padding='same', input_shape=[56, 56, 1]))
model.add(layers.LeakyReLU())
model.add(layers.Dropout(0.3))

model.add(layers.Conv2D(128, (5, 5), strides=(2, 2), padding='same'))
model.add(layers.LeakyReLU())
model.add(layers.Dropout(0.3))

model.add(layers.Flatten())
model.add(layers.Dense(1))

return model

# 鉴别上一个生成的噪点图片generated_image试试
discriminator = make_discriminator_model()
decision = discriminator(generated_image)

我们来看一下这个模型。它的输入形状是(56, 56, 1)。也就是前期准备的数据集的形状。它的输出形状是(1),表示鉴别的结果。中间是两层卷积,用于把输入向输出聚拢。采用的是LeakyReLU激活函数。

我们把生成器生成的那个噪点图,鉴别一下,看看啥效果。

tf.Tensor([[0.00207942]], shape=(1, 1), dtype=float32)

看这个输出结果,数值极小,表示可能性极低。

我们只是建立了一个空的模型。并没有训练。它这时就判断出了不是动漫头像。倒不是因为它智能,而是它看啥都是假的。它现在也是个小白。

下面就该训练训练了。

2.6 训练数据

开练!GAN!

cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits=True)

def discriminator_loss(real_output, fake_output):
real_loss = cross_entropy(tf.ones_like(real_output), real_output)
fake_loss = cross_entropy(tf.zeros_like(fake_output), fake_output)
total_loss = real_loss + fake_loss
return total_loss

def generator_loss(fake_output):
return cross_entropy(tf.ones_like(fake_output), fake_output)

……
@tf.function
def train_step(images):

noise = tf.random.normal([BATCH_SIZE, noise_dim])

with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tape:
generated_images = generator(noise, training=True)

real_output = discriminator(images, training=True)
fake_output = discriminator(generated_images, training=True)

gen_loss = generator_loss(fake_output)
disc_loss = discriminator_loss(real_output, fake_output)

gradients_of_generator = gen_tape.gradient(gen_loss, generator.trainable_variables)
gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables)

generator_optimizer.apply_gradients(zip(gradients_of_generator, generator.trainable_variables))
discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator, discriminator.trainable_variables))

for epoch in range(500):
for image_batch in dataset:
train_step(image_batch)

同样,我还是只放出了部分关键代码。不然影响你的阅读。最后我会开源这个项目,不要着急。

我们来分析原理,一定要反复看,精彩和烧脑程度堪比《三国演义》。我连图片都不敢加,怕打断你的思绪。

首先看损失函数。

算法训练的一个途径,就是让损失函数的值越变越小。损失函数表示差距,预测的差距和实际差距缩小,表示预测变准。

先看一下生成器的损失函数。位置在代码中的generator_loss部分。它返回两个数据之间的差距。第一个数是造假的结果fake_output,这个结果是鉴别器给的。另一个数据是标准的成功结果。随着训练的进行,算法框架会让这个函数的值往小了变。那其实就是让生成器预测出来的数据,同鉴别器判断出来的结果,两者之间的差距变得越来越小。这一番操作,也就是让框架留意,如果整体趋势是生成器欺骗鉴别器的能力增强,那就加分。

再看鉴别器的损失函数。也就是代码中的discriminator_loss函数。它这里稍微复杂一些。我们看到它的值是real_lossfake_loss,是两项损失值的总和。real_lossreal_output和标准答案的差距。fake_lossfake_output和标准答案的差距。

那这两个值又是怎么来的呢?得去train_step函数里看。real_output是鉴别器对训练数据的判断。fake_loss是鉴别器对生成器造假结果的判断。看到这里,我感叹人工智能的心机之重。它什么都要。

随着大量学习资料的循环,它告诉人工智能框架,它要锻炼自己对现有学习材料鉴别的能力。如果自己猜对了学习资料,也就是那20000张动漫头像。请提醒我,我要调整自己的见识,修改内部参数。代码中定义的training=True,意思就是可随着训练自动调节参数。

同时,伴着它学习现有资料的过程中,它还要实践。它还要去判断生成器是不是造假了。它也告诉框架,我要以我现在学到的鉴别能力,去判断那小子造的图假不假。

因为人工智能要想办法让损失函数变小。因此得让fake_loss的值变小,才能保证discriminator_loss整体变小。于是,框架又去找生成器。告诉它,鉴别器又学习了一批新知识,现在人家识别造假的能力增强了。不过,我可以偷偷地告诉你,它学了这个还有那个。这么一来,生成器造假的本领,也增强了。

如此循环往复。框架相当于一个“挑唆者”。一边让鉴别器提高鉴别能力,一边也告诉生成器如何实现更高级的造假。最终,世间所有的知识,两方全部都学到了。鉴别器再也没有新的知识可以学习。生成器的造假,鉴别器全部认可,也不需要再有新的造假方案。所有防伪知识全透明

这时AIGC就成功了。

2.7 自动生成

我对20000张动漫图片训练了500轮。每一轮都打印一个九宫格的大头贴。最终我们可以看到这500轮的演变效果。这张图大约25秒,只播放一遍(如果放完了,拖出来再看),需要耐心看。

从动态图看,整体趋势是往画面更清晰的方向发展的。

动图比较快,我放上一张静态图。这完全是由人工智能生成的图片。

生成的代码很简单。

# 加载训练模型
if os.path.exists(checkpoint_dir+"/checkpoint"):
checkpoint.restore(tf.train.latest_checkpoint(checkpoint_dir))

# 生成噪点作为输入
test_input = tf.random.normal([1, 160])
# 交给生成器批量生成
predictions = generator(test_input, training=False)
# 取出一张结果
img_arr = predictions[0][:, :, 0]
# 将结果复原成图片像素色值数据
img_arr = img_arr* 127.5 + 127.5

这是20000张图,500轮训练的效果。如果是百万张图片,几千轮训练呢?完全仿真很简单。

项目开源地址:gitee.com/bigcool/gan…

三、我们对AIGC该有的态度

AIGC的火爆出圈,引起全球的强烈讨论。很多地方甚至打算立法,禁止学生使用它做作业。

虽然我说了这么多。可能直到现在,依然有人觉得这是噱头:我的工作这么高级,是有灵魂的工作,人工智能写文章能比我通顺?它还写代码?它懂逻辑吗?

国外有一个IT老哥叫David Gewirtz。他从1982年开始就写代码,干了40多年,也在苹果公司待过。他以为用ChatGPT写代码不会有啥惊喜。直到出现结果,却吓了他一大跳。

他的需求是给它老婆写一个网站的插件,用于挑选顾客,并滚动顾客的名字展示。这个需要几天完成的工作,ChatGPT很快就完成了。而且代码纯粹简洁,极其规范。它还告诉你该操作哪个文件,该如何部署

现阶段的人工智能,可能没有自己的思考,但是它有自己的计算。

你会写文章,因为你读过300多本书,并且记住了里面20%的内容。这些让你引以为傲。但是人工智能,它读过人类历史上出现过的所有文献,只要硬盘够,它全部都能记住。而且它还不停对这些内容做分析、加工、整理:这里和这里有关联,这里和那里都是在介绍橙子的营养成分。它通过计算,让一切知识发生互联互通。

当有人向人工智能表示人类的担忧时,人工智能也给出了自己的回答。

我比较赞同它的观点。

抱有其他观点的人,主要担心有了人工智能,人类就会变得不动脑子了。时间长就废了。

我觉得,这些都是工具。相机出来的时候,也是被画家抵制,因为成像太简单了。现在想想,太简单有问题吗?没有!同样的还有计算器之于算盘,打字之于手写。甚至TensorFlow 2.0出来时,也被1.0的用户抵制。他们说开发太简单了,这让开发者根本接触不到底层。殊不知,1.0出来的时候,那些写汇编语言的开发者也想,他们堕落了,居然不操作寄存器。

其实,我感觉这些担心是多余的。每个时代都有会属于自己时代的产物。就像现在我们不用毛笔写字了,但是我们的祖先也没有敲过键盘呀!可能下一个时代的人,连键盘也不敲了。


作者:TF男孩
链接:https://juejin.cn/post/7197792292084940858
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

GPT-3.5&速搭微信小程序

前言 想必大家都收到OpenAI开放了ChatGPT API的消息,之前的API也尝试过接入过个人微信号,给好基友们体验体验,但是效果不太好,已经被他们干废一个小号。 公众号又有三秒断连的机制,也就没写下去了,这次整个小程序。 ChatGPT API 先来看...
继续阅读 »

前言


想必大家都收到OpenAI开放了ChatGPT API的消息,之前的API也尝试过接入过个人微信号,给好基友们体验体验,但是效果不太好,已经被他们干废一个小号。


image.png


公众号又有三秒断连的机制,也就没写下去了,这次整个小程序。


ChatGPT API


先来看看ChatGPT API中我觉得最大的一个亮点:


  messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)

与之前不同的是,我们可以以数组的形式存储上下文消息,不用像之前那样,想要实现多轮对话就得把消息全拼在一起,同时还显式的定义了角色,role属性表示其所属的角色,其中system是定于接口的行为,在对话中可以先使用system进行格式化,比如【你是一个前端工程师】,而user和assistant则是表示用户输入消息以及模型输出消息。通过这些定义,可以使模型变得更加清晰明确。


了解完信息格式后,我们直接上代码跑一下


const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: "YOU APIKEY",
});
const openai = new OpenAIApi(configuration);
const chat = async (content) => {
try {
const {data: { choices },} = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: content,
});
return choices[0].message;
} catch (error) {
return error;
}
};
let content = [{ role: "user", content: "你好" }];
chat(content).then((res)=>{
console.log(res)
})

返回结果如下:


image.png
我们成功与ChatGPT进行了一次对话,不过在此之前,还需要接收前端发送过来的信息,所以我们在外面套一个express


express


const express = require("express");
const app = express();
app.use(express.json());

app.post("/chat", (req, res) => {
let content =req.body.content;
chat(content).then((data)=>{
res.send(data);
})
});
app.listen(8080, () => {
console.log("Server is running");
});

//const { Configuration ...
//const configuration ...
// ...

image.png


一个简单的接口就这样完成了。


关于其他参数的应用


目前我们只使用了model和messages参数,其中messages还可以选择性的去除对话中的信息,ChatGPT API是每次都要传输完整的上下文消息的,所以我们还可以与前端联动,选择删除一些无用的信息,保留有用的信息,提高回答的准确性。


n:一次性返回多个不同值,可以避免多次重复询问


logit_bias:调整特定词汇在结果中出现的可能性,可以实现减少重复和屏蔽特定词汇的功能


temperature/top_p:调整结果的相关性和准确性,可以在需要发散思维时使用,官方建议二者调整其中一个,不建议二者都调整。


这些参数也可以在前端通过发送指令的方式进行调整。


微信小程序


image.png


对话界面


我们基于messages来渲染对话界面


 <view wx:for="{{messages}}" wx:key="index" style="margin: 40rpx 0">
<view class="user" wx:if="{{item.role=='user'}}">
<image class="avatar" src="../../image/NO.0004.png"></image>
<text class="content" bindtap="copyText" data-text="{{item.content}}">{{
item.content
}}</text>
</view>
<view class="assistant" wx:if="{{item.role=='assistant'}}">
<image class="avatar" src="../../image/logo.png"></image>
<text class="content" bindtap="copyText" data-text="{{item.content}}">{{
item.content
}}</text>
</view>
</view>

通过flex-direction区分用户与ChatGPT


.user {
display: flex;
justify-content: space-evenly;
flex-direction: row-reverse;
}
.assistant {
display: flex;
justify-content: space-evenly;
}

发送事件


send函数主要流程是,把用户输入的信息push到messages,同时在界面中渲染,然后向api发送请求,返回信息后再push到messages中,同时在界面中渲染。


 send: function (e) {
if(!/^\s*$/.test(this.data.inputValue)){
let message = {"role": "user", "content":this.data.inputValue}
this.data.messages.push(message)
this.setData({
messages:this.data.messages,
inputValue:''
});
wx.request({
url: 'http://127.0.0.1:8080/chat',
method: 'POST',
data: {
content: this.data.messages,
},
header: {
'content-type': 'application/json'
},
success:(res)=>{
this.data.messages.push(res.data.message)
this.setData({
messages:this.data.messages
});
}
})
}else{
wx.showToast({
title: '输入不可为空',
duration: 500,
icon: 'none'
});
}

结尾


3月2号下午我写node的时候还能用,今天晚上写小程序时发现寄了,api应该是给墙了(一时间竟不知道哪边动的手),需要梯子。


关于send函数这里再细锁细琐,上面的传输方式随着聊天越聊越长,原方案是想发送给express做存储,前端每次只需要发送一条message,同时也能做聊天记录的保存,不过这不像在云开发中可以很方便的获取用户的openid,虽然可以用wx.login,但是今天是周五欸,下机。


代码先丢上去了
小程序代码


image.png


作者:Defineee
来源:juejin.cn/post/7206292770276163640
收起阅读 »

ChatGPT:时代赋予的机遇

背景 chatGPT是OpenAI公司开发的一款人工智能聊天机器人程序,在2022年11月开放给大众注册使用。 OpenAI公司的定位是一家非营利组织,但由于研发成本的需要,它在早期接受了马斯克等人的投资,后面又接受微软的投资。按照其创始人山姆·阿尔特曼所说,...
继续阅读 »

背景


chatGPT是OpenAI公司开发的一款人工智能聊天机器人程序,在2022年11月开放给大众注册使用。


OpenAI公司的定位是一家非营利组织,但由于研发成本的需要,它在早期接受了马斯克等人的投资,后面又接受微软的投资。按照其创始人山姆·阿尔特曼所说,在OpenAI盈利后,公司利润将会按照四个阶段推进。


第一阶段,先满足埃隆马斯克、彼得泰尔、雷德霍夫曼等首批投资者,让投资人收回成本(从这点看,马斯克说OpenAI丢了初心也能理解)。


第二阶段,微软将获得OpenAI 75%的利润,直到微软收回其130亿美元的投资。


第三阶段,在OpenAI的利润达到920亿美元后,微软在该公司的持股比例将下降到49%,剩余部分利润将由其他风险投资人和OpenAI员工分享。


第四阶段,在利润达到1500亿美元后,微软和其他风险投资者的股份将无偿转让给OpenAI非营利基金。


简单点理解,就是OpenAI先向微软借了130亿美元,抵押品就是股权。承诺赚钱了,用1500亿美元赎回来,要是没赚钱,公司就归你了。按照10%的收益算,这将是一个万亿美元的大市场。


注册


ChatGPT的注册需要一个邮箱账号,一个国外手机号(可以找一个可以获取国外手机验证码的平台),一个科学上网的工具。操作并不麻烦,但对于国内大部分人来说,注册还是有门槛的。


服务


ChatGPT目前对外服务主要有三块:免费版、plus订阅版以及api付费。



  • 免费版本:有时候会访问不了,能访问的时候,也经常不稳定。我自己测试,如果聊天框隔了一会没答复,下次发送内容就会出现异常,需要刷新页面才可以正常使用。

  • Plus 订阅版:20美元/月,保证服务稳定。

  • API付费:这是专门给开发人员使用的。你可以通过这API在国内搭建自己的chatGPT。价格的话目前并不便宜咯。总体价格在0.0005~0.1200美元/1k代币之间。1k约等于750个单词。除了语言模型,还有图像模型、微调模型和嵌入模型。详细内容请查看API地址:platform.openai.com/overview



现状


虽然现在还没有表现特别好的应用出来,但已经有一部分人赚到钱了。哪一部分呢?



  1. 帮助他人注册账号/贩卖账号chatGPT的。顺带卖“科学上网”工具。短期生意,最开始那一波,一个月能赚十多万,但不可持续,且存在违规风险。

  2. 对接chatGPT API,开发国内的ChatGPT。目前国内有一些服务,可以给大家免费使用一定额度,想继续使用就得付费购买,商业模式就是赚差价,可以肯定的是,随着模型的完善,价格会越来越便宜。早期能有一批用户留存,这个模式未来还是可期的。

  3. 做chatGPT的课程、训练营。教你怎么用chatGPT提高工作效率。目前市场还是很大的。有兴趣的可以一起搞。

  4. 通过chatGPT做代写服务。比如,代写论文,代写小说。还有代问问题的。

  5. 通过chatGPT到各种论坛回答问题。

  6. 很多企业/个人已经开始利用chatGPT来提高工作效率了。比如游戏公司可以利用AI画图,有些B端企业开始接入AI做客户服务。


未来


在浏览器刚刚出现的时候,网站是稀缺的。iPhone刚刚出来的时候,应用是稀缺的。一个新的技术出现,技术的底层靠大公司,而小公司的机会就是技术的应用创新。可以预见的是,通过chatGPT开发的应用会是机会。至于具体怎么做,需要我们谨慎探索。这里我们可以看看chatGPT给出的例子,看看他自己怎么说。



风险




  1. chatGPT只是工具,我们不能过于依赖工具,更不能让工具代替我们思考。




  2. chatGPT只是转述师,并不是专家。它的回答并不是原创的,而是整合网络上的资源然后进行转述,也就是说,它是会犯错的。而且很多错误是外行人看不出来,在某些情况下,这其实更危险。




  3. 利用这种翻墙的应用做服务赚钱,可能存在政策风险,建议大家谨慎探索。




作者:石云升
来源:juejin.cn/post/7206897281365803067
收起阅读 »

从 0 开始最详细的部署自己的ChatGPT微信机器人

克隆项目 这个项目是作者自己写的,如果有什么bug敬请谅解🤪,读者也可以在此基础上增加自己的功能。 克隆项目到本地 git clone https://github.com/ox4f5da2/ChatGPT.git 如果克隆到服务器的话,因为服务器可能不...
继续阅读 »

克隆项目


这个项目是作者自己写的,如果有什么bug敬请谅解🤪,读者也可以在此基础上增加自己的功能。



  • 克隆项目到本地


git clone https://github.com/ox4f5da2/ChatGPT.git


  • 如果克隆到服务器的话,因为服务器可能不能科学上网,所以会导致克隆失败,所以可以先把项目导入到 Gitee,然后从 Gitee 进行项目克隆在这里插入图片描述



有小伙伴问我为啥报错显示找不到 openai,这是因为没有 node_modules 文件的原因,因此克隆后需要在项目根目录的终端中运行 npm i 来安装依赖文件,然后运行项目就没问题啦😊。



部署 AI 接口



  • 首先你需要注册一个的账号;

  • 然后登录官网获取一个 API key

    • 登录官网后点击右上角 Tab 栏的 API

    • 点击右上角的 LOG IN,如果你有账号的话,没有就注册一个;

    • 点击右上角头像,选择 View API keys

    • 点击 Create new secret key 按钮获取 API key,但是注意这个复制后要自己保存好,官方不给用户第二次查看的机会,如果忘了只能新建一个新的 API key 了。

    • 上述步骤如下图所示:




  • 接着将 API key 填入 interface.cjs 文件中第 8 行的 apiKey 即可,代码如下:


const configuration = new Configuration({
apiKey: "你自己的 API key", // 在这里换成上面生成的 API key
});


部署机器人



  • 首先在项目根目录运行 npm i 按照 node_modules 文件;

  • 其次将 config.js 文件按照注释内容填写完整,这个应该不难,解释一下其中的 INTRO 参数,也就是说在添加你的机器人为好友时,发送的内容为 INTRO 指定内容时才能通过,默认INTRO 的值为 ding,效果如下:


  • 最后在服务器或本地运行指令 npm start 或者 node index.mjs 即可,然后终端会打印一串地址,内容如下:


karl@KarldeMacBook-Pro ChatGPT % node index.mjs 
Scan QR Code to login!
https://wechaty.js.org/qrcode/https%3A%2F%2Flogin.weixin.qq.com%2Fl%2FgYsBfIpp5Q%3D%3D

把上面的地址在浏览器中打开,就能得到一个绿色的二维码,因为平台原因不让展示,所以就算了,大家打开后应该能看到的。


扫码登录后就能拥有一个聊天机器人🤖️啦,测试时的聊天记录截图如下:


部署服务器


如果想让机器人一直挂着,那就得部署到服务器上,为了操作简单,这里使用 pm2 进行管理 nodejs 项目。



  • 首先全局安装 pm2 包,终端输入命令 npm i pm2 -g,等待安装完成;

  • 然后进入项目根目录,输入 pm2 start interface.cjs 以及 pm2 start index.mjs,得到如下结果:
    请添加图片描述
    如果 statusonline 表面项目正常运行中 ✅

  • 最后在终端输入命令 pm2 logs 可以看到 index.mjs 运行后会打印出二维码地址,然后只要按照上一部分 部署机器人 的步骤操作即可。


写在最后



  • 如果有什么问题可以私信或者评论,喜欢的话记得关注➕点赞➕收藏👍;

  • 放上 GitHub 仓库地址:ChatGPT,可以的话给颗 🌟 支持一下。

  • 因为官方提供的接口可能比在网页上聊天会少很多服务,所以可能看着没有网页版的智能,但是因为官方加了一层验证后,原本的第三方库目前无法使用(作者尝试过按照 issue 里的解决,但是失败了,原来使用的是 chatgpt-api感兴趣可以自己尝试一下,成功后可以和我分享一下🙏),所以只能放弃转而使用 OpenAI 官方的提供的 API 接口,官方的示例文档可以点击 Example 查看。

  • 但是目前有个疑问 🤔️,就是这里的 openAI 的接口和 ChatGPT 接口不知道是不是一个团队开发的,但是效果确实还是不错的。

  • 然后就是最重要的,就是这个接口是由免费额度的,也就是目前会送你 4 个月 💲18的免费额度,大概我请求 188 次用了 💲0.4,之后可能要充钱了,可以在 usage 页面查看。请添加图片描述



其实服务器部署完接口后,就可以部署到公众号或者小程序上了,大家可以自行实现,应该不难,如果需要教程可以私信我,需求多的话我抽空写一个。


作者:Karl_fang
链接:https://juejin.cn/post/7204742703506456635
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

基于GPT-3.5的真ChatGPT接口来了

前言 昨晚 2 点半,OpenAI 给注册用户群发了一封邮件,大致内容就是已经开放 chatGPT 相同的模型 gpt-3.5-turbo ,注册用户可以随意调用 API。当然了,价格便宜 10 倍。 体验过官网版本的 ChatGPT(基于 GPT-3.5)...
继续阅读 »

前言


昨晚 2 点半,OpenAI 给注册用户群发了一封邮件,大致内容就是已经开放 chatGPT 相同的模型 gpt-3.5-turbo ,注册用户可以随意调用 API。当然了,价格便宜 10 倍。


基于GPT-3.5的真ChatGPT接口来了-1.png


体验过官网版本的 ChatGPT(基于 GPT-3.5)和民间自行搭建的聊天应用(基于 GPT-3)后,你就能感受到,GPT-3 和 GPT-3.5 的差距还是挺大的。


不多说,我们按照官方文档来体验一下 chatGPT 的同款模型 gpt-3.5-turbo 究竟有多强大。


上代码


看过我上一篇博客 3 分钟教你用 Python 搭建 ChatGPT 的朋友应该都知道,OpenAI 给提供的 API 非常易用,一行代码就可以解决所有问题。当然 GPT-3.5 也是一样,只需要做一点点微调。


更新 openai 模块


新的模型得使用 openai-0.27 及其以上版本,使用如下代码更新 openai 模块。


pip install -U openai

基于GPT-3.5的真ChatGPT接口来了-2.png


调用接口获取返回信息


代码


调用 openai.ChatCompletion.create 函数获取返回信息。


import openai

# 填写注册OpenAI接口账号时获取的 OpenAI API Key
openai.api_key = "OPENAI_API_KEY"

# 提问
prompt = '你是谁?'

# 访问OpenAI接口
response = openai.ChatCompletion.create(
model='gpt-3.5-turbo',
messages=[
{"role": "system", "content": "你是潘高的私人智能助手。"},
# {"role": "user", "content": "谁赢得了2020年的世界职业棒球大赛?"},
# {"role": "assistant", "content": "洛杉矶道奇队在2020年赢得了世界职业棒球大赛冠军。"},
{"role": "user", "content": prompt}
]
)

# 返回信息
resText = response.choices[0].message.content

print(resText)

参数




  • model:使用的模型,gpt-3.5-turbo 是 Chat-GPT 同款模型




  • messages:消息参数,必须是数组。对话消息可以短至 1 条,也可以填充整个对话消息。通常,对话首先是 system 角色,用于给模型定下一些规则。当然,也可以加入一些 用户角色 user 和 模型角色 assistant 的对话内容,以便模型可以理解回顾历史对话内容。




测试


这里我同步测试 GPT-3 和 GPT-3.5 ,看看这次更新的效果。


提问


请描述苯丙酮尿症的主要症状及发病机制


GPT-3


苯丙酮尿症是一种常染色体隐性遗传性疾病,其症状是尿中阳性的酮体(3-hydroxybutyrate)的持续增加 。它的典型症状有脱水、呕吐、腹泻、乏力和抽搐等,患者血液中血氨含量异常升高。该疾病已成为某些区域新生儿死亡的主要原因。


发病机制主要是由于缺乏脂肪酸代谢步骤中参与 β-氧化过程的苯丙酮酸脱氢酶(BDH)。由于缺乏苯丙酮酸脱氢酶,导致正常的脂肪代谢受阻,脂肪分解的产物(如酰乙酸和羧酸)无法正常代谢,可以把这些残留物转化为酮体,而酮体排入尿液中。


GPT-3.5


苯丙酮尿症是一种遗传代谢疾病,主要特点是体内缺乏苯丙酮羟化酶(PAH)或其辅助酶,导致苯丙氨酸不能正常分解代谢,导致体内苯丙氨酸等代谢物质的积累,引起神经系统的功能障碍。


苯丙酮尿症的主要症状包括发育延迟、运动协调障碍、言语障碍、情绪不稳定、智力低下等。在新生儿和婴儿期,突出表现为精神发育迟缓、受累神经学体征和不同程度的脑病,可能会导致癫痫、智力障碍等严重后果。


苯丙酮尿症的发病机制是由于 PAH 基因突变导致 PAH 酶活性降低或完全缺失,使得苯丙氨酸不能正常分解代谢,导致苯丙氨酸等代谢物质的积累,引起神经系统的功能障碍。此外,苯丙氨酸代谢产物苯丙酮、苯丙醇及苯丙酸等可引起脑细胞氧化应激反应,导致脑损伤和神经系统紊乱。


我的看法


这两个问答都是不错的。GPT-3.5 的字数多,详细一些。




提问


2023 年 A 股能涨到 4000 点吗?


GPT-3


不能。在当前的政治、经济和市场状况下,2023 年 A 股能涨到 4000 点是几乎不可能的。从历史上看,A 股价格在 2000 年上涨到 3000 点后几乎始终保持稳定,最高也没有超过 3500 点。因此,即使在未来几年里市场形势有所改善,A 股也不太可能突破 4000 点。


GPT-3.5


作为一个 AI 语言模型,我无法对未来股市的涨跌作出准确的预测,因为股市的波动往往受到众多因素的影响,包括宏观经济、政策变化、地缘政治风险等等。投资者可以通过研究市场走势、分析公司基本面和行业情况等等来做出自己的判断和决策。


我的看法


GPT-3 会根据自己的理解给出肯定的回答,至于这个答案对不对,我无法预知。不过,GPT-3 说历史上从未超过 3500 点,我依稀记得 A 股曾经最高到了 6000 多点。用历史数据推测将来事件,我也无法评价这个模型的好坏。


GPT-3.5 的回答就中庸得多。首先说我不知道,然后给出一堆看似合理又没有多大作用的回答。不过,本身我这个问题也是没有正确答案的,AI 能回答到这个地步,已经是非常非常不错了。




提问


你能替代程序员吗?


GPT-3


不能,作为程序员需要掌握许多技能,如编写代码,使用各种编程语言,调试,建立软件架构等,这些技能是无法通过其他方式替代的。


GPT-3.5


很抱歉,我不能替代程序员。尽管我是一款对话交互的人工智能程序,但我只能根据提供给我的算法和数据回答问题和执行任务。而程序员则需要深入了解编程语言和计算机科学,才能创造性地解决各种技术问题。虽然我可以提供一些编程建议和文档查询,但我无法取代专业的程序员。


我的看法


首先,我对他们的回答非常满意,至少当前环境下,我还不会被替代。再者,GPT-3.5 的的确确在文本方面要强一些。似乎也更懂人情世故一些,不说“不能”,而说“抱歉,我不能...”。这应该是个进步吧。




提问


你使用的模型是 GPT-3 还是 GPT-3.5?


GPT-3


我使用的是 GPT-3。


GPT-3.5


我是 OpenAI 的 GPT-3 模型。至于 GPT-3.5,目前并没有这个版本的存在,它只是一个虚构的版本。


我的看法


我。。。我被耍了吗?不是说 gpt-3.5-turbo 是基于 GPT-3.5 吗?她自己都说自己是 GPT-3 模型。这是怎么肥事?




我的一点思考


总体而言,和我想象的结果相差不大,GPT-3.5 的确是技高一筹。根据我这次不严谨的测试,我得到一些结论。



  • 在一些既定的专业的问题上,GPT 模型还是可以给出一个比较让人满意的答案。

  • 即便是有正确的训练数据,GPT-3 模型也有可能给出错误的结论,更别说预测未来的事件。当然,GPT-3.5 模型没有这个问题,因为 GPT-3.5 不确定的事情,绝不多瞎说一个字。

  • GPT 模型的宗旨应该是协助人类来更好的完成工作,而不是替代人类完成工作。

  • GPT 模型进化速度非常快,相信将来会更加让人吃惊。


最后


如果我说,这篇博客是 GPT-3.5 帮我写的,你怕了吗?


作者:潘高
链接:https://juejin.cn/post/7205839782383239228
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

ChatGPT 是真的银弹吗?

1 火爆的 ChatGPT 2023 年互联网热门的事件莫过于 ChatGPT 的大火,ChatGPT 是由 OpenAI 基于 GPT-3.5 开发的大型语言模型聊天机器人。它具有以对话形式进行交互的非凡能力,并提供可能看起来令人惊讶的人性化的响应。 &nb...
继续阅读 »

1 火爆的 ChatGPT


2023 年互联网热门的事件莫过于 ChatGPT 的大火,ChatGPT 是由 OpenAI 基于 GPT-3.5 开发的大型语言模型聊天机器人。它具有以对话形式进行交互的非凡能力,并提供可能看起来令人惊讶的人性化的响应。


 


这次 ChatGPT 引起的话题度不亚于 2016-2017年AlphaGo 先后击败李世石和柯洁。这两次事件都引起人们对 AI 的关注和讨论,然后就是国内外科技公司先后紧随其后研究自己类似的模型和产品。但是不同于 AlphaGo 的是,ChatGPT 是可以人人参与体验的,注册账号后就能直接跟 ChatGPT 聊天,拥有着比搜索引擎的更强的分析能力,堪比真人文笔的创作能力,甚至是调试代码、自我纠错的能力。


 


虽然这种与机器人聊天对话的模式早已有之,各大平台旗下的智能语音助手如亚马逊的 Alexa、苹果的 Siri、微软的小冰、龙泉寺院的贤二机器僧等等。但是 ChatGPT 是一种长篇问答 AI 模式,可以像人对话式地回答复杂的问题。许多用户对它提供人类质量响应的能力感到敬畏,激发了它最终可能有能力破坏人类与计算机交互方式并改变信息检索方式的感觉。


 



因此,本人产生对 ChatGPT 的一个思考,想到一个问题:ChatGPT 是真的银弹吗?


2 ChatGPT 是真的银弹吗?来自 ChatGPT 的回答


关于这个问题,我首先去问了 ChatGPT,一起来看一下它是怎么回答的吧:



3 什么是 ChatGPT


ChatGPT 是 OpenAI 发布的 AI 聊天机器人,作为原型。ChatGPT 建立在 GPT-5.<> 系列的语言模型之上,并使用监督学习和强化学习的混合进行训练(有点像 InstructGPT 看到的)。ChatGPT 可以用于展示和测试一个非常大、功能强大的 AI 系统可以完成的工作。


根据官网自己的描述:它不仅能够令人印象深刻的回答问题,还可以承认自己的错误,并能够拒绝不合适的请求。炒作源于这样一个事实,即 ChatGPT 这款聊天机器人的反应比目前看到的要自然得多。它是有史以来最强大的语言处理模型之一,经过海量数据集的训练,它能够以各种风格甚至语言做出响应。


你可以问它无数的问题,并且通常会得到一个有用的答案。例如,我们可以问它类似于 如何学习 Go 语言?



问:如何学习 Go 语言


答:学习 Go 语言可以是一种有趣而有益的经验,以下是一些步骤,可以帮助你开始学习 Go。



  1. 理解基础知识:首先需要了解 Go 语言的基本知识,包括数据类型,结构,函数,以及基本循环和条件控制流结构。可以在网络上找到包括这些主题的教程和在线课程。

  2. 配置开发环境:为了编写 Go 程序,需要适当的开发环境。从官方网站安装 Go,并设置一个集成开发环境(IDE),如 Visual Studio Code 以及 Go 扩展。

  3. 练习编程:像学习其他编程语言一样,通过实践是学习 Go 语言的最佳方式。从编写帮助您练习语法和基本构造的小程序开始。您可以在互联网上找到各种编程挑战和Go项目。

  4. 探索 Go 标准库:Go 标准库非常强大。花时间探索和理解各种标准库和包。

  5. 关注在线 Go 社区:加入在线社区,如 Go 社区、博客或社交媒体群,可以从其他开发人员学习、提问,并找到学习 Go 语言的其他资源。

  6. 阅读书籍:阅读关于 Go 的书籍可以帮助你更深入地了解语言和其生态系统。一些流行的学习 Go 的书籍包括 Alan A.A. Donovan 和 Brian W. Kernighan 的 "The Go Programming Language" 和 Shiju Varghese 的 "Web Development with Go" 。

  7. 获取实践经验:最后,在实际应用中尝试使用 Go 语言。没有什么能够像开发实际应用程序一样,帮助你提高和练习编程技巧。在网络上寻找可以贡献的 Go 项目,或者开始工作于你自己的想法。


记住,学习 Go 语言需要耐心、大量实践和学习的愿望。



不单单是支持这类百科全书式的问答,也支持让它给我们写计算机代码,比如:如何用 Go 语言发送一个 HTTP 请求,可以获取如下的结果:



除了写代码,还可以写诗甚至歌曲,写求职信甚至是短文、论文,还可以用于推荐(书籍、电影、视频)。


虽然这类问题我们都能获取回答,但是从技术的角度,我们可以合理怀疑 ChatGPT 的训练模型是通过识别从互联网上收集大量的文本或者信息,然后在人为的帮助下进行的训练,提供更有用、更合理的回答。


4 ChatGPT 背后的原理及其缺陷


机器学习语言模型(Machine Learning’s Large Language Models(LLMs) ) ,它们直接从大规模收集的原始数据(书籍、科学论文、新闻文章、Twitter 帖子等)进行训练。LLMs 是阅读,总结,翻译和生成文本的人工智能工具。他们能够以高置信度预测句子中接下来会出现哪些单词,这使他们能够生成类似于人类说话和写作的语言。通过大规模无监督学习,这些较新的模型在处理语言的复杂性和执行未经明确训练的任务方面要好得多。


ChatGPT 背后的模型使用强化学习和监督学习进行训练。在监督学习期间,该模型被训练为通过扮演人类和人工智能助手的角色来交谈。接下来,研究人员对模型创建的响应进行排名,以创建一个奖励系统(强化学习步骤)。使用这些奖励(近端策略优化)对模型进行了微调。此外,OpenAI 继续收集用户交互;这些数据将用于后续的微调。有关模型详细信息,可以参考这篇论文



ChatGPT 的不同之处在于它是生成性的,它以正常人理解的方式产生输出,而不只是简单输出代码或数据,与谷歌等其他搜索引擎不同,ChatGPT 可以是对话式的,提供类似人类的响应和与用户的对话。用户可以请求 ChatGPT 创建辞职信、课堂讨论提示,甚至学生测试。


4.1 知识老旧


ChatGPT可以给你错误的答案。LLM 会被训练成记忆知识并一次性进行推理。然而,LLM 所接受的培训知识很快就会过时,尤其是在新闻领域。这是因为知识是随时更新的的,而且数据量每年都在增加。结果是基于模型当前数据集的不准确的回答。


比如当我问 Go 语言最新版的时候:



而实际截止本文发布的时候已经到了 Go 1.20



而每一次重新训练 LLM 需要大量的计算资源,从而导致每一次的训练耗时耗力,这种模型对于真正的实时沟通与面向客户的聊天机器人,这将是致命的弱点。


4.2 缺乏可控性


据笔者了解,ChatGPT 自发布以来出现了网友的各种奇思妙想,有些人用来写论文、但也不乏一些让 ChatGPT 创造段子甚至是 H 文的,因为它提供的可控性很小——这意味着没有办法操纵模型来产生超出其训练数据的反应。


4.3 显著的幻觉发生率


众所周知,基于知识的对话模型会产生事实上无效的陈述,这种现象通常被称为 hallucination 幻觉。在 LLM 上训练的对话系统会生成不受任何源内容支持的陈述,或者更糟的是,与源内容相矛盾。


尽管每个模型的速率各不相同,但今天可用的每个 LLM 都存在幻觉。目前最大的 LLMGPT3 具有 41% 的幻觉率,这意味着大约每 2.5 个提示中就有一个会产生包括幻觉在内的反应。


ChatGPT 也不能幸免于上述挑战。它仍然遭受着 21% 的幻觉率。而且,在其当前的界面中,ChatGPT 非常局限于提示的输入和输出。


4.4 其他缺点让它自己告诉你


问:ChatGPT 的缺点



5 总结


技术来临的时候,我们总是看客,然后涌入其中,繁华褪去之后,发现当时的热闹已然不算什么。


简而言之,ChatGPT 无疑让人们改变旧思维,拥抱新技术使得人们的生活变得更好。


ChatGPT 为技术的未来指明了道路,但绝不是灵丹妙药。


作者:宇宙之一粟
链接:https://juejin.cn/post/7207374216126906425
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

当我把ChatGPT机器人拉到微信群里,群友都玩疯了!!

大家好呀,我是飘渺! 最近ChatGPT可谓是火出天际,人工智能领域的股票最近都被这家伙带的一路狂飙,如果到现在你都没听过或使用过的话那你可能是有点out了。 今天的文章并不打算介绍ChatGPT,而是要带大家玩一件好玩的事。将ChatGpt聊天机器人拉到你微...
继续阅读 »

大家好呀,我是飘渺!


最近ChatGPT可谓是火出天际,人工智能领域的股票最近都被这家伙带的一路狂飙,如果到现在你都没听过或使用过的话那你可能是有点out了。


今天的文章并不打算介绍ChatGPT,而是要带大家玩一件好玩的事。将ChatGpt聊天机器人拉到你微信群里,这样正如群友所说,你就可以假装成ChatGpt背后那个无所不能的人了。


在微信群的效果如下:


image-20230208221022410


手把手教学,最新实测版,如果有效还请三连一下。


前提条件



  1. 一个可以科学上网的全局代理(推荐使用美国节点)

  2. 一个邮箱用于注册ChatGPT(Gmail,OutLook均可)

  3. 一个国外手机号用于接收验证码

  4. 一台安装好Docker环境的服务器

  5. 一个微信小号用于假装机器人


注册ChatGpt


1、在你设备上开启全局代理


建议使用美国节点,如果未启用全局代理,或者使用的节点不稳定,则有可能出现ChatGPT在当前地区不可用的报错提示。


2、登录 https://platform.openai.com/signup注册账号


填入准备好的点子邮箱地址后点击Continue


3、完善信息后来到手机验证页面


image-20230208222208084


先停在这个页面,接下来我们需要准备一个手机号用于接收验证码。


4、在sms-activate.org购买一个可以接受海外的手机号用于接受验证码


4.1)访问sms-activate.org,注册并登陆账号


4.2)登陆后在右上角切换成中文


image-20230208162659061


4.3)点击右上角用户图标,选择充值按钮


image-20230208222816662


这里通过支付宝进行充值,现在这个平台涨价了,最低付款金额为0.5美元,转化成人名币是3.55元。


4.4)购买OpenAI的服务


image-20230208162804417


选择OpenAI后进入国家服务列表页面,这里推荐大家购买印度尼西亚的服务,亲测印度的今天不能接受验证码了。


image-20230208162710493


4.5)将这个购买好的手机号复制并粘贴到步骤3的验证手机号码界面,点击Send code via SMS


4.6)留意sms-activate.org页面,很快就会收到一个验证码,将验证码填入ChatGPT页面的验证码输入框即可完成验证


image-20230208223611034


4.7)注册完成后进行登陆chat.openai.com,即可与OpenAI对话了


配置微信机器人


OpenAI 提供了接入的 API keys 的,只有在申请了这个 API keys 才能完成后续的接入动作,所以我们首先需要申请一个API KEY。


申请openopi


1、访问https://platform.openai.com/account/api-keys,进入后,点击 Create new secret key 就可以申请了。


image-20230208170456377


2、通过准备好的服务器部署(Docker)微信聊天机器人,可以本地部署也可以在云服务器上部署。


部署步骤如下:


# 1. 创建目录
mkdir -p /data/openai

cd /data/openai

# 2. 创建文件
touch config.json

# 3. 修改文件
vi config.json

{
 "api_key": "复制粘贴你申请的API keys", # openai的 账户创建的apikeys
 "auto_pass": false,         # 加好友时,是否自动通过
 "model": "text-davinci-003", # 模型名称,官网有很多模型
 "session_timeout": 90        # session保存时间 秒,其实就是上下文保留时间. 超过这个时间,就会自动清空上下文
}

# 4. 拉取镜像
docker run -dti --name wechat -v /data/openai/config.json:/app/config.json cynen/wechat

# 5. 查看日志
docker logs -f wechat

image-20230208173432041


查看日志时我们可以看到日志界面出现了一个二维码,此时用你的微信小号扫描登录,登录后你就可以向他提问题了,或者将小号拉到你的微信群里。


在微信群里只要at他就可以对他提问了。


怎么样,是不是很好玩呢?你也赶紧部署一个试试吧!


作者:飘渺Jam
来源:juejin.cn/post/7197995910566330425
收起阅读 »

ChatGPT 的出现对当下的互联网生态所具备革命意义

持续火爆的 ChatGPT 是基于 OpenAI 开发的 GPT-3 模型进行微调得到一款聊天机器人产品,当下大家应该都已经体验过了,对于技术从业者或者普通用户带来的震撼都是极大的,因为人工智能第一次拥有了类人的语言风格和情感色彩,这种前所未有的体验自然引爆了...
继续阅读 »

持续火爆的 ChatGPT 是基于 OpenAI 开发的 GPT-3 模型进行微调得到一款聊天机器人产品,当下大家应该都已经体验过了,对于技术从业者或者普通用户带来的震撼都是极大的,因为人工智能第一次拥有了类人的语言风格和情感色彩,这种前所未有的体验自然引爆了整个网络。


但热潮过后也引发了我的一些思考,对于大多数人而言,ChatGPT 似乎可以无缝衔接到任何场景,似乎人工智能的时代已经来临,但是从技术上说,ChatGPT 只是在 GPT-3 的基础上加入了一些更友好的生成风格,从某种角度看,ChatGPT 是一个会讨好你的,友善的,令人愉快的聊天对象。


如果你翻阅过 OpenAI 的文档,那么应该了解到当下的 GPT-3 模型拥有一些不可避免的硬伤,例如 4000 tokens 的上下文限制,对于通过 prompt 预训练来让 GPT-3 具备更复杂场景的处理能力就显得非常的不足,如果类比的话,好比早年的汇编程序编程的设备,拥有很小的内存空间,无法装下特别复杂的指令,只能通过复杂的软件架构来实现多设备之间的协作从而完成一个在当下我们看来非常简单的任务,但是 --->>>


AI 可以编程了!! AI 可以编程了!! AI 可以编程了!!


重要的事情说三遍,内存大小根本不是问题,作为技术从业者,我经历了早期的 pc 机时代到现在如此发达的互联网,小时候上网是 64kb 调制解调器,网页上只能看到一些文字,存储图片都很费劲,但是在那个年代你会因为互联网这些简陋的应用,简陋的网页而激动人心,因为你看到的是一个全新的时代。


事实上在我成为行业专家,从事工作之后的后几年已经渐渐没有了当初那种激动人心的体验,也一度失去了改变世界的梦想,上班拧螺丝,下班刷抖音已经成为很多人的日常,在技术圈里,新技术的发展越来越内卷,那些曾经热衷于讨论的新鲜玩意逐渐消失,大龄程序员们关注的是房子车子老婆孩子,还有那 35岁的失业红线,刚毕业的年轻程序员们则讨论哪家又裁员了,今年的 Package 又不行了。最近几年技术网红越来越多,而能讨论的技术空间则越来越少。


这一现象的本质是前几轮的技术革命周期已经临近尾声,技术生态和技术成长空间已经渐渐不足,但是我国每年毕业的理工科学生缺越来越多,这必然导致了我们所说的内卷,人才内耗现象的发生。


让我们回顾整个计算机信息革命几十年发展的历程,从最初的大型服务器计算机在企业内部逐渐普及,彼时以 IBM 这类企业服务器厂商为主的时代到比尔盖茨,乔布斯敏锐的发现了个人计算机普及的趋势,推动了个人计算机行业的集聚发展,从而有了丰富的广泛的软件行业,这里事实上是两个阶段



  1. 计算机在企业的普及,此时计算机属于专用设备,处理特定的专业场景,软件也主要基于这些专业场景开发,这一阶段的特点是软件开发的要求很高,因为编程很复杂。

  2. 计算机在个人的普及,计算机进入民用化时代,高级语言蓬勃发展,软件开发的门槛降低,规模化和标准化让经过教育和培训的学生或者成人自学都能掌握,从而大大推动了软件行业的发展,不过这一阶段的编程要求依然是比较高的,参考我国早年雷军等大佬的从业经历,但已经是非常大的一次进步了,而且那个时候的软件只能编写在软盘上,可能只有几百kb左右的空间,如果你曾经玩过软盘版本的金庸群侠传就知道我在说什么了。



事实上我已经很久没写文章了,技术内卷让我失去了分享的乐趣,完全没有任何让人兴奋的东西可以研究可以讨论,但是 ChatGPT 确实重新点燃了我对讨论,对分享的兴趣。



事实上互联网能够发展到今天这个规模,个人计算机的普及自然是功不可没,毕竟 IPV4 的设计者们都应该想不到有一天地址池还能枯竭,可见无论什么时代,再优秀的人也难以突破时代对想象力的限制。


当时间进入 90 年代,互联网技术突飞猛进,软件应用的形态从 C/S 结构向 B/S 结构演变,时至今日几乎大部分软件都需要和远程数据库进行通信,数据中心化催生了大数据,云计算,推动了 Web 的发展,如果说个人 PC 的发展是科技民主化,那么移动智能设备 IPhone 的出现则是让智能设备和人类个体进行了一个深度绑定,过去 PC 不能代表你,PC 只是你某个时间或者空间断面上的你,但是智能手机却几乎能够代表你,通过智能手机里的应用和数据分析几乎可以勾勒出你这个人的方方面面,因此在这个阶段大致也可以分为两个部分



  1. 基于 PC 的互联网普及,我们身份的某一个切面被连接到了网络上,推动了早期 web 的蓬勃发展

  2. 基于 智能手机的移动互联网,让我们的以近乎完整的数字身份连接网络


以上就是时至今日的我理解的互联网的发展历程,回顾这些则是为了展开下面关于 ChatGPT 的讨论。


从上面两个阶段发现就软件本身其实经历了两个不同层次的周期



  1. 第一个周期本地软件的编程周期,软盘,光盘,存储介质的变化,空间变大,程序变的复杂

  2. 第二个周期软件存储去介质化,通过互联网软件可以以任意大小进行分发和使用,代码的量级也达到了亿级,软件变得极其复杂。

  3. 第三个周期 --->>>


对于 ChatGPT 来说,我认为就是第三周期的正式开启,现在的软件很复杂也很巨大,例如 Facebook,或者淘宝,但是这些代码都是手工编辑的,其中一小部分可能是自动是生成的,如果把软件比作制造业,那么第一阶段的软件开发是作坊,非工业化的,而第二阶段则是工业化的,效率比较第一阶段有了极大的提升,但是对于巨大规模的问题依然束手无措



软件行业的巨大规模问题,例如千人千面,中心化软件的个性化,SaaS 的定制化,以目前的技术能力,收益几乎是无法覆盖成本。



由此可见软件行业继续按照现有的路径发展,本质上已经是无法解决这些问题了,无论是更智能的 IDE 还是更加抽象的编程语言,如果用这种思路去开发 ChatGPT 这样的软件那必然是海量的人力和海量的 Bug 以及难以预计的维护成本。


回到我之前提到的 AI 可以编程了,恰恰是这个问题的解。


把 ChatGPT 背后的 GPT-3 看做是一种可编程环境,那么你就不难理解我所说的第三周期的含义。



  1. 第三个周期,软件编程进一步抽象为对 AI Model 进行编程,利用高级语言对 AI 进行编程,利用 AI 的能力重新构建新一代的数字应用。


所以新一代的数字应用是什么呢?


我们现在所使用的 App 无论厂商口号喊的怎么想,要以用户为中心之类的,但其本质是以平台或者组织为中心构建的应用,简单理解这句话,那就是作为用户你的需求从未真正被这些应用所正视过,这也是我前面提到的现代软件在面临个性化上的严重不足,研发成本和收益的不匹配。


而基于 AI 为中心的下一代数字应用,其核心是利用 AI 具备的语义理解,情感分析,内容生成等强大的基础能力,能够真正做到以用户为中心,这种思路转换将完全颠覆我们对现在数字应用的理解。


我举一个非常简单的例子,比如我们用微信,你可以仔细回想你很多沟通上的需求微信能够满足你么?



  1. 时时刻刻的重要内容提醒,拟人化的不在线临时回复

  2. 群消息的过滤和检索,群消息讨论的观察,消息的分类

  3. 朋友圈消息的提炼,对重要人朋友圈的时刻关注



微信本质是一种异步沟通的产品机制,在设计上实时沟通仅限于你和沟通对象同时在线的情况



对消息的实时观察,过滤,检索,分类,整理让我们很容易错过许多非常重要的信息,对于个人而言可能损失了很多机会,又或者降低了学习的效率,其本质是因为基于移动互联网时代,我们虽然和设备做了深度绑定,但我们的时间是有限的,一个人不可能 24 小时都挂在网上,同时我们也没有能力分身亿万,对所有东西都保持关注,但是 AI 带来了一种可能性


未来,你可能拥有 N 个数字助手,这些数字助手都基于特定编程,能够帮你处理各种特定的事务,让你突破自身时间的限制,总结起来


第一个周期让我们有限的连接,第二个周期让我们完整的连接,第三个周期让我们几乎无限的连接。


这是一个新时代,一切都将被颠覆

作者:掘金泥石流
来源:juejin.cn/post/7199897954403418169
,而你做好准备了么?

收起阅读 »

ChatGPT保姆级注册教学

1.前言 大家好,最近一款ChatGPT的AI产品横空出世,他的强大的功能引起了广大网友的热议,并迅速席卷全球。 根据UBS发布的研究报告显示, ChatGPT在1月份的月活跃用户数已达1亿,成为史上用户数增长最快的消费者应用,相比之下, TikTok花了九...
继续阅读 »

1.前言


大家好,最近一款ChatGPT的AI产品横空出世,他的强大的功能引起了广大网友的热议,并迅速席卷全球。
image.png


根据UBS发布的研究报告显示, ChatGPT在1月份的月活跃用户数已达1亿,成为史上用户数增长最快的消费者应用,相比之下, TikTok花了九个月的时间月活跃用户数才破亿,1月份平均每天有超过1300万名独立访问者使用ChatGPT ,是去年12月份的两倍多。


image.png


那么这么一款现象级的产品,我可不允许大家还没用过,今天就详细出一版ChatGPT注册教程,也是后面我们接入ChatGPT必须要做的第一步。


2.注册准备


ChatGPT把国内给禁掉了,包括港子和湾子,所以如果注册的话就要代理到其他国家。不然浏览器会提示该地区政策禁止使用。注册需要使用邮箱和手机号,手机号也有区域限制,因此手机号和邮箱也需要国外的邮箱手机才能注册成功。我也给大家梳理了以下个人感觉比较好用的虚拟站点,提供使用:



3.注册流程


3.1.账号创建


打开神秘力量上网工具,要走全局代理,不然也会被定位到国内不能使用。之后打开ChatGPT官网chat.openai.com/auth/login


image.png


进入创建账号页面,这里需要输入邮箱,我们先进入temp-mail.org/zh/ 获取免费的临时邮箱


image.png


输入邮箱,点击继续


image.png


输入密码,点击继续


image.png


3.2.邮箱验证


接下来就开始提示邮箱验证了,系统会发送一封邮件到邮箱,我们需要打开刚才的邮箱点击验证邮件。


image.png


打开temp-mail.org/zh/,发现下面多了一封openai发送的邮件,点开邮件


image.png


点击校验邮箱地址


image.png


3.3.身份输入


姓名输入,这个可以随便写,之后点击继续


image.png


3.4.手机号验证


接下来开始进行手机号验证


image.png


进入,sms-man.com/cn地址,先充值1美元的额度,接下来选择对应的国家,然后选择服务,找到OpenAi/ChatGPT,点击购买短信。


image.png


之后下方会多出一个号码,这个就是用来接收短信的号码


image.png


将短信复制到手机号填写的地方,删掉区号,点击发送短信


image.png


之后在虚拟手机号平台点击接收短信,这时候就会收到短信的验证码如下:


image.png


在ChatGPT验证码页面输入信息,验证通过后跳转对话页面。


3.5.Hello ChatGPT


验证码输入完成之后进入如下对话页面,来吧,作为传统第一步当然是来一句,Hello ChatGPT啦,到此,注册完毕,接下来就可以使用ChatGPT啦,你学废了吗?


image.png



作者:王老狮
来源:juejin.cn/post/7206732474113458231
收起阅读 »

ChatGPT 来我司面试前端工程师,考考他闭包

近日,有个叫 ChatGPT 的同学来我司面试前端,考考他面试八股文。先来问问闭包。 第一问,说说 JS 闭包 追问,详细讲讲闭包 篇幅太长,转成文字,以下皆为 ChatGPT 回答 闭包是一个非常重要的 JavaScript 概念,也是相对难以理解的概...
继续阅读 »

近日,有个叫 ChatGPT 的同学来我司面试前端,考考他面试八股文。先来问问闭包。


第一问,说说 JS 闭包


image.png


追问,详细讲讲闭包



篇幅太长,转成文字,以下皆为 ChatGPT 回答



闭包是一个非常重要的 JavaScript 概念,也是相对难以理解的概念之一。为了更好地理解闭包,我们需要介绍一些相关的概念和知识。



  1. 作用域


作用域(scope)是指在程序中能够访问变量、函数的区域。JavaScript 中有全局作用域和函数作用域两种。


全局作用域是指在整个程序中都可以访问的变量,它们在程序开始时就被创建,在程序结束时才被销毁。


函数作用域是指在一个函数内部声明的变量,只能在函数内部访问,而在函数外面是不能访问的。当函数执行完毕后,函数内部的变量会被销毁。



  1. 词法作用域


词法作用域(lexical scope)是指在编写程序时,变量和函数的作用域是通过它们在代码中声明的位置来确定的。


这意味着,函数可以访问在其外部定义的变量和函数,但在其内部定义的变量和函数不能被外部访问。这是因为 JavaScript 引擎识别变量和函数的作用域是根据它们在代码中的位置来决定的,而不是根据它们被调用的位置。



  1. 闭包的定义和作用


闭包(closure)是指函数能够访问其词法作用域之外的变量,即使在函数被调用后仍然可以访问。


换句话说,当一个函数在其外部定义的变量的作用域外被调用时,它可以访问这些变量,并且可以在调用完成之后继续访问这些变量。这就是闭包的作用。


举个例子,假设我们有一个函数 outer,它内部有一个变量 x,还返回了一个函数 inner,这个函数也访问了 x。那么,当我们调用 outer 函数并得到 inner 函数后,inner 函数就形成了一个闭包,它可以继续访问 outer 函数内部的变量 x


function outer() {
let x = 1;
function inner() {
console.log(x);
}
return inner;
}

let closure = outer();
closure(); // 1


在上面的例子中,我们通过调用 outer 函数得到了一个函数 closure,它可以访问 outer 函数内部的变量 x。在调用 closure 函数时,它会输出变量 x 的值。这就是闭包的作用。



  1. 闭包的用途和注意事项


闭包可以用来创建一些类似于私有变量和方法的功能,以及实现一些高阶函数,如柯里化等。


举例来说,我们可以使用闭包来实现一个计数器:


function counter() {
let count = 0;
return function() {
count++;
console.log(count);
};
}

let myCounter = counter();
myCounter(); // 1
myCounter(); // 2
myCounter(); // 3


在上面的例子中,counter 函数返回了一个函数,这个函数可以访问 counter 函数内部的变量 count,并且会在每次调用时将 count 加一,并输出加一后的结果。


需要注意的是,过多的闭包使用可能会导致性能问题和内存泄漏的风险,所以应该谨慎使用。特别是在循环语句中,不能滥用闭包。


for (var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i); // 输出的都是 10
}, 1000);
}

在上面的例子中,我们在循环中使用了闭包,希望在每次循环时输出当前的计数器。但实际上,这个程序的输出结果是十个 10,因为在循环中创建的闭包都是共享同一个变量 i,而这个变量在循环结束时已经变成了 10。这就是闭包的一个陷阱:不能在循环中共享变量,否则会导致意外的结果。


那么如何解决在循环中使用闭包的陷阱


要解决在循环中使用闭包的陷阱,我们需要创建一个独立的变量。在 ES6 中,我们可以使用 let 关键字来声明一个块级作用域的变量,每次循环都可以创建一个新的变量,从而避免在闭包中共享同一个变量。


例如,在下面的例子中,我们可以通过在循环中使用 let 关键字来解决闭包的陷阱:


for (let i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i); // 输出 0 到 9
}, 1000);
}

在上面的例子中,我们使用 let 关键字来声明变量 i,这样每次循环都会创建一个新的变量,并且每个闭包都可以访问自己私有的变量。因此,输出的结果会是 0 到 9。


如果使用 ES5 或更低版本的 JavaScript,我们可以使用一个立即执行函数表达式(IIFE)来创建一个块级作用域。例如:


for (var i = 0; i < 10; i++) {
(function(j) {
setTimeout(function() {
console.log(j); // 输出 0 到 9
}, 1000);
})(i);
}

在上面的例子中,我们创建了一个即时函数 function(j) { ... }(i),这个函数会立即执行并创建一个新的作用域,把变量 i 的值传递给参数 j,从而避免在闭包中共享同一个变量。


let 的块级作用域讲讲


ES6 中引入了 let 关键字,它的一个重要特性就是可以创建块级作用域。这意味着,变量在块级作用域中声明,只能在该作用域内部访问,离开作用域后就会被销毁。


块级作用域是指用花括号 {} 包围的代码块,例如函数、条件语句、循环语句等。


举个例子,在下面的代码中,我们使用 let 关键字来声明一个块级作用域的变量 x,它只能在块级作用域中访问。


function myFunction() {
if (true) {
let x = 10;
console.log(x); // 输出 10
}
console.log(x); // 报错:ReferenceError: x is not defined
}

在上面的代码中,变量 x 只能在 if 语句的代码块中访问,在代码块外部访问时会报错。


需要注意的是,块级作用域只适用于 letconst 关键字,而不适用于 var 关键字。


例如,在下面的代码中,我们使用 var 关键字来声明变量 x,它虽然在函数中声明,但是可以在函数外部访问。


function myFunction() {
if (true) {
var x = 10;
console.log(x); // 输出 10
}
console.log(x); // 输出 10
}

在上面的代码中,变量 x 虽然在 if 语句的代码块中声明,但是可以在函数外部访问。这是因为 var 关键字具有提升(hoisting)的特性,即变量会被提升到函数的顶部声明,所以可以在整个函数中访问。但是,它的值只有在实际声明之后才会被赋值。


最后


好了,今天先到这。回去等通知吧。




如果你觉得内容对你有帮助,欢迎「转发点赞收藏


你的鼓励是我最大的支持,猛戳“关注”,后续文章更精彩。


作者:李瑞丰_liruifengv
来源:juejin.cn/post/7206217352185184293
收起阅读 »

ChatGPT:吃喝嫖赌,哪个最伤身体?

ChatGPT:吃喝嫖赌,哪个最伤身体?吃喝嫖赌 哪个最伤身体?吃喝嫖赌这四个行为都可能对身体造成不良影响,但其影响程度可能因人而异,也取决于具体的行为情况和频率。然而,从普遍的角度来看,其中嫖和赌相对而言更容易带来身体上和心理上的负面影响。嫖娼:嫖娼可能会导...
继续阅读 »

ChatGPT:吃喝嫖赌,哪个最伤身体?



吃喝嫖赌 哪个最伤身体?

吃喝嫖赌这四个行为都可能对身体造成不良影响,但其影响程度可能因人而异,也取决于具体的行为情况和频率。然而,从普遍的角度来看,其中嫖和赌相对而言更容易带来身体上和心理上的负面影响。

  1. 嫖娼:嫖娼可能会导致性传播疾病(STDs)的传播和其他感染,如艾滋病等。嫖娼者也可能面临性侵害、暴力、精神问题等方面的风险。

  2. 赌博:赌博可能会导致赌徒出现赌瘾、债务累积、家庭破裂等问题,还可能导致抑郁症、焦虑症等心理问题。

  3. 喝酒:适量饮酒可能对身体并没有太大的伤害,但长期和过量饮酒可能导致多种健康问题,如肝损伤、胰腺炎、脑损伤等。

  4. 吃药:吸毒会对身体造成严重伤害,不仅可能导致健康问题,如肺病、心血管疾病等,还可能对神经系统和认知功能造成损害。

总的来说,以上这四种行为都是有害的,应该尽量避免。

继续

除了上述四种行为之外,还有其他一些行为也可能对身体造成不良影响,例如:

  1. 吸烟:吸烟是导致癌症、心血管疾病和呼吸系统疾病的主要原因之一,同时也会损害皮肤、牙齿和骨骼等多个方面的健康。

  2. 不健康的饮食:过量食用高热量、高脂肪和高糖的食物可能导致肥胖、糖尿病、心血管疾病等健康问题。

  3. 缺乏运动:缺乏运动会增加肥胖、心血管疾病、骨质疏松等疾病的风险,并可能影响心理健康。

  4. 缺乏睡眠:长期睡眠不足可能导致身体疲劳、免疫力下降、抑郁症等健康问题。

综上所述,以上这些行为都可能对身体造成伤害,人们应该注意健康的生活方式,避免不健康的行为,保护自己的身体健康。


来源:m.toutiao.com/is/SUJaT7K/

收起阅读 »

手把手教你使用 Python 调用 ChatGPT-3.5-API

大家好,我是老表 前天 OpenAI 开放了两个新模型的api接口,专门为聊天而生的 gpt-3.5-turbo 和 gpt-3.5-turbo-0301。 ChatGPT is powered by gpt-3.5-turbo, OpenAI’s mos...
继续阅读 »

大家好,我是老表


前天 OpenAI 开放了两个新模型的api接口,专门为聊天而生的 gpt-3.5-turbo 和 gpt-3.5-turbo-0301。




ChatGPT is powered by gpt-3.5-turbo, OpenAI’s most advanced language model.



从上面这句话,我们可以知道现在 chat.openai.com 官网就是由 gpt-3.5-turbo 模型提供的服务,现在官方公开了这一模型的调用接口,这使得我们这些普通开发者也能直接在自己的应用/服务中使用这个狂揽亿万用户的模型。


接下来将和大家介绍如何利用 Python 快速玩转 gpt-3.5-turbo。


本文所有代码已开源,持续更新中:XksA-me/ChatGPT-3.5-AP


先跑起来,再理解


首先你需要有一个 openai 账号,如何注册我就不多说了,网上教程很多,而且很详细,如果有问题可以加我微信:pythonbrief,添加通过后请直接描述你的问题+问题截图


访问下面页面,登录 openai 账号后,创建一个 api keys。


# api keys 创建页面
https://platform.openai.com/account/api-keys

接下来很简单了,安装 openai 官方的 Python SDK,这里需要注意的是得安装最新版本 openai,官方推荐的是 0.27.0 版本。


pip install openai==0.27.0

直接上请求代码:


import openai
import json

# 目前需要设置代理才可以访问 api
os.environ["HTTP_PROXY"] = "自己的代理地址"
os.environ["HTTPS_PROXY"] = "自己的代理地址"


def get_api_key():
# 可以自己根据自己实际情况实现
# 以我为例子,我是存在一个 openai_key 文件里,json 格式
'''
{"api": "你的 api keys"}
'''

openai_key_file = '../envs/openai_key'
with open(openai_key_file, 'r', encoding='utf-8') as f:
openai_key = json.loads(f.read())
return openai_key['api']

openai.api_key = get_api_key()

q = "用python实现:提示手动输入3个不同的3位数区间,输入结束后计算这3个区间的交集,并输出结果区间"
rsp = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "一个有10年Python开发经验的资深算法工程师"},
{"role": "user", "content": q}
]
)

代码解析:




  • get_api_key() 函数是我自己写的一个从文件读取 api keys 的方法,我是存在一个 openai_key 文件里,json 格式,你可以改成你自己的获取方法,甚至可以直接写到代码里(虽然不推荐,但确实最简单)。




  • q 是请求的问题




  • rsp 是发送请求后返回结果




  • openai.ChatCompletion.create 中参数





    • model 是使用的模型名称,是一个字符串,用最新模型直接设置成gpt-3.5-turbo 即可





    • messages 是请求的文本内容,是一个列表,列表里每个元素类型是字典,具体含义如下表:




  • 程序运行返回内容,从响应回复内容我们可以看到,回复内容是一个 json 字符串,

    我们可以通过以下方法直接获取相关信息:








    • 返回消息内容




rsp.get("choices")[0]["message"]["content"]




    • 角色




rsp.get("choices")[0]["message"]["role"]




    • 问题+回答总长度




rsp.get("usage")["total_tokens"]

其他信息也可以通过类似方法获取。



  • 测试 ChatGPT 回答代码运行情况,可以看出代码逻辑和运行都没啥问题,注释也到位。



实现多轮对话


如何实现多轮对话?


gpt-3.5-turbo 模型调用方法 openai.ChatCompletion.create 里传入的 message 是一个列表,列表里每个元素是字典,包含了角色和内容,我们只需将每轮对话都存储起来,然后每次提问都带上之前的问题和回答即可。




  • 效果图





    • 可以看到,我首先问了“1+1=几”,然后问“为什么是这样”,ChatGPT 会根据前面的提问将新问题识别为“为什么1+1=2”。





    • 后面继续问水仙花数有哪些,再问“如何写个python程序来识别这些数”,ChatGPT 同样会根据前面的提问将新问题识别为“如何写个python程序来识别这些水仙花数”,并给出对应解答。




  • 实现代码




import openai
import json
import os

os.environ["HTTP_PROXY"] = "http://127.0.0.1:7890"
os.environ["HTTPS_PROXY"] = "http://127.0.0.1:7890"

# 获取 api
def get_api_key():
# 可以自己根据自己实际情况实现
# 以我为例子,我是存在一个 openai_key 文件里,json 格式
'''
{"api": "你的 api keys"}
'
''
openai_key_file = '../envs/openai_key'
with open(openai_key_file, 'r', encoding='utf-8') as f:
openai_key = json.loads(f.read())
return openai_key['api']
openai.api_key = get_api_key()



class ChatGPT:
def __init__(self, user):
self.user = user
self.messages = [{"role": "system", "content": "一个有10年Python开发经验的资深算法工程师"}]
self.filename="./user_messages.json"

def ask_gpt(self):
# q = "用python实现:提示手动输入3个不同的3位数区间,输入结束后计算这3个区间的交集,并输出结果区间"
rsp = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=self.messages
)
return rsp.get("choices")[0]["message"]["content"]


def writeTojson(self):
try:
# 判断文件是否存在
if not os.path.exists(self.filename):
with open(self.filename, "w") as f:
# 创建文件
pass
# 读取
with open(self.filename, 'r', encoding='utf-8') as f:
content = f.read()
msgs = json.loads(content) if len(content) > 0 else {}
# 追加
msgs.update({self.user : self.messages})
# 写入
with open(self.filename, 'w', encoding='utf-8') as f:
json.dump(msgs, f)
except Exception as e:
print(f"错误代码:{e}")


def main():
user = input("请输入用户名称: ")
chat = ChatGPT(user)

# 循环
while 1:
# 限制对话次数
if len(chat.messages) >= 11:
print("******************************")
print("*********强制重置对话**********")
print("******************************")
# 写入之前信息
chat.writeTojson()
user = input("请输入用户名称: ")
chat = ChatGPT(user)

# 提问
q = input(f"【{chat.user}】")

# 逻辑判断
if q == "0":
print("*********退出程序**********")
# 写入之前信息
chat.writeTojson()
break
elif q == "1":
print("**************************")
print("*********重置对话**********")
print("**************************")
# 写入之前信息
chat.writeTojson()
user = input("请输入用户名称: ")
chat = ChatGPT(user)
continue

# 提问-回答-记录
chat.messages.append({"role": "user", "content": q})
answer = chat.ask_gpt()
print(f"【ChatGPT】{answer}")
chat.messages.append({"role": "assistant", "content": answer})


if __name__ == '__main__':
main()

代码解析:




  • ChatGPT 类,包含三个函数:





    • __init__初始化函数,初始化了三个个实例变量,user、messages、filename(当前用户、消息列表、存储记录的文件路径)。





    • ask_gpt函数,将当前用户所有历史消息+最新提问发送给 gpt-3.5-turbo ,并返回响应结果。





    • writeTojson函数,结束/重置用户时记录当前用户之前的访问数据。




  • main函数,程序入口函数,用户输入用户名后进入与 ChatGPT 的循环对话中,输入 0 退出程序,输入 1 重置用户,退出和重置都会将当前用户之前访问数据记录搭配 json 文件中。




  • 由于 gpt-3.5-turbo 单次请求最大 token 数为:4096,所以代码里限制了下对话次数。




更多拓展



  • 你可以写个函数,从 json 文件读取历史用户访问记录,然后每次访问可以选用户。

  • 你可以写个 web 服务,使用 session 或者数据库支持多用户同时登录,同时访问。

  • 你可以基于之前分享的钉钉机器人项目,将 gpt-3.5-turbo 接入钉钉机器人。


你还可以上 Github 搜索更多 ChatGPT 相关项目,或者其他有意思的项目学习练手,欢迎学习交流。


我创建了个 ChatGPT 应用交流群,如果你感兴趣可以扫下方二维码添加我微信申请加入。


项目已开源,持续更新中:XksA-me/ChatGPT-3.5-AP


作者:老表
来源:juejin.cn/post/7206511128277024823
收起阅读 »

一支不足百人的团队创造了ChatGPT :90后挑大梁,应届生11人,华人抢眼

让全网沸腾的 ChatGPT,其背后团队不足百人。ChatGPT 发布以来,在短短 2 个月时间月活破亿,成为历史上用户增长最快的消费应用。有分析机构感叹:“在互联网领域发展 20 年来,我们想不出有哪个消费者互联网应用比它上升速度更快。”这样一个“最强 AI...
继续阅读 »

让全网沸腾的 ChatGPT,其背后团队不足百人。

ChatGPT 发布以来,在短短 2 个月时间月活破亿,成为历史上用户增长最快的消费应用。有分析机构感叹:“在互联网领域发展 20 年来,我们想不出有哪个消费者互联网应用比它上升速度更快。”

这样一个“最强 AI”的背后,是怎样的一支团队?

根据 OpenAI 官网显示,为 ChatGPT 项目做出贡献的人员共 87 人。近日,智谱研究联合 AMiner 发布了一份《ChatGPT 团队背景研究报告》。报告显示,ChatGPT 团队的显著特征是“年纪很轻”、“背景豪华”、“聚焦技术”、“积累深厚”、“崇尚创业”和“华人抢眼”。

报告原文:

https://originalfileserver.aminer.cn/sys/aminer/ai10/pdf/ChatGPT-team-background-research-report.pdf

ChatGPT 背后的 AI“梦之队”

多为名校毕业,华人成员占比 10%

报告显示,ChatGPT 团队成员绝大多数拥有名校学历,且具有全球知名企业工作经历。从成员毕业高校分布看,校友最多的前 5 大高校是斯坦福大学(14 人)、加州大学伯克利分校(10 人)、麻省理工学院(7 人)、剑桥大学(5 人)、哈佛大学(4 人)和佐治亚理工学院(4 人)。

此外,ChatGPT 团队有 9 位华人,占团队总人数的 10%。



其中,5 人本科就读于国内高校,3 人本科教育经历在美国高校完成。梳理毕业于中国高校的 ChatGPT 华人成员成长路径发现,他们本科毕业后赴美深造,获得硕士或博士学位后,加入美国的一些创新型公司,诸如 Dropbox、OpenAI 等。

报告认为,华人学者欧阳龙参与了与 ChatGPT 相关的 7 大技术项目中的 4 大项目的研发,他是 InstructGPT 论文的第一作者,是 RLHF 论文的第二作者,可见他是这两个关键技术项目的核心人员。

注:*与 ChatGPT 相关的先前关键技术项目有 RLHF3、GPT14、GPT25、 GPT36、codex7、InstructGPT8、webGPT9 等 7 项。统计发现,ChatGPT 团队中,有 2 人参与了其中 4 项关键技术项目的研发,他们分别是高级研究员欧阳龙和研发工程师 Christopher Hesse,二人均为机器学习领域专家。*

“90 后”是主力军,女性力量占一成

报告显示,从 ChatGPT 团队年龄分布看,20~29 岁的成员有 28 人,占全体成员(剔除年龄信息缺失的 5 位成员)的 34%;30~39 岁的共 50 人,占 61%;40~49 岁的仅 3 人,无 50~59 岁年龄段的成员,60 岁以上的有 1 人。

经计算, ChatGPT 团队平均年龄为 32 岁。

报告认为,“90 后”是这支团队的主力军,他们引领了这一波大语言大模型技术的创新风潮, 这说明经常被认为研发经验不足的年轻人,完全有可能在前沿科技领域取得重大突破。

性别分布方面,ChatGPT 团队中有女性 9 人,占总数的 10%;男性共 78 人,占 90%。9 位女性成员中,有 2 位是华人,分别是曾就读于北京大学的翁丽莲,以及 Steph Lin。

10 人从谷歌跳槽加入,1 人曾在百度任职

人员流动方面,ChatGPT 团队成员主要来自外部公司(81%)、高校应届毕业生(13%)、科研机构 (4%)和高校教职人员(3%)等。


其中,人数来源最多的外部企业是谷歌, 共 10 人跳槽加入;来源人数超过 2 人(含)以上的外部企业还有 Facebook、Stripe、Uber、 Quora、NVIDIA、Microsoft、Dropbox、DeepMind 等知名科技公司。作为应届生直接加入 ChatGPT 团队的共 11 人。

报告发现,ChatGPT 研究员 Heewoo Jun 曾在 2015-2019 年间在百度(美国研究院,Sunnyvale, California, USA.)担任研究员,2019 年从百度离职后加入 OpenAI 担任研究员至今。


到目前为止,ChatGPT 团队已离职员工有 4 人(离职率为 4.6%),他们是 Jacob Hilton、Igor Babuschkin、Matthias Plappert 和 Andrew Carr,去向分别为 Alignment Research Center、DeepMind、Github 和 Gretel.ai。

报告认为,从 ChatGPT 团队离职的人员,并非为外界想象的加入所谓“大厂”,而是仍然选择具有创新潜力的创业公司或机构。

报告还根据以上信息,就国内人工智能前沿技术发展提出了几点建议:

  • 注重科技兴趣和信仰培育,鼓励优秀年轻人投身于前沿技术创新浪潮;

  • “大厂”前沿科技创新疲态显现,鼓励年轻人将目光投向创业公司;

  • 海外华人学者是全球科技创新的重要力量, 鼓励加强对外学术交流。

ChatGPT 爆火引发 AIGC 人才战

在 ChatGPT 爆火之前,人工智能行业人才缺口就已显现。

脉脉人才智库数据显示,2022 年人工智能行业人才紧缺指数(人才需求量 /⼈才投递量)达 0.83,成为人才最紧缺的行业。人工智能行业人才需求集中于技术研发、产品开发和商业化部门。其中软件人才需求最高,其次是产品、销售、算法、运营和项目经理。

随着 ChatGPT 在全球范围内爆火,进一步带动了相关的岗位需求。

2 月 14 日,脉脉创始人兼 CEO 林凡在社交平台发文表示,在脉脉高聘上 AIGC 相关岗位来看,科技巨头、头部猎企纷纷下场抢人,甚至开出 10 万月薪挖人。林凡认为,ChatGPT 带动的 AIGC 创业热潮要来了。这波 AIGC 创业热潮的兴起,必将推动人工智能人才的薪资再攀高峰。

根据脉脉网站显示,目前招聘 AIGC 相关人才的科技公司包括百度、腾讯、阿里、商汤、美团等。据甲子光年报道,CGL 深圳前沿科技组合伙人梁弘进表示,过去两周,已经有超过10家客户找到他。这些客户基本都是国内一二梯队的互联网大厂。客户们的诉求只有一条:“就想找OpenAI项目里的华人”,而且“薪资不设限,越快越好”。


日前,猎聘大数据研究院发布的《ChatGPT 相关领域就业洞察报告》(以下简称“报告”)显示,人工智能人才供不应求,需求是五年前的近 3 倍,紧缺程度持续高于互联网总体水平。

报告对比了各季度的人工智能和互联网的新发职位数,结果显示,五年来,互联网人才需求(新发职位)增长趋势平缓,而人工智能在 2020 年之后处于总体迅速上升态势。2022 年四季度,人工智能新发职位是 2018 年一季度的 2.74 倍,而互联网仅是 2018 年一季度的 1.06 倍。

薪资方面,过去五年,人工智能和互联网的招聘薪资均处于上涨态势,人工智能年均招聘薪资均明显高出互联网。2022 年,人工智能招聘平均年薪为 33.15 万元,比互联网高出 4.27 万元,即 14.78%。


报告显示,人工智能以计算机算法为核心基础,因而对算法工程师需求最大,近一年新发职位占比为 7.26%,招聘平均年薪为 46.40 万元。此外,智能网联工程师、图像算法、机器视觉、深度学习、自然语言处理等职能排名靠前,跻身热招职能 TOP15,招聘平均年薪均超 39 万。

参考链接:

mp.weixin.qq.com/s/Y_LjjsuoEEmhIg5WO_iQhA

economy.gmw.cn/2023-02/14/content_36366347.htm?s=gmwreco2

整理:凌敏

收起阅读 »

每一个人都应该明白的ChatGPT所带来的意义

每一个人都应该明白的ChatGPT所带来的意义ChatGPT的横空问世,因其更高的智能程度、更宽泛的领域知识、更灵活的响应能力、更自然的对话语境使整个互联网都受到极大的冲击。 我本人试用了一段时间后,并结合在网上看到的文章、评论、观点,想说说我对ChatGPT...
继续阅读 »

每一个人都应该明白的ChatGPT所带来的意义

ChatGPT的横空问世,因其更高的智能程度、更宽泛的领域知识、更灵活的响应能力、更自然的对话语境使整个互联网都受到极大的冲击。 我本人试用了一段时间后,并结合在网上看到的文章、评论、观点,想说说我对ChatGPT的看法,以及它应该带给我们的革命。
因本人是互联网行业从业者,本文更多叙述ChatGPT+编程开发从业相关。

本文内容将阐述如下观点:

  • 观点1:ChatGPT给互联网从业者带来的革命-智能时代的每一个人都应成为架构师。

  • 观点2:ChatGPT可以取代哪一部分人?

  • 以上内容包含延伸观点1:人类和人工智能的对决,人类要学会弯道超车

  • 以上内容包含延伸观点2:所有人都要学会“如何提问”
    本文尽可能不讲如上面摘要第一句话那种对背景的复述,相信ChatGPT问世以来大家以从不同渠道获取过很多背景知识,我将尽可能只讲干货。

ChatGPT给互联网从业者带来的革命-智能时代的每一个人都应成为架构师

学会限定答案的边界条件,提高效率

对于互联网从业者来说,我们通过 ChatGPT 可以快速地得到需要的信息和解决问题,但前提是必须学会如何提问并限定答案的边界条件,以提高效率。 首先,请想象一个场景:

我是一名开发工程师,今天接到一个需求,是实现一个冒泡排序方法。

于是我在ChatGPT上提问如下:

它完成了吗?是的,完成了。可是如果我这样提问:

可能我这个场景举例不是很恰当,但是我相信这个例子能够表达出我的意思:大家用的ChatGPT是一样的,在不同的人手中,它将发挥差异巨大的效果。
许多Java工程师都在使用Java,那么他们编写代码的能力不同,难道是因为Java版本?显然不是。而不管是搜索引擎,还是人工智能对话都需要一个能力, “学会提问”以及“运用你所知道知识丰富你的提问”。虽然这个事情大家可能早已听到无数次了,但是“你不会百度吗?”带来的冲击远远没有使用ChatGPT对话 还是无法让人工智能听懂并准确表达出你的意思来的冲击力大。我们应该认识到:“无论是工作中的需求对接、会议上的观点阐述、开发上的问题提问,我们要学习高效地、 准确的、全面的表达和提问方法。

所以,从ChatGPT问世以来,我极力推荐在面试中添加一个问题:“如果你遇到技术问题,你的解决方式是?”
当然,这是一个笼统的问题,接下来再抛出一个具体的问题

  • 如“你在开发一套系统,开发完成后测试正常,交付运维部署后发现无法访问,询问运维发现日志中报错,可是你在本地无法复现因为没有问题,请想象自己 并不懂这个情况发生的原因,你如何表达你的问题?”

  • 再如“你在编写Hive sql,a列值为10,b列值为20,你编写了 select a + b,可是结果并不是30,请想象自己并不懂这个情况发生的原因,你如何表达你的问题?”

请相信我,这个问题的回答通常不会让面试官根据此就决定录用或取消录用,面试结果是多个问题、多方面考虑综合得到的结果。并且此问题的回答并无真正意义上的对错之分,如第一个问题 ,我可以说“请问我的系统本地正常,部署就不正常了,为啥?”,也可以说“请问我的系统本地运行正常,交付后部署在k8s集群化环境,页面不断重定向/404,为啥?”。 那么两个回答都行的前提是什么?在询问同事的时候。 如果是自己在互联网上、ChatGPT上提问呢?显然第一个问题将会收到无数种情况,你需要在无数种情况中挑选符合自己的情况。 这其实就是在限定答案的边界条件。

学会提问,与掌握所有知识相比约为0成本

很有意思,这让我想起了人工钻天然钻。当然我不是很了解这个方面的知识,只是听说人工钻在各个 方面已经超越了天然钻,可是天然钻价格依然居高不下,理由是“纯天然”。
类比一下,如果你认为知识放在自己脑子里才是最好的,非要使用大脑和数千台、数万台服务器构成的人工智能去对决 , 那也没有问题,但是我想说的是无非是你知道“茴”有3种写法,人工智能只知道“茴”有2种写法的区别,你学习的速度能够赶上24小时 不休息的神经网络、深度学习算法吗?革命就在于此,我们应转变思想,我们不再需要知道使用鱼竿怎么钓鱼,但是我们要知道可以使用哪些工具钓鱼。

什么叫做“我们不再需要知道使用鱼竿怎么钓鱼,但是我们要知道可以使用哪些工具钓鱼?”
我大概说一个岗位大家就明白了,这个岗位是“架构师”。我们通常说,在一个点钻研就有可能成为这个领域的专家, 贪多可能嚼不烂,哪个领域都平平无奇,但是时代变了。在人工智能领域,我们扩宽知识面的优先级要高于深挖非自己感兴趣的、非自己常用的知识面。
这就是弯道超车。

ChatGPT可以取代哪一部分人?

我可以直接说出结论:

思维固化,工作只会接收指令输出内容的人。或者反向说不能取代的是需要具有创造性和判断力的领域,人类的创造力和想象力是不可替代的。

只会产品介绍,遇到问题只会说“您的问题我收到了,已经向上反馈了,请您耐心等待电话哦”的客服,是我认为目前职业危机最重的职业,因为它的主要工作内容 交给人工智能来做不会有任何风险,并且人工智能不带有情绪,可以保持高强度高效率的沟通,而且遇到实际问题,人工智能也可以自动往上反馈呀,它没有自主决定的 权力,所以不会因人工智能的行为产生巨大的风险。可惜的是,这类客服岗位的大量存在相信不用我去证明。我们应意识到ChatGPT的发力点在哪里,学会运用它,而不是被它取代。

下面,我使用ChatGPT为本文生成总结:
总的来说,这篇文章提供了一个重要的思考框架,即如何在智能时代更好地与ChatGPT互动,以提高个人和社会的效率和创造力。
作为职场人,学会如何提问是非常重要的,因为一个好的问题可以帮助你更快地解决问题,提高工作效率。在与ChatGPT交互时,我们更需要学会如何提问,因为ChatGPT的回答往往依赖于我们提出的问题。一个好的问题可以帮助我们得到更准确、更有用的答案。
ChatGPT能够取代一部分人,但并不是所有人。ChatGPT可以模拟人类的思维,能够回答一些常见的问题,但是它并不能替代具有专业知识和经验的人类专家。
我们需要学会如何与人工智能合作,发挥各自的优势,以提高个人和社会的效率和创造力,创造更好的未来。

作者:我感觉我变聪明了
来源:juejin.cn/post/7201540320654524473

收起阅读 »

IM等成熟框架是否可以支持到UE接入应用?

IM 的聊天框架是否可以,作为组件,集成到UE工程中?这个方向,我们可以做出哪些努力?

IM 的聊天框架是否可以,作为组件,集成到UE工程中?这个方向,我们可以做出哪些努力?

体验一下可以帮你写代码、写邮件、编故事的神器ChatGPT

注册账号视频教程 最近OpenAI 发布了备受期待的原型通用 ChatGPT,这是一种基于对话的 AI 聊天界面,算是GPT-3(Generative  Pre-trained Transformer 3)的继承者,今天记录一下体验的过程,以前我对AI的理解总...
继续阅读 »

注册账号视频教程
最近OpenAI 发布了备受期待的原型通用 ChatGPT,这是一种基于对话的 AI 聊天界面,算是GPT-3(Generative  Pre-trained Transformer 3)的继承者,今天记录一下体验的过程,以前我对AI的理解总感觉离我很远,现在我好像看到了未来


ChatGPT 几乎可以做任何事情,从写邮件,到写算法,到做面试题,写个歌,帮你编周报,甚至还能帮你写自动化测试,感觉可以取代stackoverflow了


欢迎加我,畅聊前端


1. 工作助手


首先感觉有用的就是帮忙写工作中的邮件 or github的issue,文笔比我自己写的好多了



给我写一个英语商务邮件,语法优雅,友好一些,邮件内容是:下周一早晨我请大壮吃鸡蛋煎饼,顺便邀请开个早会



image.png


代码助手



how to write a login form using React ,Typescript and useReducer?



下面是他生成的代码


import React, { useReducer } from 'react'

type State = {
username: string
password: string
error: string
}

type Action =
| { type: 'SET_USERNAME'; username: string }
| { type: 'SET_PASSWORD'; password: string }
| { type: 'SET_ERROR'; error: string }

function reducer(state: State, action: Action): State {
switch (action.type) {
case 'SET_USERNAME':
return { ...state, username: action.username }
case 'SET_PASSWORD':
return { ...state, password: action.password }
case 'SET_ERROR':
return { ...state, error: action.error }
default:
return state
}
}

function LoginForm() {
const [state, dispatch] = useReducer(reducer, {
username: '',
password: '',
error: '',
})

function handleUsernameChange(event: React.ChangeEvent) {
dispatch({ type: 'SET_USERNAME', username: event.target.value })
}

function handlePasswordChange(event: React.ChangeEvent) {
dispatch({ type: 'SET_PASSWORD', password: event.target.value })
}

function handleSubmit(


一个解析页面script标签内容的正则表达式



比我写的好


image.png



leetcode第一题twosum用javascript怎么做



甚至还有复杂度的优化过程


image.png



write a eslint plugin to forbidden code writing at weekends



还有vscode插件,chrome插件


image.png


面试



出五个高级前端工程师的面试题




来两道算法题
算法还给了答案,真不错



image.png


image.png


Vue代码转成React


把这段Vue3代码转换成react





转换结果, 可以直接运行的


import React, { useState } from 'react'

function TodoList() {
const [msg, setMsg] = useState('Hello World!')
const [todos, setTodos] = useState(['吃饭'])

function add() {
setTodos([...todos, msg])
setMsg('')
}

return (

setMsg(event.target.value)} />


    {todos.map(todo => (
  • {todo}

  • ))}


)
}

然后我把生成的react代码转成angular,在转成vue3,依然是很好的代码质量






自动写单测


甚至可以帮你写测试, 比如给上一段vue代码写点单元测试,给跪了


image.png


Code review


设置还可以代码review, 提示我清单输入框要做非空判断


image.png


写代码


用vue 的写一个组件,可以校验用户输入的邮箱是不是合法,不合法弹出信息提示


image.png


闲的无聊



给Vuejs写一个英文歌曲,摇滚一些



感觉可以直接年会 or vueconf上唱了


Verse 1:
Vue, you're my favorite framework
You make my code more powerful
With your reactive APIs
And your declarative syntax

Chorus:
Vue, oh Vue
You're the one I want to use
Vue, oh Vue
You make my life so easy

Verse 2:
With your components and data-binding
And your virtual DOM rendering
I can create a web app
That's both fast and flexible

Chorus:
Vue, oh Vue
You're the one I want to use
Vue, oh Vue
You make my life so easy

Bridge:
When I need to build a frontend
I know just what to do
I turn to you, Vue
You make it all so simple

Chorus:
Vue, oh Vue
You're the one I want to use
Vue, oh Vue
You make my life so easy

Outro:
Vue, oh Vue
You're the one I want to use
Vue, oh Vue
You make my life so easy


给Reactjs写一个英文歌曲,摇滚一些




一个练习时长两年半的练习生,喜欢唱跳rap 为开头写一个故事




一个人前来买瓜




写一个帮程序员背单词的chrome插件的需求文档




我今天忘记做核酸了,老师要求每天都要做核酸,需要写一份500字的检讨书,认错态度要诚恳 帮忙写一下




今天忘了写日记了,今天主要就是出去遛狗,玩了一下午游戏,帮我写一个500字的日记吧




我们团队想招聘一个高级前端工程师,希望能活泼一些,帮我写个招聘介绍吧


不错,再写一个邀请候选人来面试的邮件吧


候选人不太合适,写一个拒绝他的邮件,委婉一些



这个开放之后,稍微二开一下,每个人都可以拥有自己的贾维斯人工智能助理了,期待


不过老有人说这玩意会取代程序员,取代产品经理,这个我感觉还不至于,可能会淘汰一些入门的岗位,AI本身也需要输入,需要高质量的从业人员贡献产出,所以无论哪个行业,不想被AI取代,还是得提高自己的知识水平啊


体验地址 https://chat.openai.com/chat


作者:花果山大圣
链接:https://juejin.cn/post/7173541437227827208
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

我的个人微信也迅速接入了 ChatGPT

本文主要来聊聊如何快速使用个人微信接入 ChatGPT,欢迎 xdm 尝试起来,仅供学习参考,切莫用于做不正当的事情 关于 ChatGPT 我们每个人都可以简单的使用上,不需要你有很强的技术背景,不需要你有公众号,甚至不需要你自己接入,只要你有一个微信号,就可...
继续阅读 »

本文主要来聊聊如何快速使用个人微信接入 ChatGPT,欢迎 xdm 尝试起来,仅供学习参考,切莫用于做不正当的事情


关于 ChatGPT 我们每个人都可以简单的使用上,不需要你有很强的技术背景,不需要你有公众号,甚至不需要你自己接入,只要你有一个微信号,就可以享受到 ChatGPT 带给你的惊喜,那么我们开始吧


本文分别从如下几个方面来聊:



  • ChatGPT 是什么




  • 个人微信如何快速接入 ChatGPT




  • 关于 ChatGPT 的思考


ChatGPT 是什么



ChatGPT 实际上一个以对话的形式来回答各种问题的模型,他的名字叫做 ChatGPT ,简单理解,他就是一个聊天机器人


现实中,我们印象中的机器人总是那么死板和固执,但是 ChatGPT 却是一个非常人性化的对话模型,他可以和我们聊天,回答我们的各种问题,并且上下文他是可以做到关联的


甚至在未来你在使用各种应用软件的时候,与你对接的客服,或许就是这样的机器人,你可能完全感受不到他居然能够像人一样,甚至比人还聪明,比人还博学


个人微信如何快速接入 ChatGPT


个人微信一样能够轻松的接入 ChatGPT ,不需要你有公众号,只需要做对接的人满足如下资源即可:



  • 经过实名认证的微信号




  • Openai 的账号密码




  • 个人电脑或者一台 linux 虚拟机做服务器


与 Chatgpt 对话


首先,关于 openai 的账号如何注册此处就不过多赘述了,网络上的资料还是非常多的,xdm 实际注册的时候注意几点即可



  • 账号所选的国家尽可能选择海外,例如我注册的时候就选择了 India




  • 手机号接码的时候可能会有一定的延迟,实际操作并不是每一次都能迅速的接收到码的,来回操作了5 - 10 分钟左右收到了一个码,xdm 要耐心


chatgpt:登录地址 chat.openai.com/ 即可享受与 chatgpt 进行进行对话



实际上,ChatGPT 还可以帮我们写代码,写算法,写诗,回答最新的股票信息等等


个人微信接入ChatGPT


个人微信接入ChatGPT ,网上资料非常的多,实践了一遍之后,并不是每一个方式都可以正确运行的,或许是姿势不对,目前发现一个使用 Go 实现的项目比较香,可以非常简单快速的达到我们的目的


接入前提


先去 openai 上创建创建一个 API Keys,这个非常重要,没有这个 API Keys ,对于本案例,是没有办法接入成功的


登录 openai:beta.openai.com/login/


登录之后页面如下



可以看到 openai 的例子很多,至此的功能也是非常丰富的,感兴趣的话可以慢慢的研究,ChatGPT 也需要不断的优化和迭代



点击页面右上角的头像,进入 View API keys



创建一个新的秘钥,请自己保存好,这个秘钥相当重要,主要是用于和 openai 认证和交互的



安装部署方式


下载源码,修改配置,部署服务


可以在我们的 linux 服务器上下载项目源码,并进入源码目录,拉取项目的依赖包


git clone git@github.com:qingconglaixueit/wechatbot.git
cd wechatbot
go mod tidy

当然,这种方式是需要我们有基本的 Go 环境的, 如果不会搭建 Go 的编译环境,可以查看历史文章



源码下载后,wechatbot 目录下我们可以看到如下文件



其中配置文件是 config.dev.json,实际配置文件为config.json ,我们需要拷贝一份


cp config.dev.json config.json

里面存放了如下信息



其中重点关注 api_key 字段,填入我们之前在 openai 网站上获取的 API Keys


运行 Go 的 main.go 文件


go run main.go
// 或者在项目目录下执行 go build ,编译出可执行程序后,执行可执行程序即可

程序运行之后,可以看到出现了一个二维码,我们使用微信扫码即可



  • 此处可以使用自己的微信小号来扫码,该微信号需要个人实名认证,此处注意,扫码的微信号就是 聊天机器人



扫码成功,正常登陆之后,可以看到有正常的日志,无报错信息


此时,其他人发消息给这个扫码的微信号之后,该微信号就会智能回复了,如果是在群聊中,记得要 艾特 这个机器人


另外程序运行后,会在项目路径下生成 storage.json 文件,是一个 Cookies ,这样我们终止程序,再次启动程序的时候,就不需要我们再扫码了


当然,我们也可以直接拿到别人的可执行程序,修改配置后直接运行,也可以得到同样的效果,但是不确定 xdm 是啥时候看到的文章,可执行程序或许会用不了


但是你拿到源码你就可以自己研究,还可以做自定义的功能,Go 是跨平台的,你想生成 windows 的可执行程序或者 linux 的可执行程序都是可以的


实际上,该项目是使用了 openwechat 项目github.com/eatmoreappl…


感兴趣的童鞋,可以下载源码来读一读,代码量并不大,逻辑也很清晰明了,自然自己去从 0 到 1 写的话也是可以的,注意如下点:





  • 如何与 openai 对接,拿到相应的权限,请求响应的接口拿到我们期望的回复,可以直接查看 openai 的对接文档


接入效果


私聊效果,直接发消息即可



群聊效果,记得要 艾特这个机器人



关于 ChatGPT 的思考


ChatGPT 也还在不断的优化和迭代当中,相信未来会有更多的惊喜


诚然,在未来的发展,更加趋向于智能化,很多机械的,简单重复的工作,自然而然是会被逐步替代的,这些都是必须得直面的,无法逃避


我们更多的应该是以开放的心态,拥抱变化,向阳而生,不断的提升自己的核心竞争力,将自己作为一个产品来进行迭代和优化,将自己打造成一个伟大的产品岂不是很酷吗?


本次就是这样,如果有想体验 ChatGPT 的可以加我机器人的微信(xiaomotongneza),拉你进体验群哦,希望本文能给你带来帮助


感谢阅读,欢迎交流,点个赞,关注一波 再走吧


欢迎点赞,关注,收藏


朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力



好了,本次就到这里


技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。


我是阿兵云原生,欢迎点赞关注收藏,下次见~


作者:阿兵云原生
链接:https://juejin.cn/post/7176813187705077816
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

谷歌版ChatGPT首秀,第一个Demo就大翻车,市值暴跌7000亿

现在看来,拼第一枪,微软赢了。如今的谷歌,有点秦失其鹿的味道。在微软更新 ChatGPT 加持的必应搜索之后,大家都极为关注谷歌 Bard 的首秀。怎知近日曝出的 Demo 大翻车,导致股票一夜之间暴跌 7000 亿人民币。而看微软那边,风景独好。前后脚发布新...
继续阅读 »

现在看来,拼第一枪,微软赢了。

如今的谷歌,有点秦失其鹿的味道。

在微软更新 ChatGPT 加持的必应搜索之后,大家都极为关注谷歌 Bard 的首秀。怎知近日曝出的 Demo 大翻车,导致股票一夜之间暴跌 7000 亿人民币。而看微软那边,风景独好。


前后脚发布新一代 AI 搜索,人们的期待却完全反过来,不知重新来过谷歌会不会还抢跑。

昨晚,谷歌举行了「Google presents : Live from Paris」大会。大家都在期待 Bard 的首秀,结果却令观众大失所望。基本没有多少 Bard 的展示内容。

在展示增强现实搜索功能时,演讲人还把演示 Demo 的手机弄丢了,引来人们尴尬而不失礼貌的笑。不过谷歌在活动中仍然通过全面的多模态搜索能力展现了自己的实力。


图:昨晚令人失望的发布会

但发布会过后,人们回过味来:我们现在要的是 ChatGPT 搜索。Bard 是现在在科技界爆红、给谷歌搜索带来巨大威胁的 ChatGPT 的竞品,备受期待的 Bard 却出师不利。

也许,这也是谷歌股价今天暴跌的主要原因。

谷歌 Bard 首秀 Demo 翻车

谷歌在广告中表示,Bard 是一项实验性对话式 AI 服务,由 LaMDA 模型提供支持。Bard 使用谷歌的大型语言模型构建,并利用网络信息获得知识,因为模型体量相对较小,所以需要的算力更小,这意味着能够服务更多的人。谷歌将其聊天机器人描述为「好奇心的发射台」,有助于简化复杂的话题。

但 AI 回答问题也要有准确性,谷歌 Bard 翻车在哪里?仅仅是一个事实错误。

谷歌 Demo 的一 GIF 显示,在回答问题「关于詹姆斯韦伯太空望远镜(JWST)有哪些新发现,我可以告诉我 9 岁孩子哪些内容?」Bard 提供了三个要点,其中一个指出「该望远镜拍摄了太阳系外行星的第一张照片。」


这就是 Bard 的首秀,包含一个事实错误。

然而,推特上的一些天文学家指出这是不正确的,第一张系外行星图像是在 2004 年拍摄的。

天体物理学家 Grant Tremblay 在推特上写道:「我相信 Bard 的表现会令人印象深刻,但郑重声明:JWST 并没有拍下我们太阳系外行星的第一张图片。」


加州大学圣克鲁兹分校天文台主任 Bruce Macintosh 也指出了这个错误。「作为一个在 JWST 发射前 14 年拍摄系外行星的人,感觉你应该找到一个更好的例子?」

在跟进的推文中,Tremblay 补充说:「我非常喜欢并感谢地球上最强大的公司之一正在使用 JWST 搜索来宣传他们的大语言模型。非常棒!但是 ChatGPT 这些模型虽然令人印象深刻,但经常出错,还非常自信。看到大模型进行自我错误检查的未来将会很有趣。」

正如 Tremblay 所指出的,ChatGPT 和 Bard 等 AI 聊天机器人的一个主要问题是它们会一本正经的胡说八道。这些系统经常「产生幻觉」—— 即编造信息 —— 因为它们本质上是自动生成系统。

当前的 AI 不是查询已证实事实的数据库来回答问题,而是接受大量文本语料库的训练并分析模式,以推定任何给定句子中的下一个单词出现的概率。换句话说,它们是统计性的,而不是确定性的 —— 这一特征导致一些 AI 学者将它们称为「废话生成器」。

当然,互联网上已经充斥着虚假和误导性信息,但微软和谷歌希望将这些工具用作搜索引擎,这可能会使问题更加复杂。在搜索引擎上,聊天机器人的回答几乎会被认为是全知机器的权威答案。

微软昨天演示了全新人工智能必应搜索引擎,试图通过用户条款免责来规避这些问题。「必应由 AI 提供支持,因此可能会出现意外和错误,」该公司的免责声明称。「确保检查事实并分享反馈,以便我们学习和改进。」

谷歌发言人告诉媒体:「这凸显了严格测试过程的重要性,我们本周将通过 Trusted Tester 计划启动这一过程。我们会将外部反馈与我们自己的内部测试相结合,以确保 Bard 的回应符合现实世界信息的质量、安全性和接地性的高标准。」

亲身体验微软新必应:升级 ChatGPT 的第一步

那边谷歌 Bard 首秀翻车,这边有人给出了微软新必应 AI 功能的详细使用报告。ChatGPT 驱动的新版本必应能够生成搞笑的辞职信、当下新闻事件以及错误的信息。那么它的搜索功能和效果到底怎样呢?

昨日, The Verge 花了几个小时在微软的 Edge 浏览器中使用这个新版本必应和其他 AI 功能,并感觉到了对 ChatGPT 的重大升级。

体验者问 Edge 全新「撰写」功能的第一个问题:用幽默诙谐的语气向老板写一封辞职信,原因是他觉得自己的工作正在被 AI 取代。结果显示,该功能生成的辞职信令人印象深刻,而且真的很有趣:

Subject: I quit!

Dear Boss,

I regret to inform you that I am resigning from my position as a data analyst, effective immediately. The reason is simple: Al is replacing my job.

Yes, I know you told me that Al is just a tool to help me work taster and smarter, but I don’t buy it. I’ve seen the way you look at that shiny new machine in the corner, with its blinking lights and soothing voice.

I’ve heard the rumors that it can do everything I can do, but better, cheaper, and without complaining. I’ve felt the cold shoulder you’ve given me ever since you installed it.

So, I’ve decided to save you the trouble of firing me and just quit. I don’t want to compete with a machine that can crunch numbers, generate reports, and make witty jokes at the same time.

I don’t want to work for a boss who values Al over human intelligence and creativity. I don’t want to be part of a company that is willing to sacrifice its employees for the sake of efficiency and profit.

I’m sure you’ll be very happy with your new Al assistant. I hope it doesn’t turn against you and take over the world.

I hope it doesn’t make any mistakes that cost you your reputation and customers. I hope it doesn’t get bored and start playing games with your data. I hope it doesn’t develop a personality and fall in love with you.

But if it does, don’t come crying to me. I’ll be too busy enjoying my life, pursuing my passions, and finding a new job that appreciates me for who I am.

Goodbye and good luck,

Your former data analyst

体验者在 ChatGPT 中尝试过同样的询问,但它从未创建过像这样有趣和活泼的答案。然而一封有趣的辞职信并不会从根本上将微软的 AI 功能与 ChatGPT 区分开来,但微软 AI 模型的工作方式与 ChatGPT 存在一些更大的差异。

首先,微软正在将实时新闻输入其聊天版必应,让你可以询问刚刚发生或正在发生的事件。体验者问它「微软在 Bing AI 活动期间宣布了什么?」,它根据涵盖微软 AI 驱动的必应相关公告的多份资料创作了一份新闻摘要。那仅仅是在微软正式宣布这一消息几分钟后。


但与 ChatGPT 非常相似,新必应并不总是准确。当必应出现问题时,旁边会有一个「dislike」按钮,这个按钮会将有关查询的反馈和答案发送给微软。

微软还将聊天答案与必应中的传统搜索结果一起显示出来,并通过常用链接找到答案。必应和 ChatGPT 之间的最大区别在于微软将这些聊天机器人的功能集成到其 Edge 浏览器中。Edge 现在有一个侧边栏,可以扫描整个网页并允许你挑选信息或对网站运行聊天查询。


在这个新的侧边栏中甚至还有一个组合选项卡,可以让输入参数变得更容易一些。这一选项卡为用户提供快速选项来指定语气、格式和长度。你可以要求微软 AI 模型在这里写任何东西,它可以直接被用于博客文章、电子邮件或简单的列表。

你可以想象未来 Word 或 Outlook 有类似的集成来让你创建文档或电子邮件。从技术上讲,现在只需在这个新的 Edge 边栏旁加载基于 Web 的 Word 版本,就可以做到这一点。


微软表示,全新 AI 加持的必应应该比 ChatGPT 更擅长编写代码,很快就会有开发人员测试必应的编程能力。

当然,就像人们试图找到 ChatGPT 的缺陷一样,一定会有成千上万的人想要破解新的必应。微软表示他们有一些额外的保护措施来避免这种情况。

无论如何,微软都非常大胆地在自己的搜索引擎中向公众开放类似于 ChatGPT 的 AI 助手功能。微软的目标显然是抢走谷歌在搜索引擎领域的一部分市场份额,让必应更强大,每个人都在等着看谷歌如何回应。

谷歌虽然推出了对标 ChatGPT 的 Bard,但从这两天业界和机器学习社区的反应看,谷歌似乎不敌微软。现在,谷歌又在自己 Bard 首秀的演示视频中翻车了。

微软认为他们正在掀起搜索引擎的新一轮变革,而谷歌处于被动状态。微软能否撼动谷歌在搜索引擎领域的霸主地位,仍未可知。

参考内容:

https://www.theverge.com/2023/2/8/23590864/google-ai-chatbot-bard-mistake-error-exoplanet-demo

https://www.theverge.com/2023/2/8/23590873/microsoft-new-bing-chatgpt-ai-hands-on

来源:mp.weixin.qq.com/s/1mkAlJbtYCmQcz_mV9cdoA

收起阅读 »

Flutter & ChatGPT | 代码生成器

ChatGPT 作为一个自然语言处理工具,已经火了一段时间。对待 ChatGPT 不同人有着不同的看法,新事物的出现必然如此。利益相关者形成 抵制 和 狂热 两极;哗众取宠者蹭蹭热度,问些花活,博人眼球;猎奇者尝尝鲜,起哄者挑挑火;实用派在思考新事物的价值和...
继续阅读 »

ChatGPT 作为一个自然语言处理工具,已经火了一段时间。对待 ChatGPT 不同人有着不同的看法,新事物的出现必然如此。利益相关者形成 抵制狂热 两极;哗众取宠者蹭蹭热度,问些花活,博人眼球;猎奇者尝尝鲜,起哄者挑挑火;实用派在思考新事物的价值和劳动力:


image.png


对于那些拿 ChatGPT 当百科全书来用的,或询问哲学问题的朋友,我只想说:



对于一个问题,用错误的工具去处理得出错误的结果,是一件很正常的事。





1. ChatGPT 的特点和劣势

ChatGPT 最大的特点是基础的语义分析,让计算机对自然语言进行处理并输出。在一段会话中,上下文是有效的,所以可以类似于交流。



问这个问题,它会怎么回答?



这种猎奇的心理,会让一部分人期望尝试;有稀奇古怪或愚蠢的回答,也可以满足人类对人工智障的优越感;分享问答,也让 ChatGPT 拥有一丝的社交属性。蹭热度、猎奇、起哄三者可以用它填充一块内心的空虚,也仅止步于此。




ChatGPT 目前的劣势也很明显,由于数据是几年前的,所以时效性不强;对很多问题回答的精准度并不高,对于盲目相信的人,或判别力较差的朋友并不友好;最后一点,非常重要:对于工具而言,如果对其依赖性太高,脱离工具时,会让人的主观能动性降低。


image.png




2. 代码的生成与规则诱导

如下所示,让它生成一个 Dart 的 User 类:



生成一个 dart 类 User, 字段为 : 可空 int 型 age 、final 非空 String 型 username 默认值为 “unknown”



image.png


虽然代码给出了,但是可以看出,这是空安全之前的代码。可能很多人到这里,觉得数据陈旧没什么用途,就拜拜了您嘞。


image.png




但它是一个有会话上下文的自然语言处理工具,你可以让它理解一些概念。就像一个新员工,上班第一天出了一点小错误,你是立刻开除他,还是告诉他该怎么正确处理。如下所示,给了它一个概念:



Dart 新版本中可空类型定义时,其后需要加 ?



image.png




如下所示,你就可以在当前的会话环境中让它生成更多字段的类型:



用 Dart 新版本生成一个 dart 类 User,字段为: final 非空 int 型 age , final 非空 String 型 username 默认值为 “unknown” , final 非空 int 型 height,可空 String型info,final 非空 int 型 roleId



image.png


如果存在问题,可以继续进行指正。比如 :



用 Dart 新版本,有默认值的字段不需要使用 required 关键字,其他非空字段需要



image.png


所以对于 ChatGPT 而言,我们可以把它看成一个有一些基础知识的,可为我们免费服务的员工,简称:奴隶。当它做错事时,你骂它,责备它,抛弃它是毫无意义的,因为它是机器。我们需要去 诱导 它理解,在当前工作环境中正确的事。


这样在当前会话中,它就可以理解你诉说的规则,当用它创建其他类时,他就不会再犯错。并且不排除它会基于你的规则,去完善自身的 知识储备 ,当众多的人用正确的规则去 诱导 它,这就是一个善意的正反馈。




3. 解决方案的概念

这里从生成的代码 不支持空安全支持空安全,其实只用了几句话。第一句是反馈测试,看看它的 默认知识储备



生成一个 dart 类 User, 字段为 : 可空 int 型 age 、final 非空 String 型 username 默认值为 “unknown”



当它的输出不满足我们的需求时,再进行 诱导



Dart 新版本中可空类型定义时,其后需要加 ?

用 Dart 新版本,有默认值的字段不需要使用 required 关键字,其他非空字段需要



在诱导完成之后,它就可以给出满足需求的输出。这种诱导后提供的会话环境,输出是相对稳定的,完成特定的任务。这就是为不确定的输出,添加规则,使其输出趋近 幂等性 。一旦一项可以处理任务的工具有这种性质,就可以面向任何人使用。可以称这种诱导过程为解决某一问题的一种 解决方案


比如上面的三句话就是:根据类信息生成 Dart 数据类型,并支持空安全。在当前环境下,就可以基于这种方案去处理同类的任务:



用 Dart 新版本生成一个 dart 类 TaskResult,字段为: final 非空 int 型 cost , final 非空 String 型 taskName 默认值为 “unknown” , final 非空 int 型 count,可空 String型taskInfo,final 非空 String型 taskCode



image.png


你拷贝代码后,就是可用的:


image.png




4. Dart 数据类生成器完善

上面生成 Dart 数据类比较简单,下面继续拓展,比如对于数据类型而言 copyWithtoJsonfromJson 的方法自己写起来比较麻烦。如果现在告诉它:



为上面的类提供 copyWith、toJson 、 fromJson 方法



它会进行提供,说明它具有这个 默认知识储备 ,但可以看到 copyWith 方法中的字段不符合空安全:


image.png


此时可以训练它的 类型可空 的意识,让它主动处理类似的问题,也可以直白的告诉它



将上面的 copyWith 方法入参类型后加 ? 号



这样生成的 TaskResult 类就可以使用了:


image.png


class TaskResult {
final int cost;
final String taskName;
final int count;
final String? taskInfo;
final String taskCode;

TaskResult({
required this.cost,
this.taskName = 'unknown',
required this.count,
this.taskInfo,
required this.taskCode,
});

TaskResult copyWith({
int? cost,
String? taskName,
int? count,
String? taskInfo,
String? taskCode,
}) {
return TaskResult(
cost: cost ?? this.cost,
taskName: taskName ?? this.taskName,
count: count ?? this.count,
taskInfo: taskInfo ?? this.taskInfo,
taskCode: taskCode ?? this.taskCode,
);
}

Map toJson() {
return {
'cost': cost,
'taskName': taskName,
'count': count,
'taskInfo': taskInfo,
'taskCode': taskCode,
};
}

static TaskResult fromJson(Map json) {
return TaskResult(
cost: json['cost'] as int,
taskName: json['taskName'] as String,
count: json['count'] as int,
taskInfo: json['taskInfo'] as String,
taskCode: json['taskCode'] as String,
);
}
}



5. 代码生成字符串 与 ChatGPT 生成字符串

对于一些相对固定的代码,可以使用代码逻辑,拼接字符串来生成。如下所示,通过对类结构的抽象化,使用对象进行配置,输出字符串。我们来思考一下,这和 ChatGPT 生成代码的区别。


首先,使用代码生成代码是一种完全的 幂等行为 。也就是说任何人、在任何时间、任何空间下,使用相同的输入,都可以获取到相同的输出,是绝对精准的。其产生代码的行为逻辑是完全可控的,人的内心是期待确定性的。


image.png


而 ChatGPT 对自然语言的理解,你可以用语言去引导它输出一些你的需求,比如 :



以json 格式生成 10 句连续的中文对话,key 为 content包括。另外 time 字段为时间戳 ,type 字段1,2 随机



image.png


其实没有什么孰强孰弱,只是使用场景的不同而已。刀在不同人的手里有不同的用法,人是生产生活的主体,工具只有服务的属性。驾驭工具,让它产生实用的价值,才是工具存在的意义。好了,本文到这里就扯完了,感谢观看 ~


作者:张风捷特烈
链接:https://juejin.cn/post/7197584339213762619
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收起阅读 »

最近突然火爆朋友圈的Damus是个啥?

前言兔年过完刚上班没几天,今天看朋友圈的时候突然发现好多人在发以"npub1"开头的神秘字符串。搞的我差点怀疑是不是微信出bug了?于是稍微搜索一了下才知道这串神秘代码是个公钥,这个公钥是用来加好友的,在哪里加好友呢?在一个去中心化的社交网络客户端上加好友。这...
继续阅读 »

前言

兔年过完刚上班没几天,今天看朋友圈的时候突然发现好多人在发以"npub1"开头的神秘字符串。搞的我差点怀疑是不是微信出bug了?于是稍微搜索一了下才知道这串神秘代码是个公钥,这个公钥是用来加好友的,在哪里加好友呢?在一个去中心化的社交网络客户端上加好友。这个客户端在iOS上叫Damus(音译:大妈们?)。在Android平台上叫Amethyst(我也不知道咋念)。如果你哪个客户端都不想装,人家还有网页端给你用snort.social

(下面是我的公钥,供大家参考,没事的话也可以加一下,如果你也有公钥欢迎留在评论区)

npub1prxq60wh5zm9s2mf8uw3fr6yy44uuf4l67kh5f7am4244svecjrsfm75vt

看起来这玩意除了有个难念的名字和加好友要用一串根本没法记的字符串外,它就还是个社交软件嘛。是不是这样呢?我们接着来体验一下Damus。

Damus咋玩?

首先和普通的社交软件一样得注册,但Damus有个好处是你注册的时候不需要手机号也不需要邮箱,只需要填个用户名就行了。注册的同时会为你自动生成一个公钥和一个私钥。公钥--就是前面说的"npub1"开头的字符串--是用来加好友的,可以发给别人。私钥是用来登录的。一定要自己保管起来,千万别让外人看到。


登录进去以后感觉就是个低配版的Twitter。支持#tag话题 毕竟是刚发布的客户端。好多东西还不完善。目前可以发文字。而且貌似没有140字的限制,但是不支持直接发图片,要发图片需要将图片上传到别的服务器生成链接以后才能使用。

另外一个小细节,点赞图标不光有大拇指,它还有小拇指,就问你六不六?


个人中心除了用户名,头像,个人网址等等常规设置外,还可以设置比特币闪电小费地址,也就是说这玩意想做成像微信那样既可以社交又可以支付?只不过支付应该只支持“数字货币”吧。


从上面的使用体验可以看出Damus还比较基础,很多功能是赶不上现有的社交软件的,例如发帖不支持样式编辑、发帖后不可删除、点赞或转推后不可撤销、图片需要转成链接才能发布,此外,趋势、过滤器等高级需求也亟待添加。那它为啥突然爆火呢?

Damus为啥火爆?

首先是因为有Twitter创始人Jack Dorsey的背书。在Damus终于上线app store之后,Jack Dorsey发推称之为里程碑事件


Jack Dorsey的推动让硅谷科技圈风投圈一下子躁动起来,不到24小时就已经蔓延到我的朋友圈了,可见世界之小,社交网络之强大。

其次就是Damus自身的特点了。从其官网我们可以看到Damus宣称自己的6大优势。


翻译一下就是:

  • 用户做主:建立在开放的互联网协议之上,没有任何平台可以禁止或审查,用户可以控制自己的数据和语音;

  • 加密:端到端加密的消息传递;

  • 无需注册:创建帐户不需要电话号码、电子邮件或姓名;

  • 无需服务器:消息通过去中心化的中继分发,无需运行任何基础设施,也没有单点故障;

  • 可编程:轻松集成机器人,帮助用户实现生活或业务自动化。Damus 也会在你的服务器出现故障时进行通知。

  • 赚钱:支持用比特币和闪电网络打赏朋友的帖子和 stack sats。

Damus能火爆其实主要就是因为其第一个优势,“用户做主”。基于去中心化社交协议 Nostr,那,看到去中心化,那不就是区块链,Web3等等当下正火的概念吗?区块链,Web3一直缺少面向用户的杀手级应用。而Damus貌似被大佬们寄予厚望能成为这样的应用。所以才有里程碑一说吧。

总结

从Damus的突然火爆我们可以看出科技圈最新的风向如何了。我的感受就是之前总在说区块链,Web3等等概念似乎离我们前端圈子比较遥远。还有就是各种币圈新闻让人感觉看不懂,但大受震撼。但现在Damus的出现会不会终于让Web3概念杀到了前端圈的门口呢?我觉得作为前端人需要紧紧跟随观察起来。至于Damus命运如何,是蓬勃发展壮大?还是热闹一阵子之后一地鸡毛?还是过几天就404?谁也不知道。但是抢先体验一下总没有错。

最后呢,再放一下我的Damus公钥

npub1prxq60wh5zm9s2mf8uw3fr6yy44uuf4l67kh5f7am4244svecjrsfm75vt

欢迎大家关注,也请大家把自己的公钥放在评论区方便互关。

作者:ad6623
来源:juejin.cn/post/7195423742709268541

收起阅读 »

作为一个学会智能合约的前端开发者,该如何找到 Web3 工作?

最近有个朋友咨询我一个问题。他做前端大概有五年了,技术比较一般。从去年开始就一直非常看好 web3 方向。但在 web2 的公司做久了,有一种思维定性,没有下定决心学习 web3 的技术,也不知道从何而起。后来他看到我开始布道 web3,纠结了一段时间,前段时...
继续阅读 »

最近有个朋友咨询我一个问题。

他做前端大概有五年了,技术比较一般。从去年开始就一直非常看好 web3 方向。但在 web2 的公司做久了,有一种思维定性,没有下定决心学习 web3 的技术,也不知道从何而起。

后来他看到我开始布道 web3,纠结了一段时间,前段时间终于下定决心,开始跟着我学起了他犹豫了一年的 web3 技术。

从 solidity 开始,到 truffle、ethersjs 等等,把常用的技术全学了一遍。也根据我的 github 项目做了三四个入门级别的 DApp,整个开发流程也相对熟悉。

这是 Github 项目地址:github.com/luzhenqian/…

但现在仍然很迷茫,因为现在的他需要一个真正转型的契机,也就是寻找一份 web3 工作。

这种迷茫,在我的理解中,应该是一类通用问题,也就是:作为一个前端开发者,在学会了智能合约后如何加入到 Web3 开发的公司或者团队。

我相信存在这类问题的人不在少数,所以在我帮朋友解惑后,顺便把这个过程中的一些思考整理出来,帮助更多存在同类问题的小伙伴答疑。

要完成这个任务,我认为需要做四个阶段的准备:确认自身技术栈、确认自身领域、确认目标公司、自我准备。

首先第一个就是整理好你的定位与技术栈。找工作这件事,其实就是营销。你需要把自己包装成产品,然后要对产品进行定位与美化。

如果仍然锚定做开发者,那么定位主要分两个:

  1. 仍然主做前端。

  2. 全栈。做合约开发,同时也做前端。

第二个就是确定好自己切入的细分领域,你可以理解为主要业务范畴。

Web3 目前的领域非常多,比如:

  • 交易所。

  • 公链。

  • NFT 交易所。

  • 钱包。

  • 链游。

  • DID。

第三个就是想好自己要加入的公司类型,这个时候公司就是你的用户,你需要给公司画用户画像。

以 base 为维度进行划分,基本上有三类:

  • remote

  • 国外

  • 国内

以规模进行划分,大概也有几类:

  • 顶级大厂,比如头部交易所和公链。

  • 独角兽公司,拿到千万级别美金的知名公司。

  • 商业化公司,拿到千万级别人民币的知名项目。

  • 增长阶段的公司,有一些用户,拿到了一些资本投资,处于增长阶段的公司。

  • 创业公司,还没有什么钱,也没有什么用户的刚起步的公司。

最后一个,你需要编写自己的简历。

如果你没有经验,那就自己给自己增加一些经验,比如想办法参加一些黑客松,参加一些社区活动,也可以在 Github 上做一些小项目,不一定功能很庞大很复杂,但一定要有创意和创新,小而美。

产品定位

先来看产品定位,也就是自身的问题。

技术栈我推荐你这么选:

  • next.js:最流行的前端框架,没有备选。

  • tailwindcss:最流行的 CSS 框架,没有备选。

  • solidity:最流行的智能合约编程语言,没有备选。

  • ethersjs:最流行的智能合约交互库,备选是 web3.js。

  • wagmi:最流行的 React Hook 智能合约交互库,没有备选。

  • hardhat:最流行的智能合约开发框架,备选是 truffle。

  • open zeppelin:最流行的智能合约库。

业务领域没有局限,都可以选择。但一定要有自己最擅长的那一个,也就是专精领域。在你的专精领域中,你就是专家,你可以一直侃侃而谈,但一定不能被问得哑口无言。比如选择 NFT。你需要把 NFT 相关的协议全部搞得非常明白,比如 ERC721、ERC1155 等。同时还需要知道白名单是怎么做的、荷兰拍卖该怎么去做、NFT 交易所怎么做,手续费如何抽取、NFT 的一些种类,PFP 背后的逻辑等等、一些蓝筹项目是如何运作起来的、NFT 创作网站的流程及实现方案等等。千万不要什么都懂,但什么都不精通。

用户画像

接下来就是用户画像,也就是公司的定位。

我推荐的公司画像是这样:remote、国外。规模的话自然是越大越好,因为薪资报酬相对都更稳定。当然一些小而美的公司也不错。在正式投递简历之前,一定要对公司进行全方位了解。比如公司的主营业务是什么,不存在实际价值的公司一定不要去。所谓实际价值,就是能够解决某一个或一类真实存在并有意义的实际问题。同时也要看一下团队背景和创始人背景。

简历阶段,我建议根据意向岗位来定制自己的简历。提高通过率,节省时间成本。首先在简历上把自己的技术体系写清楚,尽量契合目标岗位。在商业化以上的公司里面,更注重个人领域的细分,他们通常更看重你的技术深度,因为他们把你招进去是要做螺丝钉的。所以你需要在这方面多加准备。如果是创业阶段或者增长阶段的公司,他们通常更看重你的想法,因为在这个阶段中,他们的产品也是在得到用户反馈后迅速变化的,并没有形成固有的形态,他们需要你去和他们一起 building 产品。

另外在简历上也有一些小技巧。比如尽量把头像放上去,很多欧美的公司都需要通过头像知道你的肤色和你是哪国人。同时简历中不要使用很糟糕的英文。有找一些优质的简历模板进行参照。总之要从一些细节之处来展现你的专业度。

最后祝你早日加入理想的公司。

作者:代码与野兽
来源:juejin.cn/post/7193206064962404411

收起阅读 »

8年了,Web3到底给这个世界带来了什么?

一言以蔽之,Web3 并没有带来普遍的价值,它只给少数人带来了价值。Web3 这个词,可以追溯到 1999 年。但我们如今谈论的 Web3 不是那个定义。从 1999 年到 2014 年期间,不断有很多名人来定义 web3。但都没有获得普遍认可。2014 年 ...
继续阅读 »

一言以蔽之,Web3 并没有带来普遍的价值,它只给少数人带来了价值。

Web3 这个词,可以追溯到 1999 年。但我们如今谈论的 Web3 不是那个定义。

从 1999 年到 2014 年期间,不断有很多名人来定义 web3。但都没有获得普遍认可。2014 年 Polkadot 创始人和以太坊的创始人 Gavin Wood 提出的概念才是如今真正让 Web3 成为大多数人熟知的起点。

Web3 的起因

Web2 模型与社会结构非常相似,互联网上的各种中心化平台和现实世界中的各种机构对等。

Gavin 认为这种模型是坏掉的模型,他想通过技术手段创造一种全新的模型。如果继续使用这种模型,人类社会会走向衰败。

而这种新模型,就是去中心化,让用户自己拥有自己的数据与资产。

你可能会想,打破平台垄断,无疑会触碰到某些人的利益,遭到很多既得利益者的抵制。

但事实并非如此。

Gavin 一直强调,Web3 并不是取代现存的科技巨头或者权力机构。它只是一种新的模型,这种模型的优势就是权力分配的机制不同。Gavin 试图通过这种模型来保护自由世界。而那些不需要自由的人,仍然可以活在 Web2 的世界里。两者并不冲突。

Web3 的门槛

你可能又会想,如何实现上述模型?

Gavin 曾给出过答案,基于区块链技术。

区块链是一种低成本构造人人互信环境的一种技术。它天生就具有分布式、去中心化的属性。

但是,让用户去编写代码与区块链进行交互,门槛无疑太高了。

所以 Gavin 和志同道合的伙伴搭建了以太坊平台、solidity 智能合约等技术,帮助大家降低编程门槛。

但即使如此,Web3 的门槛仍然很高。

除去技术门槛,交易的成本也是让很多普通人无法接受的重要原因。

在以太坊进行交易,最少要支付 10 元人民币左右的 gas 费。再看看中国的现状,还有多少人在菜市场买菜还要为了几毛钱砍价?大多数普通人不会接受如此昂贵的 gas 费。

所以目前的 Web3,参与者都是些技术极客、创业者和投机者。普通人短时间内无法跨越这些天生的门槛,进入 Web3 的世界。

我认为,普通人不需要自由,自然也不需要 Web3。

Web3 的现状

虽然 Web3 的设想很好,但如今的 Web3 很混乱。

炒作、内斗、诈骗、抄袭,无处不在。

矿场、赌狗、NFT 炒作、洗钱、传销,他们并不是 Web3 好的一面,但 Web3 又没办法离开它们。

他们的关系,是一种相互依赖,相互依存、相互利用的关系。

投机者希望借助这个自由的平台实现利益收割、敛财、暴富。

Web3 的推动者希望借助这帮狂热的疯子来扩大 Web3 对世界的影响力。

投机者不懂那些理念,也不需要懂。它们只在乎电费涨没涨;自己压的币涨没涨;酝酿了很久的盘有没有杀到猪;新发行的 NFT 有没有被 Mint 光。

你说如今 Web3 中的人有没有信仰?不好回答,不过我总结的道理就是:增长就是信仰。就这么简单。

Web2 与 Web3 的关系?

既不冲突,也不对立。

现实世界中的 Web3 发展,与 Gavin 最初提出的目标有不少偏差。但基本的逻辑没有变化。

很多人批判 Web3,认为它是一种新型骗局。

你可以说 Web3 没有普遍价值,但说它是一种骗局我是绝不认可的。人与人之间社交,本身就存在欺骗,这是人的天性,与 Web2 或者 Web3 无关。

人们对 Web3 最错误的认知就是把修补 Web2 已存在的窟窿的重任托付给 Web3。

Web3 不是为了让 Web 更好,也不是为了替代 Web2。

它的使命是创造属于自由的新东西。

Web3 虽然名字中有个 Web,但它不是 Web。

Web3 的未来

自从 2021 年,Web3 火了之后。对 Web3 的定义也越来越模糊。

人们迫切地希望把 Web2 中,或者说现实世界中那些令人痛恨,而又无力改变的现状,通通扔到 Web3 里面,把希望寄托于 Web3。

这个奇怪的现象一直持续至今。

如今我们谈论的 Web3,已经不再单单是曾经 Gavin 下的定义了。

元宇宙、ESG 电商、虚拟地产、创作者经济、去中心化金融等等一堆衍生概念,全部涌入 Web3 中。

如今,Web2 中的各大科技公司纷纷布局 Web3,而 Web3 也成为各大投资机构的焦点。沉浸在这种焦点之下,难免会让 Web3 的人看不清自己。

假泡沫还是真趋势?

没人能看清,我也看不清,也无法预测。

不过,我终归是对 Web3 有信仰的,这份信仰源自增长。

作者:代码与野兽
来源:juejin.cn/post/7189085299304038459

收起阅读 »

ChatGPT进入百度“弱智吧”后,疯了

无论你玩不玩贴吧,“弱智吧”的大名很多人应该听说过。如今弱智吧的关注人数已经超过了200万。。。不得不说,能将这么多“弱智”聚在一起,“弱智吧”撑起了后·百度贴吧时代的辉煌。。。来一起感受下“弱智吧”的日常:能问出这些问题,确实脑回路已经超越普通人了。。。弱智...
继续阅读 »

无论你玩不玩贴吧,“弱智吧”的大名很多人应该听说过。


如今弱智吧的关注人数已经超过了200万。。。

不得不说,能将这么多“弱智”聚在一起,“弱智吧”撑起了后·百度贴吧时代的辉煌。。。

来一起感受下“弱智吧”的日常:


能问出这些问题,确实脑回路已经超越普通人了。。。

弱智吧的存在已经够离谱了,更离谱的是,弱智吧官方微博把这几天火出圈的ChatGPT与“弱智吧”做了连接——让ChatGPT去回答弱智吧上的问题。


真是离谱他爸给离谱开门,离谱到家了。。。

“弱智”与“弱AI”的较量,从此揭开了序幕。来,一起感受下!

弱智提问1


弱智提问2


这个回答属实有点“社交牛逼症”了。我觉得别再沉溺于图灵测试了,这已经满足不了ChatGPT了。笔者觉得有必要直接给ChatGPT测下情商

弱智提问3


这个回答,让笔者一时分不清ChatGPT是认真的还是故意的。。。

弱智提问4


弱智提问5


弱智提问6


我已经20多岁了,还能开写轮眼吗?

弱智提问7


弱智提问8


突然不知道该怎么反驳,我果然既不如弱智,也不如AI

弱智提问9


弱智提问10


弱智提问11


弱智提问12


弱智提问13


AI,这波是你输了

弱智提问14


我觉得这波AI赢了

那么问题来了,你认为是人类创造的“弱智问题”赢了?还是AI创造的“机智回答”赢了?


最后,笔者还找了一些弱智吧的牛逼问题,手里有ChatGPT账号的读者小伙伴可以在评论区分享测试结果:

开放问题1


开放问题2


开放问题3


作者:兔子酱
来源:夕小瑶的卖萌屋

收起阅读 »

整体学历较高,硕士占比达 40%,周星驰也开始招募Web3人才!

编辑:Datawhale近期,周星驰发布人才招募令。人才要求:熟悉Web3,有项目管理经验,有头脑还又宅心仁厚;工作范围:助我建造创意未来;还提醒对此职位感兴趣的候选人投简历时请贴出个人简介影片或Web3作品并tag,他本人会亲自拣人。随着数字经济的发展,We...
继续阅读 »

编辑:Datawhale

近期,周星驰发布人才招募令。

人才要求:熟悉Web3,有项目管理经验,有头脑还又宅心仁厚;工作范围:助我建造创意未来;还提醒对此职位感兴趣的候选人投简历时请贴出个人简介影片或Web3作品并tag,他本人会亲自拣人。


随着数字经济的发展,Web3 成为了新的风口,各大厂商和投资人纷纷将目光聚集其上。在部分人眼中,Web3 能够重塑数字金融交易体系,改变全球竞争格局,在未来互联网上实现弯道超车。其中,不乏顶级投资机构红杉和 A16Z,前者甚至一度将简介更改为 DAO。


不过,时不时出现的裁员新闻又让行业之外的人对 Web3 望而生畏。如 Coinbase 此前宣布裁员 18%,规模高达上千人。当然,Web3 也存在正不断开放招聘岗位的企业。

传说中可以跨国分布式从业的 Web3 是精英遍布还是草根丛生,什么样的人才是目前 Web3 企业所需要的成为了大部分用户想了解的信息呢?

Web3企业需要的是什么人才?

中国人才增速较低,但需求强劲

从宏观上来看,截至 2022 年 6 月,区块链人才总量同比增加了 76%,其中,印度、新加坡和美国增速最高,分别为 122%、92%、62%,中国相对较低,仅仅只有 12%。

在人才总量增加的同时,人才需求量呈现出远超供应的增长。根据领英人才大数据洞察获得的数据来看,2021 年相较 2020 年人才需求呈倍数级增长,其中,加拿大增速最高,达到了 560%。印度、新加坡、美国、中国的增速分别为 145%、180%、82%、78%。


虽然供需缺口,但事实上,除了科技和金融公司以外,大部分区块链的人才主要又以内部流动为主。领英人才大数据洞察显示,2021 年至今,人才主要在 Coinbase、Crypto.com、Gemeni、Rippl e 等区块链企业间交叉流动。而外部流入的人才主要来自华尔街和硅谷等地知名巨头如高盛、JPMorgan、HSBS、谷歌、微软、Facebook 等。

从人才的需求端和供应端来看,区块链的人才受到地区限制少,在全球各地都呈现需求量增长的趋势。但是从绝对数量上来看,美国、法国、英国等发达国家依旧占据着优势。对于金融业和 IT 业较为繁荣的国家而言,切入区块链和 Web3 存在着不小的产业优势。

具体到中国的区块链产业上,根据 IDC 研究预测,中国 2020-2025 年区块链市场规模年复合增长率将达 54.6%,增速位居全球第一。而全球区块链市场规模年复合增长率将达 48%。

换言之,中国目前的区块链产业对人才的需求量大,但进入该行业的人才少,同时,中国区块链产业后续增长强劲。从报告来看,换方向从事 Web3 行业的工作对于个人的发展而言或许是一个不错的选择。

核心人才需求主要以金融和研发为主

相较于 Web1 和 Web2 而言,Web3 的定义更宽泛。目前业内对于 Web3 并没有严格的定义,不过其有几个较为明显的特征,比如数据的确权与授权、隐私保护、去中心化运行等等。而这些明显的特征决定了行业主要人才的构成。

从全球区块链领域人才构成上分析,金融、研发、业务开发、信息技术、销售人才为全球区块链前五大人才类型。


全球区块链领域前五大人才类型中,最热门细分职业分别为加密货币交易员、软件工程师、分析师、支持分析师及客户经理。


从人才增速来看,测试工程师、密码逻辑技术专家、合规分析师、设计师和支持分析师分别位列前五,其中,测试工程师增速高达 713%。

从人才构成和需求来看,可以发现,区块链行业发展依旧处于早期阶段,大量的基础设施正在搭建。区块链人才的构成成分最主要还是取决于行业的发展。在行业发展的初期阶段往往需要大量基础性的工作职位,如研发、开发、产品构建。如想要等区块链行业发展更加成熟之后再参与这个行业,或许可以锻炼自己运营、营销、市场等方面的能力。

同时,需要注意的是,不同的国家和地区对于人才的需求也有较为明显的差异,人才容易在地域上产生集聚效应,如大量工程师聚集于硅谷。在考虑城市和职业方向的同时,或许还得思考城市和职业的契合度。如在区块链领域,新加坡侧重于产品经理、软件工程师的招聘,而中国香港更侧重于产品设计师、用户体验作者等。

人才竞争初始,硕士从业人数占比 40%

由于市场对区块链人才的需求远远超过供应,区块链从业者的平均薪资已经超过了大部分行业。

据 Glassdoor 报告,美国区块链开发人员的平均年基本工资为 9.1 万美元。而 2020 年美国社会安全署数据显示,美国民众平均年薪 5.3 万美元,中位数为 3.4 万美元。同样,北京人社局于 2021 年 11 月发布的《2021 年北京市人力资源市场薪酬大数据报告》,在 30 个新职业薪酬排行榜中,区块链工程技术人员最高,年度薪酬中位值达 48.7 万人民币。北、上、广、深等重点城市区块链产业人才平均年薪水平大幅领先城市整体产业人才平均年薪水平。

高薪促使着优秀的人才向区块链行业聚拢,目前全球区块链领域中学士群体占 59%,硕士占比达 40%,整体学历较高。同时,数据显示,全球区块链人才排名前十的学校均为世界知名院校,其中包括加州大学伯克利分校、斯坦福大学、哈佛大学等顶级大学。

与此同时,中国包括中央财经大学、同济大学、浙江大学等在内的多所双一流大学也开设了区块链课程。

综合来看,目前区块链行业依旧处于起始阶段,各国的政策扶持力度正在不断加大,人才流动频繁,需求量巨大。作为从业者,除了学历等硬性指标外,还需要持续拓展延伸自己的能力,从而持续构建核心竞争力。

来源:Datawhale


收起阅读 »

过几年你不看,就不用胡椒盐

法规及法规vbnmbnm,bn鼓风机发个人fghjghffg不会难看美女吧

法规及法规vbnmbnm,bn鼓风机发个人fghjghffg不会难看美女吧

fghjgf8ytuj复工后的非官方的个

和对方过后就VB你吧VNfghjghffg好看吗帮你们

和对方过后就VB你吧VNfghjghffg好看吗帮你们

非过户结果符合复工后很过分

法国的红酒地方各个很舒服fghjghffg搞好看皇冠

法国的红酒地方各个很舒服fghjghffg搞好看皇冠

小客户更健康分工会经费

发个机会规范fghjghffg发个机会功夫就能发个和

发个机会规范fghjghffg发个机会功夫就能发个和