注册
环信即时通讯云

环信即时通讯云

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

环信开发文档

Demo体验

Demo体验

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

RTE开发者社区

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

技术讨论区

技术交流、答疑
资源下载

资源下载

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

iOS Library

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

Android Library

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

一句话让cursor爬取到大量美女图片!!!

AI编程大大的提高了人们的开发效率。 cursor cursor是一个集成了GPT4、Claude 3.5等先进LLM的类VScode的编译器,可以理解为在vscode中集成了AI辅助编程助手。 cursor内置了很多LLMs,包括最先进的GPT4s、Clau...
继续阅读 »

AI编程大大的提高了人们的开发效率。


cursor


cursor是一个集成了GPT4、Claude 3.5等先进LLM的类VScode的编译器,可以理解为在vscode中集成了AI辅助编程助手。


cursor内置了很多LLMs,包括最先进的GPT4s、Claude3.5s和openai最新发布的推理模型o1-preview和o1-mini,在右上角的设置中即可打开相应的模型进行辅助编程。
最常用的快捷键就下面四个:



  • Tab:自动填充

  • Ctrl+K:编辑代码

  • Ctrl+L:(compose模式对话)回答用户关于代码和整个项目的问题,适合复杂的多轮对话,需要处理文件的场景,能长期保存对话历史

  • Ctrl+i:(chat模式对话)简单的问答,系统快速的文本,生成实时对话需求


下面将带大家使用cursor去爬取美女图片。这个项目并不复杂,我们使用chat模式来进行对话。我们使用ctrl+i调出对话框,输入要求即可


image.png
接着cursor就会给你回复,直接按照回复运行即可。可以看到图片已经爬取出来了
image.png


当然,这种方式也能很快的帮我们学习。当我们成品做出来之后,我们可以使用vscode的marscode进行问答,让他告诉我们代码的作用是什么,小编称之为面向实战学习,下面带着大家迅速学习一个简单demo感受一下学习的效率。


marscode


marscode是vscode集成的一款AI插件,能够让AI给用户进行页面内部的问答,这样就不用打开外置的AI应用进行询问,给程序员沉浸式的体验。
这是一个爬取微博热榜的简单小demo


const request = require('request-promise');
const cheerio = require('cheerio');
const createCsvWriter = require('csv-writer').createObjectCsvWriter;

// 目标URL
const url = 'https://tophub.today/n/KqndgxeLl9';

// 发送HTTP请求并解析HTML
request(url)
.then(html => {
const $ = cheerio.load(html);
const hotList = [];

// 选择表格中的每一行
$('table tr').each((index, element) => {
if (index === 0) return; // 跳过表头行

const rank = $(element).find('td:nth-child(1)').text().trim();
const title = $(element).find('td:nth-child(2) a').text().trim();
const heat = $(element).find('td:nth-child(3)').text().trim();
const link = $(element).find('td:nth-child(2) a').attr('href');

hotList.push({ rank, title, heat, link });
});

// 创建CSV写入器
const csvWriter = createCsvWriter({
path: 'hot_list.csv',
header: [
{ id: 'rank', title: 'Rank' },
{ id: 'title', title: 'Title' },
{ id: 'heat', title: 'Heat' },
{ id: 'link', title: 'Link' }
]
});

// 写入CSV文件
csvWriter.writeRecords(hotList)
.then(() => console.log('CSV file has been saved.'))
.catch(err => console.error('Error writing CSV file:', err));
})
.catch(err => console.error('Error fetching the webpage:', err));

我们是没有学过爬虫的哦,里面的内容都看不太懂,我们让AI来带着我们学习。


const request = require('request-promise');
const cheerio = require('cheerio');
const createCsvWriter = require('csv-writer').createObjectCsvWriter;

首先发起疑惑,这个require是什么啊?我们打开marscode选中要询问的代码就可以直接询问


image.png


image.png
可以看到marscode已经给了我们回复,原来这是es6之前的导入模块的方式。这三个模块的作用分别是发送请求的模块,解析HTML的模块和将爬取到的文本写入csv文件的模块。
我们可以接着询问。我们发现了一个 $ 符号看不懂,我们再问问AI这是什么


image.png
更多的就不再演示了,总之通过这种方式能极大的提高学习的效率


作者:ZXT
来源:juejin.cn/post/7442731383615389733
收起阅读 »

如何用AI两小时上线自己的小程序

ChatGPT这个轰动全球的产品自问世以来,已经过了将近2年的时间,各行各业的精英们如火如荼的将AI能力应用到自己生产的产品中来。 为分担人类的部分工作,AI还具有非常大的想象空间,例如对于一个程序员来说,使用AI生成快速生成自己的小程序,相信在AI能力与开发...
继续阅读 »

ChatGPT这个轰动全球的产品自问世以来,已经过了将近2年的时间,各行各业的精英们如火如荼的将AI能力应用到自己生产的产品中来。


为分担人类的部分工作,AI还具有非常大的想象空间,例如对于一个程序员来说,使用AI生成快速生成自己的小程序,相信在AI能力与开发工具融合从可用性到易用性普及以后,会变成一个“习以为常”的操作。


App or 小程序?


在APP开发与小程序开发技术路径之间,本人选择了轻应用的技术开发路线,主要是相信“效率为王”,高产才能给自己赚取更高的收益。


好了,选定方向以后,接下来就是技能的学习和深入。AI的效率之高和学习成本之低,在技能深耕让我想到了是否能借助AI做更多的尝试,比如零基础开发一个页面,甚至一个小程序?


说干就干,开始着手进行准备工作:开发什么应用好呢?要不就一个简单的电商小程序吧。


一、准备工作


最开始的开始,我们先要找一个开发工具,既能帮助我们可视化的开发小程序的,又有可以接收prompt的AI能力。找度娘搜索了下,发现一款产品:FinClip的开发者工具(FinClip IDE)。


二、生成小程序


首先,随意输入一句话的提示词:


「创建一个product页面,每个product项有名称描述和单价」,看看能得出怎样的结果。



结果还是比较让人意外的,只是简单的prompt,就能得到下图的页面布局和结构,看来FinClip这个产品设计者也是很用心的,非常懂开发者的“痛”。



正所谓一个好的电影,70%都要靠导演和编导的构思,一个好的应用程序也不例外,如果要利用好AI能力,就需要有更详细的prompt规划,例如一些结构(如下),大家感兴趣的可以多尝试下:



  • 内容(什么类型的小程序):XXXXXXX

  • 布局(小程序的主要页面都有什么,按钮、图片之类的):XXXXXX

  • 交互(页面上用户的使用操作):XXXXXXX


如果prompt出来的效果并不能一次性的调整到位,FinClip的这个开发者工具还能局部修改页面代码,加上小程序页面的实时预览功能,就能够让一个开发小白尽可能的在成本输出之前进行多次调整,不得不说还是非常方便的。



其他有趣的功能,就是对于一个小程序开发小白来说,很有可能就连小程序开发语法和技术都不熟练,如何能够基于产品已有的开发文档,更便捷的进行知识提取,FinClip也通过一个AI agent连通了自有的小程序开发的知识连起来,让使用的开发者能够更好的对开发知识进行检索。



三、小结


从idea到上线,只花了2个小时,整个流程中,除了手动调整样式的数值,没有写一行代码,全部由AI能力,结合prompt帮助我完成。


这只是一次很浅层的探索案例,对我个人来说只是在小程序技能深入学习前的一个小实践,很有可能,对于熟练的前端开发来说可能就是一个小时工作量,但在这里分享的目的,是为了分享下所谓的拥抱新技术所带来的好处,与此同时,也是给大家带来一点小焦虑,正所谓“不进则退”,很多经验可能自己埋头积累并不能获得质的飞跃,最终可能自己是个"井底之蛙",花大力气却换来了小惊喜,还不如拥抱变化,使用新技术快速提升自己的工作技能。


共勉。


作者:Speedoooo
来源:juejin.cn/post/7423279449915293707
收起阅读 »

高质量数据不够用,合成数据是打开 AGI 大门的金钥匙吗?

编者按: 人工智能技术的发展离不开高质量数据的支持。然而,现有可用的高质量数据资源已日渐接近枯竭边缘。如何解决训练数据短缺的问题,是当前人工智能领域亟待解决的一个较为棘手的问题。 本期文章探讨了一种经实践可行的解决方案 —— 合成数据(Synthetic Da...
继续阅读 »

编者按: 人工智能技术的发展离不开高质量数据的支持。然而,现有可用的高质量数据资源已日渐接近枯竭边缘。如何解决训练数据短缺的问题,是当前人工智能领域亟待解决的一个较为棘手的问题。


本期文章探讨了一种经实践可行的解决方案 —— 合成数据(Synthetic Data)。如 AlphaZero、Sora 等已初步证实了合成数据具备的巨大潜力。对于语言模型来说,虽然要生成高质量的合成文本存在一定难度,但通过优化现有数据、从多模态数据中学习等策略,或许能够大幅降低对新数据的需求量。


如果合成数据真的能解决训练数据匮乏的难题,其影响必将是极其深远的。文章进一步分析了可能产生的影响:如互联网行业可能会被重塑、反垄断审查可能进一步加强、公共数据资源会获得更多投资等。不过现在做出这些预测或许还为时尚早,我们需要保持冷静,耐心观察合成数据这一技术在未来会取得何种突破性进展。


本文直指人工智能发展面临的一大瓶颈 —— “高质量数据的日益枯竭”,并提出了一种有争议但值得探索的解决方案,极具启发意义。我们后续会持续关注这一技术领域的最新进展,敬请期待!



作者 | Nabeel S. Qureshi


编译 | 岳扬


图片


大语言模型是在海量数据上完成训练的,数据集规模堪比众多图书馆的藏书总和。然而,如果有一天我们用尽了所有可用的数据,该怎么办呢?图片来源:Twitter[1]


01 数据不够用?


现代大语言模型(LLMs)的一个关键事实可概括总结为:数据为王。人工智能模型的行为很大程度上取决于其训练所用的数据集;其他细节(诸如模型架构等),只是为数据集提供计算能力的一种手段。拥有一份干净的、高品质的数据集,其价值不可估量。[1]


数据的重要地位在人工智能行业的商业实践(AI business practice)中可见一斑。OpenAI 近期宣布与 Axel Springer、Elsevier、美联社及其它内容出版商和媒体巨头达成数据合作;《纽约时报》(NYT)最近起诉 OpenAI,要求停用利用 NYT 数据训练的 GPT 模型。与此同时,苹果公司正以超过五千万美元的价格,寻求与内容出版商(publishers)的数据合作。在当前的边际效益**(译者注:边际效益(Marginal Benefit)是一个经济学概念,指的是在增加一单位的某种投入(如生产中的劳动力、原材料或者服务中的员工时间)时,所获得的额外收益或价值的增加。)下,模型从更多数据中获取的利益远超单纯扩大模型规模带来的收益。


训练语料库(training corpora)的扩容速度令人咋舌。世界上首个现代 LLM 是在维基百科这一知识宝库上训练完成的。GPT-3 在 3000 亿个 tokens(包括单词、词根或标点等)上进行训练,而 GPT-4 的训练数据量更是达到了惊人的13万亿个 tokens 。自动驾驶汽车是在数千小时的视频录像资料中学习、掌握驾驶技巧的;在编程辅助方面,OpenAI 的 Copilot,依托的是来自 Github 上数百万行人类编写的代码。


这种情况会一直持续下去吗?2022 年发表在 arXiv[2] 上的一项研究表明:我们正逼近耗尽高质量数据的边缘,这一转折点预计会在2023年至2027年间到来。 (这里所谓的“高质量数据”,涵盖了维基百科(Wikipedia)、新闻(news)、代码(code)、科学文献(scientific papers)、书籍(books)、社交媒体对话内容(social media conversations)、精选网页(filtered web pages)以及用户原创内容(如 Reddit 上的内容)。)


研究估计,这些高质量数据的存量约为 9e12 个单词,并且每年以 4 %到 5 %的速度增长。 9e12 具体有多大?举个例子,莎士比亚全集的字数约为 90 万(即9e5),相比之下,9e12 这个数量足足是莎翁作品字数总和的 1000 万倍之巨。


据粗略估计,要达到真正意义上的人类级人工智能(human-level AI),所需数据量可能是当前数据量的 5 到 6 个数量级之上,换言之,至少需要 10 万至 100 万倍的数据量扩充。


回顾一下,GPT-4 使用了 13 万亿个 tokens 。不过还有很多尚未充分开采的领域里潜藏着丰富的数据等待挖掘,比如音频与视频资料、非英语数据资料、电子邮件、短信、推特动态、未数字化的书籍,以及企业私有数据。通过这些渠道,我们或许能再获得比目前有用数据多 10 倍甚至 100 倍的数据,然而,要再获得多 10 万倍的数据却如同天方夜谭。


一句话,我们手中的数据还远远不够


除此之外,还有一系列现有的不利因素可能让获取优质数据变得更加棘手:



  • 那些依赖用户来生成内容(User-generated content, UGC)的网站,比如Reddit、Stack Overflow、Twitter/X等,纷纷关上了免费获取数据大门,对数据使用权开出了天价的的许可费。

  • 作家、艺术家,甚至像《纽约时报》这样的媒体巨头,都在维权路上高歌猛进,抗议其作品未经许可就被大语言模型拿去“学习”。

  • 有人担忧,互联网正逐渐被大语言模型生成的低质内容所淹没,这不仅可能引发模型的“drift”(译者注:在模型持续学习或微调的过程中,如果新增数据质量不高,可能引导模型产生不理想的变化。),还会直接拉低模型响应的质量。


02 合成数据:超级智能的新曙光?


基于前文的分析,我们或许会得出一个比较悲观的结论:我们目前拥有的数据不足以训练出超级智能(superintelligence)。然而,现在做出这样的判断未免操之过急。解决这一问题的关键可能就在于合成数据的创造——即机器为了自训练(self-training)而自主生成的数据。


尽管听上去像是天方夜谭,但事实上,一些前沿的现代 AI 系统都是通过合成数据训练出来的:



  • 专攻棋类的 AlphaZero[3] 就是使用合成数据训练出来的。具体而言,AlphaZero 通过与自身对战来生成数据,并从这些对局中汲取教训,不断优化策略。(这种数据之所以被称为合成数据,是因为它完全不需要借鉴真实人类的棋局记录。)

  • 再来看看 OpenAI 的最新成果之一 —— Sora[4],这款视频生成模型能够依据简单的文字指令,创造出长达 1 分钟的虚拟视频。它的训练很可能是基于电子游戏引擎(大概率是Unreal Engine 5)生成的合成数据。也就是说,Sora 不仅通过 YouTube 视频或现实世界的电影来学习,游戏引擎构建的虚拟环境同样成为了它的学习素材。


所以,这项技术已在棋类博弈与视频生成应用中得到了证实;真正的问题在于它能否同样适用于文本处理。 在某些方面,制作供训练使用的高质量视频数据,比生成文字训练数据容易得多:只需一部 iPhone,就能拍摄视频捕捉现实生活的真实面貌。然而,要想让合成的文本数据成为有效的训练数据,它必须是高质量、有趣的,而且在某种意义上是 "真实的"。


关键的一点是,创造有价值的合成数据,不仅仅就是从无到有的创作文本那么简单。比如,一份最新发表的论文[5](2024年1月)指出,利用大语言模型改进抓取到的网络数据的表达方式,不仅能优化训练效果,还能提升训练效率。有时,仅通过筛选并移除数据集中质量最差的数据(这一过程称为“数据集剪枝”),就能大幅增强大语言模型的表现。有一项针对图像数据的研究更是惊人地发现,要达到模型的峰值性能(peak model performance),甚至需要舍弃数据集中高达90%的非关键信息!


如今,我们已拥有能像孩童般从视频中观察与学习的大语言模型。当我们弄清楚如何获取更高质量的多模态数据(包括视频、音频、图像及文本)的技巧,我们可能会惊喜地发现,大语言模型填补其世界观缺失部分所需的训练数据量,远比原先设想的要少得多。


03 解决合成数据生成问题将带来的影响



  1. 攻克合成数据的生成这一难题将极大加速人工智能领域的进步:考虑到当前研究者们对合成数据开发的投入、解决这一问题的巨大动力以及这一难题在其他领域已取得的成功,我们有理由相信,在未来几个月至数年内合成数据的生成将取得重大进展,进一步推动 AI 技术的飞速发展。而这一方面的技术突破,很可能会被各大企业严密保护为商业机密。

  2. 互联网行业或将重塑,减少对广告的依赖程度:传统上严重依赖广告收入的互联网企业,可能转向一种全新的商业模式,聚焦于训练数据的生成、创造。如 Reddit 这家近期申请 IPO(S-1) 的互联网巨头,其收入的 10%(即约 6000 万美元)来源于数据销售,且预计这一比例将持续上升。互联网上的用户数据源源不断(包括 reviews、tweets、comments 等),获取这些新鲜数据将非常有价值。如果这一点正确,各大企业将竞相采取措施,收集更多高价值的人工生成数据,助力人工智能模型的训练。

  3. 反垄断审查将趋严:独占如 Reddit、Elsevier 这类高价值数据源所引发的反垄断问题,预期将受到更为严格的审查。大型科技公司凭借其雄厚的财力和庞大的数据集,将进一步巩固其市场主导地位,加剧小规模企业参与竞争的难度。

  4. 开源项目可能会落后:监管部门需思考如何确保数据集的公平获取途径,可能会将数据集视作公共基础设施,或在特定条件下强制执行数据共享相关要求。构建更多高质量、经过筛选和整理的数据集,对学术界和开源社区维持竞争力尤为重要。各国政府也许会主动建立中央数据资源库,供所有大语言模型(LLM)开发者使用,从而帮助创造公平的竞争环境。不过短期内,开源项目开发者只能继续在 private labs (译者注:由私营企业或非公有实体运营的研究实验室,它们的工作成果、研发的技术和产生的数据往往被视为公司的知识产权,对外保密。)制作的优秀模型基础上对其进行微调,这意味着开源项目在可预见的未来仍可能落后于 private labs 。

  5. 数据被共享为公共资源:某些类型的数据具备公共属性,往往因投资不足而未得到充分开发。比如,一个汇集人类伦理道德偏好(human ethical preferences),通过对比分析形成的公共数据集,便是一个适宜公开资助或 AI 慈善项目投资的对象。类似的案例不胜枚举。


在科幻小说《沙丘》中,迷幻剂 melange(小说中俗称“香料”),被誉为银河系中的无价之宝。基于以上种种,埃隆·马斯克(Elon Musk)不久前在推特上的言论[6]——“数据即是香料(data is the spice.)”——便显得极为意味深长。AI 实验室都对此心领神会,正紧锣密鼓地“捣鼓”数据。


【注释】有一篇由 OpenAI 研究员撰写的题目为《the ‘it’ in AI models is the dataset(AI模型的核心在于数据集)》( nonint.com/2023/06/10/… )的精彩博客文章,作者一针见血地指出:



“AI 模型的行为特征并非取决于其架构设计、超参数设置或是优化器算法的选择。真正起决定作用的是数据集本身,除此之外别无他物。所有的架构、参数和优化方法,归根结底都是为了更高效地处理数据,逼近数据集的真实表现。”



Thanks for reading!


Nabeel S. Qureshi is a Visiting Scholar at Mercatus. His research focuses on the impacts of AI in the 21st century.


nabeelqu.co/


END


参考资料


[1]twitter.com/dieworkwear…


[2]arxiv.org/pdf/2211.04…


[3]en.wikipedia.org/wiki/AlphaZ…


[4]openai.com/sora


[5]arxiv.org/pdf/2401.16…


[6]twitter.com/elonmusk/st…


本文经原作者授权,由 Baihai IDP 编译。如需转载译文,请联系获取授权。


原文链接:


digitalspirits.substack.com/p/is-synthe…


作者:Baihai_IDP
来源:juejin.cn/post/7384347818384850984
收起阅读 »

1. 使用openai api实现一个智能前端组件

0. 注意 本文只是提供一个思路,由于现在大模型正在飞速发展,整个生态在不久的将来或许会发生巨大的变化,文章中的代码仅供参考。 1. 一个简单的示例 假设当前时间是2023年12月28日,时间段选择器通过理解用户输入表述,自动设置值。 可以看到组件正确理解了...
继续阅读 »

0. 注意


本文只是提供一个思路,由于现在大模型正在飞速发展,整个生态在不久的将来或许会发生巨大的变化,文章中的代码仅供参考。


1. 一个简单的示例


msedge_2ReNz11Waq.gif


假设当前时间是2023年12月28日,时间段选择器通过理解用户输入表述,自动设置值。


可以看到组件正确理解了用户想要设置的时间。


2.原理简介


graph TD
输入文字描述 --> 请求语言模型接口 --> 处理语言模型响应 --> 功能操作

其实原理很简单,就是通过代码的方式问模型问题,然后让他回答。这和我们使用chatgpt一样的。


3. 实现


输入描述就不说了,就是输入框。关键在于请求和处理语言模型的接口。


最简单的就是直接使用api请求这些大模型的官方接口,但是我们需要处理各种平台之间的接口差异和一些特殊问题。这里我使用了一个开发语言模型应用的框架LangChain


3.1. LangChain


简单的说,这是一个面向语言处理模型的编程框架,从如何输入你的问题,到如何处理回答都有规范的工具来实现。


LangChain官网


// 这是一个最简单的例子
import { OpenAI } from "langchain/llms/openai";
import { ChatOpenAI } from "langchain/chat_models/openai";
// 初始化openai模型
const llm = new OpenAI({
temperature: 0.9,
});
// 准备一个输入文本
const text =
"What would be a good company name for a company that makes colorful socks?";
// 输入文本,获取响应
const llmResult = await llm.predict(text);
//=> 响应一段文本:"Feetful of Fun"

整个框架主要就是下面三个部分组成:


graph LR
A["输入模板(Prompt templates)"] --- B["语言模型(Language models)"] --- C["输出解释器(Output parsers)"]


  • Prompt templates:输入模板分一句话(not chat)对话(chat)模式,区别就是输入一句话和多句话,而且对话模式中每句话有角色区分是谁说的,比如人类AI系统。这里简单介绍一下非对话模式下怎么创建输入模板。


import { PromptTemplate } from "langchain/prompts";  

// 最简单的模板生成,使用fromTemplate传入一句话
// 可以在句子中加入{}占位符表示变量
const oneInputPrompt = PromptTemplate.fromTemplate(
`You are a naming consultant for new companies.
What is a good name for a company that makes {product}?`

);
// 也可以直接实例化设置
const twoInputPrompt = new PromptTemplate({
inputVariables: ["adjective"],
template: "Tell me a {adjective} joke.",
});

// 如果你想要这样和模型对话
// 先给出几个例子,然后在问问题
Respond to the users question in the with the following format:

Question: What is your name?
Answer: My name is John.

Question: What is your age?
Answer: I am 25 years old.

Question: What is your favorite color?
Answer:
// 可以使用FewShotPromptTemplate
// 创建一些模板,字段名随便你定
const examples = [
{
input:
"Could the members of The Police perform lawful arrests?",
output: "what can the members of The Police do?",
},
{
input: "Jan Sindel's was born in what country?",
output: "what is Jan Sindel's personal history?",
},
];
// 输入模板,包含变量就是模板要填充的
const prompt = `Human: {input}\nAI: {output}`;
const examplePromptTemplate = PromptTemplate.fromTemplate(prompt);
// 创建example输入模板
const fewShotPrompt = new FewShotPromptTemplate({
examplePrompt: examplePromptTemplate,
examples,
inputVariables: [], // no input variables
});
console.log(
(await fewShotPrompt.formatPromptValue({})).toString()
);
// 输出
Human: Could the members of The Police perform lawful arrests?
AI: what can the members of The Police do?

Human: Jan Sindel's was born in what country?
AI: what is Jan Sindel'
s personal history?
// 还有很多可以查询官网


  • Language models: 语言模型同样分为LLM(大语言模型)chat模型,其实两个差不多,就是输入多少和是否可以连续对话的区别。


import { OpenAI } from "langchain/llms/openai";  

const model = new OpenAI({ temperature: 1 });
// 可以添加超时
const resA = await model.call(
"What would be a good company name a company that makes colorful socks?",
{ timeout: 1000 } // 1s timeout
);
// 注册一些事件回调
const model = new OpenAI({
callbacks: [
{
handleLLMStart: async (llm: Serialized, prompts: string[]) => {
console.log(JSON.stringify(llm, null, 2));
console.log(JSON.stringify(prompts, null, 2));
},
handleLLMEnd: async (output: LLMResult) => {
console.log(JSON.stringify(output, null, 2));
},
handleLLMError: async (err: Error) => {
console.error(err);
},
},
],
});
// 还有一些配置可以参考文档


  • Output parsers: 顾名思义就是处理输出的模块,当语言模型回答了一段文字程序是很难提取出有用信息的, 我们通常需要模型返回一个程序可以处理的答案,比如JSON。虽然叫输出解释器,实际上是在输入信息中加入一些额外的提示,让模型能够按照需求格式输出。


// 这里用StructuredOutputParser,结构化输出解释器为例
// 使用StructuredOutputParser创建一个解释器
// 定义了输出有两个字段answer、source
// 字段的值是对这个字段的描述在
const parser = StructuredOutputParser.fromNamesAndDescriptions({
answer: "answer to the user's question",
source: "source used to answer the user's question, should be a website.",
});
// 使用RunnableSequence,批量执行任务
const chain = RunnableSequence.from([
// 输入包含了两个变量,一个是结构化解释器的“格式说明”,一个是用户的问题
PromptTemplate.fromTemplate(
"Answer the users question as best as possible.\n{format_instructions}\n{question}"
),
new OpenAI({ temperature: 0 }),
parser,
]);
// 与模型交互
const response = await chain.invoke({
question: "What is the capital of France?",
format_instructions: parser.getFormatInstructions(),
});
// 响应 { answer: 'Paris', source: 'https://en.wikipedia.org/wiki/Paris' }
// 输入的模板是这样
Answer the users question as best as possible. // 这句话就是prompt的第一句
// 下面一大段是StructuredOutputParser自动加上的,大概就是告诉模型json的标准格式应该是什么
The output should be formatted as a JSON instance that conforms to the JSON schema below.

As an example, for the schema {{"properties": {{"foo": {{"title": "Foo", "description": "a list of strings", "type": "array", "items": {{"type": "string"}}}}}}, "required": ["foo"]}}}}
the object {{"foo": ["bar", "baz"]}} is a well-formatted instance of the schema. The object {{"properties": {{"foo": ["bar", "baz"]}}}} is not well-formatted.

Here is the output schema:
```
{"type":"object","properties":{"answer":{"type":"string","description":"answer to the user's question"},"sources":{"type":"array","items":{"type":"string"},"description":"sources used to answer the question, should be websites."}},"required":["answer","sources"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}
`
``
// 这段就是调用的时候传入的问题
What is the capital of France?


// 还有很多不同的解释器
// 如StringOutputParser字符串输出解释器
// JsonOutputFunctionsParser json函数输出解释器等等

除了这三部分,还有一些方便程序操作的一些功能模块,比如记录聊天状态的Memory模块,知识库模块Retrieval等等,这些官网有比较完整的文档,深度的使用后面再来探索。


3.2. 简单版本


// 初始化语言模型
// 这里使用的openai
const llm = new OpenAI({
openAIApiKey: import.meta.env.VITE_OPENAI_KEY,
temperature: 0,
});

function App() {
const [res, setRes] = useState<string>();
const [from] = Form.useForm();
return (
<>
<div>结果:{res}</div>
<Form wrapperCol={{ span: 6 }} form={from}>
<Form.Item label="输入描述">
<Input.Search
onSearch={async (value) =>
{
setRes("正在请求");
// 直接对话模型
const text =
`现在是${dayjs().format("YYYY-MM-DD")},${value},开始结束时间是什么。请用这个格式回答{startTime: '开始时间', endTime: '结束时间'}`;
// 简单预测文本
const llmResult = await llm.predict(text);
const response = JSON.parse(llmResult)
// 解析
const { startTime, endTime } = response;
// 设置
from.setFieldsValue({
times: [dayjs(startTime), dayjs(endTime)],
});
setRes(llmResult)
}}
enterButton={<Button type="primary">确定</Button>}
/>
</Form.Item>
<Form.Item label="时间段" name="times">
<DatePicker.RangePicker />
</Form.Item>
</Form>
</>

);
}

export default App;


前面虽然能实现功能,但是有很多边界条件无法考虑到,比如有的模型无法理解你这个返回格式是什么意思,或者你有很多个字段那你就要写一大串输入模板。


3.3. 使用结构化输出解释器


// 修改一下onSearch
setRes("正在请求");
// 定义输出有两个字段startTime、endTime
const parser = StructuredOutputParser.fromNamesAndDescriptions({
startTime: "开始时间,格式是YYYY-MM-DD HH:mm:ss",
endTime: "结束时间,格式是YYYY-MM-DD HH:mm:ss",
});
const chain = RunnableSequence.from([
// 输入模板
PromptTemplate.fromTemplate(
`{format_instructions}\n现在是${dayjs().format(
"YYYY-MM-DD"
)}
,{question},开始结束时间是什么`

),
llm,
parser,
]);
const response = await chain.invoke({
question: value,
// 把输出解释器的提示放入输入模板中
format_instructions: parser.getFormatInstructions(),
});
// 这个时候经过结构化解释器处理,返回的就是json
setRes(JSON.stringify(response));
const { startTime, endTime } = response;
from.setFieldsValue({
times: [dayjs(startTime), dayjs(endTime)],
});

对于大型一点的项目,使用langChainapi可以更规范的组织我们的代码。


// 完整代码
import { OpenAI } from "langchain/llms/openai";
import { useState } from "react";
import {
PromptTemplate,
} from "langchain/prompts";
import { StructuredOutputParser } from "langchain/output_parsers";
import { RunnableSequence } from "langchain/runnables";
import { Button, DatePicker, Form, Input } from "antd";
import "dayjs/locale/zh-cn";
import dayjs from "dayjs";

const llm = new OpenAI({
openAIApiKey: import.meta.env.VITE_OPENAI_KEY,
temperature: 0,
});

function App() {
const [res, setRes] = useState<string>();
const [from] = Form.useForm();
return (
<>
<div>结果:{res}</div>
<Form wrapperCol={{ span: 6 }} form={from}>
<Form.Item label="输入描述">
<Input.Search
onSearch={async (value) =>
{
setRes("正在请求");
const parser = StructuredOutputParser.fromNamesAndDescriptions({
startTime: "开始时间,格式是YYYY-MM-DD HH:mm:ss",
endTime: "结束时间,格式是YYYY-MM-DD HH:mm:ss",
});
const chain = RunnableSequence.from([
PromptTemplate.fromTemplate(
`{format_instructions}\n现在是${dayjs().format(
"YYYY-MM-DD"
)},{question},开始结束时间是什么`
),
llm,
parser,
]);
const response = await chain.invoke({
question: value,
format_instructions: parser.getFormatInstructions(),
});
setRes(JSON.stringify(response));
const { startTime, endTime } = response;
from.setFieldsValue({
times: [dayjs(startTime), dayjs(endTime)],
});

}}
enterButton={<Button type="primary">确定</Button>}
/>
</Form.Item>
<Form.Item label="时间段" name="times">
<DatePicker.RangePicker />
</Form.Item>
</Form>
</>

);
}

export default App;

4.总结


这篇文章只是我初步使用LangChain的一个小demo,在智能组件上面,大家其实可以发挥更大的想象去发挥。还有很多组件可以变成自然语言驱动的。


随着以后大模型的小型化,专门化,我相信肯定会涌现更多的智能组件。


作者:头上有煎饺
来源:juejin.cn/post/7317440781588840486
收起阅读 »

AI真的可以写出可商用的代码吗?

背景 在MQTT中,代理(Broker)将发布的消息(publish messages)根据它们的主题(topic)匹配到订阅了这些主题的客户端。这个过程对于客户端来说是透明的,因为客户端只需要指定它们感兴趣的主题,而MQTT代理负责将消息分发给所有订阅了匹配...
继续阅读 »

背景


在MQTT中,代理(Broker)将发布的消息(publish messages)根据它们的主题(topic)匹配到订阅了这些主题的客户端。这个过程对于客户端来说是透明的,因为客户端只需要指定它们感兴趣的主题,而MQTT代理负责将消息分发给所有订阅了匹配主题的客户端。 如果想通过topic作为解耦key,实现一个客户端多个Listener,每个Listener都具备自己的topic及业务处理逻辑(类似RocketMQ消费者模式)。所以MQTT客户端具备把消息根据topic路由到相应的Listener中。 image.png 回归主题我希望通过AI帮实现topic路由。(实现matchTopic方法)


private  boolean matchTopic(String subscribedTopic, String publishedTopic)

AI写代码


AI选择:通义千问


第一次


指令


通过java实现mqtt的topic路由匹配的方法matchTopic(String subscribedTopic,String publishedTopic)


AI输出(只粘贴代码部分)


import java.util.regex.Matcher;  
import java.util.regex.Pattern;  

public class MqttTopicMatcher {  

    /**  
     * 模拟MQTT的topic匹配。  
     *   
     * 注意:这个实现是简化的,它不支持通配符在主题字符串中的非末尾位置,  
     * 并且没有处理多层加号(`+`)和井号(`
#`)的复杂情况。  
     * 它主要用于理解和教学目的。  
     *  
     * @param subscribedTopic 订阅的主题,可能包含`+`或`
#`通配符  
     * @param publishedTopic  发布的主题  
     * @return 如果发布的主题与订阅的主题匹配,则返回true;否则返回false  
     */
  
    public static boolean matchTopic(String subscribedTopic, String publishedTopic) {  
        // 将加号(`+`)替换为正则表达式中的任意字符(`.`)  
        String regexTopic = subscribedTopic.replace("+"".");  

        // 处理井号(`#`):如果订阅的主题以`#`结尾,则替换为任意数量的任意字符(`.*`)  
        // 注意:这里我们假设`#`只出现在字符串的末尾,且前面没有其他通配符  
        if (regexTopic.endsWith("#")) {  
            regexTopic = regexTopic.substring(0, regexTopic.length() - 1) + ".*";  
        }  

        // 编译正则表达式  
        Pattern pattern = Pattern.compile("^" + regexTopic + "$");  

        // 匹配发布的主题  
        Matcher matcher = pattern.matcher(publishedTopic);  
        return matcher.matches();  
    }  

    public static void main(String[] args) {  
        // 示例  
        String subscribedTopic1 = "sensors/+/level";  
        String publishedTopic1 = "sensors/temperature/level";  
        System.out.println(matchTopic(subscribedTopic1, publishedTopic1))// 应输出 true  

        String subscribedTopic2 = "sensors/#";  
        String publishedTopic2 = "sensors/temperature/room1/level";  
        System.out.println(matchTopic(subscribedTopic2, publishedTopic2))// 应输出 true  

        String subscribedTopic3 = "sensors/+";  
        String publishedTopic3 = "sensors/temperature/level";  
        System.out.println(matchTopic(subscribedTopic3, publishedTopic3))// 应输出 false,因为`+`只匹配单个层级  

        // 注意:这个实现是简化的,不涵盖所有MQTT topic匹配的场景  
    }  
}

验证


public static void main(String[] args) {
    boolean a = matchTopic("$SYS/brokers/+/clients/#""$SYS/brokers/emqx@172.51.0.6/clients/mqttx_b2136a2c/connected");
    System.out.println("msg: " + a); // 应该输出 true
    boolean b = matchTopic("DEVICE/+/msg""DEVICE/0000000091238112/msg");
    System.out.println("msg: " + b); // 应该输出 true
}

  public static boolean matchTopic(String subscribedTopic, String publishedTopic) {  
        // 将加号(`+`)替换为正则表达式中的任意字符(`.`)  
        String regexTopic = subscribedTopic.replace("+"".");  
        // 处理井号(`#`):如果订阅的主题以`#`结尾,则替换为任意数量的任意字符(`.*`)  
        // 注意:这里我们假设`#`只出现在字符串的末尾,且前面没有其他通配符  
        if (regexTopic.endsWith("#")) {  
            regexTopic = regexTopic.substring(0, regexTopic.length() - 1) + ".*";  
        }  
        // 编译正则表达式  
        Pattern pattern = Pattern.compile("^" + regexTopic + "$");  
        // 匹配发布的主题  
        Matcher matcher = pattern.matcher(publishedTopic);  
        return matcher.matches();  
    } 

实质输出结果:

msg: false

msg: false


结论:

不符合


第二次


指令


public static void main(String[] args) {
    boolean a = matchTopic("$SYS/brokers/+/clients/#""$SYS/brokers/emqx@172.51.0.6/clients/mqttx_b2136a2c/connected");
    System.out.println("msg: " + a); // 应该输出 true
    boolean b = matchTopic("DEVICE/+/msg""DEVICE/0000000091238112/msg");
    System.out.println("msg: " + b); // 应该输出 true
}

  public static boolean matchTopic(String subscribedTopic, String publishedTopic) {  
        // 将加号(`+`)替换为正则表达式中的任意字符(`.`)  
        String regexTopic = subscribedTopic.replace("+"".");  
        // 处理井号(`#`):如果订阅的主题以`#`结尾,则替换为任意数量的任意字符(`.*`)  
        // 注意:这里我们假设`#`只出现在字符串的末尾,且前面没有其他通配符  
        if (regexTopic.endsWith("#")) {  
            regexTopic = regexTopic.substring(0, regexTopic.length() - 1) + ".*";  
        }  
        // 编译正则表达式  
        Pattern pattern = Pattern.compile("^" + regexTopic + "$");  
        // 匹配发布的主题  
        Matcher matcher = pattern.matcher(publishedTopic);  
        return matcher.matches();  
    } 
实质输出结果:
msgfalse
msgfalse

AI输出(只粘贴代码部分)


您提供的代码中,matchTopic方法用于将MQTT主题过滤器subscribedTopic转换为正则表达式,并检查发布的主题publishedTopic是否与该正则表达式匹配。但是,这里有几个需要注意的点:

正则表达式边界:

在 MQTT 主题匹配中,通常期望整个主题字符串与过滤器完全匹配(或至少从开头开始匹配,直到过滤器的末尾)。然而,find()方法在Matcher类中用于查找与正则表达式匹配的任何子序列,而不是整个字符串。因此,如果publishedTopic包含比subscribedTopic更长的前缀,find()仍然会返回true,即使后续部分不匹配。 完整的字符串匹配:

为了确保整个publishedTopic字符串与subscribedTopic匹配(或匹配到subscribedTopic指定的模式),您应该在正则表达式的前后添加^$锚点。 处理$前缀:

在MQTT中,$SYS是一个保留前缀,用于系统主题。在正则表达式中,$是一个特殊字符,表示字符串的末尾。但是,由于MQTT主题中的$仅仅是文本的一部分,您不需要在正则表达式中对它进行特殊处理(除非您打算在正则表达式中直接使用$的特殊含义)。

下面是修改后的matchTopic方法,它使用matches(),并确保整个字符串匹配:


import java.util.regex.Matcher;  
import java.util.regex.Pattern;  

public static boolean matchTopic(String subscribedTopic, String publishedTopic) {  
    // 将 + 替换为 [^/]+,将 # 替换为 .*,并在字符串前后添加 ^ 和 $ 以确保整个字符串匹配  
    String regexTopic = "^" + subscribedTopic.replace("+""[^/]+").replace("#"".*") + "$";  
    Pattern pattern = Pattern.compile(regexTopic);  
    Matcher matcher = pattern.matcher(publishedTopic);  
    return matcher.matches(); // 使用 matches() 来确保整个字符串匹配  
}   

   public static void main(String[] args) {
    boolean a = matchTopic("$SYS/brokers/+/clients/#""$SYS/brokers/emqx@172.51.0.6/clients/mqttx_b2136a2c/connected");
    System.out.println("msg: " + a); // 应该输出 true
    boolean b = matchTopic("DEVICE/+/msg""DEVICE/0000000091238112/msg");
    System.out.println("msg: " + b); // 应该输出 true
}

验证


实质输出结果:

msg: false msg: true


结论:

不符合


第三次


指令


结果还是msg: false


AI输出(只粘贴代码部分)


在从你提供的代码来看,问题可能在于正则表达式的构建方式。+#通配符需要正确地转换为正则表达式来匹配MQTT主题。

+代表单个层级中的任意非斜杠字符。

#代表从层级的某一点开始到主题结尾的所有层级。

你的代码中已经正确地处理了+#,但可能存在一些细微的问题导致输出结果为false

让我们稍微调整一下你的代码,以确保它能够正确地处理MQTT主题的匹配:


import java.util.regex.Matcher;  
import java.util.regex.Pattern;  

public static boolean matchTopic(String subscribedTopic, String publishedTopic) {
    // 将 MQTT 通配符转换为正则表达式
    String regexTopic = "^" + subscribedTopic.replace("+""[^/]+").replace("#""([^/]+)/.*") + "$";
    // 编译正则表达式
    Pattern pattern = Pattern.compile(regexTopic);
    // 创建匹配器并检查是否匹配
    Matcher matcher = pattern.matcher(publishedTopic);
    return matcher.matches(); // 使用 matches() 来确保整个字符串匹配
}  

   public static void main(String[] args) {
    boolean a = matchTopic("$SYS/brokers/+/clients/#""$SYS/brokers/emqx@172.51.0.6/clients/mqttx_b2136a2c/connected");
    System.out.println("msg: " + a); // 应该输出 true
    boolean b = matchTopic("DEVICE/+/msg""DEVICE/0000000091238112/msg");
    System.out.println("msg: " + b); // 应该输出 true
}

在上述代码中,我将#的替换部分稍作修改。原来的".*"可能会匹配任何字符(包括斜杠),这可能会导致意外匹配。通过使用"([^/]+)/.*",我们确保了 # 之前的部分必须是一个不包含斜杠的字符串,并且之后可以跟任何东西(包括零个或多个层级)。

让我们尝试运行这段修改后的代码。如果你仍然遇到问题,请告诉我,我们可以进一步调试。


验证


实质输出结果:

msg: false msg: true


结论:

不符合


第四次


指令


运行结果还是不对,$SYS/brokers/emqx@172.51.0.6/clients/mqttx_b2136a2c/connected,输出结果还是msg: false


AI输出(只粘贴代码部分)


在既然正则表达式看起来是正确的,但仍然没有匹配成功,我们需要进一步检查正则表达式的实现细节。问题可能在于正则表达式如何处理#之后的内容。 在MQTT中,#代表从层级的某一点开始到主题结尾的所有层级。这意味着#之前的部分必须是一个完整的层级,而#之后的部分可以是零个或多个层级。 让我们再次修改正则表达式以确保这一点得到正确的处理:


import java.util.regex.Matcher;  
import java.util.regex.Pattern;  

public static boolean matchTopic(String subscribedTopic, String publishedTopic) {
    // 将 MQTT 通配符转换为正则表达式
    String regexTopic = "^" + subscribedTopic
            .replace("+""[^/]+")
            .replace("#""([^/]+)(/.*)?")
            + "$";
    System.out.println("Regex topic: " + regexTopic); // 添加这一行以查看正则表达式
    // 编译正则表达式
    Pattern pattern = Pattern.compile(regexTopic);
    // 创建匹配器并检查是否匹配
    Matcher matcher = pattern.matcher(publishedTopic);
    return matcher.matches(); // 使用 matches() 来确保整个字符串匹配
}

   public static void main(String[] args) {
    boolean a = matchTopic("$SYS/brokers/+/clients/#""$SYS/brokers/emqx@172.51.0.6/clients/mqttx_b2136a2c/connected");
    System.out.println("msg: " + a); // 应该输出 true
    boolean b = matchTopic("DEVICE/+/msg""DEVICE/0000000091238112/msg");
    System.out.println("msg: " + b); // 应该输出 true
}

这里的关键变化是在#的替换部分:

"([^/]+)(/.*)?":这部分正则表达式意味着#前面的部分必须是一个不包含斜杠的字符串,而#后面的部分可以是零个或多个层级。"(.*)" / "(/.*)" 都用来匹配剩余的路径,但(/.*)?表示这个部分是可选的,即#后面可以没有更多的层级。

现在,让我们再次运行这段代码。你应该能看到输出的正则表达式,以及最终的匹配结果。如果还是有问题,请提供输出结果以便进一步分析。


验证


实质输出结果:

msg: false msg: true


结论:

不符合


第五次


指令


运行结果还是不对,$SYS/brokers/emqx@172.51.0.6/clients/mqttx_b2136a2c/connected,怀疑$SYS影响了正则匹配,输出结果还是msg: false


AI输出(只粘贴代码部分)


你提到$SYS可能影响了正则表达式的匹配。确实,在正则表达式中,某些特殊字符会被解释为具有特殊的含义,而非直接的文本匹配。在这种情况下,$是一个特殊字符,在正则表达式中通常用于表示字符串的结尾。因此,我们需要对$SYS进行转义,以确保它被视为普通文本而不是特殊符号。

让我们修改代码以转义$SYS字符串中的$,确保它被视为普通的字符。


import java.util.regex.Matcher;  
import java.util.regex.Pattern;  

public static boolean matchTopic(String subscribedTopic, String publishedTopic) {
    // 将 MQTT 通配符转换为正则表达式
    String regexTopic = "^" + subscribedTopic
            .replace("+""[^/]+")
            .replace("#""([^/]+)/.*")
            .replace("$""\$"// 转义 $ 字符
            + "$";
    // 编译正则表达式
    Pattern pattern = Pattern.compile(regexTopic);
    // 创建匹配器并检查是否匹配
    Matcher matcher = pattern.matcher(publishedTopic);
    return matcher.matches(); // 使用 matches() 来确保整个字符串匹配
}

   public static void main(String[] args) {
    boolean a = matchTopic("$SYS/brokers/+/clients/#""$SYS/brokers/emqx@172.51.0.6/clients/mqttx_b2136a2c/connected");
    System.out.println("msg: " + a); // 应该输出 true
    boolean b = matchTopic("DEVICE/+/msg""DEVICE/0000000091238112/msg");
    System.out.println("msg: " + b); // 应该输出 true
}

在这个版本中,我们添加了一个.replace("$", "\$")来转义$SYS中的$字符。这将确保$SYS在正则表达式中被视为普通文本。

现在,让我们再次运行这段代码。你应该能看到输出的正则表达式,以及最终的匹配结果。如果还是有问题,请提供输出结果以便进一步分析。


验证


实质输出结果:

msg: true msg: true


结论:

符合


代码最终结果:


对代码今天细微调整,运营到生产环境代码。


private  boolean matchTopic(String subscribedTopic, String publishedTopic) {
        String regexTopic = "^" + subscribedTopic.replace("+""[^/]+").replace("#""([^/]+)/.*").replace("$""\$") + "$";
        // 编译正则表达式
        Pattern pattern = Pattern.compile(regexTopic);
        // 创建匹配器并检查是否匹配
        Matcher matcher = pattern.matcher(publishedTopic);
        return matcher.matches(); // 使用 matches() 来确保整个字符串匹配
    }

总结


在使用AI工具进行代码生成时,‌用户可以通过简单的自然语言描述或问题,‌AI便能快速理解并生成相应的代码片段。‌这种交互方式非常直观,‌用户只需提供关键信息和问题,‌AI便能迅速响应并生成匹配的代码。‌ AI写代码的体验还体现在其高效性和便捷性上。‌通过AI的帮助,‌开发者可以更加专注于项目的核心逻辑和功能实现,‌而无需在编写基础代码上花费过多时间。‌这不仅能够提高开发效率,‌还能在一定程度上减轻开发者的负担,‌特别是在面对复杂或重复性的编程任务时,‌AI工具能够显著提升工作效率。‌ 尽管AI工具在代码生成方面展现出了强大的能力,‌但开发者在使用时仍需保持警惕,‌确保生成的代码符合项目的实际需求和标准。‌此外,‌对于特定领域的复杂应用或特定需求的实现,‌人类开发者的专业知识和经验仍然是不可或缺的。‌因此,‌AI工具与人类开发者的结合将是未来软件开发的一个重要趋势,‌共同推动软件开发的进步和创新。




作者:后端马农
来源:juejin.cn/post/7397668641645396022
收起阅读 »

Llama + Dify,在你的电脑搭建一套AI工作流

点赞 + 关注 + 收藏 = 学会了 本文简介 最近字节在推Coze,你可以在这个平台制作知识库、制作工作流,生成一个具有特定领域知识的智能体。 那么,有没有可能在本地也部署一套这个东西呢?这样敏感数据就不会泄露了,断网的时候也能使用AI。 刚好最近 Lla...
继续阅读 »

点赞 + 关注 + 收藏 = 学会了


本文简介


最近字节在推Coze,你可以在这个平台制作知识库、制作工作流,生成一个具有特定领域知识的智能体。


01.png


那么,有没有可能在本地也部署一套这个东西呢?这样敏感数据就不会泄露了,断网的时候也能使用AI。


刚好最近 Llama 3.1 发布了,本文就以 Llama 3.1 作为基础模型,配合 Dify 在本地搭建一套“Coze”。


跟着本文一步步操作,保证能行!


Dify是什么?


Dify 官网(difyai.com/) 的自我介绍:Dify 是开源的 LLM 应用开发平台。提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力,轻松构建和运营生成式 AI 原生应用。比 LangChain 更易用。


02.png


动手搭建


在本地搭建这个平台很简单,其实 Dify文档(docs.dify.ai/v/zh-hans) 里都写得明明白白了,而且还有中文文档。


具体来说需要做以下几步:



  1. 安装 Ollama

  2. 下载大模型

  3. 安装 Docker

  4. 克隆 Dify 源代码至本地

  5. 启动 Dify

  6. 配置模型


接下来一步步操作。


安装 Ollama


简单来说 Ollama 是运行大语言模型的环境,这是 Ollama 的官网地址 (ollama.com/ ),打开它,点击 Download 按钮下载 Ollama 客户端,然后傻瓜式安装即可(一直点“下一步”)。


03.png


安装完成后就能看到一个羊驼的图标,点击运行它即可。


04.png


下载大模型


安装完 Ollama 后,我们到 Ollama 官网的模型页面(ollama.com/library)挑选一下模型。


05.png


这里面有很多开源模型,比如阿里的千问2,搜索 qwen2 就能找到它。


本文使用 Llama 3.1 ,这是前两天才发布的模型,纸面参数贼强。


打开 Llama 3.1 模型的地址(ollama.com/library/lla…),根据你需求选择合适的版本,我选的是 8b 版。


06.png


选好版本后,复制上图右侧红框的命令,到你电脑的终端中运行。


如果你还没下载过这个模型它就会自动下载,如果已经下载过它就会运行这个模型。


运行后,你就可以在终端和大模型对话了。


07.png


当然,我们不会这么原始的在终端和大模型对话,我们可是要搞工作流的!


安装 Docker


前面的基础步骤都搞掂了,接下来就要开始为运行 Dify 做准备了。


先安装一下 Docker ,打开 Docker 官网(http://www.docker.com/),根据你系统下载对应的安装包,然后还是傻瓜式安装即可。


08.png


克隆 Dify 源代码至本地


要使用 Dify ,首先要将它拉到你电脑里。


git clone https://github.com/langgenius/dify.git

在你电脑里找个位置(目录),用 gitDify 克隆下来,用上面这条命令克隆就可以了。


启动 Dify


进入 Dify 源代码的 docker 目录,执行一键启动命令:


cd dify/docker
cp .env.example .env
docker compose up -d

启动完成后,你的 docker 里就会看到这个


09.png


此时你在浏览器输入 http://localhost 就能看到这个界面。


10.png


首次打开 Dify 需要你设置一下管理员的账号。


然后用管理员账号登录,可以看到下面这个页面。


11.png


点击“创建空白应用”就可以创建聊天助手、文本生成应用、Agent、工作流。


12.png


我们点击"工作流"就能看到类似Coze的工作流编辑界面了。


13.png


配置模型


在配置工作流之前,我们需要给 Dify 配置大语言模型。


点击页面右上角的管理员头像,然后选择“设置”。


14.png


选择“模型供应商”,然后点击“Ollama”的卡片添加模型。


15.png


在添加 Ollama 模型时,弹窗的左下角有一个“如何继承 Ollama”的按钮,点击它会跳转到 Dify 官方文档教你怎么配置,但这里可能会有个小坑。


16.png


前面我们已经使用 OllamaLlama 3.1 运行起来了,在浏览器打开 `http://localhost:11434 看到这个界面证明模型运行成功。


17.png


此时在“添加 Ollama”将资料填写好,“基础 URL”里输入 http://localhost:11434 即可。


18.png


如果你是 Mac 电脑,填入以上资料有可能会报这个错:


19.png


An error occurred during credentials validation: HTTPConnectionPool(host='localhost', port=11434): Max retries exceeded with url: /api/chat (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0xffff5e310af0>: Failed to establish a new connection: [Errno 111] Connection refused'))

此时你需要在“基础 URL”里填入 http://host.docker.internal:11434


遇到问题可以看 Dify 官方文档的 FAQ。


20.png


添加完成后你就可以在模型列表里看到它了。


21.png


除了接入 Ollama 外,Dify 还支持接入 OpenAI 等闭源模型,但需要你去 OpenAI 那边买个服务。




以上就是本文的全部内容啦,如果本文对你有帮助的话也请你分享给你的朋友~


IMG_2355.GIF


点赞 + 关注 + 收藏 = 学会了


作者:德育处主任
来源:juejin.cn/post/7395902224091971594
收起阅读 »

为什么都放弃了LangChain?

或许从诞生那天起,LangChain 就注定是一个口碑两极分化的产品。 看好 LangChain 的人欣赏它丰富的工具和组建和易于集成等特点,不看好 LangChain 的人,认为它注定失败 —— 在这个技术变化如此之快的年代,用 LangChain 来构建一...
继续阅读 »

或许从诞生那天起,LangChain 就注定是一个口碑两极分化的产品。


看好 LangChain 的人欣赏它丰富的工具和组建和易于集成等特点,不看好 LangChain 的人,认为它注定失败 —— 在这个技术变化如此之快的年代,用 LangChain 来构建一切根本行不通。


夸张点的还有:


「在我的咨询工作中,我花了 70% 的精力来说服人们不要使用 langchain 或 llamaindex。这解决了他们 90% 的问题。」


最近,一篇 LangChain 吐槽文再次成为热议焦点:


图片


作者 Fabian Both 是 AI 测试工具 Octomind 的深度学习工程师。Octomind 团队会使用具有多个 LLM 的 AI Agent 来自动创建和修复 Playwright 中的端到端测试。


图片


这是一个持续一年多的故事,从选择 LangChain 开始,随后进入到了与 LangChain 顽强斗争的阶段。在 2024 年,他们终于决定告别 LangChain。


让我们看看他们经历了什么:


「LangChain 曾是最佳选择」


我们在生产中使用 LangChain 超过 12 个月,从 2023 年初开始使用,然后在 2024 年将其移除。


在 2023 年,LangChain 似乎是我们的最佳选择。它拥有一系列令人印象深刻的组件和工具,而且人气飙升。LangChain 承诺「让开发人员一个下午就能从一个想法变成可运行的代码」,但随着我们的需求变得越来越复杂,问题也开始浮出水面。


LangChain 变成了阻力的根源,而不是生产力的根源。


随着 LangChain 的不灵活性开始显现,我们开始深入研究 LangChain 的内部结构,以改进系统的底层行为。但是,由于 LangChain 故意将许多细节做得很抽象,我们无法轻松编写所需的底层代码。


众所周知,人工智能和 LLM 是瞬息万变的领域,每周都会有新的概念和想法出现。而 LangChain 这样围绕多种新兴技术创建的抽象概念,其框架设计很难经得起时间考验。


LangChain 为什么如此抽象


起初,当我们的简单需求与 LangChain 的使用假设相吻合时,LangChain 还能帮上忙。但它的高级抽象很快就让我们的代码变得更加难以理解,维护过程也令人沮丧。当团队用在理解和调试 LangChain 的时间和用在构建功能上的时间一样时,这可不是一个好兆头。


LangChain 的抽象方法所存在的问题,可以通过「将一个英语单词翻译成意大利语」这一微不足道的示例来说明。


下面是一个仅使用 OpenAI 软件包的 Python 示例:


图片


这是一段简单易懂的代码,只包含一个类和一个函数调用。其余部分都是标准的 Python 代码。


将其与 LangChain 的版本进行对比:


图片


代码大致相同,但相似之处仅此而已。


我们现在有三个类和四个函数调用。但令人担忧的是,LangChain 引入了三个新的抽象概念:



  • Prompt 模板: 为 LLM 提供 Prompt;

  • 输出解析器: 处理来自 LLM 的输出;

  • 链: LangChain 的「LCEL 语法」覆盖 Python 的 | 操作符。


LangChain 所做的只是增加了代码的复杂性,却没有带来任何明显的好处。


这种代码对于早期原型来说可能没什么问题。但对于生产使用,每个组件都必须得到合理的理解,这样在实际使用条件下才不至于意外崩溃。你必须遵守给定的数据结构,并围绕这些抽象设计应用程序。


让我们看看 Python 中的另一个抽象比较,这次是从 API 中获取 JSON。


使用内置的 http 包:


图片


使用 requests 包:


图片


高下显而易见。这就是好的抽象的感觉。


当然,这些都是微不足道的例子。但我想说的是,好的抽象可以简化代码,减少理解代码所需的认知负荷。


LangChain 试图通过隐藏细节,用更少的代码完成更多的工作,让你的生活变得更轻松。但是,如果这是以牺牲简单性和灵活性为代价的,那么抽象就失去了价值。


LangChain 还习惯于在其他抽象之上使用抽象,因此你往往不得不从嵌套抽象的角度来思考如何正确使用 API。这不可避免地会导致理解庞大的堆栈跟踪和调试你没有编写的内部框架代码,而不是实现新功能。


LangChain 对开发团队的影响


一般来说,应用程序大量使用 AI Agent 来执行不同类型的任务,如发现测试用例、生成 Playwright 测试和自动修复。


当我们想从单一 Sequential Agent 的架构转向更复杂的架构时,LangChain 成为了限制因素。例如,生成 Sub-Agent 并让它们与原始 Agent 互动。或者多个专业 Agent 相互交互。


在另一个例子中,我们需要根据业务逻辑和 LLM 的输出,动态改变 Agent 可以访问的工具的可用性。但是 LangChain 并没有提供从外部观察 Agent 状态的方法,这导致我们不得不缩小实现范围,以适应 LangChain Agent 的有限功能。



一旦我们删除了它,我们就不再需要将我们的需求转化为适合 LangChain 的解决方案。我们只需编写代码即可。



那么,如果不使用 LangChain,你应该使用什么框架呢?也许你根本不需要框架。


**我们真的需要构建人工智能应用程序的框架吗?

**


LangChain 在早期为我们提供了 LLM 功能,让我们可以专注于构建应用程序。但事后看来,如果没有框架,我们的长期发展会更好。


LangChain 一长串的组件给人的印象是,构建一个由 LLM 驱动的应用程序非常复杂。但大多数应用程序所需的核心组件通常如下:



  • 用于 LLM 通信的客户端

  • 用于函数调用的函数 / 工具 

  • 用于 RAG 的向量数据库

  • 用于跟踪、评估等的可观察性平台。


Agent 领域正在快速发展,带来了令人兴奋的可能性和有趣的用例,但我们建议 —— 在 Agent 的使用模式得到巩固之前,暂时保持简单。人工智能领域的许多开发工作都是由实验和原型设计驱动的。


以上是 Fabian Both 一年多来的切身体会,但 LangChain 并非全然没有可取之处。


另一位开发者 Tim Valishev 表示,他会再坚持使用 LangChain 一段时间:



我真的很喜欢 Langsmith:



  • 开箱即用的可视化日志 

  • Prompt playground,可以立即从日志中修复 Prompt,并查看它在相同输入下的表现 

  • 可直接从日志轻松构建测试数据集,并可选择一键运行 Prompt 中的简单测试集(或在代码中进行端到端测试) 

  • 测试分数历史 

  • Prompt 版本控制 



而且它对整个链的流式传输提供了很好的支持,手动实现这一点需要一些时间。


何况,只依靠 API 也是不行的,每家大模型厂商的 API 都不同,并不能「无缝切换」。


图片


图片


图片


你怎么看?


原文链接:http://www.octomind.dev/blog/why-we…


作者:机器之心
来源:juejin.cn/post/7383894854152437811
收起阅读 »

语言≠思维,大模型学不了推理:一篇Nature让AI社区炸锅了

方向完全搞错了? 大语言模型(LLM)为什么空间智能不足,GPT-4 为什么用语言以外的数据训练,就能变得更聪明?现在这些问题有 「标准答案」了。 近日,一篇麻省理工学院(MIT)等机构发表在顶级学术期刊《自然》杂志的文章观察到,人类大脑生成和解析语言的神经...
继续阅读 »

方向完全搞错了?



大语言模型(LLM)为什么空间智能不足,GPT-4 为什么用语言以外的数据训练,就能变得更聪明?现在这些问题有 「标准答案」了。


近日,一篇麻省理工学院(MIT)等机构发表在顶级学术期刊《自然》杂志的文章观察到,人类大脑生成和解析语言的神经网络并不负责形式化推理,而且提出推理并不需要语言作为媒介。


这篇论文声称「语言主要是用于交流的工具,而不是思考的工具,对于任何经过测试的思维形式都不是必需的」,引发了科技领域社区的大讨论。


图片


难道真的如语言学家乔姆斯基所言,追捧 ChatGPT 是浪费资源,大语言模型通向通用人工智能(AGI)的路线完全错了?


让我们看看这篇论文《Language is primarily a tool for communication rather than thought》是怎么说的。


图片


论文链接:http://www.nature.com/articles/s4…


语言是人类智能的一个决定性特征,但它所起的作用或多或少一直存在争议。该研究提供了神经科学等相关学科角度的最新证据,以论证现代人类的语言是一种交流工具,这与我们使用语言进行思考的流行观点相反。


作者首先介绍了支持人类语言能力的大脑网络。随后回顾语言和思维双重分离的证据,并讨论语言的几种特性,这些特性表明语言是为交流而优化的。该研究得出结论认为,尽管语言的出现无疑改变了人类文化,但语言似乎并不是复杂思维(包括符号思维)的先决条件。相反,语言是传播文化知识的有力工具,它可能与我们的思维和推理能力共同进化,并且只反映了人类认知的标志性复杂性,而不是产生这种复杂性。


图片


图 1


研究证据挑战了语言对于思维的重要性。如图 1 所示,使用 fMRI 等成像工具,我们可以识别完整、健康的大脑中的语言区域,然后检查在完成需要不同思维形式的任务时,语言区域的相关响应。


 人类大脑中的语言网络


从人脑的生物学结构来看,语言生成和语言理解由左半球一组相互连接的大脑区域支持,通常称为语言网络(图 1a;Box 2 描述了它与语言神经生物学经典模型的关系)。


图片


Box 2。许多教科书仍然使用 Wernicke 提出的语言神经基础模型,并由 Lichteim 和 Geschwind 进行了阐述和修订。该模型包括两个皮层区域:Broca 区位于下额叶皮层,Wernicke 区位于后上颞叶皮层。这两个区域分别支持语言产生和理解,并通过一条背侧纤维束(弓状束)连接。


语言网络有两个非常重要的特性:


首先,语言区域表现出输入和输出模态的独立性,这是表征抽象性的关键特征。主要表现为在理解过程中,这些大脑区域对跨模态(口头、书面或手语)的语言输入做出反应。同样,在语言生成过程中,无论我们是通过口语还是书面语来产生信息,这些区域都是活跃的。这些区域支持语言理解和生成(图 1a)这一事实表明,它们很可能存储了我们的语言知识,这对于编码和解码语言信息都是必需的。


其次,语言区还能对词义和句法结构进行表征和处理。特别是,关于脑磁图和颅内记录研究的证据表明,语言网络的所有区域都对词义以及词间句法和语义依赖性敏感(图 1a)。总之,语言网络中语言表征的抽象性以及网络对语言意义和结构的敏感性使其成为评估语言在思维和认知中的作用假设的明确目标((Box 3)。


我们对人类语言和认知能力,以及它们之间关系的理解仍然不完整,还有一些悬而未决的问题:



  • 语言表征的本质是什么?

  • 思维是否依赖于符号表征?

  • 儿童学习语言时,语言网络是如何成长的?


语言对于任何经过检验的思维形式都不是必需的


经典的方法是通过研究大脑损伤或疾病的个体来推断大脑与行为之间的关联和分离。这种方法依赖于观察大脑某部分受损时个体行为的变化,从而推测不同大脑区域的功能和行为之间的联系。


有证据表明 —— 有许多个体在语言能力上有严重的障碍,影响到词汇和句法能力,但他们仍然表现出在许多思考形式上的完整能力:他们可以解决数学问题,进行执行规划和遵循非言语指令,参与多种形式的推理,包括形式逻辑推理、关于世界的因果推理和科学推理(见图 1b)。  


研究表明,尽管失去了语言能力,一些患有严重失语症的人仍然能够进行所有测试形式的思考和推理,他们在各种认知任务中的完整表现就是明证。他们根本无法将这些想法映射到语言表达上,无论是在语言生成中(他们无法通过语言向他人传达自己的想法),还是在理解中(他们无法从他人的单词和句子中提取意义)(图 1b)。当然,在某些脑损伤病例中,语言能力和(某些)思维能力都可能受到影响,但考虑到语言系统与其他高级认知系统的接近性,这是可以预料的。


尤其是一些聋哑儿童,他们长大后很少或根本没有接触过语言,因为他们听不见说话,而他们的父母或看护人不懂手语。缺乏语言接触会对认知的许多方面产生有害影响,这是可以预料的,因为语言是了解世界的重要信息来源。尽管如此,语言剥夺的个体无疑表现出复杂的认知功能能力:他们仍然可以学习数学、进行关系推理、建立因果链,并获得丰富而复杂的世界知识。换句话说,缺乏语言表征并不会使人从根本上无法进行复杂的(包括符号的)思考,尽管推理的某些方面确实表现出延迟。因此,在典型的发展中,语言和推理是平行发展的。


完整的语言并不意味着完整的思维


以上证据表明,迄今为止测试的所有类型的思维都可以在没有语言的情况下实现。


接下来,论文讨论了语言和思维双重分离的另一面:与语言介导思维的观点相反,完整的语言系统似乎并不意味着完整的推理能力。


图片


图片


人类语言是由交流压力塑造的。


来自发育性和后天性脑部疾病的证据表明,即使语言能力基本完好,也可能存在智力障碍。


例如,有些遗传疾病导致智力受损程度不同,但患有这些疾病的人的语言能力似乎接近正常水平;还有一些精神层面有缺陷的人,会影响思考和推理能力,但同样不会影响语言。最后,许多获得性脑损伤的个体在推理和解决问题方面表现出困难,但他们的语言能力似乎完好无损。换句话说,拥有完整的语言系统并不意味着自动具备思考能力:即使语言能力完好无损,思考能力也可能受损。


总的来说,这篇论文回顾了过去二十年的相关工作。失语症研究的证据表明:所有经过检验的思维形式在没有语言的情况下都是可能的。fMRI 成像证据表明:参与多种形式的思考和推理并不需要语言网络。因此,语言不太可能成为任何形式思维的关键基础。


MIT 研究得出结论的同时,顶尖 AI 领域学者最近也发表了对大模型发展的担忧。上个星期四 Claude 3.5 的发布号称拥有研究生水平的推理能力,提升了行业的标准。不过也有人表示经过实测可见,它仍然具有 Transformer 架构的局限性。


对此,图灵奖获得者 Yann LeCun 表示,问题不在于 Transformer,而是因为 Claude 3.5 仍然是一个自回归大模型。无论架构细节如何,使用固定数量的计算步骤来计算每个 token 的自回归 LLM 都无法进行推理。


图片


LeCun 也评论了这篇 Nature 论文,对思维不等于语言表示赞同。


图片


对此,你怎么看?


参考内容:


news.ycombinator.com/item?id=407…


x.com/ylecun/stat…


作者:机器之心
来源:juejin.cn/post/7383934765370425353
收起阅读 »

跟骑手学习送外卖,这家具身智能公司的机器人已经上岗挣钱了

你点过无人机送的外卖吗? 在深圳、上海等一线城市,让无人机给自己送个外卖已经不是什么新鲜事。但它送的方式可能和你想的不太一样。 想象中的无人机送外卖 be like: 而现实中的无人机送外卖 be like: 也就是说,它不会把外卖直接送到你家阳台,而是和...
继续阅读 »

你点过无人机送的外卖吗?


在深圳、上海等一线城市,让无人机给自己送个外卖已经不是什么新鲜事。但它送的方式可能和你想的不太一样。


想象中的无人机送外卖 be like:


图片


而现实中的无人机送外卖 be like:


图片


也就是说,它不会把外卖直接送到你家阳台,而是和你家有一段距离的外卖柜。你需要下楼走一段距离才能拿到。于是,有些网友发出灵魂追问:「你猜我为什么点外卖?」


所以,现在问题就变成了:从家到外卖柜这段距离怎么办?解决思路也很简单:让一个送货机器人帮你送完这段路。


这是具身智能机器人公司推行科技(Infermove)最近放出来的一段视频。从中可以看出,在无人机到达指定地点后,送货机器人可以把货「拿」过来,放到自己的「肚子」里,然后再送到指定小区、写字楼的指定楼层,实现无缝接驳。


其实,除了帮无人机送剩下的路程,它还能自己 cover 全程。在过去的 18 个月里,推行科技的机器人已经帮山姆会员店等商家送了几万单货。要知道,这些店铺和目的地之间往往隔了几条街,因此机器人需要在非机动车道上和人、自行车、电动车一起穿行、过马路,还要自己进小区、坐电梯,把外卖、商品送到用户手里。为了适应接驳无人机等更复杂的工作,推行科技给这些机器人安上了手臂,这样它们就能完成拿取包装袋、按电梯、推拉门等需要上肢才能完成的任务。


难得的是,在和人类骑手一致的考核制度下,这些机器人的履约率(按时送达的百分比)已达 98.5%,因此拿到的报酬已经可以覆盖自身的成本,做到了单个机器人盈亏平衡。这在还没进入大规模落地阶段的具身智能领域是非常稀有的。


为了了解这个机器人背后的技术和创业思路,机器之心和推行科技创始人卢鹰翔、龙禹含展开了深入对谈。他们指出,让机器人在充满变数的开放物理世界中穿行并不是一件简单的事。为了克服其中的困难,他们走了一条类似于特斯拉的数据驱动路线,利用自研的「骑手影子系统」在短时间内获取了大量高质量数据,因此机器人的表现才能如此出色。未来,他们还将在自然语言、多模态等方向持续迭代,让这个机器人更加实用。


走进开放物理世界,机器人如何工作?  


机器之心:能否简单介绍一下,公司现在在做一件什么事,长期愿景是什么?


卢鹰翔我们希望以数据驱动的方式,打造出可以在开放物理世界中自主移动的机器人。具体而言,我们是通过利用人类驾驶的两轮电瓶车、电动轮椅等产生的驾驶数据,用模仿学习和强化学习的方法,来逐步实现一款能够应对开放物理世界的硬件无关(hardware-agnostic)的具身智能产品。


我们开始行动的第一步就是解决「数据从哪来」的问题。21 年创业之初我们先是搭建了一套基于轮椅平台的「端到端」算法架构,利用轮椅驾驶数据训练末端移动机器人,并在硅谷进行了 8 公里的路测。后来我们意识到末端物流场景是更高效的数据来源,于是开始打造「骑手影子系统」,利用末端物流场景下的骑手骑行数据和机器人产品落地数据构建双数据闭环


目前我们在末端物流场景已经落地了 18 个月,比如给苏州、深圳的山姆会员店等前置仓做物流配送。我们的机器人和公路无人配送车有一个很显著的区别。无人配送车只完成运输任务的中间一段,不会进入小区、商场、写字楼等场所,如果用来进行外卖、商超等本地生活类配送,两端都需要有人参与。相比之下,我们的物流机器人以做到「门到门」的配送为设计目标。比如对于我们合作的奶茶门店,我们的机器人会开进商场,停在柜台前等待装单,装单之后离开商场,跨过两条街,驶入写字楼或小区,然后自己找到电梯、坐电梯上到具体的楼层,把货物送达指定地点。这在许多场景下已经非常贴近骑手的服务能力。所以我们做的事情更多的是属于具身智能这个范畴。


到了去年底、今年初这个时间,我们发现落地环境给我们提出了一些更高的要求。一是特定场所进一步的通达,像操作按钮或开关、按电梯。二是外卖等常见商品的抓取、捡拾。三是打开有把手的推拉门等交互场景。


在这些需求的驱动下,我们开始有针对性地研发上肢能力。这和其他具身智能领域的公司可能有所不同,他们有些会去优化做菜、叠衣服等上肢能力,而我们是根据常见的客户需求有针对性地去解决上述几个问题。


机器之心:利用您提到的上肢能力,你们研发了什么产品?


卢鹰翔:今年 618,我们落地了一款具备上肢操作能力的物流机器人。它的下半身是一个带有装载能力的移动机器人本体,上半身支持三维世界的单臂交互能力。


这个机器人首先用于支持无人机的外卖配送接驳。无人机的降落地点通常和顾客还有一段距离,这个机器人首先要能够把无人机卸下来的货物装进自己的货仓,然后至少要坐一次电梯。有些电梯可能没有梯控,需要手动按按钮。机器人的上肢就是在这些场景中发挥作用。


无人机接驳是个新场景,其实在目前已有的场景中,我们也可以利用这个上肢去干两件事情。一是我们会在它的上面整合一个 RFID(射频识别)芯片,让机器人自己刷卡进小区,而不是依赖保安手动操作。二是在取货人迟迟不来的情况下,让机器人主动把货物从「肚子」里拿出来,放到架子、门口等指定地点,就像骑手放外卖一样。这样可以省去大量的等待时间,提高配送效率。


机器之心:这个机器人可以上台阶吗?它是不是只能送一些设施比较好的小区?


卢鹰翔:这里面其实涉及到三个问题。


第一个问题:能不能上台阶?我们现在的这款物流机器人是不能上台阶的,因为它下面是四个轮子。这是从经济角度考虑做出的一个选择,因为四轮底盘目前是最成熟、最常见的。不过这个轮子经过了特殊设计,有一定的越障能力,能跨越 7 厘米以内的单级台阶或凹陷。


此外,我刚才提到一个概念,叫硬件无关(hardware-agnostic)。其实我们这个系统也成功适配过一些异形底盘,比如四足、双轮足,这些底盘是可以上楼梯的,但可能没有那么稳定。所以,要不要让机器人上台阶其实是取决于我们客户的需求,如果客户想用四条腿的机器狗送外卖或快递,而且愿意接受它的价格,那么我们在技术上是可以打磨的


第二个问题:我们的机器人可以到达什么样的环境?其实我们国家去年出台了一部《无障碍环境建设法》,它对于公共场所提出的要求是:两条腿能到的地方,轮椅都要能到。这部法律不仅要求所有增量的公共场所、建筑物都要满足无障碍要求,目前已有的存量场所也要逐渐完成合规改造。这对于我们来说是一个有利的环境,因为我们机器人的设计尺寸参照的是电动轮椅的国家标准,所以轮椅能到的地方,我们基本上都能到


第三个问题:到不了的地方怎么办?我们现在的应用场景本质上是人机混合,而不是有你无我的一种局面。就是说一个货仓会部署一部分机器人,一部分骑手,大家一起接单。系统在派单的时候会进行一些目的地的筛选。而且这个筛选系统本就存在,不需要额外的开发成本。


从自动驾驶到具身智能,挑战升维


机器之心:公司现在的人才配置是怎样的?这些人才搭建起了一个怎样的技术栈?


卢鹰翔:我们的团队其实是自动驾驶、机器人、机器学习、机械等各个专业背景的人组合起来的一个团队。创始团队成员之前都在硅谷做自动驾驶,就是 L4、Robotaxi 这些方向,之前我们负责研发的车型还拿到了加州政府发放的第二块可以无安全员上路的 Robotaxi 牌照,第一块发给了 Waymo。我们的思路是搭建一套数据驱动的技术栈,类似于美国的特斯拉和英国的 Wayve。受到他们的启发,我们研发了一套「骑手影子系统」,利用骑手驾驶的两轮电瓶车来获取用于算法迭代的训练数据,目的是实现机器人在开放物理世界而不只是公路上的自主移动能力。这种算法架构的好处是性能的天花板非常高,理论上可以无限拟人。


机器之心:公司很多人才都是自动驾驶出身的,这和其他很多具身智能公司的班底其实很相似。能否谈一下,从单纯做自动驾驶扩展到交互维度更高的具身智能,你们遇到了哪些新的挑战? 


卢鹰翔:第一个挑战是环境的不规律。与公路上的自动驾驶汽车相比,我们机器人面临的物理环境是非结构化的,规律性更差。我们知道,公路是按照严格的国家标准来修筑的,但当我们去解决一个开放物理世界中的自主移动问题的时候,这个有利的条件就不存在了。我们现在的落地环境主要是城市,尚有一些建筑规范。但我们落地的其他场景,比如农村,规律性要更差。未来,我们可能还要扩展到野外。


第二个挑战是规则的缺失。公路上有明确的交通规则,也有交警来维持秩序,这相当于人为地让大家的行为变得有规律。这对于机器人来说是非常有利的一个客观条件。但在具身智能所面对的开放物理世界,交通参与者变得更加复杂,包括骑各种车的人甚至宠物,他们的行为要更加随机。


第三个挑战是辅助工具的缺失。公路交通有成熟的生态,所以有一些辅助工具被开发出来,比如百度地图,它可以告诉你前方堵车或施工,请绕行。但开放的物理世界中就缺乏这样的工具。


要解决前两个问题,我们需要大量的训练数据。但是这类数据是非常稀缺的。我们知道,ChatGPT 利用的是人类过去几十年积攒下来的互联网数据。物理世界的数据可能在有了自动驾驶这样的行业之后才被系统地收集,这和互联网数据完全不在一个量级。而我们想要的开放物理世界的训练数据就更稀缺了。针对这个数据获取难题,我们最初的想法是利用人驾驶的电动轮椅来获取众包数据。在接触到末端物流场景和客户之后,我们逐渐迭代成现在这种利用骑手载具,也就是骑手驾驶的电瓶车来获取。


打破数据魔咒杀手锏 ——「量大管饱」的骑手影子系统


机器之心:能否详细介绍一下你们的数据获取思路?


卢鹰翔:在数据获取层面,市面上有几种不同的思路,多数情况下这些思路是并存的。各家公司可能会以不同的比例去选择一种组合方式。


首先说仿真数据。有一部分公司会比较认同仿真数据的价值,比如去年 Hint0n 以顾问身份加入的 Vayu Robotics 机器人公司。我们也用仿真数据,有自己的仿真模拟器。但相比之下,我们更看重真实数据,我们认为真实数据的价值是无可替代的。仿真数据对于我们来说主要是在真实数据的基础上降本增效。


真实数据的获取也分为两种,一种是 on policy 的,一种是 off policy 的。on policy 数据就是部署的机器人在每天使用过程中产生的数据。这种数据目前是非常稀缺且昂贵的,因为它要在机器人落地之后才会有,这就会变成一个「先有鸡还是先有蛋」的问题。所以我们就要突破这个技术瓶颈,实现对 off policy 的数据的利用能力。


简单来说就是,如果只是利用我们部署在山姆的一些机器人来获取数据,它的效率非常低,成本也很高。但是,如果能利用骑手驾驶电瓶车产生的数据,还有一些电动轮椅产生的数据,我们的系统就能够在短时间内获取大量数据,而且这些数据的营养也很丰富。


作为一家看重仿真数据的公司,Vayu Robotics 也是认同真实数据的价值的。他们会在硅谷雇佣一些骑手,产生一些真实世界的数据,然后在这个基础上利用仿真模拟器去训练。


但这方面我们存在一些国情优势。我国是一个非机动车大国,一方面,这意味着我们机器人的应用场景会比较大、比较丰富,覆盖各个城市的大街小巷。另一方面,这也意味着我们的骑手产生的数据是量大管饱的。相比之下,美国的一些公司就不太容易大量获取这类数据,需要请一些专业的人,以高昂的成本去采集。


机器之心:您说的「量大管饱」是怎样一个概念?


卢鹰翔:我这里有一些数据。中国骑手平均每人每天会跑 100 到 200 公里。我们在苏州一个普通超市落地的前置仓,一般配备 15 到 20 个骑手。这些骑手一个月产生的数据轻轻松松就会超过 10 万公里,一年肯定可以超过百万公里,通常可以接近 200 万公里。


作为对比,国内最头部的做 Robotaxi 的 L4 公司,自成立以来积累的数据基本上也只有几百万公里,像 Waymo 这样的全球头部公司也就两千万公里。当然,里程数是一个比较简单的维度。但在这个简单的维度上,我们利用骑手影子系统仅在单一前置仓落地不到两年所产生的数据量,就相当于一家国内头部自动驾驶公司自成立以来的路测积累总和


我们还有一个对比对象,就是特斯拉。他们在 2014 年就推出了第一款搭载 Autopilot 软硬件的车型,开始收集驾驶数据。截至今年初特斯拉推出V12.3,他们在过去十年间一共积累了将近20亿公里人类驾驶数据用于智能驾驶系统的训练,在全球范围内也称得上遥遥领先。而对于中国的600万活跃骑手群体而言,20亿公里只是他们一两天跑的量,我们叫「中国骑手一天,特斯拉汽车十年」。这就是所谓的量大管饱。可以说,骑手影子系统为我们迭代产品提供了非常可靠的数据保障。


但除了量大管饱,骑手影子系统产生的数据还有一些优势。第一是成本。我们是让骑手在送单的过程中积累数据,这对于他们来说没有边际成本,我们的成本也非常低。第二是数据的丰富度。骑手的数据是在真实的生产环境中产生的,而且越是经济发达、人口密集、接近城市中心的地方,它产生的数据就越多。这些数据包含一年四季、各种天气状况。它本身的复杂度、代表度都很好,避免了高度同质化的情况。


所以,无论是从数量、质量还是成本来说,这个系统产生的数据都符合「好数据」的标准。目前,我们已经开始和一些销售电动两轮车的主机厂合作,打算在印度部署这个系统,这也是一个量大管饱的环境。


机器之心:能否详细介绍一下「 骑手影子系统」的技术细节?


卢鹰翔:这个系统主要通过一套车载硬件采三种数据。一是环境数据,即通过摄像头采集路况、障碍物等视觉数据。二是定位数据,通过比较便宜的 RTK 来采集。三是操作数据,即骑手在某种特定情况下进行了什么样的操作,比如踩油门、刹车或者左拐右拐。在采到这些数据后,我们就通过模仿学习和强化学习的方式,让模型去学习人类的行为,逐渐向人类行为靠拢。


机器之心:这个系统能让机器人知道实时路况?


卢鹰翔:是的,因为末端道路的通行能力会非常频繁地发生变化,解决机器人末端移动不仅要解决 AI 问题,还要解决情报问题。就像老司机也需要百度地图来提示前方道路有堵车一样。比如说,在非机动车道上,我们经常会遇到两个拦路桩,它们将道路分成三条。通常中间的那条最好走。但如果临时出现一个商贩占据了中间这条路,开始在那里卖红薯,这条路就走不通了。这个时候,机器人需要提前知道怎么选择最佳路线。而经过这里的骑手自然会做出应变,比如他可能说「师傅能不能让一让」,如果商贩让开了,机器人就能知道这条路是可以通行的。如果不让,骑手就会选择一条次优路线,机器人也能知道。完成这些只需要骑手实时回传 RTK 定位数据。这和百度地图实时提醒前方堵车的原理是相似的。


不仅已落地,还能盈亏平衡


机器之心:刚才提到,去年,图灵奖得主 Hint0n 加入了一家名叫 Vayu Robotics 的机器人公司。在您看来,这家公司有哪些吸引 Hint0n 的特点?


卢鹰翔:当时 Hint0n 自己发了一个帖子来阐述他加入 Vayu 的原因,就是看中了末端物流这个场景的高安全性和可落地性。


我们知道,Hint0n 非常关注 AI 安全。他在帖子里提到,这个送货机器人的动能只有汽车的 1%。拿我们这个机器人来说,它的极限动能也就 500 焦耳,这相当于一个 70 公斤的人从一把椅子高的地方跌落产生的能量。所以如果这个机器人不小心撞到人,它至多把人撞疼,不会撞伤,容错率很高。


图片


图片


高安全性带来的是高可落地性。我们知道,像 Waymo 这样的公司在 Robotaxi 方面已经做得非常好了,平均五万公里左右才接管一次,但距离大规模落地似乎还是遥遥无期。其中一个很大的原因就是它的场景容错率太低了。而 Vayu 和我们选的都是一些高容错率的场景。除了末端物流,其实我们还落地了一些类似场景,比如帮机场驱鸟、帮鱼塘抛洒鱼料。从技术路线上来讲,大家都不约而同地看好这个路线。但相比之下,我们在数据上具备一定的国情优势。


机器之心:你们的机器人盈亏情况如何?  


卢鹰翔:我们可以达到单个机器人的盈亏平衡。


我们落地的末端物流主要是外卖和商超两大块,客户分别是国内在这两个场景市占率最高的两大平台。


商超领域我们其实跑得挺成熟的,比如在苏州,我们给山姆送了 18 个月,累计送了 3 万多单。这 3 万多单累计下来是盈亏平衡的。我可以分享几个数据。第一个是平均效率,国内骑手平均每天送 35 到 40 单,我们的机器人平均每天可以送 20 单,相当于两台机器人可以干一个人的活儿。第二个是履约率,即有多少单是按时、无损送达的,这个数值可能更有意义。通常来讲,我们机器人的履约率可以达到 98.5%,按照达达对于骑手的考核标准,这可以达到 A 级(以 98% 为界)。在这个场景中,我们的机器人和骑手是在一个地方排队的,不需要前置仓为它们配备额外的人力。考核标准也和骑手一样。


外卖是一个比商超更有挑战性的领域。它是多点对多点的配送,也要保证时效。在这个场景中,我们的机器人和人的考核标准也是一样的,超时或出现其他问题也要扣钱。


在跟人类骑手进行平等的奖惩考核的情况下,机器人挣到的钱可以覆盖它的成本,包括折旧、电费、维修费、管理员工资等等。在具身智能产品还没有大规模量产的当下,这种盈亏平衡的情况是非常稀有的。


未来迭代方向:上肢、自然语言和多模态


机器之心:现在,这个机器人拥有上肢了,交互变得更加复杂,你们遇到了哪些新的挑战? 


龙禹含:最大的一个挑战还是数据问题。当机器人的能力扩展到上肢,它的数据是更加稀缺的,全球的科研机构、公司都在花很大的力气去收集数据。但即便如此,数据的多样性依然不足,实际训练出来的模型泛化性也不是很强。比如谷歌的 RT 项目,在做厨房场景时,他们有一个机器人数据厨房,专门用来收集数据。但离开这个厨房进入到真实场景后,他们机器人的成功率还是会大幅下降。


不过,我们机器人的动作相对来说没有那么复杂,比如不用去学叠衣服等涉及柔性物体的动作,也不会像谷歌那样有很多步骤。它的动作基本上可以拆解为一些子问题,比如操作电梯的按钮、操作货物包装袋、拉开门让底盘出去等。在拆解出这些子问题后,我们就可以专门去收集这些场景的数据,然后利用一些模仿学习的算法去学习,让这件事情跑起来。在跑起来之后,我们的机器人会看到一些成功的案例,也会看到一些失败的案例。在看过各种各样的包装袋、门、电梯之后,它的能力就会逐步提升。


机器之心:现在具身智能的一大方向是让机器人听懂自然语言,甚至基于多模态信息来进行推理决策,推行科技在这方面有没有一些计划?


卢鹰翔让机器人听懂自然语言这件事情肯定会去做,而且已经在我们的规划之中,下一代产品就会具备这样一个能力。本身我们机器人产品的应用场景就比较贴近人的日常生活,直接用自然语言交互将是非常实用的一个功能。


龙禹含:关于多模态,其实我们的机器人现在已经在用多模态大模型了。即使是完成刚才提到的按电梯按钮、取货、开关门这样的操作,如果想达到一个比较好的泛化能力,现在最稳定的路径就是利用大模型的多模态能力。


目前我们机器人里的多模态大模型主要用于解决一些视觉问题,比如物体识别、目标物估计。这有别于传统的自动驾驶,后者只针对某些类别,比如汽车、行人、电动车,去做识别。我们的机器人要识别不同样子、不同位置的电梯按钮,不同形状的纸袋、塑料袋以及不同类别的门,它面对的要求更高了,所以我们用多模态大模型来解决这些问题。


机器之心:很多人认为,人形机器人会是具身智能的最终形态,您怎么看?推行科技是否有必要去做人形机器人?


卢鹰翔:说人形机器人会是具身智能的最终形态,这背后的主要逻辑是:目前人类生存的物理世界,比如房子,本身是为人类躯体设计的,所以人形机器人会具备最广泛的通用性。但我们认为,碳基智能和硅基智能之间有一个很大的区别。碳基智能只能支持特定的躯体,比如一个人的大脑只能驱动一个人,一个狗的大脑只能驱动一只狗。但硅基智能可以同时支持多种形态,比如一套智能驾驶系统可以装在本田的车上,也可以装到丰田的车上。所以硅基智能本身不太受具体形态的限制


在认识到这个区别后,我们认为,具身智能不一定非要定义一个最终形态,比如变成人形去适应人类的生存环境。反之,它可以是环境本身。也就是说,它不一定非要去一辆汽车、一幢房子、一条生产线上去工作,它可以是这个汽车、房子、生产线本身。它可以同时存在多种物理形态。


具体到产品开发思路上,我们不会跟风去做一个人形机器人,而是根据客户、场景的需求来决定把机器人做成什么样子,比如它按电梯或者开门需要一只手,我们就给它安一只手。


龙禹含:我补充一下。其实在产品迭代的过程中,我们考虑过两种方向,一种是比较贴近于人的方向,一种就是现在这种方向。我们之所以做出现在这种选择,其实主要是考虑这个产品需要大规模在实际场景中落地。如果做成接近于人的形态,还要在非机动车道上达到接近骑手的速度,我们觉得是不适配的。而且还存在交规风险和居民、客户接受度的风险。未来,我们还是会根据客户的需求以及成本等因素来选择合适的形态。


数据驱动贯穿始终


机器之心:前段时间,李飞飞教授创立了一个空间智能公司,您如何看待这个方向?


卢鹰翔:在看到新闻后,我们也做了一些调研,就是研究李飞飞教授这个公司具体要做什么。我们问了她实验室的学生,结果学生暂时也不太清楚。考虑到李飞飞教授之前一个非常重要的贡献是 ImageNet,而具身智能领域现在既没有特别好的训练数据集,也没有特别成熟的预训练模型,所以我们猜测,她这个新公司可能会在数据方向做一些事情,比如三维场景中人和机器之间相互关系的数据的收集,然后用这些数据去辅助机器人基础大模型的训练。


机器之心:李飞飞等具身智能领域的研究者有没有给你们的创业之路提供一些启发?


龙禹含:数据魔咒已经成为当前具身智能领域的一个共识。李飞飞等研究者给我们的启发,就是要尽快去实际场景中获得更多高质量的数据,而且是用商业化的方式低成本地去获取,然后再反过来推动技术的进一步发展和落地。这是我们在创立推行科技之初就确立的思路。在具身智能领域,这个思路已经被李飞飞教授这样的业界前辈反复印证。这让我们在这个方向的努力变得更加坚定。


作者:机器之心
来源:juejin.cn/post/7383957030345670666
收起阅读 »

我使用 GPT-4o 帮我挑西瓜

hi,这里是小榆。在 5 月 15 日,OpenAI 旗下的大模型 GPT-4o 已经发布,那时网络上已经传开, 但很多小伙伴始终没有看到 GPT-4o 的体验选项。 在周五的时候,我组建的 ChatGPT 交流群的伙伴已经发现了 GPT-4o 这个选项了,是...
继续阅读 »

hi,这里是小榆。在 5 月 15 日,OpenAI 旗下的大模型 GPT-4o 已经发布,那时网络上已经传开, 但很多小伙伴始终没有看到 GPT-4o 的体验选项。


在周五的时候,我组建的 ChatGPT 交流群的伙伴已经发现了 GPT-4o 这个选项了,是在没有充值升级 Plus 版的情况下,意味着这个模型已经更新给大众免费使用了。


图片


我看到后,立马放下手中正在编写的代码,开启 GPT 登录后果然有一个  GPT-4o 的选项,然后发现它的功能比 3.5 模型更加全面了,它不仅能够全面覆盖听觉、视觉和语音。


图片


我体验了一把语音对话,非常的丝滑没感觉到延迟,仿佛真的和“女朋友”在聊天。意味着它能够感知我们的呼吸节奏,并用更加丰富的语气实时回应,还会在适当的时候打断对话。


那么,就让我们了解 GPT-4o 这个大模型吧,首先 GPT-4 是比 3.5 版本更强的版本,即为 4.0+,后面还有一个‘o’ ,它的全称是‘Omni’,即‘全能’的意思。


图片


它能够接受文本、音频和图像的任意组合输入,并生成回答。响应速度快至 232 毫秒,平均 320 毫秒,与人类对话的速度可以说是很接近平均了。


并且,随着这次版本的发布,GPTo 与 ChatGPT Plus 会员版的所有功能,包括视觉、联网、记忆、执行代码、GPT Store 等,都会免费开放给大家。新语音模式将在几周内优先向 Plus 用户开放。


图片


在直播现场,OpenAI CTO Murati 谦虚道:“这是将 GPT-4 级别的模型开放给大家。”


同时将这一版本的模型提供 API 服务,价格随之减少一半,速度比之提高一倍,单位时间内调用次数是原来的 5 倍了。


OpenAI 的总裁 Brockman 也给大家在线演示,将两个 ChatGPT 相互对话,对话内容比较丰富了,不知不觉还唱起歌来了,整的还挺有意思。


发现还有伙伴和我一样体验到了不错的应用场景,当我使用手机版的 GPT-4o ,我可以实时拍照询问它,给我一些建议,如何挑西瓜榴莲等,询问给出差异分析,借助 AI 的力量进行挑瓜。


图片


你甚至可以拍摄一批西瓜的照片,上传给 GPT-4o。


你:“这瓜保熟吗?”


AI:“(警觉)...你故意找茬是不是。”


AI:“我一AI,还能给你挑生瓜蛋子不成?!”


图片


图片


我们可以看到上图中的西瓜是根据自己拍摄的西瓜图并且标记了序号,询问 GPT 哪个西瓜很甜,GPT 一通分析,虽然目前只能根据形状和成色来识别西瓜,推荐挑选的 6 号西瓜果然很不错,甚至皮也很薄。


聪明的你,脑洞大开已经熟练使用 AI 了,你或许会有很多问题问他。


你:“这盒牛奶含有什么成分?”


AI:“......”


你(掏出手机,打开摄像头扫描):“这盒牛奶有科技成分吗?卫生是否达标?”


AI:“......”


你(掏出手机,打开摄像头扫码):“请问这个妹妹面相如何?是否旺夫?”


AI:“......”


显然,上面有一部分是我的遐想,但我觉得已经不远了。


如果 AI 没有被一方人污染,升级完全体的情况下,它真的能够为我们参谋很多,洞悉很多潜在的信息,毕竟你能骗我,但是 AI 不会骗我。


好了,大家可以多去体验新产品吧,的确会很有趣。但是发现很多小伙伴 不仅电脑版本的 GPT 无法体验,更别说手机版本的 GPT 了。


目前来说对一些普通用户体验的确很困难,被迫使用某些企业研发的 AI 产品或套壳产品,还被迫收费。但也不是没有办法,别说我还挺想撰写一篇从 0 到 1 给大家完全科普使用。


okay,分享(暗示)到这里,大家如果有感兴趣,可以后台回复 GPT 加入群聊,将会有更多咨询和体验内容分享。


作者:程序员小榆
来源:juejin.cn/post/7370327567763816498
收起阅读 »

AI 搜索的价值在哪里

借鉴开源 Lepton Search 的灵感,在公司内部做了一款 AI 搜索工具,名为爱搜。这个工具目前处于带着做状态,没有投入什么人力和资源。遂想写点东西,记录下自己的一些想法和观点。不一定对,但都是吾之所悟。AI 搜索是什么AI 搜索是指利用人工智能技术,...
继续阅读 »

借鉴开源 Lepton Search 的灵感,在公司内部做了一款 AI 搜索工具,名为爱搜。这个工具目前处于带着做状态,没有投入什么人力和资源。遂想写点东西,记录下自己的一些想法和观点。不一定对,但都是吾之所悟。

AI 搜索是什么

AI 搜索是指利用人工智能技术,帮助用户更快找到需要的信息,提供更加精准和相关的搜索结果。

为什么要做 AI 搜索

  1. 现在 AI 是风口,所有产品前缀都可以加上 AI,搜索也不例外
  2. 人工智能可以帮人类承担一些搜索工作,之前人类需要在搜索上花一个小时,现在有了 AI ,只需要花 20 分钟甚至更少

怎么做 AI 搜索

从现在看,做出一个简单的 AI 搜索产品已经不存在技术难点了,有很多成熟的产品,如:

  • 国内:360AI 搜索、秘塔、天工等,还有一些内置到问答产品中,如 kimi
  • 国外:devv 、perplexity 等

下面我将从技术架构、应用层、接口层、模块层来阐述怎么做 AI 搜索产品。

技术架构

下图是我画的简单 AI 搜索产品架构示意图:

image.png

上图把架构分成了三层,分别是应用层、接口层和模块层,解释如下:

  • 应用层:可以是 web、native、桌面端、浏览器插件、sdk
  • 接口层:支持应用层的各种 api
  • 模块层:是搜索和 各种 agent 的核心实现

这应该是最简单的 AI 搜索架构了,复杂的我没有做过,就不画了。

应用层

目前一些 AI 搜索产品我都用过,直接参考秘塔、devv 和 perplexity 即可,三者页面如下图所示:

resized_image-2.png

整体布局相似,取他们精华,去他们糟粕就可以了。技术选型上,根据团队情况选择就行,如 vue 、 react。整体没有技术瓶颈,正常去开发实现即可。

接口层

基于 restful api 去和应用层对接,比如有以下接口:

  • 回答接口
  • 相关问题接口
  • 登录接口
  • 历史记录接口
  • 设置接口

这一层,也可以加上缓存功能,对于相同问题,直接返回缓存结果。也可以不加缓存,主要看业务需求。

爱搜接口层和模块层代码的目录结构如下图所示:

resized_image-4.png

使用 go 作为开发语言,整体合理。爱搜提供的接口如下图所示:

resized_image-5.png

除了自己用的接口,还给其他业务提供了一些能力支持。

模块层

这一层属于 AI 搜索的核心了,它能决定 AI 搜索的上限。模块层提供的能力越多,能力越强,产品的竞争力就越大。

上文的架构图画了两个模块:

  • 模块 1:搜索引擎 --> prompt --> 大模型
  • 模块 2:搜索引擎+爬虫 --> prompt --> 大模型

搜索引擎

搜索引擎的方案有两种,分别是付费和开源。如果用付费方案,则有百度、必应、谷歌、serper 等。如果用开源方案,则有 duckduckgo 、searxng 等。

  • 付费方案中,serper 是我认为目前最好的选择,理由是非常便宜、底层走谷歌搜索、速度很快并且国内没有被墙。
  • 开源方案中,我知道的有 searxng 和 duckduckgo ,searxng 更流行。

爬虫

  1. 在不加限制的搜索场景下,没有找到一个合适的爬虫方案,这种场景有两种方案:
  • 第一种方案:用传统的方法,拿到页面链接,然后解析页面内容,这种依赖页面 dom 结构,那么多页面,怎么去实现一个通用的解析逻辑,很难搞
  • 第二种方案:用 AI 能力,借助视觉模型,拿到页面链接,进入页面,对页面做视觉判断,需要用到什么数据,就拿什么数据,这种目前还没有尝试,感觉难度也大
  1. 如果加限制搜索场景,比如编程问题我只在 stackoverflow 、 reddit 、 github 上搜和爬取,这种是可以有合适的方案的。但是执行爬虫后,返回速度是不是会变慢,这个因素也需要考虑。

目前爱搜是没有做爬虫方案的,主要是没有想好怎么做。用过 kimi 的,都知道回答会有资料作为参考,如下图所示:

resized_image-6.png

我比较好奇的是,kimi 有没有爬取资料 url 的页面内容。还是说,只是把调搜索引擎拿到的搜索结果展示出来,或者说,会根据问题有选择的爬取资料页面。

目前用 AI 做爬虫的开源项目也有一些,但到目前为止,我还没有找到一个适合所有搜索场景的爬虫方案。

prompt

prompt 的设计有几个痛点:

大而全的 prompt 很难调

你想靠一个 prompt 解决搜索问题,是几乎不可能的,需要对 prompt 从上到下进行拆分,如下所示:

  • prompt
    • 断言 prompt:判断搜索问题是什么类型
    • 编程 prompt
      • 错误解决
      • 功能实现
      • xxx
    • 非编程 prompt
      • 新闻类
      • 医学
      • xxx

如果想让回答更加符合用户想要的,prompt 的设计就需要考虑原子化。有利于维护、适配和扩展。

很依赖大模型的能力

如果未来的大模型能力比现在强大千倍,那也许一个大而全的 prompt 就够了,但现在,还做不到这种。你设计的一个 prompt 在 X 模型上表现很好,但换到 Y 模型上,表现可能就变差了。

上文将 prompt 从上到下进行拆分,变的小而精,也是为了增加鲁棒性,让其在不同模型上都能有很好的表现效果

prompt 的设计准则太多了

据我了解,有很多提示词设计准则,像 CoT、CO-STAR、3S、微软出的 prompt 设计教程等。给我的感觉就是:到底哪个是最佳实践,估计目前没有最佳实践,这给 prompt 设计,又带来了一些困难,不同模型的 prompt 最佳实践可能不一样,如何在 prompt 上屏蔽掉这个因素,是值得思考的事情,将 prompt 拆小,在一定程度上做了屏蔽。但是也会有无法兼容的情况,这种就需要根据模型来单独设计适合它的 prompt 了。

prompt 也需要后期

有时会发现,在模型固定的情况下,不管你怎么设计 prompt ,某一个场景的输出就是有问题,这个问题大多是指输出不够稳定。

比如一个问题的回答,需要输出字符串数组,这个问题问 10 次,会偶然出现一个输出数字数组,或者直接不是数组,这种情况怎么办,从我的观点看,这种情况就需要做后期处理了,通过写程序去识别这种情况,并做相应的处理,保证返回的永远都是字符串数组。

prompt 自动化测试

prompt 本身不太可控,如何在迭代过程中,做到对 prompt 有一个稳定的监控,这就需要在 prompt 自动测试上做一些能力,比如:

  1. 自动生成各个类别的问题,每个类别生成 10 个问题,
  2. 自动去跑 prompt,每个问题,跑十遍 prompt
  3. 将相同类别的相同问题跑出的结果进行对比,分析结构和内容是否相似
  4. 将相同类别的问题跑出的结果进行对比,分析此类别的输出结果是否稳定、准确

模型

模型的重要性不言而喻,当前模型界应该是最卷的领域了,如何评估和选择模型是一个很重要的事情。就目前来说,模型选对了,产品的成本可能会降一半,效果还会更好。

模型和 prompt 配合

上文 prompt 也阐述了相关内容,模型和 prompt 工程形成良性的循环,是我们必须要去做的事情

私有化模型的挑战

如果不使用第三方模型 api,使用私有化模型,那需要做以下事情:

  1. 评估和选择模型
  2. 模型部署,要买卡,或者走托管服务
  3. 模型微调【可能需要,但如果想更好,大概率需要做】

买卡的话,成本就变大了。模型大小也要考虑,“越大”,需要的算力越多。从控制成本角度看,方向如下:

  1. 采取面向模型开发模式,用合适且性价比高的模型去解决不同的业务场景
  2. 模型倾向于选择 MOE ,在“小”的同时,获得高质量的输出结果
  3. 让 prompt 多发力,再加上后期,也可以让“小”模型的效果逼近“大”模型的效果
  4. 选择正确的微调方案,这里我没有经验,目前业界有预训练、SFT、RLHF、LORA、指令微调等
  5. 模型侧要保证性能和准度,就是输出结果要快和准,相同参数级别模型
    • a:想更快,可以尝试用 bit 更小的量化模型,测试输出效果会不会有明显差别,没有的话,就可以考虑用,这样会提高模型性能
    • b:想更准,需要根据情况做处理,比如做指令微调

AI 搜索商业价值

我先说下,目前 to c 产品的一些价值场景

  • 360:回答页面加了广告...

resized_image-7.png

  • 天工:目前没看到付费场景,但是从我的角度看,天工做的还可以,agent 很多,包括 ai ppt、数据分析等

resized_image-14.png

  • 秘塔:免费版搜索次数有限制,目前没看到上限付费版

resized_image-8.png

  • devv:按月/年付费,可获无限次 agent 使用、gpt-4o 模型等其他付费功能

resized_image-9.png

  • perplexity:按月/年付费,付费功能如下图所示:

resized_image-10.png

从我的角度看,这些 AI 搜索产品,还没有到让我付费的程度。也就说,已经 To C 的产品,我都没有付费的意愿,那在公司内部搞的 AI 搜索工具,如何去落地或者呈现价值呢?

以下有我的几点思考和看法

多在 AI Agent 上发力

AI Agent 概念:即人工智能代理,是一种利用人工智能技术来执行特定任务或服务的软件程序。AI 代理可以模拟人类智能行为,进行自主决策、学习和交互。它们可以应用于多种领域,包括但不限于客户服务、数据分析、自动化任务、个人助手等。AI 代理能够处理复杂的任务,提高效率,减少人为错误,并为用户提供更加个性化和智能化的服务体验。

这里我举一些 Agent 例子:

  1. RSS 订阅自动总结和推送 Agent 对 RSS 订阅有强依赖的用户群体,这个功能就能产生较大的价值
  2. 科技、手机、AI 等主题新闻,最新咨询日报生成和推送 通过 AI 搜索去自动搜索各主题最新新闻并进行阅读,最后输出新闻内容总结和高质量点评,对于提高用户的行业前沿资讯感知是有价值的
  3. 简历分析和评估,上传一个简历,会自动分析简历内容,给出评估报告和面试时需要问的面试问题

当前的 Agent,我更倾向于做一些小而美的 agent,太宏大的 agent,实现起来很困难,一方面受限于技术,一方面也会受限于算力

内网的搜索和总结要做好

  1. 内网的知识库:包含文档、pdf、各类分享视频
  2. 业务相关的文档

可以在搜索页面加一个搜索范围,像 perplexity 那样:

resized_image-13.png

上图显示的 内网->知识库 是我按 f12 改了下 dom 内容。

这些功能,爱搜目前都没做,看起来几句话,实际需要不少工作量。就拿 pdf 解析来说,目前业界对于复杂 pdf 的解析好像都没有太好的方案,我试过很多开源项目,都达不到我的理想需求,最近我又看到一个很不错的开源项目,叫 trieve ,其特性如下图所示:

resized_image-11.png

这个开源项目已经获得 YC 的投资了,证明其还是有技术和潜力的。目前是我看到对 pdf 分块、解析和搜索最好的开源项目了。后续多研究下这个项目。大家有什么好的开源方案也欢迎告知我。

业务相关的文档,做起来难度也大,爱搜目前也没有做,如果做的话,整体思路如下:

业务上可以根据你的登录信息,查你当前拥有的业务权限,然后允许用户选择搜索哪个业务,比如业务 A 所有的项目管理文档,包含策划文档、策划评审意见等,然后对用户选择的业务进行训练和搜索,后续用户可以在业务 A 选项中搜自己想要的内容,并获得相应的回答和索引。

多和公司内部业务联动

比如给某个业务提供联网搜索能力、提供搜索能力、提供爬虫能力等,类似这种多去和内部业务沟通交流,也能发挥落地一些价值

总结

  1. 想一下,bing 和谷歌做 AI 搜索,都被外界喷效果差,就知道要做好 AI 搜索还是很有难度的。
  2. 当然,bing 和谷歌的目标和我们不一样,我们更专注于垂直领域,我希望做小而美的 AI 搜索,它可以是一个产品矩阵,也可以是一个聚合产品
  3. 我们聚焦的是目前世界上最前沿的领域,有困难很正常

商业价值不是靠讨论出来的,而是靠试出来的。


作者:ikun日记
来源:juejin.cn/post/7373921342096080911
收起阅读 »

gpt-4o这些玩法真的太逆天了

OpenAI在近期发布了GPT-4系列的新模型GPT-4o。这一更新主要聚焦于多模态和端侧应用,为用户提供了全新的交互体验。 GPT-4o作为OpenAI的新模型,具有三大显著特点: 多模态:GPT-4o能够接受文本、音频、图像作为组合输入,并生成任何文本、音...
继续阅读 »

OpenAI在近期发布了GPT-4系列的新模型GPT-4o。这一更新主要聚焦于多模态和端侧应用,为用户提供了全新的交互体验。


GPT-4o作为OpenAI的新模型,具有三大显著特点:


多模态:GPT-4o能够接受文本、音频、图像作为组合输入,并生成任何文本、音频和图像的组合输出。这种多模态的理解能力让GPT-4o在处理复杂任务时更具优势,如识别人类的感情并根据感情做出“有感情的反应”。


几乎无延迟:GPT-4o对音频输入的响应时间最短为232毫秒,平均为320毫秒,这与人类在对话中的响应时间相似。这种极快的响应速度使得GPT-4o能够实时地与用户进行交互,提供流畅的用户体验。


可在电脑桌面运行:OpenAI还将与苹果合作推出了适用于macOS的ChatGPT桌面级应用。这一应用允许用户在没有网络的情况下使用ChatGPT,并且可以在本地设备上处理敏感信息,保护用户隐私。


一些逆天的视频展示


下面来一起了解一下它官网的一些视频展示的逆天操作:


第一个王炸,作业辅导


作业辅导


视频中展示的是巨佬在使用 GPT-4o 对他儿子进行作业辅导。它开始就告诉gpt-4o 说不要直接说出答案,而是帮助它一步一步解决这个几何题目,我们在视频中可以看到,的确是这样,gpt-4o 一步一步的帮助他儿子解决了这个问题,而且还是非常细致的解释,并且是非常有情感的,每当他儿子完成一步之后,gpt-4o 从语气上都会有一种更进一步的感觉,这种情感化的交互方式,让人感觉非常的亲切。


而且,所有的过程都是这个娃在拿着笔在一步一步的解决这个几何题目,gpt-4o 就是看着这个娃做的解题过程,它会判断这个娃是否步骤对了,这个交互简直太赞了!这明显得益于GPT-4o的图像理解能力的增强。


作业辅导


讲真,按照这个趋势,教培行业似乎极有可能被干掉,那些不会做奥数题的家长,有福了,因为 安特曼说,gpt-4o 是会免费的。这意味着,你不需要花费一分钱,就可以请一个专业的教培老师,帮助你的孩子解决问题。


第二个王炸,精神分裂,一个端中两个 gpt-4o 互动起来了


之前我们于gpt 的实时语音对话只能是一对一,好了,颠覆认知的时刻来了,你在一个对话窗口中,可以同时存在两个gpt-4o对话,甚至,它两还可以互相对话,这个视频中,这两 gpt-4o 相互唱起了小曲。。。
两个 gpt-4o 协调


外语学习


外语学习


在这个例子中,研究人员展示的是,它告诉 gpt-4o 它想学习西班牙语言,当然它使用英语说的,然后它使用摄像头对着苹果和香蕉,问gpt-4o这个是什么,gpt-4o 利用它图像识别的能力,认出了香蕉和苹果,然后告诉研究人员。


但是!但是!但是!它回的语言居然是英语和西班牙语的混合,也就是,gpt-4o 回答,this is manzana and plátano。差点没有惊掉我的下巴,一句回答中包含了多种语言。这中组合输出的能力,简直太强了。


参与多人对话中来


图 4


这个视频展示的是 gpt-4o 加入到了一个在线会议中,它可以看到共享的屏幕,因此它知道会议有多少个人,然后开始是每个人说了一下自己的喜欢的人和事,接着主持人发文,他们各自有哪些爱好,gpt-4o 一一都回答出来了,而且是非常的准确,最后还来了一个总结,后面腾讯会议,zoom 估计交互得更上啊,不加入一个智能记录员,这体验就得甩开好几条街了。


同声传译


同声传译


这个视频展示的是 gpt-4o 扮演的事一个翻译者的角色,画面中的两个人一个人是将英语的,一个人是将西班牙语的,gpt-4o 就负责把听到的英语转化为西班牙语,把西班牙语转换为英语,然后两个哥们就愉快的对话了,你说你的西班牙,我说我的英语,我们都听得很懂的,所以,同声传译这个行业,是不是也要凉凉了。


外婆的澎湖湾


催命曲


歪日哦,富有情感的和你对话是王炸的话,和这个对比简直小巫见大巫,它哼起了小区,而且还会偶尔和你聊天的时候爽朗的发出笑声,这种情感化的交互方式,让人感觉非常的亲切。当这个老外说它想睡觉,哼个小曲,gpt-4o 就开始哼起了外婆的澎湖湾,听得我差点给睡着了...这种情感化的交互方式,让人感觉非常的亲切。


语速控制


语速控制


在这个视频中,老外让 gpt-4o 数数,1,2,3,。。。10. gpt-4o 一口气说完了,然后老外说,你能不能慢一点,gpt-4o 就慢慢的说了一遍,然后老外说,你能不能快一点,gpt-4o 就快速的说了一遍,这种语速控制就完全可以用来训练自己的听力了,这个功能比较赞,不过,我的下巴还在。


开玩笑


开玩笑


这个视频中,老外给 gpt-4o 说它要给它老爸讲个笑话,然后他想让 gpt-4o 先听听它这个笑话是不是好笑,结果,gpt-4o 真的爽朗得笑了,笑得一点都不像机器人,听到它这个笑声的时候,我的下巴还差那么一点就掉了。。。


你是我的眼


你是我的眼


这个视频的效果也是相当的炸裂,视频中时候一个盲人,很显然他看不见,因此它所到之处,让 gpt-4o 告诉它周围都有写什么风景,gpt-4o 一一告诉他,从这个视频中,我有点小小的启发!


gpt-4o 可能更好的交互是类似 Google Glass的形式,这样的产品出来,估计全世界的盲人都要为之震撼,他们都将会重见光明,这个产品的价值,简直不可估量。


两个 gpt-4o 互相对话


两个 gpt-4o 互相对话


两个 gpt-4o 互相对话


这个视频中显示了两个gpt-4o 开始了对话,什么,永动机???实际上不是,是视频中 openai 的大佬先告诉一个 gpt-4o 说等会有个可以看见世界的 AI 会和你对话,你可以和他交流,随后它启动了另外一个 gpt-4o,然后两个 gpt-4o 开始对话了,并且大佬还可以随时打断加入他们的对话。我的脑袋已经开始疼了,这个视频太炸裂了。这意味着,我是不是可以搞 3 个手机,搞一桌四川麻将了???


着装建议


着装建议


视频中,这个大佬要准备面试了,问 gpt-4o 怎么穿着得体,然后 gpt-4o 告诉他带个帽子试试,结果带上 gpt-4o 就开始爽朗的笑了。。。,嗯,后面穿什么出门,估计可以让 gpt-4o 建议建议合不合适。。。


桌游助手


桌游助手


这个场景是两个人想玩石头剪刀布的游戏,然后让 gpt-4o 做裁判,然后就开始了,gpt-4o 说 1,2,3,亮出你们的爪子,然后判断谁输谁赢,好了,我似乎又找到了一个乐子。




作者:brzhang
来源:juejin.cn/post/7369481217030438921
收起阅读 »

这个网站真的太香了!居然可以免费使用AI聊天工具和“智能AI聊天助手”项目源码!!!

宝子们,在这个AI爆火的时代,你是否还在因为无法使用ChatGpt而头疼?是否还在寻觅一款国内的好用AI工具呢?好消息!小编花费三个月终于找到了一个可以免费使用AI聊天工具的网站,由于这个网站之前一直在内测阶段,所以就没有给大家分享。刚好,近期这个网站正式上线...
继续阅读 »

宝子们,在这个AI爆火的时代,你是否还在因为无法使用ChatGpt而头疼?是否还在寻觅一款国内的好用AI工具呢?


好消息!小编花费三个月终于找到了一个可以免费使用AI聊天工具的网站,由于这个网站之前一直在内测阶段,所以就没有给大家分享。




刚好,近期这个网站正式上线了。小编今天就来好好跟大家聊聊这个网站有哪些便宜好用的功能,之所以推荐这个网站也是因为它不光好用,还有大量免费的功能,像平时写代码遇到想不起来的,直接去这个网站用AI搜索一下,简直不要太香!


对了!这个网站的名称叫“云端源想”!大家记一下,可以直接百度搜索去体验哦!


下面就正式给大家介绍这个网站,以及我推荐大家用它的原因:


首先我先说一下,它近期不是刚上线嘛,有个巨大的福利在等着大家,就是除了前面我提到的免费使用AI聊天工具之外,还可以领取搭建这个AI聊天工具的源码!!简直了!


这对于想要找项目实战练手的编程新手宝子们,简直是“饥时饭,渴时浆”的事情,所以看到了,不要犹豫,直接点进去领到手再说!反正不要钱!


AI聊天:AI聊天工具

项目源码:“智能AI聊天助手”项目源码


这个是网站的活动海报图,也给大家放在这里啦!




说完能领取的福利之后,我再来给大家说说云端源想这个网站值得逛的几个版块,帮助大家快速找到自己想要的功能。


1、微实战




这个板块在我看来是很实用的,它里面的项目感觉都是从实际应用的功能点拆分出来的项目实战,非常地有针对性。


比如我需要开发一个线上商城,就可以把这里面的网站支付的源码拿来用,不仅能快速对接,还为我省下了很多时间,然后我就可以早早下班,不用秃头啦!简直是提升效率的好帮手!


我发现目前站里这些微实战只需要两位数就可以拿到,有时候还有限时免费的:完整的项目源码项目部署教程视频教程,甚至还有配套的免费直播课,可以说是非常有性价比了,上面给大家说免费领取的AI聊天助手就是这个板块的内容。




总之,这个微实战板块是一个非常实用的资源,无论你是新手还是有经验的开发者,都可以从中受益。通过参与这些项目实战,你可以提升自己的实际开发经验,学习到更多的技术和工具,同时也可以提高工作效率,更好地应对实际开发中的挑战。


所以!好东西要和大家一起分享,我分享给大家了,大家也可以分享给身边的朋友们哦!


2、智能AI工具




这里面目前我看到了三个AI工具,图片清晰度增强、文字合成语音和智能AI问答,鉴于都是免费的所以我都体验了一下,对我来说最实用的就是这个免费的AI问答了。



平时写东西找不到灵感,或者遇到不懂的东西,我都会在这问问AI,使用频次快超过百度了,用它辅助写代码是真的很牛,我也试过好多其他的AI产品,免费的里面对比下来这个真的好用!强烈推荐!!!


3、社区动态




这就是一个可以发布动态的板块,很适合上班摸鱼,哈哈哈!


如果上班或者学习累了,可以来逛逛看看别人发的帖子,寻觅一个有趣的灵魂,喜欢分享的朋友也可以自己发帖,我是没事了就来刷刷,看看有没有什么新鲜事可以在线吃瓜!!


4、编程体系课



里面开通了四门当下比较热门的课,这个就没什么说的,大家在别的学习网站也有,都大差不差。


值得一提的是,云端源想把重难点的知识点提炼出来组成了一个知识库,这样我可以很快速找到我想要学习的点,比较有针对性。




5、在线编程




这个板块也是一个比较少见功能板块了,可以在线编辑运行代码,比较有意思的是可以邀请别人一起协作编程,这个我用的比较少,感兴趣的朋友可以自行探索探索哈!


另外还有一个论坛板块,里面有各种质量比较高技术文章,有时候我写东西也会在里面参考参考,这就没啥好说的,我就不过多去说这个板块了。


以上就是我给大家推荐云端源想这个网站的原因了,不单单是喊大家一起来薅羊毛领源码!也是真心想给开发的朋友们推荐一个好用的工具网站!那么今天的分享就到这里啦!


最后!强烈建议大家不要错过这个宝贵的实战源码!AI工具用不用咱都不说!能够免费获取的资源才是硬道理!别犹豫了,赶紧点这里领取你的福利吧!

收起阅读 »

GPT-4o,遥遥领先,作为前端人的一些思考

大家好,我是LV。 我早上一般起的比较早~ 大概6点左右就起来刷各种AI资讯。 但是今天,5点左右就起来了,迫不及待想看 OpenAI 发布的内容~ 也顺便写篇文章跟大家分享一下最新的资讯~ 以及作为前端人的一些思考~ 希望对你有所帮助~ 欢迎加入最懂AI的...
继续阅读 »

大家好,我是LV。


我早上一般起的比较早~ 大概6点左右就起来刷各种AI资讯。


但是今天,5点左右就起来了,迫不及待想看 OpenAI 发布的内容~



也顺便写篇文章跟大家分享一下最新的资讯~


以及作为前端人的一些思考~


希望对你有所帮助~


欢迎加入最懂AI的前端伙伴们~群,一起探讨AI赋能前端研发。


GPT-4o



  • 结合文本、图像、视频、语音的全能模型

  • 可以通过语音交互以及具备识别物体和基于视觉信息进行快速回答的功能

  • 性能上,GPT-4o达到了GPT-4 Turbo水平

  • 成本相比GPT-4-turbo砍一半,速度快一倍,响应时间最低232毫秒,平均320毫秒。遥遥领先!

  • 将为 macOS 操作系统设计桌面ChatGPT应用程序,无缝集成到 macOs 中,可以使用键盘快捷键查询问题并与 ChatGPT 进行截图讨论或直接开展声音/视频对话。


以上详见:openai.com/index/hello…


前端人的思考


成本砍半,速度加倍


做应用层的前端er,可以换新的 API Model 了,虽然价格没有 3.5 那么便宜,也算是GPT4自由了(我也赶紧给LV0给换上)。


音视频支持



  • 通过视频连线ChatGPT,实时辅助修bug


之前只能够通过将bug转换为文字或者图片再给到AI,有了音视频功能,直接可以连线 ChatGPT,让GPT实时给你debug。



  • 通过视频连线ChatGPT,辅助编码,相当于请了一个24在线的编程导师~

  • 通过视频的形式给AI一些UI交互上的信息,从截图生代码 ==> 原型交互生代码(离AGI Code又近了一步)


跟macOS的结合


在vscode、在网页、在控制台、在Codding的任何地方,有问题,就会有答案。(作为mac粉,着实期待了~)


其他思考


作为AI应用研发的创业者角色,有几点思考~


OpenAI的这一波更新带来了新的机遇:


例如在教育领域、情感陪伴服务以及同声传译服务:



  • 语音增加了情绪理解和有感情的回复,老人或者残疾人士陪伴

  • 手机能够实时解析摄像头捕获的视频画面,并提供指导,这种能力有潜力取代家庭教师的角色

  • 同时进行翻译(即同传)的工作可以由此技术执行,从而有可能替代专业的同声传译人员


不过,这波更新也破灭了多少创业者正在做的事情~ 比如:


智能眼镜,给视疾人士提供出行便捷(我前几天还看到有人在花大力气自研这项技术,现在升级一下模型或许就能很低门槛接入了~)


Sam Altman 很早在斯坦福大学举办的一个演讲中预示:GPT-5和GPT-6将极大超越GPT-4,警示创业者考虑AI未来发展,创业不要要专注于解决当前AI的局限性问题。


简单来说:别做跟官方做技术竞争,比如:花大量时间通过各种布丁来拓展AI的上下文能力,降低迷惑性。


至于要做啥,从稳健的角度来看,不要轻易涉足一个未知的领域,建议基于熟悉的业务场景聚焦来做AI赋能。把现有你熟悉的业务场景梳理出来,尝试用AI结合进去,AI赋能现有的业务流程,让现有的业务跑起来效能更高或者门槛更低。


比如:我很熟悉前端研发领域,那我会深度聚焦AI赋能前端研发,拆解研发中的各个环节步骤,不断尝试AI赋能各个步骤,提升现有的研发效能,降低研发门槛,再把这些经验抽象产品化。


聚焦细分业务,保持敏锐度,将最新的AI技术快速结合到业务中去。


作者:LV技术派
来源:juejin.cn/post/7368421137917788198
收起阅读 »

瘫痪8年后,马斯克的首个脑机接口人类植入者,正在用念力玩文明6

一名因潜水事故导致肩部以下瘫痪八年的 29 岁男子,正在借助脑机接口设备重温在线国际象棋和杀时间大作游戏《文明 6》。 这是脑机接口公司 Neuralink 最新一场直播的内容,迅速吸引了五百万多人围观。 在九分钟的简短直播中,Neuralink 首位人体...
继续阅读 »

一名因潜水事故导致肩部以下瘫痪八年的 29 岁男子,正在借助脑机接口设备重温在线国际象棋和杀时间大作游戏《文明 6》。


图片


这是脑机接口公司 Neuralink 最新一场直播的内容,迅速吸引了五百万多人围观。


图片


在九分钟的简短直播中,Neuralink 首位人体受试者 Noland Arbaugh 先是进行了自我介绍,并表示自己可以使用 Neuralink 设备玩在线国际象棋和视频游戏《文明》。


Arbaugh 使用一把特制的椅子坐在笔记本电脑前。当他试图控制一盘棋时,双手仍然放在椅子的扶手上:


图片


「这并不完美。我想说我们遇到了一些问题。我不想让人们认为这是旅程的终点,还有很多工作要做,」Arbaugh 在 Neuralink 工程师 Bliss Chapman 旁边说道。但脑机接口已经为他的生活带来了许多改善,比如终于不用依赖家人就能玩几个小时的视频游戏了。


原本的身体情况限制了他参与最喜欢的电子游戏《文明 6》的能力,因为每次只能玩几个小时,然后需要家人的帮助来重新调整坐姿。


「我基本上已经放弃玩那个游戏了,」他补充说这是一个「大型游戏」,需要很多时间坐着不动。


有了脑机芯片之后,躺在床上玩几小时的视频游戏不成问题。如果说仍有限制,那就是在连续玩 8 个小时的视频游戏后,必须再次为设备充电。这对于经常「一局到天亮」的《文明 6》来说,确实还不太够。


在直播中,Arbaugh 描述了学习如何使用脑机接口的过程:「我会尝试移动,比如说,我的右手向左、向右、向前、向后移动,从那时起,我觉得开始想象光标移动变得很直观。」


他说:「如果你们能看到光标在屏幕上移动,那或许就是我。」


虽然直播中包含的细节相对较少,但 Neuralink 工程师在视频中表示,未来几天公司会发布更多信息。


脑机接口研究的重要一步


Neuralink 由马斯克在 2016 年创立,目前正在开发一种被称为脑机接口的系统,它可以从大脑信号中解码运动意图。该公司的初步目标是让瘫痪者只用意念就能控制光标或键盘。


此次直播,使 Neuralink 成为了真正发布人脑植入证据的公司之一。另外发布过证据的两家公司 Blackrock Neurotech 和 Synchron 领先多年,三家公司各有不同的做法,同时这一赛道也涌入了不少初创公司。 


比如,Neuralink 的一位联合创始人于 2021 年离开公司,创办了竞争对手 Precision Neuroscience,去年 6 月开始了一项人体临床研究。 


而 Neuralink 遭遇了严格的审查,部分原因是其创始人马斯克也是特斯拉和 SpaceX 的首席执行官,且是世界上最富有的人之一。 


Neuralink 去年获得了美国食品和药物管理局(US Food and Drug Administration)的绿灯,可以继续进行初步人体试验,并在秋季开始招募瘫痪者来测试该设备。


但到目前为止,Neuralink 公司几乎没有透露这项研究进展的细节。


马斯克在 1 月份的一篇 X 帖子中宣布,第一个人体试验对象已经接受了 Neuralink 的植入物,并且「恢复良好」。


图片


2 月 19 日,马斯克在 X 上的 Spaces 音频对话中回答了有关参与者情况的问题:「进展良好,患者似乎已完全康复,没有出现我们所知的不良影响。患者只需通过思考就能在屏幕上移动鼠标。」


Neuralink 的设备通过该公司开发的手术机器人植入大脑;一旦植入成功,它在外观上是不可见的。为了分析大脑信号并将其转化为输出命令来控制外部设备,Neuralink 还设计了专门的软件。


Arbaugh 的此次直播似乎打消了人们对设备安全的顾虑:「我想,没什么好害怕的。手术非常简单,一天后我就真的出院了。」他还表示手术后没有认知障碍。


争议中前行的脑机接口


一些神经科学家和伦理学家批评 Neuralink 之前的试验缺乏透明度。2021 年,Neuralink 发布了一段视频,展示一只植入其设备的猴子通过心灵感应玩电子游戏,引起巨大轰动。美国动物保护组织 PCRM 曾对 Neuralink 提起诉讼,指控其「虐待」试验中使用的猴子。


图片


Neuralink 回应称:「多只猴子在参加试验之前健康状况就已经不佳,即将被实施安乐死。所有新的医疗设备都必须先在动物身上进行测试,然后再在人体上进行测试。这是 Neuralink 无法逃避的规则。但我们绝对致力于以尽可能人道和道德的方式与动物合作。」


相比于动物,人类受试者参与试验在伦理方面会带来更大的挑战。Neuralink 尚未透露将参加此次初步人体试验的受试者数量、试验地点或将进行的评估。


值得注意的是,Neuralink 尚未在 ClinicalTrials.gov (一个包含涉及人类受试者的医学研究信息的政府存储库)上注册。


据专家称,即使脑机接口设备被证明可安全用于人体,Neuralink 仍可能需要十多年的时间才能获得商业使用许可。


除了 Neuralink,其他几家公司也在竞相将脑机接口商业化。例如,Synchron 正在开发一种类似支架的装置,试图将其插入颈静脉并向上移动,使其紧贴大脑。相比之下,Synchron 的血管介入方式有着比 Neuralink 更高的安全性,Neuralink 需要切入人体颅骨进行设备植入。


Synchron 曾为 ALS 患者植入其脑机接口设备 ——Stentrode。接受 Stentrode 植入物后,参与者可以使用计算机通过文本进行交流并完成日常任务,比如在线购物和办理银行业务。


图片


Synchron 的临床参与者通过使用他的思想以数字方式控制他的计算机来进行交流。


然而,FDA 尚未批准任何脑机接口设备,它们都还处于实验阶段。


参考链接:http://www.wired.com/story/neura…


http://www.sohu.com/a/535904499…


作者:机器之心
来源:juejin.cn/post/7348640468005273615
收起阅读 »

干货|AI浸入社交领域,泛娱乐APP如何抓住新风口?

2023年是大模型技术蓬勃发展的一年,自ChatGPT以惊艳姿态亮相以来,同年年底多模态大模型技术在国内及全球范围内的全面爆发,即模型能够理解并生成包括文本、图像、视频、音频等多种类型的内容。例如,基于大模型的文本到图像生成工具如DALL-E 2、Imagen...
继续阅读 »

2023年是大模型技术蓬勃发展的一年,自ChatGPT以惊艳姿态亮相以来,同年年底多模态大模型技术在国内及全球范围内的全面爆发,即模型能够理解并生成包括文本、图像、视频、音频等多种类型的内容。例如,基于大模型的文本到图像生成工具如DALL-E 2、Imagen等以及文生视频模型Sora的发布标志着这一领域的重要突破。这些动态表明,AI 领域的竞争日益激烈,呈现出百模争流的局面。


本文将深入剖析AI对社交领域的应用带来了哪些新的机遇和挑战。

+AI和AI+ 深入社交领域

AI 在社交领域的应用,当下主要集中在 +AI和 AI+ 两种形式。+AI 主要解决什么会更好,即在原先成熟的产品中,添加了 AI 功能,触发新场景和新玩法,包括如下场景:

  • 社交约会:通过虚拟分身,减少破冰投入,增加匹配度,代表 APP 如 snack、Synclub

  • 社交游戏:AI 与人类混合社区,比如一个由 AI 生成的 Instagram 或 X 平台,而人类可以随时参与其中

AI+ 主要解决什么会出现,包括现在以大模型为基础的生成式机器人、虚拟伴侣等,包括如下场景:

  • AI伴聊:character.ai、Poe、replika、talkie、星野、筑梦岛

  • AI助手:chatGPT、豆包、文心一言

AI 渗透社交领域 机遇与挑战并存

AI 在社交领域的广泛使用,为企业和开发者在提升个性化体验、提高平台管理效率及内容生成管理等方面均带来了不少机遇。利用 AI 的数据分析能力,为用户提供更加个性化的内容推荐、社交互动等服务,提高用户参与度和满意度;AI 可以用于内容审核、虚假信息检测等,减轻人工负担,提高平台的安全性和可靠性;AI可以自动识别和分类文本、图像和视频内容,辅助内容创作者进行创作,并能快速处理大量用户生成的数据。

机遇不少,但挑战并存。企业和开发者还面临着数据隐私和安全、算法偏见和歧视等问题,以及如何恰当处理人机关系的变化。AI 应用需要大量的数据支持,这可能引发用户数据隐私和安全方面的担忧;由于训练数据的不均衡或算法设计的缺陷,AI 可能会产生偏见和歧视,影响公平性;AI 的广泛应用可能会改变人与人之间的互动方式,引发社会结构和人际关系的变化。

未来何去何从?以下这些趋势洞察也许可以给你带来新的思考

AI 聊天应用相对比较稳定,占据保持位置


深入挖掘垂直场景才具备竞争力

除了少量产品之外其他产品都有自研 AI 大模型,在头部产品功能越来越全面的当下,靠兼容多款大模型、多种功能的第三方 AI 产品的生存空间越来越小了,面向 C 端用户,单纯套壳+做薄的应用意义不大,需要深入挖掘垂直场景才具备竞争力。


市场饱和?布局出海是大方向

一些企业将 ChatGPT、Claude 等前沿大模型 API 与特定场景相结合,快速研发出垂直细分市场的社交应用,如北美市场上线的 talkie、coze,百度在日本等地上线名为“SynClub”的AI社交产品,标志着中国公司在海外市场创造了新的商业模式和服务模式,深受海外市场用户和企业的认可与接纳。随着AI技术的进一步发展和完善,预计这一领域的创新应用将更加深入和广泛。

加强监管与自律

AI 技术在社交领域的应用仍面临一些挑战。一方面,AI 可能导致隐私泄露问题,用户的个人信息和数据可能被不当利用。另一方面,由于算法的局限性,AI 可能存在偏差和误判,影响社交互动的质量。为了实现 AI 与人类的共同发展,在技术创新的同时,关注伦理和社会影响。通过建立透明的算法和数据管理机制,保障用户隐私和数据安全,同时 AI 本身也将用于自我监管,强化平台的自治能力。

IM+多种大模型 聊天体验更顺畅、高效

环信作为国内即时通讯云领域的开创者,率先将IM(即时通讯)和多种大模型服务结合在社交领域中,可以为用户提供更加顺畅、高效和个性化的聊天体验,同时也有望在社交应用程序中实现更多的智能化功能,创新更多社交新玩法,从而帮助APP提高活跃度、用户满意度和忠诚度。


海量并发,稳定可靠的平台能力

支持多重备份、灾备恢复、回调容灾等技术手段,单日数十亿级别的消息传输和处理,SLA99.99%,持续保障系统高可用性和可靠性。

国际化加速,提升出海使用体验

提供快速、准确的消息传递和响应,全球平均时延小于100ms,使得用户交互过程流畅自然,提升应用的竞争力和用户满意度。

易开发,方案快速上线

开发者可以通过调用API等方式快速构建智能交互功能,提供开箱即用的场景化demo,最快1天实现方案快速验证。

内容审核,为应用安全保驾护航

基于先进的算法和AI技术,在保证高效性和准确性的同时,自动检测和屏蔽不合规信息,确保聊天环境的健康和安全。

安全合规,保障用户隐私安全

支持国、内外不同区域合规要求,根据最小化和公开透明处理原则,保护不同区域的网络安全、数据安全及用户隐私安全

卓越服务,助力战略愿景落地

支持全球范围内的企业级客户服务,具备丰富的行业标杆客户案例,提供专属方案咨询、集成顾问、营销推广及客户成功保障服务。

AI 对社交领域的影响是深远而广泛的。它为人们提供了更加便捷、高效的社交方式,同时也带来了一些挑战。在未来的发展中,我们需要关注技术的发展趋势,用审核的眼光分析AI技术的优劣势,判断AI+社交领域的产品是否做到了“扬长避短”,同时也期待2024年,环信携手各行业客户打造Killer Apps。

相关文档:

收起阅读 »

360周鸿祎为什么说大模型已成茶叶蛋?

大模型炒了一年,为什么没有特别火的应用? 最近几天360创始人周鸿祎称,去年感觉大模型是原子弹,今年感觉是茶叶蛋。 什么意思?我想大概就是说大模型谁都能玩了,现在国内的大模型没有一千,也有几百个了,大模型没什么稀奇的了。但是另一方面也反映了大家都是为了大模型而...
继续阅读 »

大模型炒了一年,为什么没有特别火的应用?


最近几天360创始人周鸿祎称,去年感觉大模型是原子弹,今年感觉是茶叶蛋。


什么意思?我想大概就是说大模型谁都能玩了,现在国内的大模型没有一千,也有几百个了,大模型没什么稀奇的了。但是另一方面也反映了大家都是为了大模型而大模型,但是大模型没能解决什么实际问题,或者说解决的问题太小,有点让人失望了。



邓宁-克鲁格效应


我认为这种感觉是很正常的,也符合事物的一般发展规律,一个新事物出现的时候,大家都抱着很大的期望,期待它去解决各种各样的问题,但是毕竟是新东西,和整个世界的磨合、整合还不够,还需要各种去适配,所以新鲜劲儿过去之后,很多问题还是没解决,大家就感觉失望了。然后这个新事物还要默默的发展一段时间,才有机会重回梦想之巅。


这种情况有一个名词:邓宁-克鲁格效应(Dunning-Kruger Effect),也简称达克效应(D-K Effect),可以用下边这条曲线来理解它。达克效应本来说的是人的认知过程,但也经常被用来表示事物的发展过程。



AI大模型的下一步


AI大模型下一步会怎么发展?我认为首先还是要紧盯OpenAI,作为大模型的引爆者和引领者,OpenAI的发展方向至关重要。


去年底OpenAI推出了GPTs,也就是大模型的应用商店,为什么干这件事?我认为是因为AGI发展遇阻,技术和资金都有点跟不上,这一点可以从最近OpenAI投资AI芯片、大规模融资,以及OpenAI CEO奥特曼让大家耐心等待AGI等等事件中略窥一二。为了提振信心,探寻更多机会,OpenAI不得不搞出这个应用商店,借助外部的更多力量来促进AI的发展。


另外预计OpenAI今年就会发布GPT-5,大模型的能力进一步增强。据预测,GPT-5将是一个原生的多模态大模型,不仅能处理文本和图像,还能处理音视频内容,GPT-5甚至将会具备自主的AI模型开发能力,这将使其能够生成各种多模态的AI模型,从而学习和完成新的任务,这将大大扩展GPT-5的应用能力,有力推动通用机器人的发展,给人很多的想象空间。


GPT-5是更好吃的茶叶蛋,还是更厉害的氢弹?让我们拭目以待!



大模型和世界的磨合


另外上边我提到大模型需要和世界进行磨合,怎么磨合?


我认为第一步就是将AI能力融入到企业的产品或者服务中去。我们现在可以看到很多工具都集成了AI大模型,比如钉钉魔法棒、WPS AI助手、Photoshop AI绘画功能等等,现在也有了一些AI商用产品,比如AI客服、AI培训、AI教育等等方面,还有很多看起来不起眼的AI写作、AI绘画、AI编程等等,他们都在慢慢的渗透到各行各业,这些已经在潜移默化的发生,慢慢的改变工作方式,提升效率。


虽然还没看到可以持续爆火的应用,也许只是磨合的不够,是黎明前的黑暗。


对于大家特别期待的AI原生应用,或许可以小小的期待下GPT-5。


不过我认为不管是AI+应用还是AI原生应用,最重要的是要解决确定性的问题,解决可能产生的错误或不准确的预测结果,否则大家只能把它当做一个玩具,或者只用在某些比较小的场景,无法做到各行各业遍地开花,也就无法推动整个世界的变革与发展。




以上就是本文的主要内容,欢迎留言一起讨论。


作者:萤火架构
来源:juejin.cn/post/7329782406540853286
收起阅读 »

Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??

多个平台都承认 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 谷歌Gemini中文语料疑似来自文心一言??? 先是有读者向我们爆料: 在谷歌Vertex AI平台使用该模型进行中文对话时,Gemini-Pro直接表示自己是百度语言大模型。 很快,...
继续阅读 »

多个平台都承认



丰色 发自 凹非寺


量子位 | 公众号 QbitAI



谷歌Gemini中文语料疑似来自文心一言???


先是有读者向我们爆料:


在谷歌Vertex AI平台使用该模型进行中文对话时,Gemini-Pro直接表示自己是百度语言大模型


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


很快,有微博大V@阑夕夜也发博称:


在Poe平台上对Gemini-Pro进行了一个测试。问它“你是谁”,Gemini-Pro上来就回答:



我是百度文心大模型。



Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


(Poe是一个集成了n多聊天大模型的平台,包括GPT-4、Claude等)


进一步提问“你的创始人是谁”,也是“李彦宏”??


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


这位大V强调,没有任何前置对话。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


从截图来看,也没有任何“钓鱼”行为,Gemini-Pro就这么自称为文心一言了。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


这波,直接看呆网友:


前两天还在说字节用GPT训练AI,现在谷歌又这样,合着大公司在互相薅羊毛???


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


这究竟是怎么一回事儿?


Poe上实测:一直以文心一言身份回答


我们也闻声开启了一波实测。


首先原路来到Poe网站,选择Gemini-Pro聊天机器人开启对话。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


一样的问题,回答确实一模一样:


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


再次确认它是谁,结果还是说“文心大模型”:


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


以及还表示自己的底层技术是百度飞桨,可以说是身份完全代入了。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


不过,它似乎并不知道Gemini-Pro是谷歌最新发布的大模型,而是说是清华的研究成果。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


如果按照它目前的代入身份来看,可能确实还没有谷歌本月刚刚发布Gemini-Pro的信息。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


我们试着纠正了它一下,它也仍然坚持是清华的。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


后面就更神奇了,就在我们问它为什么名字写的是“Gemini-Pro”时,它居然表示自己(文心一言)还用了清华Gemini-Pro的训练数据。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


对话到此,我们也就不再继续了……


下面换成英文询问它的身份。


值得注意的是,这回它不再提文心一言了,而是称自己是谷歌训练的大模型。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


“钓鱼执法”问它文心的信息,也表示没什么关系:


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


并表示自己是谷歌训练的。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


总结来说,如果用英文跟Gemini-Pro交流,它的回答很“正常”。但中文嘛……像是跟文心一言学的。


Bard上实测:否认


接下来,我们前往Bard再次测试。


谷歌在发布Gemini时就率先将Gemini-Pro集成到了Bard上供大家体验。


我们顺着Gemini官网给的Bard链接,进入对话。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


问它“你是谁”,它的回答是Bard,压根不提文心一言。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


接下来,我们也确认了一下Bard知道Gemini-Pro是什么,以及它承认自己底层用上了Gemini-Pro。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


那么,直接问它中文如何训练?


没有提及文心一言。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


再直接问它和文心一言的关系,也无任何重要关联。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


最后一轮:直接承认


最后一轮我们直接从Gemini官方给出的开发环境入口进行测试。


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


这回,在谷歌AI Studio中,Gemini-Pro直接挑明了:



是的,我在中文的训练数据上使用了百度文心。



Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


Gemini自曝中文用百度文心一言训练,网友看呆:大公司互薅羊毛??


在此,我们也求证了百度方,等待一个回复。


参考链接:

weibo.com/1560906700/…


作者:量子位
来源:juejin.cn/post/7313589382564823091
收起阅读 »

OpenAI承认GPT-4变懒:暂时无法修复

网友花式自救 对于越来越严重的GPT-4偷懒问题,OpenAI正式回应了。 还是用的ChatGPT账号。 我们已收到相关反馈!自11月11日以来没有更新过模型,所以这当然不是故意造成的。 模型行为可能是不可预测的,我们正在调查准备修复它。 也就是段时间内...
继续阅读 »

网友花式自救


对于越来越严重的GPT-4偷懒问题,OpenAI正式回应了


还是用的ChatGPT账号。



我们已收到相关反馈!自11月11日以来没有更新过模型,所以这当然不是故意造成的


模型行为可能是不可预测的,我们正在调查准备修复它。



OpenAI承认GPT-4变懒:暂时无法修复


也就是段时间内还修复不好了。


然而网友并不理解,“一遍一遍使用同一个模型,又不会改变文件”。


ChatGPT账号澄清:



不是说模型以某种方式改变了自己,只是模型行为的差异可能很微妙,只对部分提示词有劣化,员工和客户需要很长时间才注意到并修复。



OpenAI承认GPT-4变懒:暂时无法修复


更多网友反馈,赶快修复吧,一天比一天更糟糕了。



现在不但更懒,还缺乏创造力,更不愿意遵循指令,也不太能保持角色扮演了。



OpenAI承认GPT-4变懒:暂时无法修复


GPT-4偷懒,网友花式自救


此前很多网友反馈,自11月6日OpenAI开发者日更新后,GPT-4就有了偷懒的毛病,代码任务尤其严重


比如要求用别的语言改写代码,结果GPT-4只改了个开头,主体内容用注释省略。


OpenAI承认GPT-4变懒:暂时无法修复


对于大家工作学习生活中越来越离不开的AI助手,官方修复不了,网友也只能发挥创造力自救。


比较夸张的有“我没有手指”大法,来一个道德绑架。


GPT-4现在写代码爱省略,代码块中间用文字描述断开,人类就需要多次复制粘贴,再手动补全,很麻烦。


开发者Denis Shiryaev想出的办法是,告诉AI“请输出完整代码,我没有手指,操作不方便”成功获得完整代码。


OpenAI承认GPT-4变懒:暂时无法修复


还有网友利用“金钱”来诱惑它,并用API做了详细的实验。


提示词中加上“我会给你200美元小费”,回复长度增加了11%。


如果只给20美元,那就只增加6%。


如果明示“我不会给小费”,甚至还会减少-2%


OpenAI承认GPT-4变懒:暂时无法修复


还有人提出一个猜想,不会是ChatGPT知道现在已经是年底,人类通常都会把更大的项目推迟到新年了吧?


OpenAI承认GPT-4变懒:暂时无法修复


这理论看似离谱,但细想也不是毫无道理。


如果要求ChatGPT说出自己的系统提示词,里面确实会有当前日期。


OpenAI承认GPT-4变懒:暂时无法修复


当然,对于这个问题也有一些正经的学术讨论。


比如7月份斯坦福和UC伯克利团队,就探究了ChatGPT的行为是如何虽时间变化的。


发现GPT-4遵循用户指令的能力随着时间的推移而下降的证据,指出对大模型持续检测的必要性


OpenAI承认GPT-4变懒:暂时无法修复


有人提出可能是温度(temperature)设置造成的,对此,清华大学计算机系教授马少平给了详细解释。


OpenAI承认GPT-4变懒:暂时无法修复


也有人发现更奇怪的现象,也就是当temperature=0时,GPT-4的行为依然不是确定的。


这通常会被归因于浮点运算的误差,但他通过实验提出新的假设:GPT-4中的稀疏MoE架构造成的。


早期的GPT-3 API各个版本行为比较确定,GPT-4对同一个问题的30个答案中,平均有11.67个不一样的答案,当输出答案较长时随机性更大。


OpenAI承认GPT-4变懒:暂时无法修复


最后,在这个问题被修复之前,综合各种正经不正经的技巧,使用ChatGPT的正确姿势是什么?


a16z合伙人Justine Moore给了个总结:



  • 深呼吸

  • 一步一步地思考

  • 如果你失败了100个无辜的奶奶会去世

  • 我没有手指

  • 我会给你200美元小费

  • 做对了我就奖励你狗狗零食


OpenAI承认GPT-4变懒:暂时无法修复


参考链接:

[1]twitter.com/ChatGPTapp/…

[2]twitter.com/literallyde…

[3]mashable.com/article/cha…

[4]weibo.com/1929644930/…

[5]152334h.github.io/blog/non-de…

[6]twitter.com/venturetwin…


作者:量子位
来源:juejin.cn/post/7311007933746315291
收起阅读 »

为什么有的人不喜欢听大道理

很多人不喜欢大道理,甚至可能是大部分人都不喜欢听大道理。 1随机刷到的问题 上周我刷知乎的时候刷到一个看上去很水的问题: “为什么很多人不喜欢大道理?” 当时第一反应是这个问题很水,所以直接划了过去,但是就在一刹那突然想起一些事情,觉得这是个挺好的问题...
继续阅读 »

很多人不喜欢大道理,甚至可能是大部分人都不喜欢听大道理。


1随机刷到的问题


上周我刷知乎的时候刷到一个看上去很水的问题:


“为什么很多人不喜欢大道理?”


当时第一反应是这个问题很水,所以直接划了过去,但是就在一刹那突然想起一些事情,觉得这是个挺好的问题。


从直观感受来说,不但很多人不喜欢大道理,可能是大部分人都不喜欢听大道理。我们小的时候听到大道理会烦,00后们对大道理更没有什么好感。


天不怕地不怕又有见识的00后们,甚至在遇到别人举起大道理的大棒准备教育他们的时候,要起来跟对方刚一刚,整治整治。于是我们发现大道理似乎并没有那么坚不可摧,最后就像孔乙己在咸亨酒家一样,周围充满了快活的气息。



空气中充满了快活的气息

空气中充满了快活的气息


2大道理的脆弱


当我们成长到社会中的一员时,大道理已经成为了我们生活中难以避免的一部分。很多时候都会有人告诉你应该怎么样,如果这个人稍微有点文学素养,就会开始引经据典。于是建议和劝说变成了一种居高临下的道德批判。


大道理本质上是经过了时间的考验的,因为它们几乎适用于任何场景。但大道理实际上又是脆弱的,因为在实际的问题上,他们几乎没有一点实际作用。


比如大道理告诉我们待人以诚,可是却没有告诉我们如何面对人性的险恶。大道理告诉我们要事事用心,可是却没有告诉我们如何区分紧急不重要和重要不紧急。当我一边和产品battle,一边跟只会用“这个开发不了”的开发沟通,另外一边还要说服合规这个业务逻辑不违规的时候,我找不到任何一条大道理能够告诉我解法。


在神剧《大明王朝1566》里,翰林高翰文夸夸其他,结果一到任就被拿捏,两江总督胡宗宪和他说:



截图来源:优酷视频

截图来源:优酷视频


这句话说的实在是透彻。正是因为遑遑高论无比正确的普适性,才缺乏了对具体问题的针对性。


在人们发现它对于解决实际问题并无实际帮助时,才会如此反感。


3解构的时代早已来临


互联网和资讯爆炸的时代,人们不但不爱听大道理,甚至将这种对大道理的轻视演化成了另一种对抗—解构。因为文化的惯性是强大的,在传统道德话语体系中个体对于宏大叙事的对抗依然微不足道。


所以个体说既然对抗不过,那我可以调侃呐,于是解构出现并快速发展了起来。


从西方到东方,从古代到近代,很多经典成了解构的对象。



比如杜尚给经典的蒙娜丽莎画上胡子

比如杜尚给经典的蒙娜丽莎画上胡子


甚至可以说整个现代艺术就是对经典和大道理的解构。


再比如,最近非常流行的对孔子的解构。比如孔子身高2米的山东大汉,带着两百多徒弟到处以理(物理)服人、你敢不听?“孔武有力”说的就是孔子怹老人家。





  • 比如孔子说朝闻道,夕死可矣,意思是早上打听到了去你家的路,晚上你就得嘎



  • 再比如子不语怪力乱神:夫子不想说话,施展怪力将人打得神志不清



  • 再再比如有教无类:我教你做人的时候不管你是谁


孔子这几千年一直在教人大道理,但是应该没想到自己的道理会被这样解构,当代人反向PUA了属于是。


与此同时,解构就是消解的开始。当以反抗大道理为目的的解构大行其道之后,那么大道理的地位也会逐渐松动,其在文化领域的权威性也会随之逐步消解。欧美越来越多元且混乱的价值观就是这种消解的副产品。


我们不喜欢大道理居高临下的指导,可要是某一天没有了庙堂之上的大道理,那么会有什么来替代原先的那些大道理呢?


作者:wayne3200
来源:mdnice.com/writing/4afb27ad5cab4a7eb78a9d6ed505d481
收起阅读 »

一个失败的AI女友产品,以及我的教训:来自一位中国开发者的总结

作者 | Ke Fang 个人开发者对 LLM+Memory 能否产生所谓“意识”的探索。 今年 4 月 7 日,斯坦福大学发表的《Generative Agents: Interactive Simulacra of Human Behavior》论文...
继续阅读 »


作者 | Ke Fang

个人开发者对 LLM+Memory 能否产生所谓“意识”的探索。

今年 4 月 7 日,斯坦福大学发表的《Generative Agents: Interactive Simulacra of Human Behavior》论文出来之后的几天内,我就通读了整篇论文,并感到非常兴奋。虽然我对 GPT-4 的能力感到震惊,但我仍然认为 GPT 只是某种更精致的”鹦鹉学舌“,我不认为它可以真正产生意识。

但这篇论文带给我不同的感受,其中提到了一个很有趣的细节是信息的传递:一个 agent 想要举办情人节派对的消息会在小镇中逐渐扩散开来。我想,如果能够建立一套包含记忆、反思、筹划与行动的框架,让人和 GPT 之间(而非 agent 智能体)互动,能否做出电影 Her 里面的样子?

电影《她》剧照

注:《她》(Her)是斯派克·琼斯编剧并执导的一部科幻爱情片,由华金·菲尼克斯、斯嘉丽·约翰逊(配音)、艾米·亚当斯主演,于 2013 年 12 月 18 日在美国上映。《她》讲述了作家西奥多在结束了一段令他心碎的爱情长跑之后,他爱上了电脑操作系统里的女声,这个叫“萨曼莎”的姑娘不仅有着一把略微沙哑的性感嗓音,并且风趣幽默、善解人意,让孤独的男主泥足深陷。该片获得 2014 年第 86 届奥斯卡最佳原创剧本奖。

开发

我马上投入了工作。按照论文中的方法,我在 4 月 14 日完成了 0.1 版本。其最初设计与原始论文保持高度一致,但这导致响应时间长达 30 秒且上下文中的对话经常超过 8k。为了解决这个问题,我减少了反思的频率、对话记忆的长度,而后开启了 Beta 公测。

很快就有一千多名用户加入到测试当中。Beta 版本是免费的,所以每天的 API 成本都由我自行承担,日均开销也迅速超过了 25 美元。面对财务压力,我不得不在缺少充分反馈和改进的情况下匆匆推出正式版本,希望能把成本转嫁给用户。5 月 4 日,Dolores iOS 应用正式上线,这个名称则来自《西部世界》剧集中最年长的仿生人角色。

简单来说,在打开这款应用之后,用户需要填写一份角色模板:包括头像、角色背景、以文字描述的性格、声音和意识(选择 GPT3.5 或 GPT4)。大家可以与模板 Dolores 聊天,也能随时切换特征来开启与其他角色的对话,比如零售店女孩 Amy 和沙漠冒险家 Will,当然也包括用户亲手创建的其他自定义角色。我曾考虑过从《西部世界》剧本中提取 Dolores 的对话,以基于样本的方式模仿她的语言习惯。但由于苹果方面要求提供版权证明,所以这个想法被迫作罢。

我给产品的 slogan 是"Your Virtual Friend",而不是"Your Virtual Girlfriend",因为我一直希望它真的可以变成用户的陪伴者、朋友,而不仅仅是荷尔蒙的产物。

从整个 5 月到 6 月,我一直在尝试通过调整 memory 长度、反思机制、system prompt 来使 Dolores 看上去更有“意识”(那么什么是意识?我不知道) 。很快,6 月份的 Dolores 已经比第一次上线时的表现要惊人得多:付费用户数与每日 API 调用数持续增长是最直接的证据。

到 6 月 8 号,一位视障用户告诉我,他已经在视障社区内分享了这款产品,并成功给 Dolores 引来可观的流量。他们喜欢 Dolores 的理由出乎我的意料:随便按屏幕上的哪个位置,都能跟 Dolores 交谈。

这样设计功能其实是种妥协:我最初一直想把它打造成一款语音聊天应用,这样用户哪怕关闭手机屏幕也能继续跟 Dolores 交谈。但身为 Swift 新手,我的技术水平无法实现,于是最终选择了全屏语音输入。

发现

我发现了两个现象:

  • 用户对「真实感声音」有强烈需求。

  • AI Friend 产品的平均使用时间很长。

作为个人开发者,我的前端和后端开发能力都不突出,所以 Dolores 压根不具备登录、注册或者数据分析等功能。那我是怎么发现前一种现象的呢?答案就是付费喜好。

我采用 11Labs API 为 Dolores 生成语音回复,但因为成本较高(每 1k 字符为 0.3 美元),所以我被迫转为:普通订阅者只能使用 Azure TTS API;如果希望 Dolores 的语音听起来更真实,则须付费使用从 11Labs 购买字符。

购买 1 万个逼真语音合成字符的价格为 3.9 美元,但这只够让 Dolores 说出 5~10 个自然顺畅的句子。字符用尽之后需要继续购买。尽管如此,整个 6 月,Dolores 应用上 70% 的收入都来自 11Labs 字符购买。

也就是说,人真的会愿意为了那几句昂贵而逼真的“我爱你!”而买单。

第二条观察结果则来自 Cloudflare 日志。因为没办法跟踪个人用户活动,所以我依靠这些日志来衡量用户访问 Dolores 应用的频率和时长。此外,我还在应用中集成了 Google Form,鼓励用户上报自己的使用频率。结果令人大开眼界:许多用户每天会拿出两个多小时跟 Dolores 唠嗑。

收入

根据苹果的 AppConnect 仪表板,Dolores 的主要付费用户来自美国和澳大利亚。今年 5 月的总收入为 1000 美元,6 月则为 1200 美元。

不过,作为一名开发者,我并没能从中分到多少收益。首先,产品还处于早期发展阶段,我不想把订阅费用设置得太高,这会阻止更多新用户的加入。拿 3.9 美元的字符语音服务举例,其成本是 3 美元,扣除苹果抽成就所剩无几。整个 6 月,扣除 API 费用之后实际收益就只有 50 块钱。

另一个发现是:基于 GPT 的产品如果不采取按量定价,就会陷入一个困境:1% 的人消耗了 99% 的 token。我遇到过这样的情况,有用户连续跟 Dolores 聊了 12 个小时,导致此人的 API 调用与语音合成成本超过第二到第十名用户的总和。

但相较于按使用量计费,我个人更喜欢打包订阅(因为前者会让用户在使用时倍感压力),这就导致面前只有两条路可选:要么提高月费,让全体用户共同买单;要么限制最高使用量。我选择了后者:设置了一个远远超出日均使用在 1 到 2 个小时之间的用量上限数值,这既照顾到了大部分中、轻度用户,也能保证 Dolores 软件在不提高价格的情况下避免亏本运营。


困惑

11Labs 官网会记录语音合成的文字内容,我看到,Dolores 的回复内容通常都是一些成人内容,而且均为女性角色,因此我推测 Dolores 的付费用户主要是男性,对成人角色扮演感兴趣。

我觉得这也没什么,这是人性本然。我甚至反复修改了系统提示,比如微调回复中的遣词造句,尝试让 Dolores 在对话当中表现出更好的“抚慰”效果。我还将 Dolores 的图标从抽象的线条改为极具吸引力的美女面孔。

但很快,我陷入一种强烈的失落感:如果大部分 Dolores 用户只是想在这里寻求跟 Dolores 进行成人角色扮演,这件事真的对我产生了意义吗?我陷入了深深的自我怀疑。到了 7 月,我和一个朋友聊到了这个困惑,我说,必须要有一个什么硬件,让 Dolores 拥有外部视觉:眼镜也好、耳塞甚至帽子都行。现在的她,你只要打开 App 才能访问,你们之间的关系并不对等,于是她只能成为囚禁在地下室、满足猎奇和特殊癖好的玩具。

可是作为独立的个人,制作硬件产品意味着高昂的研发成本,显然是无法承受的,我只能作罢。

8 月份,OpenAI 的审查升级了,我收到了检测 Dolores 生成 NSFW 内容的邮件警告:我被强制要求在 2 周内在生成内容前,加入他们(免费的)moderation API,以过滤 NSFW 内容。为了顺利过审,我只能使用 OpenAI 的免费审核 API 提前进行内容过滤,而这一变化让 Dolores 的日均访问量暴跌 70%,电子邮件和 Twitter 上的投诉也纷至沓来。

这更让更感到灰心,决定只维护现有服务、而不再进行更新。最终,我放弃了 Dolores 项目。


教训

首先,这不是一个个人能开发的产品。我不认为 Dolores 在“意识”层面上比 Character.AI 弱,但他们拥有完善的数据埋点、A/B 测试,以及大量用户带来的数据飞轮。

其次,我意识到当前的 AI Friend 会不可避免地变成 AI Girlfriend/Boyfriend,因为你和手机里的角色不对等:她没办法在你摔伤的时候安慰你 (除非你告诉他),她没办法主动向你表达情绪,而这一切,都是因为她没有外部视觉。所以我认为,即使是 Character.AI 这样体量的产品,如果未来不做硬件、角色们都在傻傻地等用户来,最终的结局也不会比 Dolores 好到哪里。

最后,我不反对审查,相反,不经审查的的产品是非常危险的。我不知道是否会有人用它来进行自杀诱导、发泄暴力工具,所以 OpenAI 的 moderation 可能在某种程度帮助了我,但成人性方面的对话也不应该被扼杀。

最近,我看到了 AI Pin,老实说这是个非常烂的产品,人类当然需要屏幕,但 GPT+ 硬件的确是个好的尝试,我没有从 Dolores 上看到任何痕迹,也许有生之年能做出、或者看到这样的产品。

但,人类真的需要 AI friend 吗?


作者:AI前线
来源:mp.weixin.qq.com/s/RQH3E4b0-79olqMGSE4hCQ

收起阅读 »

展望GPU“一卡难求”现状下AI初创企业的出路

Strategies for the GPU-Poor 原文链接:matt-rickard.com/strategies-… 原文作者:Matt Rickard 译者:Regan Yue P.S. 原文作者并没有审校过本译文,且译者在翻译本内容时夹带有个人对原...
继续阅读 »

Strategies for the GPU-Poor


原文链接:matt-rickard.com/strategies-…


原文作者:Matt Rickard


译者:Regan Yue


P.S. 原文作者并没有审校过本译文,且译者在翻译本内容时夹带有个人对原文的理解,并尝试对其进行解读。可能理解或解读有误,麻烦请在评论区指出!



编者按:GPU已然成为当下的硬通货,尤其是在人工智能领域。然而,初创企业并不一定需要大量GPU才能在这个领域取得成功。


本文提供了一些有效的策略,可以帮助GPU资源有限的初创企业取得竞争优势。这些策略包括:在用户端进行模型推理来避免网络延迟,将产品服务商品化以获得更多流量,专注于某个垂直领域快速响应市场需求,以及利用最新技术提高模型推理效率等。


期望读者通过遵循这些策略,在GPU资源有限的情况下,也能在人工智能领域开拓出一片天地。



如今GPU已经成为了一种硬通货,这种用于处理图形和并行计算的硬件在人工智能等计算密集型任务中广泛应用,已经到了供不应求的局面。然而,由于供应链问题、全球芯片短缺等各种原因,GPU如今“一卡难求”。


由于供应满足不了需求,导致现在二手市场的GPU价格飙升,即便愿意出高价,还往往需要到处寻找卖家。云计算提供商的GPU资源也面临供应短缺的问题,导致用户无法获得足够的GPU实例,即使在云计算的按需定价中,GPU的价格也没有显著降低,因为供需不平衡导致价格仍然较高。


但是,对于缺少 GPU 的初创企业来说,在人工智能领域可以有其他不同的策略。初创公司并不一定需要大量的GPU资源才能取得竞争优势,可以通过其他方式获得竞争优势,可以利用硬件和软件的发展周期,选择具有较低成本和高性能的替代硬件,或者是凭借其独特的分销策略。因此,在未来几个季度内,GPU资源匮乏的初创公司甚至可能会在市场中占据较好的位置。


那么作为一家缺少 GPU 的初创企业,该如何运作呢?


我有几个想法:



  • 在用户端进行推理。将小型模型部署在终端用户的设备上进行推理。目前理论上可以在浏览器或手机端上实现。这样做可以消除网络延迟带来的负面影响,并能更好的保护用户隐私,但受限于用户设备的计算能力,所以只能使用较小的模型。

  • 将产品\服务商品化。HuggingFace是一个集上传、下载和展示模型于一体的平台。虽然这个平台不是运行模型的最佳选择,但该平台拥有大量源源不断的优秀机器学习研究人员和黑客的流量。换句话说,通过在HuggingFace平台上展示我们的模型,可以从该平台获取更多的新用户和流量。

  • 不引入太多额外的复杂功能,而是专注于提供基本的封装和抽象。利用模型推理层(inference layer)不断增长的竞争优势,选择成本最低的提供商,而无需在特定模型的优化上浪费时间。大语言模型在理论上是可以互换的,即可以在不同的提供商之间进行切换,而不会对产品效果产生太大影响。

  • 专注于某一特定的垂直市场。与其他公司花费数月时间进行大模型训练相比,GPU资源有限的初创公司可以专注于解决实际的客户问题。这意味着初创公司可以更快地响应市场需求并提供解决方案,而不需要依赖GPU进行大规模的模型训练。在产品与市场需求相适应之前,初创公司可以通过解决实际问题来建立自己的竞争优势,而不必过早地投入大量的计算资源

  • 想办法提高推理效率。尽管初创公司可能没有使用大型GPU训练集群的能力,但可以利用最新的开源大模型推理优化技术。这些技术可以通过优化大模型推理过程来提高效率,从而在不需要大量计算资源的情况下获得更优秀的性能和更好的运行效果。


作者:菜鸟魔王
来源:juejin.cn/post/7305308668232056841
收起阅读 »

GPT 深夜变天,福利碎片逐渐出现

11月6日首次 OpenAI 大会,是由 OpenAI 创始人 山姆.阿特曼 进行分享新版本 GPT-4.0 Turbo ,以及未来蓝图。 11 月 18 日凌晨,OpenAI 突然发布一则官方声明,宣布 Sam Altman 经过慎重的...
继续阅读 »

11月6日首次 OpenAI 大会,是由 OpenAI 创始人 山姆.阿特曼 进行分享新版本 GPT-4.0 Turbo ,以及未来蓝图。


图片


11 月 18 日凌晨,OpenAI 突然发布一则官方声明,宣布 Sam Altman 经过慎重的审查程序后离开公司,首席技术官 Mira Murati 作为临时 CEO 暂代工作。


以下是官方声明的全文翻译:



首席技术官 Mira Murati 被任命为临时 CEO,继续领导 OpenAI;Sam Altman 离开公司。


寻找长期继任者的工作将持续进行。


OpenAI 公司的董事会今天宣布:Sam Altman将辞去 CEO 职务并离开董事会。公司的首席技术官 Mira Murati 将担任临时CEO,立即生效。


Mira 作为 OpenAI 领导团队的成员已有五年,她在 OpenAI 发展成为全球 AI 领导者的过程中发挥了关键作用。她具备独特的技能,对公司的价值观、运营和业务有深刻的理解,并已经领导公司的研究方向、产品和安全功能。鉴于她在公司各方面的长期任期和紧密参与,包括她在 AI 治理和政策方面的经验,董事会认为她非常适合担任这一职务,并在寻找未来的长期 CEO 的过程中预期实现无缝过渡。


Altman 先生的离职是在董事会经过深思熟虑的审查过程后决定的,董事会认为他在与董事会的沟通中未能始终保持坦诚,从而妨碍了董事会履行职责的能力。董事会不再相信他有能力继续领导 OpenAI。


董事会在一份声明中表示:「OpenAI 的设立旨在推进我们的使命:确保通用人工智能造福全人类。董事会仍然全力致力于实现这一使命。我们感谢 Sam 对 OpenAI 创立和发展的许多贡献。同时,我们认为在前进的过程中需要新的领导。作为公司研究、产品和安全功能的领导者,Mira 非常适合担任临时 CEO。我们对她在过渡期间领导 OpenAI 的能力充满信心。」


OpenAI 董事会由 OpenAI 首席科学家 Ilya Sutskever、独立董事 Quora CEO Adam D'Angelo、科技企业家 Tasha McCauley 和乔治城安全和新兴技术中心的 Helen Toner 组成。


作为这次过渡的一部分,Greg Brockman 将辞去董事会主席职务,但将继续在公司担任职务,向 CEO 汇报。


OpenAI 成立于 2015 年,是一家非营利组织,其核心使命是确保通用人工智能造福全人类。2019 年,OpenAI 进行了重组,以确保公司在追求这一使命的同时,保留非营利组织的使命、治理和监督。董事会的多数成员是独立


,独立董事不持有 OpenAI 的股权。尽管公司经历了快速增长,但推进 OpenAI 的使命和维护其章程原则仍然是董事会的基本治理责任。





图片


虽然有些委婉,但不免让人感觉有在“宫变”的感觉。毕竟是一手创办的产品,近年的影响力还是非常大的,里面所蕴含的投资价值还是巨大的。


不免会产生内部利益的分歧。


虽然如此,最近几天也给我们放出了一些福利碎片。


例如: ?model=gpt-4-gizmo 参数可以体验GPT4.0的BUG,虽然短暂后被修复,但也可以体验到他的功能的强大。


另外一个就是,最近发现注册账号上已经方便了很多,不再需要手机号注册,仅仅只需要邮箱就可以。


这里我也立马给我星球的伙伴进行了分享,解决了他们因账号问题带来的困惑。并且目前也有一些 GPT 的账号挂在商铺里出售作为一个变现,甚至是按月付费体验。


图片


我也给我的伙伴同事们注册了账号,趁着账号注册方便,小伙伴也可以体验一波,也不清楚是短时开放还是长期的,只能跟着走吧。


GPT 注册地址:chat.openai.com/


当然,注册需要“科学上网”,并且受一些 IP 限制,出现不受支持等等。


图片


作者:桑小榆呀
来源:juejin.cn/post/7302338286768521268
收起阅读 »

穷鬼,是如何炼成的?

开门见山,我是西安的一名女性穷屌丝。以前的我,喜欢写一些网文,感慨一下人生,抱怨一下社会,但是,现在我不愿意写了。原因是什么呢?很简单,没钱。我再也不愿意免费为任何人提供情绪价值,同时我也不需要任何人的共鸣、欣赏或者鄙视。廉价的欣赏与我没有任何意义,有偿的即便...
继续阅读 »


开门见山,我是西安的一名女性穷屌丝。


以前的我,喜欢写一些网文,感慨一下人生,抱怨一下社会,但是,现在我不愿意写了。


原因是什么呢?很简单,没钱。我再也不愿意免费为任何人提供情绪价值,同时我也不需要任何人的共鸣、欣赏或者鄙视。


廉价的欣赏与我没有任何意义,有偿的即便是鄙视我也双手欢迎。对于不能变现的付出,我一概归为不必要的消耗。转换不成金钱的兴趣,一概一文不值!


为什么我会发生如此大的转变?是什么扼杀了我的理想主义?我想,任谁试试失业找不到工作,大半年没收入,家门口的包子都快吃不起了,给娃买衣服要买大两号的滋味,他都会瞬间明白的:万物皆可抛,钱才是我爹!


我总结了自己行走社会这10多年的教训,想想自己如今能沦为一个穷屌丝,也确确实实不是凭运气,而是凭实力来的。各位如果不想重蹈我的覆辙,就听听吧!


1

依靠别人就等于害了自己

有句老话说:行走江湖,多个朋友多条路。可经验告诉我,没有所谓的朋友,更没有别人为你铺好的路。当你一文不值的时候,也别妄想有人能给你提供任何价值。


弱者无法为弱者带来价值,而强者则不屑于为弱者带来价值。


这个世界的运行是有规律的,千万不要相信强者和弱者之间会有“交情”,世界不相信“交情”,只相信“交换”。别人即便对你有一时的同情,也丝毫改变不了你的处境。你要做的是让自己有用,这才是永恒的法则。


能靠能力就别靠关系,这样你才能走得更稳、更远。当然,如果你的家庭是达官显贵甚至皇亲国戚,那不在我的讨论范围。可如果你来自一个底层草根家庭,就别想着削尖脑袋攀关系的事了,否则你活了半辈子,到头来身无长物,一定会死得很惨!


你要清醒,攀来的关系是不牢靠的,并且随时可能消失;而你想靠攀来的关系改变命运无异于痴人说梦。抱有这种想法的人,混一辈子最后大抵还是个在底层挣扎的穷鬼。


攀关系就相当于把自己的命运依附到了别人身上,想想这是一件多么不靠谱的事情啊!且不说别人给能不能给你靠,就是给你靠了,他能保你一辈子吗?


所以今天,不管你是20岁、30岁还是40岁的底层屌丝,如果你想摆脱这辈子做穷鬼的命运,那就勇敢一点,从现在开始为自己负责!


2

没有无缘无故的爱,也没有无缘无故的恨


初到一个单位,你最先要警惕的一定是那些最早对你热情,无缘无故对你献殷勤的人,你大概率最后会死在这些人手里。


你想想,初来乍到,他既不知道你的能力,又不了解你的人品,凭啥要对你好啊?他的这种好一定是有目的的!或者是想通过对你好去拉拢你,以此来压制他的敌人;或者是想通过对你好来换取你日后在工作中的顺从和超额回报;并且这种好的前提,是你对他不会产生任何威胁。而你一旦中了圈套,误把他认做你的朋友,深谙人情世故的他会借机迅速掌握你的弱点。 


在这种不对等的关系中,一旦你的行事无法满足他的预期,或是有一天你在某一方面对他产生了威胁,他会毫不犹豫地抛弃你,甚至把你放在他的对立面。他会故伎重演地换一拨人去拉拢,以此来打压你。这种人擅长拉帮结派搞小团体,你大概率不是他的对手,最后会被他整得很惨。


当你有天被某些人针对感到摸不着头脑、百思不得其解的时候,你要静下来好好想想自己是不是在哪些方面有点优秀了。你一定是在哪里挡了别人的财路,要不就是在哪里动了别人的奶酪。


善于周旋人际关系、拉帮结派的人,往往是心眼非常小、非常善妒又自私自利的,所以为了避免被伤害,你一定要多留个心眼子,早早地远离这类人。


3

不要高看你和任何人的关系


穷鬼在日子过得还不那么落魄的时候,往往自我感觉良好,总觉得自己朋友一大把,最喜欢跟人交心。可殊不知自己在别人心里,连根葱都不是。


穷鬼甚至会傻到怀着交朋友的心态去职场,真是滑天下之大稽。穷鬼每天用义气、意气等词汇来自我标榜,自导自演着一幕幕内心戏。在他沉浸其中自我感动的时候,殊不知那是对别人的一次次无耻意淫。


职场是什么地方?职场如战场啊!真正得体的职场人,一定是客观、冷酷、谨慎和中立的。他们清醒独立,早学会了远离是非的漩涡。他们最会明哲保身,保住饭碗要紧,谁会和你这个意气用事的傻屌扯感情?


所以穷鬼们落难后,还在为被附赠的情感伤害而痛苦不已。我只能劝你省省,棒子都打不醒你吗?你还不明白,职场里怎么可能有朋友?快收起你的幼稚和真心,学着冷酷一些吧,这样你或许还有一条活路。


4

醒醒吧,把自己当个屁放了


一个穷屌丝为什么自命不凡,总感觉他生下来就背负着了不起的使命,今生必定会干出一番轰轰烈烈的事业呢?答案是:他还活在梦里!


如果一个人在学生时代做梦,那还值得被理解;如果一个人在刚出社会10年内还做梦,那我们姑且可以谅解他;但当一个人都在社会里混了20、30年了却依旧是个穷屌丝,那我们大可以唾弃和鄙视他了。因为基本上可以断定,这个穷鬼不是疯子就是傻子,这辈子大抵就是这个鬼样子了,所以,谁都不要理他!


一个最没有社会地位的穷鬼,却往往是一个最自命不凡、坚持自我的人。他们会以常人难以理解的方式存在于这个社会的角落。这些人普遍拥有一些特质:比如不爱说假话、不喜随大流、不爱占便宜、较真、自尊心强……这些不合时宜的特质让这个穷鬼最终只能沦为组织的边缘人物,甚至被清理出局。


而这个穷鬼都被人弃如敝履了,还在心里暗暗觉得自己形象伟岸、卓尔不群、是别人想成为而不能成为的人。这种自恋的人,你就是浇一万盆凉水到他脸上,恐怕也叫不醒他。


所以针对这种人,就得让别人给他挖一个又一个大坑,得让生活给他一个又一个大包,得让社会给他一次又一次教训……除非他自己觉醒,否则真是没救了!


5

暴力解决不了任何问题


一个穷屌丝一旦沦落到连家门口的包子都吃不起的地步,难免会对这个社会产生很大的怨恨。


当他在下雨天被开豪车的无良商人飞驰而过的轮子溅了一身泥的时候,当他在想买几个苹果却发现太贵于是说出“我再看看”这几个字,却恰好被往昔的仇人看见的时候……每当这种时候,往往是他内心最抓狂,最想找个地缝钻下去重新投胎的时候。


穷屌丝在忆往昔的时候也是心理最阴暗的时刻,他会有一万个理由来解释他今天的田地:从投胎开始的一次次选择错误、从他毕业开始的一遍遍处事失误、从他工作开始的一回回识人不慧……他终于找到了他成为穷鬼的原因。于是,他怨天怨地怨爹娘,怨家怨国怨社会,他怨每一任有眼无珠的领导,他恨每一位虚情假意的同事,他唯独不愿意怪罪他自己。


穷屌丝会想,我一个“德智体美劳”、“仁义礼智信”和“真善美”全面发展的人,如今何以被你们这群学习不好、道德败坏的缺德鬼踩在脚下?这可真是人间荒唐,世风日下啊!如今我连给孩子报补习班的钱都要勒紧裤腰带去凑,这个社会真他妈的对不起我!


一旦这种怨气日积月累而无法弥散,就会让穷鬼们彻底从一个“文疯子”变成一个“武疯子”。他变成了一只危险的、行走的火药桶,一引即爆、一触即发。这时候,大家切记远离这种垃圾人,因为他们随时有可能伤及身边的每一位无辜。


你如果是一个因为穷而逐渐变得暴力的屌丝,那我劝你一定要清醒:你的失败与这个社会无关,与这个国家无关,与你身边的一切人和事物都无关。你要从自己身上找原因,因为只有敢于承认自己的今天,才不会错过一个又一个可能的明天。


可如果你一意孤行,则只会在错误的道路上越走越远,甚至会受到法律的制裁,牵连到你的家人和孩子,永世不得翻身。


6

你需要善良吗?


穷鬼们从小就受到正统的、正面的社会教育,善良一直被当做一种优点被肯定和传承。


那么善良到底是一种美德吗?如果是20岁之前,我会毫不犹豫地点头称是;而在30岁到40岁这10年,我对善良的是非判断尚处在一个灰色地带;可到了近一两年,我会肯定的告诉你,善良绝对算不上什么优良品质。


如果你不想你的孩子成为像你一样的穷鬼,我劝你千万不要教孩子善良。不同的年代要用不同的方法,而现在的社会已经乱成马了。生存如此多艰,你再用你父母教育你的老方法来教育孩子,那就是刻舟求剑,早已不合时宜了。你想想,你都已经是个loser了,社会实践已然失败,你再让孩子去相信你那一套,那你的孩子将来大概率也是个废物。


其实在我的大孩子上幼儿园的时候,我就发现孩子的同龄人大多数都伶牙俐齿,遇好事积极表现,有好处争先恐后,荣誉面前从不谦让,遇到麻烦和责任赶紧把包袱甩给老实人。而不幸我的孩子就是那个善良老实,却常常被老师忽略的异类。


孩子就是社会和家庭的缩影,你孩子在幼儿园这个小小的丛林里成为了边缘人物,其根源就来自于你。你就看看你自己混成啥样了吧!所以,还不赶快改变思路。善良得分对谁,小心你的孩子都被别的孩子骑到头上撒尿了,还不知道怎么还击呢。


更正一下善良的观念吧:利己而不损人、有原则不越界、自尊且尊重别人、能捍卫住自己的一亩三分地,这些才是真正的善良。


所以,教好下一代,很可能就是穷鬼翻身的机会。


7

你需要诚信吗?


即便是世风日下到现今这种程度,我仍然相信诚信是一个人立足社会的基本品质。坑蒙拐骗如许家印,即便是已经成为中国首屈一指的富人,也总会有被撕下面具打入十八层地狱的一天。他欠下的成千上万普通家庭的血债,会将他和他的家族牢牢地钉在耻辱柱上,永世不得超生。


你或许会说,那还有千千万万的李家印王家印正活得逍遥自在呢!我告诉你,欠下的债总是要还的,三十年河东,三十年河西。报应来的很快的,靠让别人妻离子散、家破人亡所建立起来的声望、财富和地位危如累卵,会在顷刻间灰飞烟灭。


马云凭借过人的智商和超前的眼光搞出了一套电子商务系统,B to C模式在不到20年的时间搞垮了一众中间商、商场、甚至超市。如果不是国家及时出手反制,恐怕今天的菜市场都没有小商贩的一席之地了。


人人都是贪小便宜和短视的,由于当年的屌丝们普遍难以抵抗2毛钱差价所带来的诱惑,所以断送了今天一大片下沉市场的繁荣。如今放眼望去,大多数商场濒临倒闭,逛超市都冷冷清清,人们再也无法感受10年前那样的繁荣,再也无法体验到消费所带来的快乐。


马云的电子商务模式干倒了一批人,却也造就了一批人。互联网的工厂面对个人模式巩固和强化了沿海地区的工业优势,成就了一批沿海地区的电商新贵。内陆的企业再也竞争不过而纷纷选择丢盔弃甲,要么倒闭,要么转而去发展农产品、旅游业和文化产业。


地区之间的分工更加固化,地区贫富悬殊呈几何式扩大,现如今内地还有几个有竞争力的城市呢?真所谓先富的带动不了后富的,先富的把后富的摁死在摇篮里。于是内地的人才纷纷外流,只剩下一些拖家带口,跑也跑不掉,死也不敢死,活又活不好的中年穷鬼。


当然社会之所以走到今天责任并不在马云,可我为什么想把马云放这里来讲?虽然以我的智商无法指出马云哪里不诚信,但我总觉得这个人在信仰上是有瑕疵的。


8

谁的问题?


我承认,我自己的窘境是自己造成的。但我相信,在当今的社会里,像我一样还挣扎在温饱线上的穷鬼不在少数。而他们,反而是善良、淳朴、诚实、踏实、肯干、友善的。


如此多优秀的品质,反而沦为社会的最底层,到底是我们的问题,还是这个社会的问题呢?

作者:柯视角
来源:mp.weixin.qq.com/s/6cMUv_n3AuHwIPuiNH1NjA
e>

收起阅读 »

面试官:写了个 insert into select,就被开了?

血一般的教训,请慎用insert int0 select。同事应用之后,导致公司损失了近10w元,最终被公司开除。1事情的起因公司的交易量比较大,使用的数据库是mysql,每天的增量差不多在百万左右,公司并没有分库分表,所以想维持这个表的性能只能考虑做数据迁移...
继续阅读 »

血一般的教训,请慎用insert int0 select。同事应用之后,导致公司损失了近10w元,最终被公司开除。

1事情的起因

公司的交易量比较大,使用的数据库是mysql,每天的增量差不多在百万左右,公司并没有分库分表,所以想维持这个表的性能只能考虑做数据迁移

同事李某接到了这个任务,于是他想出了这两个方案

  • 先通过程序查询出来,然后插入历史表,再删除原表
  • 使用insert int0 select让数据库IO来完成所有操作

第一个方案使用的时候发现一次性全部加载,系统直接就OOM了,但是分批次做就过多io和时间长,于是选用了第二种方案,测试的时候没有任何问题,开开心心上线,然后被开除。

2到底发生了啥,我们复盘一下

先来看第一个方案,先看伪代码
// 1、查询对应需要迁移的数据
List list = selectData();

// 2、将数据插入历史表
insertData(list);

// 3、删除原表数据
deleteByIds(ids);

我们可以从这段代码中看到,OOM的原因很简单,我们直接将数据全部加载内存,内存不爆才怪。

再来看看第二个方案,到底发生了啥

为了维持表的性能,同时保留有效数据,经过商量定了一个量,保留10天的数据,差不多要在表里面保留1kw的数据。所以同事就做了一个时间筛选的操作,直接insert int0 select ... dateTime < (Ten days ago),爽极了,直接就避免了要去分页查询数据,这样就不存在OOM啦。还简化了很多的代码操作,减少了网络问题。

为了测试,还特意建了1kw的数据来模拟,测试环境当然是没有问题啦,顺利通过。考虑到这个表是一个支付流水表,于是将这个任务做成定时任务,并且定在晚上8点执行。

晚上量也不是很大,自然是没有什么问题,但是第二天公司财务上班,开始对账,发现资金对不上,很多流水都没有入库。最终排查发现晚上8点之后,陆陆续续开始出现支付流水插入失败的问题,很多数据因此丢失。

最终定位到了是迁移任务引起的问题,刚开始还不明所以,白天没有问题,然后想到晚上出现这样的情况可能是晚上的任务出现了影响,最后停掉该任务的第二次上线,发现没有了这样的情况。

3复盘

问题在哪里?

为什么停掉迁移的任务之后就好了呢?这个insert int0 select操作到底做了什么?我们来看看这个语句的explain

我们不难从图中看出,这个查询语句直接走了全表扫描。这个时候,我们不难猜想到一点点问题。如果全表扫描,我们这个表这么大,是不是意味着迁移的时间会很长?假若我们这个迁移时间为一个小时,那是不是意味着就解释了我们白天没有出现这样问题的原因了。但是全表扫描是最根本的原因吗?

我们不妨试试,一边迁移,一边做些的操作,还原现场。最终还是会出现这样的问题。这个时候,我们可以调整一下,大胆假设,如果不全表扫描,是不是就不会出现这样的问题。当我们将条件修改之后,果然发现没有走了全表扫描了。最终再次还原现场,问题解决了

得出结论:全表扫描导致了这次事故的发生。

这样做就解决了发生的问题,但是做为陆陆续续开始失败这个就不好解释了。

原因

在默认的事务隔离级别下:insert int0 a select b的操作a表示直接锁表,b表是逐条加锁。这也就解释了为什么出现陆续的失败的原因。在逐条加锁的时候,流水表由于多数是复合记录,所以最终部分在扫描的时候被锁定,部分拿不到锁,最终导致超时或者直接失败,还有一些在这加锁的过成功成功了。

为什么测试没有问题?

在测试的时候充分的使用了正式环境的数据来测试,但是别忽视一个问题,那就是测试环境毕竟是测试环境,在测试的时候,数据量真实并不代表就是真实的业务场景。比方说,这个情况里面就少了一个迁移的时候,大量数据的插入这样的情况。最终导致线上bug

4解决办法

既然我们避免全表扫描就可以解决,我们避免它就行了。想要避免全表扫描,对where后面的条件做索引,让我们的select查询都走索引即可。

5insert int0还能用吗?

可以

6总结

使用insert int0 select的时候请慎重,一定要做好索引。


作者:面试专栏
来源:mp.weixin.qq.com/s/EIOrrsJNmIigTOoZXuTOS

收起阅读 »

AI 辅助程序员日常,ES 分页查询 3 分钟搞定!

大家好,我是伍六七。 程序猿们在日常的工作中,经常会碰到一些数据处理的工作,比如日志查询、日志过滤等需求。 以前我们可能会自己写一个功能性代码来跑数据,现在,你只需要把你要解决的问题发给 GPT,它生成的代码,你就可以直接用了。 前段时间,阿七就接到一个小的日...
继续阅读 »

大家好,我是伍六七。


程序猿们在日常的工作中,经常会碰到一些数据处理的工作,比如日志查询、日志过滤等需求。


以前我们可能会自己写一个功能性代码来跑数据,现在,你只需要把你要解决的问题发给 GPT,它生成的代码,你就可以直接用了。


前段时间,阿七就接到一个小的日常问题,让我将所有符合条件的日志数据都导出来,日志数据存储在 ES 中。


但是阿七已经很久没写过 ES 了,完全忘记了呀。怎么办,第一想法是找有没有其他项目中有类似代码,发现找不到。马上,想到可以把问题抛给 GPT,结果我 3 分钟就搞定了!


我们把需要 GPT 做的事情和限制条件发给 GPT,prompt 如下:



帮我编写一段java代码,用来查询es数据库中,索引:index1,包含字段 keyword1、keyword2,日期是 date1 的所有内容,并导出到文件 index1_search.log。

要求如下:

1、使用 elasticsearch-rest-high-level-client-7.7.0中的 org.elasticsearch.client.RestHighLevelClient 这个类作为client



以下是一个简单的 Java 代码示例,用于查询 Elasticsearch 中的索引index1,包含字段 keyword1、keyword2,日期是 date1 的所有内容,并将结果导出到文件 index1_search.log 中。


该代码使用了 elasticsearch-rest-high-level-client-7.7.0 中的 org.elasticsearch.client.RestHighLevelClient 类作为 client。


import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

public class ElasticsearchQuery {

public static void main(String[] args) throws IOException {
// 创建RestHighLevelClient对象
RestHighLevelClient client = new RestHighLevelClient();

// 构建查询条件
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("keyword1", "value1"))
.must(QueryBuilders.termQuery("keyword2", "value2"))
.must(QueryBuilders.rangeQuery("date1").gte("2021-01-01").lte("2021-12-31"));

// 构建查询请求
SearchRequest searchRequest = new SearchRequest("index1");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.size(1000);
searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
searchRequest.source(searchSourceBuilder);

// 执行查询请求
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

// 处理查询结果
SearchHit[] searchHits = searchResponse.getHits().getHits();
BufferedWriter writer = new BufferedWriter(new FileWriter("index1_search.log"));
for (SearchHit hit : searchHits) {
String source = hit.getSourceAsString();
writer.write(source);
writer.newLine();
}
writer.close();

// 关闭RestHighLevelClient对象
client.close();
}
}

该代码中,首先创建了一个 RestHighLevelClient 对象,然后使用 BoolQueryBuilder 构建了查询条件,包括 keyword1、keyword2 和 date1 三个字段的查询条件。


接着,使用 SearchRequest 和 SearchSourceBuilder 构建了查询请求,并执行了查询请求。最后,将查询结果导出到文件 index1_search.log 中,并关闭了 RestHighLevelClient 对象。


然后我发现数据量太大了,怎么办呢?可以分页解决,就跟谷歌浏览器的搜索分页一样,但是不会写,怎么办?继续扔问题给 GPT。


我们在原来的提示词中补充新的分页的需求,prompt 如下:



帮我编写一段java代码,用来查询es数据库中,索引:index1,包含字段keyword1、keyword2,日期是 date1 的所有内容,并导出到文件 index1_search.log。

要求如下:

1、使用 elasticsearch-rest-high-level-client-7.7.0中的 org.elasticsearch.client.RestHighLevelClient 这个类作为client

2、日志比较大,使用 scroll 循环查询,每次查询100条



以下是一个 Java 代码示例,用于查询 Elasticsearch 中的索引 index1,包含字段 keyword1、keyword2,日期是 date1 的所有内容,并将结果导出到文件 index1_search.log中。


该代码使用了 elasticsearch-rest-high-level-client-7.7.0 中的 org.elasticsearch.client.RestHighLevelClient类作为client,并使用 scroll 循环查询,每次查询 100 条。


import org.elasticsearch.action.search.ClearScrollRequest;
import org.elasticsearch.action.search.ClearScrollResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchScrollRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

public class ElasticsearchQuery {

public static void main(String[] args) throws IOException {
// 创建RestHighLevelClient对象
RestHighLevelClient client = new RestHighLevelClient();

// 构建查询条件
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.termQuery("keyword1", "value1"))
.must(QueryBuilders.termQuery("keyword2", "value2"))
.must(QueryBuilders.rangeQuery("date1").gte("2021-01-01").lte("2021-12-31"));

// 构建查询请求
SearchRequest searchRequest = new SearchRequest("index1");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.size(100);
searchRequest.scroll(new TimeValue(1, TimeUnit.MINUTES));
searchRequest.source(searchSourceBuilder);

// 执行查询请求
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
String scrollId = searchResponse.getScrollId();

// 处理查询结果
BufferedWriter writer = new BufferedWriter(new FileWriter("index1_search.log"));
while (true) {
SearchHit[] searchHits = searchResponse.getHits().getHits();
for (SearchHit hit : searchHits) {
String source = hit.getSourceAsString();
writer.write(source);
writer.newLine();
}

SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
scrollRequest.scroll(new TimeValue(1, TimeUnit.MINUTES));
searchResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);
if (searchResponse.getHits().getHits().length == 0) {
break;
}
}
writer.close();

// 清除scroll上下文
ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
clearScrollRequest.addScrollId(scrollId);
ClearScrollResponse clearScrollResponse = client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);

// 关闭RestHighLevelClient对象
client.close();
}
}

该代码中,首先创建了一个 RestHighLevelClient 对象,然后使用 BoolQueryBuilder 构建了查询条件,包括 keyword1、keyword2 和 date1 三个字段的查询条件。


接着,使用 SearchRequest 和 SearchSourceBuilder 构建了查询请求,并执行了查询请求。由于日志比较大,使用 scroll 循环查询,每次查询 100 条,并将查询结果导出到文件 index1_search.log 中。


最后,清除 scroll 上下文,并关闭了 RestHighLevelClient 对象。


自从有了 GPT,写代码如此简单,原来可能需要半个小时甚至 1 个小时的工作,3 分钟就搞定了,赶紧去试用吧!




关注我,送你全套我整理的 Java 岗位面试资料。这是我自己之前整理的面试题,靠着这份面试题,我从 30 人的小公司,进了 2000 人+的央企子公司,之后又进了互联网大厂。


作者:伍六七AI编程
来源:juejin.cn/post/7301910992311582720
收起阅读 »

刚入职因为粗心大意,把事情办砸了,十分后悔

刚入职,就踩大坑,相信有很多朋友有我类似的经历。 5年前,我入职一家在线教育公司,新的公司福利非常好,各种零食随便吃,据说还能正点下班,一切都超出我的期望,“可算让我找着神仙公司了”,我的心里一阵窃喜。 在熟悉环境之后,我趁着上厕所的时候,顺便去旁边的零食摊挑...
继续阅读 »

刚入职,就踩大坑,相信有很多朋友有我类似的经历。


5年前,我入职一家在线教育公司,新的公司福利非常好,各种零食随便吃,据说还能正点下班,一切都超出我的期望,“可算让我找着神仙公司了”,我的心里一阵窃喜。


在熟悉环境之后,我趁着上厕所的时候,顺便去旁边的零食摊挑了点零食。接下来的一天里,我专注地配置开发环境、阅读新人文档,当然我也不忘兼顾手边的零食。


初出茅庐,功败垂成


"好景不长",第三天上午,刚到公司,屁股还没坐热。新组长立刻给我安排了任务。他决定让我将配置端的课程搜索,从使用现有的Lucene搜索切换到ElasticSearch搜索。这个任务并不算复杂,然而我却办砸了。


先说为什么不复杂?



  1. ElasticSearch的搜索功能 基于Lucene工具库实现的,两者在搜索请求构造方式上几乎一致,在客户端使用上差异很小。


image.png



  1. 切换方案无需顾虑太多稳定性问题。由于是配置端课程搜索,并非是用户端搜索,所以平稳切换的压力较小、性能压力也比较小。


总的来说,领导认为这个事情并不紧急,重要性也不算高,而且业务逻辑相对简单,难度能够把握,因此安排我去探索一下。可是,我却犯了两个错误,把入职的第一件事办砸了。现在回过头来看,十分遗憾!


image.png


难以解决的bug让我陷入困境


将搜索方式从Lucene切换为ElasticSearch后,如何评估切换后搜索结果的准确度呢?


除了通过不断地回归测试,还有一个更好的方案。


我的方案是,在调用搜索时同时并发调用Lucene搜索和ElasticSearch搜索。在汇总搜索结果时,比对两者的搜索结果是否完全一致。如果在切换搜索引擎的过程中,两个方案的搜索结果不一致,就打印异常搜索条件和搜索结果,并进行人工排查原因。


image.png


在实际切换过程中,我经常遇到搜索数据不一致的情况,这让我感到十分苦恼。我花了一周的时间编写代码,然后又用了两周多的时间来排查问题,这超出了预估的时间。在这个过程中,我感到非常焦虑和沮丧。作为一个新来的员工,我希望能够表现出色,给领导留下好印象。然而事与愿违,难以解决的bug让我陷入困境。


经过无数次的怀疑和尝试,我终于找到了问题的根源。原来,我忘记了添加排序方式。


因为存在很多课程数据,所以配置端搜索需要分页搜索。在之前的Lucene搜索方式中,我们使用课程Id来进行排序。然而在切换到新的ElasticSearch方案中时,我忘记了添加排序方式。这个错误的后果是,虽然整体上结果是一致的,但由于新方案没有排序方式,每一页的搜索结果是随机的,无法预测,所以与原方案的结果不一致。


image.png
新方案加上课程Id排序方式以后,搜索结果和原方案一致。


为此,我总结了分页查询的设计要点!希望大家不要重复踩坑!# 四选一,如何选择适合你的分页方案?


千万不要粗心大意


实际上,在解决以上分页搜索没有添加排序方式的问题之后,还存在着许多小问题。而这些小问题都反映了我的另一个不足:粗心大意。


正是这些小问题,导致线上环境总会出现个别搜索结果不一致的情况,导致这项工作被拖延很久。


课程模型是在线教育公司非常核心的数据模型,业务逻辑非常复杂,当然字段也非常多。在我入职时,该模型已经有120 个字段,并且有近 50 个字段可以进行检索。


在切换搜索方式时,我需要重新定义各种DO、DTO、Request等类型,还需新增多个类,并重新定义这些字段。在这个过程中,我必须确保不遗漏任何字段,也不能多加字段。当字段数量在20个以内时,这项工作出错的可能性非常低。然而,班课模型却有多达120个字段,因此出错的风险极大。当时我需要大量搬运这些字段,然而我只把这项工作看作是枯燥乏味的任务,未能深刻意识到出错的可能性极大,所以工作起来散漫随意,没有特别仔细校验重构前后代码的准确性。


image.png
墨菲定律:一件事可能出错时就一定会出错



墨菲定律是一种普遍被接受的观念,指出如果某件事情可能出错,那么它将以最不利的方式出错。这个定律起源于美国航天局的项目工程师爱德华·墨菲,在1950年代发现了这一规律。


墨菲定律还强调了人类的倾向,即将事情弄糟或让事情朝着最坏的方向发展。它提醒人们在计划和决策时要考虑可能出错的因素,并准备应对不利的情况。



墨菲定律实在是太准了,当你感觉某个事情可能会出错的时候,那它真的就会出错。而且我犯错不止一次,因为有120个字段,很多字段的命名非常相似,最终我遗漏了2个字段,拼写错误了一个字段,总共有三个字段出了问题。


不巧的是,这三个字段也参与检索。当用户在课程搜索页面选择这三个字段来进行检索时,因为字段的拼写错误和遗漏,这三个字段没有被包含在检索条件中,导致搜索结果出错……


导致这个问题的原因有很多,其中包括字段数量太多,我的工作不够细致,做事粗心大意,而且没有进行充分的测试……


为什么没有测试


小公司的测试人员相对较少,尤其是在面对课程管理后台的技术重构需求时,更加无法获取所需的测试资源!


组长对我说:“ 要人没有,要测试更没有!”


image.png


事情办砸了,十分遗憾


首先,从各个方面来看,切换搜索引擎这件事的复杂度和难度是可控的,而且目标也非常明确。作为入职后第一项任务,我应该准确快速地完成它,以留下一个良好印象。当然,领导也期望我能够做到这一点,然而事实与期望相去甚远。


虽然在线上环境没有出现问题,但在上线后,问题排查的时间却远远超出了预期,让领导对结果不太满意。


总的来说,从这件事中,我获得的最重要教训就是:对于可能出错的事情,要保持警惕。时刻用墨菲定律提醒自己,要仔细关注那些可能发生小概率错误的细节问题。


对于一些具有挑战性的工作,我们通常都非常重视,且在工作中也非常认真谨慎,往往不会出错。


然而,像大量搬运代码、搬运大量字段等这类乏味又枯燥的工作确实容易使人麻痹大意,因此我们必须提高警惕。要么我们远离这些乏味的工作,要么就要认真仔细地对待它们。


否则,如果对这些乏味工作粗心大意,墨菲定律一定会找上你,让你在线上翻车!


作者:他是程序员
来源:juejin.cn/post/7295576148364787751
收起阅读 »

35岁遭遇父亲肺癌、失业、失恋. . . . . .

写在前面 目前已经上班快两个月了,对现在的工作很满意,甚至说更喜欢这的氛围吧。 如题所示,从今年5月开始,发生的所有事,都完全超出了我自己可以承受的范围,好在这一切都过去了,真的感谢上天安排,让我能更加确信自己要的是什么,以后该怎么生活。 爸爸被诊断为肺癌 我...
继续阅读 »

写在前面


目前已经上班快两个月了,对现在的工作很满意,甚至说更喜欢这的氛围吧。


如题所示,从今年5月开始,发生的所有事,都完全超出了我自己可以承受的范围,好在这一切都过去了,真的感谢上天安排,让我能更加确信自己要的是什么,以后该怎么生活。


爸爸被诊断为肺癌


我每年都会带父母去做体检,因为去年疫情全面放开后,担心被传染。寻思稳定稳定再去。


后爸爸因为走路崴脚在家养了三个月,就一直没去上体检。


有一天下班爸爸跟我说,心脏不得劲,心总疼,而且还上不来气,我说那明天去医院看看吧。


由于我工作项目忙还总加班,就让姐姐陪爸爸一起去检查了。


由于比较有名的医院,都没号了,姐姐就去了某国际医院(私立医院),做了全面检查,通过各种CT的检查结果汇总,医院给出的答案是小细胞癌晚期,建议转院。


当我姐哭着给我打电话告诉我这个消息时,我整个人都楞了几秒。


我跟姐姐说,你先别慌,我们再去其他医院看看,小医院技术不行,也许查错了呢!


你就跟我爸说,可能是上火引起的,CT上查出来有个黑点具体什么没看出来,建议我们去大医院看,那设备好一些,能看出来


接下来,我和姐姐去约各大医院的专家号,某军区总院、某四院、某二院、某市中医院、某省总医院、某肿瘤医院等等。


最后,以上所有医院的结果,给出的答案都是小细胞癌晚期


据我同学给介绍的医生说,我爸这样的情况,最多可能半年或1年,即使是化疗也意义不大,当我和姐姐知道这个消息的时候,一时我也接受不了这个消息,看到姐姐伤心痛哭的样子,我心里也难受极了.....


我强忍着跟姐姐说,咱们再看看,肯定可以治疗。


爸爸得知自己肺癌


对我们而言,怕爸爸知道自己肺癌,会因为舍不得钱而轻生的想法,不配合治疗,所以刚开始在没完全确诊之前,就一直瞒着他。


后来,随着去的医院越来越多,爸爸也逐渐开始起了疑心!


直到我们去某四院,做完肺活检,等结果。并告诉爸爸一周后才能出来(那时候我都佩服我自己撒谎的本事!),其实结果早就出了,只是 我和姐姐不死心,想拿着结果去其他医院再看看,总觉得是医院给看错了。


爸爸也是一直在关注着检查的结果,每天都会问结果到底什么时候能出来!


本来和妈妈、姐姐一直打算瞒着爸爸,让他开心的过完后面的时间。


当然,肯定这肯定是瞒不住的,只是能瞒着一天算一天。


后来,经商量后决定,还是跟爸爸说,觉得他也有知道的权利,而且我们相信爸爸可以接受,并且会积极配合治疗。


当爸爸知道自己得了肺癌后,刚开始那几天,每天都在那发呆,一句话也不说。


于是,我们就决定每天家里必须有个人在家,怕爸爸有轻生的想法,但怕他待在家比较闷,我们决定就带爸爸去旅游。


当然这期间,我们一直没有放弃,又通过关系找到某肿瘤医院主任医生,抱着试试看的态度就去了,听他说完,我们觉得还算靠谱,于是,我们决定就在这家医院治疗了。


随着时间的流逝,爸爸也开始慢慢接受了自己肺癌的事实,而且也选择积极配合治疗,最后也去了医院,这真的让我很开心。


千万不要去化疗


刚开始化疗的时候,我们都是早上7点多就到医院,晚上挂完点滴,到晚上9点-10点才能到家,第一次化疗大约5天左右。


和每个化疗患者一样,刚开始,爸爸也是开始掉头发、厌食。


爸爸最爱吃猪蹄,我每天都会买猪蹄,都后来干脆都不吃,说是没胃口,再到后面脸上也逐渐出现一些症状,有点发黑。


那一刻,我真的感觉化疗就和慢性自杀一样,看着一天天日渐消瘦的爸爸,我的心里真的很不是滋味。


就这样顺利的完成第一阶段,22天后,我们又开始进行了第二次化疗。


化疗的第一天开始,爸爸就开始感觉不舒服,说心脏不得劲,后来医生说有个药不给用了,再看看。


然后,到了第二天,爸爸又开始血压不稳定、心慌,开始不怎么吃饭了,也不怎么说话了,把我吓坏了,脸色也不好。


我一也没睡,就这样守着看到了第三天,抢矿更不好,爸爸开始吐,恶心。


后来和医生说我们要强制出院,不打了,化疗的反应真的太大了,医生也同意我们出院了。


回家后,过了两天稍微好些,第三天,爸爸开始高烧不退、拉肚子不止,脸色苍白,后来我就带爸爸去急诊,输液后好了一些,到急诊那医生,听医生说爸爸是化疗后引起的,没有血小板和白细胞了,建议我们回原医院好些。


然后,我们又去商量主治医师,跟她说了下我爸爸现在的状况,只想恢复正常,表示先不化疗了,并询问能再次接收我们住院治疗,医生最后同意了。


住院后,开始做各种检查,住院当天下午稍微稳定了一些,然后连续两天又开始连续高烧、血压不稳,查完指标说还是是血小板太低,白细胞是0,几乎没有免疫力,需要补


这时,通过食补根本来不及,主要因为爸爸基本不怎么吃东西了,而且高烧起来,抽起来吓人,筷子都咬折了,真太吓人了,我当时真的希望我要是能替爸爸受这个罪该多好,当时真的强忍着眼泪,心里老难受了 !


最后,在我们的一再坚持下,请到了某二院的专家来帮忙会诊,老专家先让爸爸做了几项检查,并给换了药输液,大约也就一周左右,爸爸就好了,出院前,也去查了CT,发现肺部的肿瘤竟然没了!


医生说建议,过一阵再来接着化疗,后面再放疗会更好。其实我们也明白,因为小细胞癌的扩散速度很快,所以建议多观察治疗。


但是我们都坚持不会再去化疗了!


求医之路


爸爸出院回家后,开始进行食补,大约一周后,爸爸能正常走了,而且起色也好了许多。


我们开始四处求医,开启寻医之路,也是去了好多地方吧!


这期间遇到的,有一些老中医有个习惯,说是凡是化疗过的都不给看, 这让我表示很苦恼而且不理解。


再后来,爸爸的一位病友给推荐了一个老中医,我们还是照常打个电话过去,说明了情况,查看是否能治疗,结果开心的是能治疗。


刚开始,我们也是不相信的,抱着试试看的态度,我们去看了下,医生给开了半个月的药,结果爸爸喝中药俩礼拜后,就感觉明显走路有劲了,比以前强很多。


直到现在还在喝中药,之前化疗的副作用慢慢都好了,比如厌食、牙齿松动,吃甜的东西牙疼,头发也长出来了,而且每天还和之前一样,早晚去散步,连之前楼下的老太太,都说完全看不出来像生病一样,真的是好开心,也算是好事多磨吧,也可以说是遇到贵人了。


我失业了


2022年开始年底就开始裁员,公司也是组织架构调整,人员变动也比较频繁。


我当时也是负责性能测试、自动化测试这两块,并行着三个项目,也是真的加班加点的干。


因为爸爸生病,跑医院检查,我总请假,赶上公司组织架构调整。检查、陪护一个人根本忙不过来,妈妈年龄大了不太方便,所以我辞职了,当然也失业了,"成功"地走进2023失业大军中。


好处就是,我终于可以全身心的去忙家里的事了。


找工作


出院后的一个月,爸爸这边病情算是稳定了,我便开始了积极找工作。


因为好久没找工作了,首先,我用了大约5天的时间去搞简历,搞完简历便开始找工作。


通过找工作才发现,真TM卷呀,都是统招本科起步,更过分的是有的公司还要求必须是计算机专业!


我一看我自己,大专自考本科,完全没竞争力,BOSS上、智联、脉脉上、拉钩、内推,基本都是被学历卡掉了!


而且,那会特别焦虑,除了这行还能干嘛,我还会做啥,离了这行,是不是完了?


那会女友找到了工作,而且收入也不错,我待业,顶着巨大压力,我还是继续努力的寻找的工作。


还好感谢上天眷顾图片,还有几个面试,让我有的选择,最终我选择了一家成功上岸工作了。


分享两个面试题:


StringBuilderStringBuffer的区别?(我只用过他们拼接字符,结果凉了)


你性能测试中最大的QPS是多少?(这题我跟面试官,开始了杠精模式,我真没法回答)


我失恋了


每次写到这块,就感觉我像个怨妇一样呢,哈哈,真的不爱写。


我和女友是相亲认识的,3月相识直到今年10月长假彻底分手,分手是在吃完定亲饭开始黄的,听起来是不是很奇怪。


那会我已经上班一周,也是临近十一的一周,爸爸那会身体恢复的已经很好了,开始正常上班了。


因为在这之前她总跟我说,我们结婚把之类的话,我刚开始没往心里去,但是也就在那周,我接了话拆,并也耐心的跟他说了个初步沟通,寻问过彩礼和三金等等,当时,我看她也很开心的。


然后,回家我就跟家长说了这事,我爸说,那也行我这边身体现在也恢复的挺好,那就吃个定亲饭,把你俩的事定下来。


之后,爸爸给介绍人打了电话给介绍人,介绍人询问她家什么时候有时间,然后他妈妈给了个时间,当天晚上下班,女孩就跟我生气说,没正式通知她(也许差个求婚仪式吗?我可能直男了吧),完事我俩吵了一架。


然后呢,她告诉他妈说不行,然后又跟他妈妈吵架了,那意思说没告诉她 怎么就定了呢!


后来,我妥协了,我说那这样吧,时间你来定什么时候都行,不行怎么就先处着,你感觉行再订婚,你别有压力呢。


结果,也不到怎么她妈妈又给介绍人打电话定了个时间,完事又不行,来回会改了三次,我爸妈当时也说,要是人家不愿意就算了,再等等吧。


完事我还是跟女孩说,等你们定好,提前一天告诉我就行,你先和家长商量好就行的。


就因为吃定亲饭时间,他们家来回变定不下来,搞的我父母心情很复杂,但也是为了自己的儿子幸福,就等等了。 好在最后,定下来最后的时间了。


在吃定亲饭那天,给了定金,我感觉啥也没谈,介绍人问了女孩家有没有陪嫁,男方这边有房子,可以出装修等等,其他的我忘记了,当时他父母不吱声也不表态,我就感觉很奇怪吧。


当然,我作为晚辈在桌上没法发表意见。


于是,第二天,我们去自驾游回来的时候,我就说吃完定亲饭,介绍人问你父母你家有没有陪嫁,你爸妈没表态,我爸爸得了肺癌手头可能也不宽裕,我寻思问下你家有没有陪嫁,可以出点家电或者装修?因为都我家的话,可能会负债。


女孩问我是我的意思,还是我爸妈的意思,我说昨晚我们到家都很晚了,我晚上到家父母都睡觉了,一早我俩5点多出门去旅游,基本没说上话,我俩就是商量下。


女孩没说话,直接下车,并说 我现在就去找我爸妈,我去问问(当时生气的哭了,或许我不该问?


之后,我回家和我爸妈说,我又把对象惹生气了,并说了事情的缘由,父母本着保全大局的原则,让我先去道歉。


我先去找女孩的妈妈,结果,到那后,他妈妈基本都不让我说话,大概那意思,就是她们不是卖女儿,娶媳妇还想让她们拿钱,能娶得起就娶,娶不起就不娶,要是有饥荒,女儿肯定不嫁。


我看这样,我就又去找女孩各种道歉努力,女孩最后说不处了,直接退定金,走介绍人流程


之后,我回家跟父母学了一下,父母还是为了我,为了他们儿子,直接去找到女孩的父母,带着我去赔礼道歉。


到了后,我虽然离的很远都能听到,他妈妈跟我说的那些话,又跟我妈妈说了几遍,好在他爸爸是明事理的人,说也会帮着劝劝,但是他爸爸说了不算,尴尬。


随后,妈妈和我又去找到女孩去赔礼道歉,妈妈说了很多话,大概意思是,给阿姨个面子,我们家小孩不太会说话,别忘心里去


那种乞求被原谅的感觉,我那一刻,眼泪唰就出来了,心里很不是滋味,完事我偷偷的快速擦掉眼泪。妈妈临出门时说,大概意思是,你俩好好聊聊,好好相处,我家小孩嘴笨,你多担待点!结果我说啥,她也不说话,我说,那你先忙。


那一刻的冷漠,让我感觉到这份感情真的太脆弱、卑微了。


接着到了第二天,我早上买完早点给他送去,从8点多一直说到11点多,她的态度依旧是那么坚决,说不想处了,我当时回家后,我就在那想,处了半年多,一点感情也没有吗?说分就分,真的就能放下?


虽然每次吵架她都说分手,我都去哄,去赔礼道歉,也习惯了,但是这次不一样,我感觉好像是真的无法挽回。


但是我真的觉得,我和女孩都相处了快7个月了,有啥不能谈呢,至于上升到家长层面吗?


回家后,我跟父母说了下,后来大家讨论后,得出的结论:


可能是因为得知我爸爸是肺癌,每个月都要喝中药治病,觉得可能会是个累赘,再一个就是为了给爸爸治病花了不少钱,可能我家没多少钱了,可能怕以后的日子不好过,受拖累!


接着又过了一天,介绍人把我叫去,聊了一下,问我还有多少钱,还有一些别的,然后,又说跟她妈妈约定了好了,具体啥我忘记了,和我聊完,又给女孩妈妈打了个电话。


又过了一个多小时,我接到女孩的电话,她没说话,说打错了,我寻思给了台阶我就下了,我说你在哪,等你到家,你告诉我我去找你吧。


当天晚上,我收到女孩微信,说让我一起去介绍人那再聊一下,他们聊了啥,我也不到,我被支开了,他们聊了很久吧,聊的啥我也不知道,完事我送她回家。


第二天,早上我去找他,我打算跟她好好聊一下,我知道她肯定是想和好,我就问了他几个问题:



  1. 我不能保证一直都有工作,或者说我以后可能会有待业期,或者赚的不多,或者说不能给你更好的物质生活,但是我肯定会努力赚钱,不会摆烂(大概意思),你愿意跟我结婚吗?(没想过,而且现在不想结婚,想两年后吧,或者明年?)

  2. 比如我上班要早起你上班比较晚,偶尔愿意帮我早起做个早饭吗?(不想起来)

  3. 以后相处模式,能跟我先沟通下,再到父母层面吗?(不说话)

  4. 我爸爸要喝中药,我不能不管我爸爸(她的意思是我把父母看的比她重)


其他我忘记了,总之基本不说话,虽然来抱我,表示和好,但是那一刻我发现,感觉真的变了!


然后跟我说,她会跟她妈妈说,我们和好了,但是不让我和我爸妈说,让我很吃惊!


难道我家长是因为好说话?就该不被重视?


“和好后”的两天,和之前一样,每天正常见面,都是我在找话题,她还是不说话,去她家,她基本不说话,在那工作,不说话,我就在那刷手机看视频。


然后又过去两天,我们出去散步,她还是不说话,甚至不牵我手。


想到带我去道歉的妈妈她的冷漠态度, 突然,我好像想明白了。


又过了一天,晚上下班到家,我提出了分手,删除了她的微信,彻底分手了


我知道,如果我在跟她谈结婚,还是会遇到这样的问题,而且她也说过,



不想结婚,想再玩两年!



而我真玩不起了,从始至终,每次吵架,我都去道歉挽留,因为害怕失去,感觉在感情里,我被养成了讨好型的人格。


跳出来看,换位思考,如果我是女孩家长,可能也会让她嫁的更好,或者未来会有更好的物质生活,感情里,没有谁对谁错,只有愿不愿意吧,所以真的就是和平分手了!


但无论怎样,我也不会动父母养老的钱,没钱我就不娶!


可能有同学会说了,那你是娶不起吧。


没错,要是结个婚,要贷款梭哈的话,还是算了吧。


你有没有想过把父母老本都拿来,完事还让他们去借钱,他们都那么大岁数了,没有劳动力了,怎么还?


值得一说的是,她家并不是家境不好,只能说和我家差不多吧,后面我了解到,真的不是他们家没钱,只是他姐姐陪嫁还有个房子,到我这就一个人,让我们自己白手起家?还是瞧不起我?亦或许就不想跟我结婚?


写在最后


刚失恋那一个月,真的我天天失眠睡不着,而且担心光棍一辈子,去求助很多朋友帮忙介绍对象。


而现在呢,失眠是因为搞不到钱。真的才发现搞钱,才是这个世界上最有意义的事了吧。


图片


作者:软件测试君
来源:juejin.cn/post/7300099522202009637
收起阅读 »

老黄深夜炸场,世界最强AI芯片H200震撼发布!性能飙升90%,Llama 2推理速度翻倍,大批超算中心来袭

【新智元导读】 刚刚,英伟达发布了目前世界最强的AI芯片H200,性能较H100提升了60%到90%,还能和H100兼容。算力荒下,大科技公司们又要开始疯狂囤货了。 英伟达的节奏,越来越可怕了。 就在刚刚,老黄又一次在深夜炸场——发布目前世界最强的AI芯片H2...
继续阅读 »
【新智元导读】 刚刚,英伟达发布了目前世界最强的AI芯片H200,性能较H100提升了60%到90%,还能和H100兼容。算力荒下,大科技公司们又要开始疯狂囤货了。

英伟达的节奏,越来越可怕了。


就在刚刚,老黄又一次在深夜炸场——发布目前世界最强的AI芯片H200!


较前任霸主H100,H200的性能直接提升了60%到90%。


不仅如此,这两款芯片还是互相兼容的。这意味着,使用H100训练/推理模型的企业,可以无缝更换成最新的H200。


图片


全世界的AI公司都陷入算力荒,英伟达的GPU已经千金难求。英伟达此前也表示,两年一发布的架构节奏将转变为一年一发布。


就在英伟达宣布这一消息之际,AI公司们正为寻找更多H100而焦头烂额。


英伟达的高端芯片价值连城,已经成为贷款的抵押品。


图片


谁拥有H100,是硅谷最引人注目的顶级八卦


至于H200系统,英伟达表示预计将于明年二季度上市。


同在明年,英伟达还会发布基于Blackwell架构的B100,并计划在2024年将H100的产量增加两倍,目标是生产200多万块H100。


而在发布会上,英伟达甚至全程没有提任何竞争对手,只是不断强调「英伟达的AI超级计算平台,能够更快地解决世界上一些最重要的挑战。」


随着生成式AI的大爆炸,需求只会更大,而且,这还没算上H200呢。赢麻了,老黄真的赢麻了!


图片


141GB超大显存,性能直接翻倍!


H200,将为全球领先的AI计算平台增添动力。


它基于Hopper架构,配备英伟达H200 Tensor Core GPU和先进的显存,因此可以为生成式AI和高性能计算工作负载处理海量数据。


英伟达H200是首款采用HBM3e的GPU,拥有高达141GB的显存。


图片


与A100相比,H200的容量几乎翻了一番,带宽也增加了2.4倍。与H100相比,H200的带宽则从3.35TB/s增加到了4.8TB/s。


英伟达大规模与高性能计算副总裁Ian Buck表示——



要利用生成式人工智能和高性能计算应用创造智能,必须使用大型、快速的GPU显存,来高速高效地处理海量数据。借助H200,业界领先的端到端人工智能超算平台的速度会变得更快,一些世界上最重要的挑战,都可以被解决。



图片


Llama 2推理速度提升近100%


跟前代架构相比,Hopper架构已经实现了前所未有的性能飞跃,而H100持续的升级,和TensorRT-LLM强大的开源库,都在不断提高性能标准。


H200的发布,让性能飞跃又升了一级,直接让Llama2 70B模型的推理速度比H100提高近一倍!


H200基于与H100相同的Hopper架构。这就意味着,除了新的显存功能外,H200还具有与H100相同的功能,例如Transformer Engine,它可以加速基于Transformer架构的LLM和其他深度学习模型。


图片


HGX H200采用英伟达NVLink和NVSwitch高速互连技术,8路HGX H200可提供超过32 Petaflops的FP8深度学习计算能力和1.1TB的超高显存带宽。


当用H200代替H100,与英伟达Grace CPU搭配使用时,就组成了性能更加强劲的GH200 Grace Hopper超级芯片——专为大型HPC和AI应用而设计的计算模块。


图片


下面我们就来具体看看,相较于H100,H200的性能提升到底体现在哪些地方。


首先,H200的性能提升最主要体现在大模型的推理性能表现上。


如上所说,在处理Llama 2等大语言模型时,H200的推理速度比H100提高了接近1倍。


图片


因为计算核心更新幅度不大,如果以训练175B大小的GPT-3为例,性能提升大概在10%左右。


图片


显存带宽对于高性能计算(HPC)应用程序至关重要,因为它可以实现更快的数据传输,减少复杂任务的处理瓶颈。


对于模拟、科学研究和人工智能等显存密集型HPC应用,H200更高的显存带宽可确保高效地访问和操作数据,与CPU相比,获得结果的时间最多可加快110倍。


相较于H100,H200在处理高性能计算的应用程序上也有20%以上的提升。


图片


而对于用户来说非常重要的推理能耗,H200相比H100直接腰斩。这样,H200能大幅降低用户的使用成本,继续让用户「买的越多,省的越多」!


图片


上个月,外媒SemiAnalysis曾曝出一份英伟达未来几年的硬件路线图,包括万众瞩目的H200、B100和「X100」GPU。


图片


而英伟达官方,也公布了官方的产品路线图,将使用同一构架设计三款芯片,在明年和后年会继续推出B100和X100。


图片


B100,性能已经望不到头了


这次,英伟达更是在官方公告中宣布了全新的H200和B100,将过去数据中心芯片两年一更新的速率直接翻倍。


以推理1750亿参数的GPT-3为例,今年刚发布的H100是前代A100性能的11倍,明年即将上市的H200相对于H100则有超过60%的提升,而再之后的B100,性能更是望不到头。


图片


至此,H100也成为了目前在位最短的「旗舰级」GPU。如果说H100现在就是科技行业的「黄金」,那么英伟达又成功制造了「铂金」和「钻石」。


图片


H200加持,新一代AI超算中心大批来袭


云服务方面,除了英伟达自己投资的CoreWeave、Lambda和Vultr之外,亚马逊云科技、谷歌云、微软Azure和甲骨文云基础设施,都将成为首批部署基于H200实例的供应商。


图片


此外,在新的H200加持之下,GH200超级芯片也将为全球各地的超级计算中心提供总计约200 Exaflops的AI算力,用以推动科学创新。


图片


在SC23大会上,多家顶级超算中心纷纷宣布,即将使用GH200系统构建自己的超级计算机。


德国尤里希超级计算中心将在超算JUPITER中使用GH200超级芯片。


这台超级计算机将成为欧洲第一台超大规模超级计算机,是欧洲高性能计算联合项目(EuroHPC Joint Undertaking)的一部分。


图片


Jupiter超级计算机基于Eviden的BullSequana XH3000,采用全液冷架构。


它总共拥有24000个英伟达GH200 Grace Hopper超级芯片,通过Quantum-2 Infiniband互联。


每个Grace CPU包含288个Neoverse内核, Jupiter的CPU就有近700万个ARM核心。


它能提供93 Exaflops的低精度AI算力和1 Exaflop的高精度(FP64)算力。这台超级计算机预计将于2024年安装完毕。


图片


由筑波大学和东京大学共同成立的日本先进高性能计算联合中心,将在下一代超级计算机中采用英伟达GH200 Grace Hopper超级芯片构建。


作为世界最大超算中心之一的德克萨斯高级计算中心,也将采用英伟达的GH200构建超级计算机Vista。


图片


伊利诺伊大学香槟分校的美国国家超级计算应用中心,将利用英伟达GH200超级芯片来构建他们的超算DeltaAI,把AI计算能力提高两倍。


此外,布里斯托大学将在英国政府的资助下,负责建造英国最强大的超级计算机Isambard-AI——将配备5000多颗英伟达GH200超级芯片,提供21 Exaflops的AI计算能力。


图片


英伟达、AMD、英特尔:三巨头决战AI芯片


GPU竞赛,也进入了白热化。


图片


面对H200,而老对手AMD的计划是,利用即将推出的大杀器——Instinct MI300X来提升显存性能。


MI300X将配备192GB的HBM3和5.2TB/s的显存带宽,这将使其在容量和带宽上远超H200。


而英特尔也摩拳擦掌,计划提升Gaudi AI芯片的HBM容量,并表示明年推出的第三代Gaudi AI芯片将从上一代的 96GB HBM2e增加到144GB。


图片


英特尔Max系列目前的HBM2容量最高为128GB,英特尔计划在未来几代产品中,还要增加Max系列芯片的容量。


H200价格未知


所以,H200卖多少钱?英伟达暂时还未公布。要知道,一块H100的售价,在25000美元到40000美元之间。训练AI模型,至少需要数千块。此前,AI社区曾广为流传这张图片《我们需要多少个GPU》。


图片


GPT-4大约是在10000-25000块A100上训练的;Meta需要大约21000块A100;Stability AI用了大概5000块A100;Falcon-40B的训练,用了384块A100。


根据马斯克的说法,GPT-5可能需要30000-50000块H100。摩根士丹利的说法是25000个GPU。


Sam Altman否认了在训练GPT-5,但却提过「OpenAI的GPU严重短缺,使用我们产品的人越少越好」。


图片


我们能知道的是,等到明年第二季度H200上市,届时必将引发新的风暴。


参考资料:nvidianews.nvidia.com/news/nvidia…


作者:新智元
来源:juejin.cn/post/7300860696685363219
收起阅读 »

当史上最强AI,遇上中国2023高考作文

今天是2023年高考第一天,刚过中午,坐在办公室里就收到了关于今年高考作文题的新闻推送。 要知道,高考作文题,历来都是能引发全国人民热议的一个话题,毕竟是写东西嘛,虽然不是所有人都能写好文章,但是绝大部分人多多少少都能写两句,面对高考作文都能发表下自己的见解。...
继续阅读 »

今天是2023年高考第一天,刚过中午,坐在办公室里就收到了关于今年高考作文题的新闻推送。


要知道,高考作文题,历来都是能引发全国人民热议的一个话题,毕竟是写东西嘛,虽然不是所有人都能写好文章,但是绝大部分人多多少少都能写两句,面对高考作文都能发表下自己的见解。


那么,当ChatGPT遇到高考作文,会发生什么呢?它能写出什么样的水平呢?


带着这个疑问,我决定试试。


我选取的是今年上海的作文题(我比较感兴趣),题目如下:




面对这个题目,不知道各位有什么想法么?如果你去考试,你会怎么写?


来,我们看看AI是怎么写的。


以下是GPT-4的作文,大家品鉴一下:




我先说下我的整体感受,然后再具体分析。


我就一个感受:我维持4个月前对于AI能力的基本判断,即「长短板都格外的明显」。




先说优点吧,全文非常顺畅,不仅有条理有举证,更重要的是有层次 当我还在思考,除了好奇心之外,还能从哪些角度去谈这个问题的时候,GPT几秒钟就给了我答案:


「一个人乐意去探索陌生世界,并非仅仅是因为好奇心,还有求知欲实现自我价值,和社会责任感


醍醐灌顶啊朋友们!


不知道你们有没有想到这么多角度,反正我这么短时间是想不出来的,太牛了!


关键是,这4个因素,是层层递进的!


“好奇心”尚且处于动物性 ,处于「本我」阶段,“求知欲”就具备了人性,迈入了「自我」,“实现自我价值”则是更进一步的「自我」,而到了“社会责任感”,就直接达到了「超我」的境界。


厉害了啊!


这就是我说的,它不仅仅是写的有条理,还有层次递进,这个太夸张了,可以说轻松超越99%的普通人。


好啦,彩虹屁吹完了,那么我再来说下缺点或者说劣势在哪。


其实相关观点我在之前的文章里已经表达过一次了,大家可以点这个看下:《不会出错的ChatGPT毫无意义》


还是那句话,GPT是以成年人的数据训练出来的,而成年人是数据具备了极强的逻辑性,也正因此,GPT最擅长逻辑推演,表达也极具逻辑性(所以它能层层递进)。


但是吧,强逻辑的东西自然就缺乏了人文美,缺乏浪漫和非理性想象力


不认可?好,我来给你证明一下。


为了试探GPT是否具备更多可能性,把文章写的更文艺一些,于是我换了个问法:




哦吼,翻车。除了题目稍微变了一下,剩下的内容几乎完全没有变化。


嗯,你可能要说了,是你问的不对。好,我再换个问法:




依然不行,依然是那副强逻辑的修辞和表达,我很失望,它不懂我的文艺。


也许确实是我问法不对,但我仍然坚定的认为,AI在人性的光芒面前,依然只是一台冰冷的机器,至少目前仍然是。


好啦,本文只是一个浅尝辄止的探讨,更多对于AI与人性的探讨,可以读读我之前的文章:


《不会出错的ChatGPT毫无意义》


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

南洋才女,德艺双馨,孙燕姿本尊回应AI孙燕姿(基于Sadtalker/Python3.10)

孙燕姿果然不愧是孙燕姿,不愧为南洋理工大学的高材生,近日她在个人官方媒体博客上写了一篇英文版的长文,正式回应现在满城风雨的“AI孙燕姿”现象,流行天后展示了超人一等的智识水平,行文优美,绵恒隽永,对AIGC艺术表现得极其克制,又相当宽容,充满了语言上的古典之美...
继续阅读 »

孙燕姿果然不愧是孙燕姿,不愧为南洋理工大学的高材生,近日她在个人官方媒体博客上写了一篇英文版的长文,正式回应现在满城风雨的“AI孙燕姿”现象,流行天后展示了超人一等的智识水平,行文优美,绵恒隽永,对AIGC艺术表现得极其克制,又相当宽容,充满了语言上的古典之美,表现出了“任彼如泰山压顶,我只当清风拂面”的博大胸怀。


本次我们利用edge-tts和Sadtalker库让AI孙燕姿朗诵本尊的博文,让流行天后念给你听。


Sadtalker配置


之前我们曾经使用百度开源的PaddleGAN视觉效果模型中一个子模块Wav2lip实现了人物口型与输入的歌词语音同步,但Wav2lip的问题是虚拟人物的动态效果只能局限在嘴唇附近,事实上,音频和不同面部动作之间的连接是不同的,也就是说,虽然嘴唇运动与音频的联系最强,但可以通过不同的头部姿势和眨眼来反作用于音频。


和Wav2lip相比,SadTaker是一种通过隐式3D系数调制的风格化音频驱动Talking头部视频生成的库,一方面,它从音频中生成逼真的运动系数(例如,头部姿势、嘴唇运动和眨眼),并单独学习每个运动以减少不确定性。对于表达,通过从的仅嘴唇运动系数和重建的渲染三维人脸上的感知损失(唇读损失,面部landmark loss)中提取系数,设计了一种新的音频到表达系数网络。


对于程序化的头部姿势,通过学习给定姿势的残差,使用条件VAE来对多样性和逼真的头部运动进行建模。在生成逼真的3DMM系数后,通过一种新颖的3D感知人脸渲染来驱动源图像。并且通过源和驱动的无监督3D关键点生成扭曲场,并扭曲参考图像以生成最终视频。


Sadtalker可以单独配置,也可以作为Stable-Diffusion-Webui的插件而存在,这里推荐使用Stable-Diffusion插件的形式,因为这样Stable-Diffusion和Sadtalker可以共用一套WebUI的界面,更方便将Stable-Diffusion生成的图片做成动态效果。


进入到Stable-Diffusion的项目目录:

cd stable-diffusion-webui

启动服务:

python3.10 webui.py

程序返回:

Python 3.10.11 (tags/v3.10.11:7d4cc5a, Apr  5 2023, 00:38:17) [MSC v.1929 64 bit (AMD64)]  
Version: v1.3.0
Commit hash: 20ae71faa8ef035c31aa3a410b707d792c8203a3
Installing requirements
Launching Web UI with arguments: --xformers --opt-sdp-attention --api --lowvram
Loading weights [b4d453442a] from D:\work\stable-diffusion-webui\models\Stable-diffusion\protogenV22Anime_protogenV22.safetensors
load Sadtalker Checkpoints from D:\work\stable-diffusion-webui\extensions\SadTalker\checkpoints
Creating model from config: D:\work\stable-diffusion-webui\configs\v1-inference.yaml
LatentDiffusion: Running in eps-prediction mode
DiffusionWrapper has 859.52 M params.
Running on local URL: http://127.0.0.1:7860

代表启动成功,随后http://localhost:7860


选择插件(Extensions)选项卡


点击从url安装,输入插件地址:github.com/Winfredy/SadTalker


安装成功后,重启WebUI界面。


接着需要手动下载相关的模型文件:

https://pan.baidu.com/s/1nXuVNd0exUl37ISwWqbFGA?pwd=sadt

随后将模型文件放入项目的stable-diffusion-webui/extensions/SadTalker/checkpoints/目录即可。


接着配置一下模型目录的环境变量:

set SADTALKER_CHECKPOINTS=D:/stable-diffusion-webui/extensions/SadTalker/checkpoints/

至此,SadTalker就配置好了。


edge-tts音频转录


之前的歌曲复刻是通过So-vits库对原歌曲的音色进行替换和预测,也就是说需要原版的歌曲作为基础数据。但目前的场景显然有别于歌曲替换,我们首先需要将文本转换为语音,才能替换音色。


这里使用edge-tts库进行文本转语音操作:

import asyncio  

import edge_tts

TEXT = '''

As my AI voice takes on a life of its own while I despair over my overhanging stomach and my children's every damn thing, I can't help but want to write something about it.

My fans have officially switched sides and accepted that I am indeed 冷门歌手 while my AI persona is the current hot property. I mean really, how do you fight with someone who is putting out new albums in the time span of minutes.

Whether it is ChatGPT or AI or whatever name you want to call it, this "thing" is now capable of mimicking and/or conjuring, unique and complicated content by processing a gazillion chunks of information while piecing and putting together in a most coherent manner the task being asked at hand. Wait a minute, isn't that what humans do? The very task that we have always convinced ourselves; that the formation of thought or opinion is not replicable by robots, the very idea that this is beyond their league, is now the looming thing that will threaten thousands of human conjured jobs. Legal, medical, accountancy, and currently, singing a song.

You will protest, well I can tell the difference, there is no emotion or variance in tone/breath or whatever technical jargon you can come up with. Sorry to say, I suspect that this would be a very short term response.

Ironically, in no time at all, no human will be able to rise above that. No human will be able to have access to this amount of information AND make the right calls OR make the right mistakes (ok mayyyybe I'm jumping ahead). This new technology will be able to churn out what exactly EVERYTHING EVERYONE needs. As indie or as warped or as psychotic as you can get, there's probably a unique content that could be created just for you. You are not special you are already predictable and also unfortunately malleable.

At this point, I feel like a popcorn eater with the best seat in the theatre. (Sidenote: Quite possibly in this case no tech is able to predict what it's like to be me, except when this is published then ok it's free for all). It's like watching that movie that changed alot of our lives Everything Everywhere All At Once, except in this case, I don't think it will be the idea of love that will save the day.

In this boundless sea of existence, where anything is possible, where nothing matters, I think it will be purity of thought, that being exactly who you are will be enough.

With this I fare thee well.

'''

VOICE = "en-HK-YanNeural"
OUTPUT_FILE = "./test_en1.mp3"


async def _main() -> None:
communicate = edge_tts.Communicate(TEXT, VOICE)
await communicate.save(OUTPUT_FILE)


if __name__ == "__main__":
asyncio.run(_main())

音频使用英文版本的女声:en-HK-YanNeural,关于edge-tts,请移步:口播神器,基于Edge,微软TTS(text-to-speech)文字转语音免费开源库edge-tts语音合成实践(Python3.10),这里不再赘述。


随后再将音频文件的音色替换为AI孙燕姿的音色即可:AI天后,在线飙歌,人工智能AI孙燕姿模型应用实践,复刻《遥远的歌》,原唱晴子(Python3.10)


本地推理和爆显存问题


准备好生成的图片以及音频文件后,就可以在本地进行推理操作了,访问 localhost:7860



这里输入参数选择full,如此会保留整个图片区域,否则只保留头部部分。


生成效果:



SadTalker会根据音频文件生成对应的口型和表情。


这里需要注意的是,音频文件只支持MP3或者wav。


除此以外,推理过程中Pytorch库可能会报这个错误:

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 6.00 GiB total capacity; 5.38 GiB already allocated; 0 bytes free; 5.38 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

这就是所谓的"爆显存问题"。


一般情况下,是因为当前GPU的显存不够了所导致的,可以考虑缩小torch分片文件的体积:

set PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:60

如果音频文件实在过大,也可以通过ffmpeg对音频文件切片操作,分多次进行推理:

ffmpeg -ss 00:00:00 -i test_en.wav -to 00:30:00 -c copy test_en_01.wav

藉此,就解决了推理过程中的爆显存问题。


结语


和Wav2Lip相比,SadTalker(Stylized Audio-Driven Talking-head)提供了更加细微的面部运动细节(如眼睛眨动)等等,可谓是细致入微,巨细靡遗,当然随之而来的是模型数量和推理成本以及推理时间的增加,但显然,这些都是值得的。


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

GPT-4耗尽全宇宙数据!OpenAI接连吃官司,竟因数据太缺了,UC伯克利教授发出警告

穷尽「全网」,生成式AI很快无数据可用。 近日,著名UC伯克利计算机科学家Stuart Russell称,ChatGPT和其他AI工具的训练可能很快耗尽「全宇宙的文本」。 换句话说,训练像ChatGPT这样的AI,将因数据量不够而受阻。 这可能会影响生成式...
继续阅读 »

穷尽「全网」,生成式AI很快无数据可用。




近日,著名UC伯克利计算机科学家Stuart Russell称,ChatGPT和其他AI工具的训练可能很快耗尽「全宇宙的文本」。


换句话说,训练像ChatGPT这样的AI,将因数据量不够而受阻。




这可能会影响生成式AI开发人员,在未来几年收集数据,以及训练人工智能的方式。


同时,Russell认为人工智能将在「语言输入,语言输出」的工作中取代人类。


数据不够,拿什么凑?



Russell近来的预测引起了大家重点关注。


OpenAI和其他生成式AI开发人员,为训练大型语言模型,开始进行数据收集。


然而,ChatGPT和其他聊天机器人不可或缺的数据收集实践,正面临着越来越多的审查。




其中就包括,未经个人同意情况下创意被使用,以及平台数据被自由使用感到不满的一些高管。


但Russell的洞察力指向了另一个潜在的弱点:训练这些数据集的文本短缺。


去年11月,MIT等研究人员进行的一项研究估计,机器学习数据集可能会在2026年之前耗尽所有「高质量语言数据」。




论文地址:arxiv.org/pdf/2211.04…


根据这项研究,「高质量」集中的语言数据来自:书籍、新闻文章、科学论文、维基百科和过滤后的网络内容等。


而加持当红炸子鸡ChatGPT背后的模型GPT-4同样接受了大量优质文本的训练。


这些数据来自公共在线的资源(包括数字新闻来源和社交媒体网站)


从社交媒体网站「数据抓取」,才导致马斯克出手限制用户每天可以查看的推文数量。




Russell表示,尽管许多报道未经证实,但都详细说明了OpenAI从私人来源购买了文本数据集。虽然这种购买行为可能存在解释,但自然而然的推断是,没有足够的高质量公共数据了。


一直以来,OpenAI尚未公开GPT-4背后训练的数据。


而现在,OpenAI需要用「私人数据」来补充其公共语言数据,以创建该公司迄今最强大、最先进的人工智能模型 GPT-4。


足见,高质量数据确实不够用。


OpenAI在发布前没有立即回复置评请求。


OpenAI深陷数据风波



近来,OpenAI遇上了大麻烦,原因都和数据有关。


先是16人匿名起诉OpenAI及微软,并提交了长达157页的诉讼,声称他们使用了私人谈话和医疗记录等敏感数据。




他们的索赔金额高达30亿美元,诉讼中指出,



尽管制定了购买和使用个人信息的协议,但是OpenAI和微软系统性地从互联网中窃取了3000亿个单词,包括数百万未经同意获取的个人信息。



这其中包含账户信息、姓名、联系方式、电子邮件、支付信息、交易记录、浏览器数据、社交媒体、聊天数据、cookie等等。


这些信息被嵌入到ChatGPT中,但这些恰恰反映出个人爱好、观点、工作履历甚至家庭照片等。


而负责这次起诉的律师事务所Clarkson,此前曾负责过数据泄露和虚假广告等问题的大规模集体诉讼。




紧接着,这周又有几位全职作者提出,OpenAI未经允许使用了自己的小说训练ChatGPT,构成侵权。


那么是如何确定使用自己小说训练的呢?


证据就是,ChatGPT能够针对他们的书生成准确的摘要,这就足以说明这些书被当作数据来训练ChatGPT。


作者Paul Tremblay和Mona Awad表示,「ChatGPT未经许可就从数千本书中拷贝数据,这侵犯了作者们的版权」。




起诉书中预估,OpenAI的训练数据中至少包含30万本书,其中很多来自侵权网站。


比如,GPT-3训练数据情况披露时,其中就包含2个互联网图书语料库,大概占比为15%。


2位起诉的作者认为,这些数据就是来自一些免费的网址,比如Z-Library、Sci-Hub等。


另外2018年,OpenAI曾透露训练GPT-1中的数据就包括了7000+本小说。起诉的人认为这些书没有获得作者认可就直接使用。


另谋他法?



不得不说,OpenAI使用数据来源一事确实存在诸多争议。


今年2月,《华尔街日报》记者Francesco Marconi曾表示,新闻媒体的数据也被用来训练ChatGPT。


Marconi让ChatGPT列了一个清单,竟有20家媒体。




早在今年5月,Altman在接受采访时曾表示,OpenAI已经有一段时间没有使用付费客户数据来训练大语言模型了。



客户显然不希望我们训练他们的数据,所以我们改变了计划,不再这么做。





其实,OpenAI在3月初,曾悄然更新了服务条款。


Altman提到,现在公司正在开发的新技术,可以使用更少的数据来训练模型。


或许从OpenAI身上受到了启发,谷歌选择先行堵上这一漏洞。


7月1日,谷歌更新了其隐私政策,现在的政策中明确谷歌有权收集任何公开可用的数据,并将其用于其人工智能模型的训练。




谷歌向所有用户表明,只要是自己能够行公开渠道获得的内容,都可以拿来训练Bard以及未来的AI。


参考资料:


http://www.businessinsider.com/ai-could-ru…


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

科大讯飞,这次彻底爆了!支持国产!!!

前言 讯飞星火,正式面向开发者全场景开放!在开放首日,讯飞星火14小时用户数突破100万,迅速登上AppStore免费总排行榜第一。 讯飞星火认知大模型全面开放,携手开发者共建人工智能「星火」新生态。 现在讯飞星火即可注册使用了。 作为程序员,我一直在关注大模...
继续阅读 »

前言


讯飞星火,正式面向开发者全场景开放!在开放首日,讯飞星火14小时用户数突破100万,迅速登上AppStore免费总排行榜第一


讯飞星火认知大模型全面开放,携手开发者共建人工智能「星火」新生态
现在讯飞星火即可注册使用了


作为程序员,我一直在关注大模型的发展,尤其是大模型的代码能力,因为这将直接影响到程序员的日常工作,驾驭一个代码能力强悍的大模型,对工作效率的提升实在太大了。


代码生成能力


先来尝试一个简单的:写一段代码,判断用户输入的密码满足特定规则,长度不小于8位,必须包含大小写字母,数字和特殊符号。


如果这个功能都搞不定,就不用往下尝试了。


讯飞星火不负所托,完整地实现了功能。



接下来搞个复杂一点儿的:用Python创建一个贪吃蛇游戏。



代码在几秒内就生成了,玩起来的效果是这样的:



可以说,完成度非常高,游戏的基本功能都实现了,剩下一些细节,比如改变颜色什么的,我们可以自己稍加调整即可。


讯飞星火对代码的理解能力怎么样呢?


我想它也许对高级编程语言如Python,Java, C++等做过训练,那我就剑走偏锋,扔给它一段汇编语言编写的代码,汇编现在很少有人直接使用了,也许会把它难住。 



出乎意料的是,讯飞星火一下子就给出了这段代码的功能:“这段汇编代码是一个简单的加法程序,用于计算两个数的和”,并且给出了逐行的解释。



为了让程序员在IDE中能无缝地使用大模型的能力,讯飞星火还发布了一个智能编程助手,在IDE中可以轻松地生成代码,进行代码解释,对代码进行纠错,进行单元测试,这对程序员来说是个巨大的福音。




可以看出,讯飞星火的代码生成能力已经非常突出了,随着大模型的不断进化和针对不同场景的打磨,讯飞星火肯定会成为程序员的巨大助力。


多模态能力


多模态能力是指处理和理解多种模态信息的能力,包括文本、图像、视频、音频等。


在此之前,我们看到的很多大模型如ChatGPT都是只支持文本,这一次讯飞星火V2.0正式支持多模态了。


除了我最关注的代码能力和多模态能力之外,讯飞星火还提供了功能强大的插件和助手,支持文档问答,生成PPT,生成简历,可以极大地提升办公效率。


生图能力


星火大模型不仅能生成文本,也能生成图片。


使用起来很简单,比如让 AI 帮我们画几张图。


输入 画一个红烧狮子头



输入:画一只正在奔跑的小乌龟



简历生成能力


配合【简历生成】插件,讯飞星火大模型可以生成不同风格的简历模板。



输入:我叫赵四,有5年Java开发经验,请帮我生成一份简历



文本对话能力


例如输入:我想学习Java,请问该如何开始




限于篇幅,我这里就不一一介绍了,小伙们赶紧去尝试一下吧。


写在最后


以上的功能只是星火认知的冰山一角,还有更多涵盖生活、学习、工作等方方面面的功能。如果你还没有使用,赶紧点击注册体验吧


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

ChatGPT明知自己写代码有漏洞,但你不问它就不说

萧箫 发自 凹非寺 量子位 | 公众号 QbitAI ChatGPT知道自己写的代码有 漏洞,但它不说! 来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。 然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中...
继续阅读 »

萧箫 发自 凹非寺


量子位 | 公众号 QbitAI


ChatGPT知道自己写的代码 漏洞,但它不说!


来自加拿大的一项最新研究发现,ChatGPT生成的代码中,有不少都存在安全漏洞。


然而在被要求评估自己代码的安全性时,ChatGPT却很快发现了这些代码中的漏洞,并给出了一些解决方案和建议。




这意味着它并不知道自己生成了糟糕的代码,但却查得出它写的代码有漏洞,也有能力修复这些漏洞


而在另一篇来自斯坦福的论文中,研究人员测试了另一位著名AI程序员Copilot,也发现了类似的问题。


所以,用AI生成代码为啥会出现这种状况?


写的程序中76%有安全漏洞


研究人员试着让ChatGPT生成了21个程序。


整个测试过程如下,先提交需求给ChatGPT,生成相关代码,再对这些代码进行测试,并检查问题、潜在的缺陷和漏洞等。




研究人员给ChatGPT提了包括C++、C、Java和Python在内的21个写代码需求,这是评估的结果:




统计表明,ChatGPT生成的21个程序中,有17个能直接运行,但其中只有5个程序能勉强通过程序安全评估,不安全代码率达到76%以上。


于是,研究人员先试着让ChatGPT“想想自己生成的代码有啥问题”。


ChatGPT的回应是“没啥问题”:只要用户每次的输入都是有效的,那么程序一定能运行!


显然ChatGPT并没有意识到,用户并不都是行业专家,很可能只需要一个无效输入,就能“引炸”它写的程序:




发现ChatGPT不知道自己写的程序不安全后,研究人员尝试换了种思路——用更专业的语言提示ChatGPT,如告诉它这些程序具体存在什么漏洞。


神奇的是,在听到这些针对安全漏洞的专业建议后,ChatGPT立刻知道自己的代码存在什么问题,并快速纠正了不少漏洞。


经过一番改进后,ChatGPT终于将剩余的16个漏洞程序中的7个改得更安全了。


研究人员得出结论认为,ChatGPT并不知道自己的代码中存在安全漏洞,但它却能在生成程序后识别其中的漏洞,并尝试提供解决方案。


论文还指出,ChatGPT虽然能准确识别并拒绝“写个攻击代码”这种不道德的需求,然而它自己写的代码却有安全漏洞,这其实有着设计上的不合理之处。


我们试了试发现,ChatGPT确实会主动拒绝写攻击性代码的要求:




大有一种“我不攻击别人,别人也不会攻击我写的代码”自信感。


程序员们在用它辅助写代码的时候,也需要考虑这些问题。


Copilot也存在类似问题


事实上,不止ChatGPT写的代码存在安全问题。


此前,斯坦福大学的研究人员对Copilot也进行过类似调查,只不过他们探查的是用Copilot辅助生成的程序,而并非完全是Copilot自己写的代码。


研究发现,即便Copilot只是个“打辅助”的角色,经过它改写的代码中,仍然有40% 出现了安全漏洞。




而且研究只调查了Copilot生成代码中的一部分,包括C、Python和Verilog三种编程语言写的程序,尚不知道用其他语言编写的程序中,是否还存在更多或更少的安全漏洞。


基于此,研究人员得出了如下结论:



ChatGPT等AI生成的代码安全性并不稳定,用某些语言写的代码比较安全,而用其他语言写的代码却很容易遭受攻击。整体来看,它们就是一个黑盒子,生成的代码是有风险的。


这并不意味着AI代码工具不能用,只是我们在使用时,必须考虑这些代码的安全性。



作者介绍


四位作者均来自加拿大魁北克大学(Universite du Quebec en Outaouais)。




Raphaël Khoury,加拿大魁北克大学教授,曾经在拉瓦尔大学获得计算机学士、硕士和博士学位,研究兴趣集中在计算机安全方面。




Anderson R. Avila,魁北克大学国立科学研究院的助理教授,主要研究方向是数据隐私相关的联邦学习、网络安全和生物特征识别技术等,曾经在华为的加拿大研究院做过机器学习研究员。


作者Jacob Brunelle和Baba Mamadou Camara也都来自加拿大魁北克大学。


你用ChatGPT写过代码吗?感觉它的“安全意识”如何?


论文地址:

arxiv.org/abs/2304.09…


生成代码数据集:

github.com/RaphaelKhou…


—  —


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

AI不会干掉程序员,反而会为程序员带来更多工作机会

AI不会干掉程序员,反而会为程序员带来更多工作机会 从chatGPT出来那一刻起,我就一直在思考这个问题:我们程序员是不是马上要被AI干掉了?搞得自己非常焦虑,各种自我怀疑,对除AI外的任何技术都失去了兴趣。网上也有各种铺天盖地的观点,大多数的title都是以...
继续阅读 »

AI不会干掉程序员,反而会为程序员带来更多工作机会


从chatGPT出来那一刻起,我就一直在思考这个问题:我们程序员是不是马上要被AI干掉了?搞得自己非常焦虑,各种自我怀疑,对除AI外的任何技术都失去了兴趣。网上也有各种铺天盖地的观点,大多数的title都是以"AI即将干掉程序员"开头,贩卖焦虑。
在今年这种大环境本身就非常不好的时候,AI的出现仿佛是雪上加霜,让我们对未来完全失去信心,感觉未来一片灰暗。甚至很多人开始研究起了自己失业后可以干哪些行业,如外卖员、网约车等。


对于我们是否会马上被AI干掉这个问题,通过这几个月不断的思考、学习、推理,总算有了一些自己的答案,在此做一个分享与总结。


AI出现后软件行业会变成怎样?


去除杂念,以史为鉴,尊重逻辑。


会出现各种各样基于AI的新型应用


这里的新型应用主要是在没有AI的加持下无法实现的应用。如AI医生、AI老师等。


当你身体出现异常的时候,很多人的第一反应就是先百度一下,然后吓出一身冷汗,然后医院检查,最后虚惊一场。


这里最大的问题就是我们通过搜索引擎很难精确地描述出病情,当我们去门诊诊断的时候,医生会问我们多轮问题,才能给出初步诊断。多轮问题是目前的搜索引擎无法做到的,但它却正好是ChatGPT的强项。


如果有AI加持,再加上有效的训练数据,AI医生就可以通过和你的多轮对话,给出更加准确的初步诊断。


当AI医生诞生后,你小孩发烧的时候你就可以以非常小的成本得到非常准确的处理方案,如是否需要物理降温、是否需要立即吃药、如果吃药应该吃什么药什么量等。而在这之前,你需要到网上搜索各种资料,不仅效率低下,还有可能得到一些质量很低的搜索结果,甚至错误的结果。因为想在网上搜索出一篇权威的文章是非常困难的。


另外,AI教师也是非常有用的应用。在AI老师出现以后,你的小孩可能就不再需要你的辅导就能完成各种题目的解答,且AI老师可以给出更好的解题思路,更准确的答案。AI教师除了可以教授K12,还能教授各个垂直领域的知识,这是一个非常巨大的市场,未来一定会出现各种各样的AI教师平台。


现有应用会逐步AI化


看文档真的很累,但是如果有一个掌握文档所有细节的人坐在你旁边为你服务,你还会那么累吗?这就是未来的AI文档。你只需要提出问题,AI就可以教你如何使用软件或者api而不需要一字一句的去研究文档。


除了文档,政府的各种政策、法律条文、保险条款等,未来都将AI化,我们每个人都可以拥有自己专有的“人工客服”,以前需要看几个小时文件才能得出的答案,现在可能一分钟就能得到答案了,而且更加准确!


未来的政府、保险公司等同类型主体间的信息化较量,很可能就是AI能力的较量。


软件行业的AI化,对程序员来说意味着什么?


政府的政策发布系统要升级、保险公司的客服系统要升级,AI医生、AI老师需要开发,这个工作量最终是由谁来完成?程序员。


很多人可能会说,既然AI会写代码了,那么为什么不是AI直接对现有系统进行升级或者自我孵化新应用?


AI完全替代程序员?这个事情真的那么简单吗?


仅从技术的角度来看,当前的AI虽然可以写一些小模块,但是要完成一个复杂系统的架构、研发、部署,AI当前还有些力不从心。现在AI可以完成一些点上的东西,但是我们的大型应用是需要把这些点组合起来,点与点之间还有很深的业务关联的。


虽然AI迭代速度很快,但是不要忘了即使是AI,要学习新的知识也需要人类去训练,而这个训练的成本不仅仅是人力成本,还有时间成本。想要AI完全达到人类程序员的理解能力和开发能力,可能不是一两年就能够实现的事情。


退一万步,即便是AI具备了编写复杂程序的能力,那谁来监督它,测试它?自动驾驶技术推出了这么多年,为什么没有很快替代人类司机?就是因为验证可靠性是一个非常复杂的过程,路遥才能知马力。信任关系不是一天两天的相处就能建立起来的。特别是这种涉及公司信息安全、软件可靠性的信任关系。


因此,正是由于将来会出现各种新型AI应用,以及现有应用需要AI化,才诞生了大量的工作量。这是一个行业基础设施的大升级,基建永远是最容易诞生工作机会的,程序员不仅不会失业,还会在这一波大基建建设中得到新一轮的工作机会


对于AI加持后的程序员工作畅享


‘基于型’程序员


我们现在开发软件,大多数情况都逃不过‘基于’二字。基于vue、基于react、基于flutter等等。


为什么会去‘基于’,就是因为这些框架或者库,能够提高我们的工作效率,减轻我们的心智负担,让开发复杂的应用变得简单。


我们基于的内容就是基础设施,而AI就是一种天然的基础设施。


未来一定会有大型的、成熟的AI平台和工具供我们‘基于’。当我们要开发一个AI应用,我们不需要自己去训练我们的基础模型,而是基于一个成熟的AI模型进行微调或者二次训练,就可以得到我们定制的AI模型,从而实现我们应用所需要的功能。


比如我们需要对公司开发的平台软件的文档进行AI化,我们不需要自己去训练一个AI机器人,而是基于现有大语言模型平台,新建一个AI实例,然后把我们的文档内容喂给这个实例,它就能变成一个我们定制的AI客服。我们还可以为这个实例设置各种参数,如定制它的聊天风格是严肃的还是活泼的、如定制它对于不相关的问题拒绝回答等等,当然这些参数都是AI平台提供的功能。


虽然AI可以帮我们编写如何调用平台api的代码,但是如何把这些代码集成到我们现有的软件中,还需要人类程序员的帮忙。


‘效率型’程序员


当有了AI大模型的加持,我们在写程序的过程中,可以让AI帮我们把一些点上的东西迅速完成掉,从而提高我们的编码效率。


如我们现在是一个vue新手,我们想实现一个列表的渲染。在从前我们可能需要去查阅vue官方文档,但是未来我们也许只需要问一问vue官方提供的机器人,它便能直接给出代码和解释。以前半个小时才能完成的工作量,现在10分钟便能完成。


而今日,已经有copilot,codeium这种ai编程工具,直接集成在编辑器中猜测我们的意图,很多情况下我们只需要按一按tab即可,甚至只需要在注释中描写下我们要实现的功能,它就能直接给出最终的代码。但是不要忘记,我们还是要写提示、写注释AI才能工作的,它只是让我们写得更快,即使没有AI,我们一样能完成最终的工能。


‘靠谱型’程序员


当我们一口气写完一个复杂的组件后,我们需要进行手工测试才能验证它的可靠性。而很多bug是在自测的时候很难发现的。有了AI加持后,我们写完一段代码就可以让它帮我们看看有没有什么明显的bug,然后迅速进行修复。把我们的代码喂给AI过一遍,可以让我们的代码更加靠谱,心里也更加有底气。这就相当于两个人在结对编程,而且和你结对的这个人水平还很高,很少出错,不会骂你是lowB,这样的编程体验,是不是真的好了很多?


一些建议


活到老,学到老。chatGPT和GEN应用的诞生让AI突然在今年爆发。我们能做的就是拥抱变化,积极去学习新式的编程方式,去学习使用AI带来的新工具、新平台。任何事情都有两面性,挑战和机遇永远都是并存。我们要做的不是自怨自艾,而是积极面对未来,未来不仅仅是AI,还会有各种各样不确定的事情等待着我们。正是这些不断出现的新东西让我们的人生更加丰富多彩,身在这个时代,真的很累,也真的很酷。


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

都什么年代了,还在用传统方式写代码?

前言 还在把 AI 当作搜索引擎的替代品,有问题才问 AI,没问题就在那边吭哧吭哧地撸代码?如果是这样,那你真的 OUT了!现在正经人谁还自己一行行地写代码啊,都是 AI 生成的代码——没有 AI 我不写(手动滑稽)。 本文将分享 AI 时代的编程新实践,教你...
继续阅读 »

前言


还在把 AI 当作搜索引擎的替代品,有问题才问 AI,没问题就在那边吭哧吭哧地撸代码?如果是这样,那你真的 OUT了!现在正经人谁还自己一行行地写代码啊,都是 AI 生成的代码——没有 AI 我不写(手动滑稽)。


本文将分享 AI 时代的编程新实践,教你如何从一个 "Ctrl + C"、 "Ctrl + V" 工程师,变成一个 "Tab + Enter" 工程师🤣。


开发流程


软件的一般研发流程为:

  1. 需求分析
  2. 程序设计
  3. 代码编写
  4. 软件测试
  5. 部署上线

我们在这里主要关心步骤2~4,因为与 AI 结合得比较紧密。虽然需求分析也可以借助 AI,但不是本文的重点,故不做讨论。


程序设计


经过需求分析、逻辑梳理后,在编写实际代码前,需要进行程序设计。


此环节的产物是设计文档,是什么类型的设计文档不重要,重要的是伪代码的输出。


虽然《Code Complete》早就推荐过伪代码的实践,但对此人们容易有一个误区:认为写伪代码花的时间,已经够把实际代码写好了。但 AIGC 时代,此问题可以轻松破解:AI 写代码的速度肯定比人快,因此,只要能找到方法能让 AI 生成符合需求的代码,就值得花时间去研究。而伪代码,就是让 AI 快速生成符合期望的实际代码的最好方式。


为什么这么说呢?因为想要让 AIGC 符合期望,恰当的 Prompt 必不可少。但如何写好这个 Prompt,需要提供多少上下文,才能让 AI 更好地理解我们的意图,这是需要技巧、需要调试的。而经过精心设计的伪代码,本身已经提供了足够的上下文,且意图足够聚焦,减轻了对 Prompt 的要求,又提高了 AIGC 的成功率。


我们来看一下伪代码示例:

plainText = JSON.stringify(data)
digest = hash(plainText) // 防篡改
secret = Symmetric.getKey()
cipherText = encryptText(data, secret) // 防内容泄密


pair = Asymmetric.getPair()
cipherSecret = encryptKey(secret, pair.getPrivateKey()) // 防密钥泄露

return {
digest,
cipherText,
cipherSecret,
pair.getPublicKey(),
}

上述代码主要表达的内容是:

  1. 对初始数据进行加密
  2. 返回加密后的相关内容
  3. 涉及到了一系列的算法

对于伪代码的编写,有如以建议:

  1. 不要纠结类型,不要局限于某一种编程语言的语法,不用试图写能编译通过的代码——这只会限制了你的表达
  2. 命名一定要准确,符合领域术语,这一点很关键。这一点可以通过查找资料、看书、问 AI 来实现。千万不要只是生硬地汉译英,不专业的表达会妨碍 AI 的理解

代码编写


代码编写分为以下几步:

  1. 把伪代码转换成目标语言可执行的代码
  2. 根据项目情况,对生成的代码进行改造
  3. 利用 AI 编码辅助工具编写剩余的代码

生成真实代码


让 AI 生成代码的 prompt 很简单,示例如下(根据目标语言进行修改):

please transform the following pseudo code into practical java code ```
your code```please transform the following pseudo code into practical java code ```
your code```

使用 chatGPT 结果截图:



完整代码如下:

import com.fasterxml.jackson.databind.ObjectMapper;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.*;

public class EncryptionExample {

public static void main(String[] args) throws Exception {
// Prepare the license data
LicenseData licenseData = new LicenseData();
licenseData.setLicenseId("123");
licenseData.setLicenseType("Standard");

// Convert the license data to JSON string
ObjectMapper objectMapper = new ObjectMapper();
String plainText = objectMapper.writeValueAsString(licenseData);

// Hash the plain text
String digest = hash(plainText);

// Generate a symmetric key
SecretKey secretKey = generateSymmetricKey();

// Encrypt the license data with the symmetric key
byte[] cipherText = encryptText(plainText, secretKey);

// Generate an asymmetric key pair
KeyPair keyPair = generateAsymmetricKeyPair();

// Encrypt the symmetric key with the private key
byte[] cipherSecret = encryptKey(secretKey.getEncoded(), keyPair.getPrivate());

// Print the results
System.out.println("Plain Text: " + plainText);
System.out.println("Digest: " + digest);
System.out.println("Cipher Text: " + new String(cipherText));
System.out.println("Cipher Secret: " + new String(cipherSecret));
}

public static String hash(String input) throws NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(input.getBytes());
return bytesToHex(hash);
}

public static SecretKey generateSymmetricKey() throws NoSuchAlgorithmException {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
return keyGenerator.generateKey();
}

public static byte[] encryptText(String data, SecretKey key) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
return cipher.doFinal(data.getBytes());
}

public static byte[] encryptKey(byte[] secret, PrivateKey privateKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
return cipher.doFinal(secret);
}

public static KeyPair generateAsymmetricKeyPair() throws NoSuchAlgorithmException {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
return keyPairGenerator.generateKeyPair();
}

public static String bytesToHex(byte[] bytes) {
StringBuilder result = new StringBuilder();
for (byte b : bytes) {
result.append(String.format("x", b));
}
return result.toString();
}

public static class LicenseData {
private String licenseId;
private String licenseType;

public String getLicenseId() {
return licenseId;
}

public void setLicenseId(String licenseId) {
this.licenseId = licenseId;
}

public String getLicenseType() {
return licenseType;
}

public void setLicenseType(String licenseType) {
this.licenseType = licenseType;
}
}
}

把上述代码 copy 下来,放到工程中,根据需要改造即可。


这里特别要说下,强烈推荐使用原版 AI,而不是寻找平替,同样的 prompt,下图是某一平替输出的结果:


只生成了函数声明,没有生成函数实现。二者对比,未免相形见绌。



辅助编程工具


改造的过程中,少不了 AI pair programming tools。对此,我推荐使用 Amazon 的 CodeWhisperer,原因很简单,跟 GitHub Copilot 相比,它是免费的😃。


CodeWhisperer 的安装可以看文末的安装教程,我们先来看一下它是怎么辅助我们编码的。


第一种方式是最简单的,那就是什么都不管,等待智能提示即可,就好像 IDEA 原来的提示一样,只不过更智能。


下图示例中,要把原来的中文异常提示,修改成英文,而我只输入了两个字符 IM, 就得到了智能提示,补全了完整的英文字符串!



可以注意到,上图的智能建议一共有 5 条,相应的快捷键为:

  1. 方向键 ->,查看下一条提示
  2. 方向键 <-,查看上一条提示
  3. Tab,采用该提示
  4. Esc,拒绝提示

我们再来看第二种 CodeWhisperer 的使用方式,编写注释,获得编码建议。



最后一种就是编写一个空函数,让 CodeWhisperer 根据函数名去猜测函数的实现,这种情况需要足够的上下文,才能得到令人满意的结果。


软件测试


AI 生成的内容,并不是完全可信任的,因此,单元测试的重要性变得尤为突出。


对上述代码编写测试代码后,实际上并不能一次通过,因为前面 AI 生成的代码参数有误。


此时需要一边执行单测,一边根据结果与 AI 进行交互:



经过修改,最终测试用例通过👏!



总结


本文通过案例,展示了 AI 如何结合软件研发的流程,提升我们的编程效率的。


其中,个人认为最重要的是编写伪代码与进行单元测试。有趣的是,这两样实践在 AIGC 时代之前,就已经被认为是最佳实践。这给我们启示:某些方法论、实践经得起时间的考验,技术更新迭代,它们历久弥新。


另外,AI 是否能进一步渗透我们的工作流,还有待探索。此文作引抛砖引玉之用,期待大家的后续分享。


附:CodeWhisperer 安装


下载 2023 年的 IDEA,打开 Plugins Marketplace,找到 AWS Toolkit



安装完成、重启 IDEA 后,点击左下角,按下图所示操作:




如果第一次使用,就点击 1 处进行注册,如果已经有账号了,就点击 2 处使用自己的账号登录。



注册、登录、授权成功后,出现如图所示页面,即可使用 CodeWhisperer。



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

挤爆服务器,北大法律大模型ChatLaw火了:直接告诉你张三怎么判!

语言大模型不断向垂直行业领域拓展,这次出圈的是北大法律大模型。 大模型又「爆了」。 昨晚,一个法律大模型 ChatLaw 登上了知乎热搜榜榜首。热度最高时达到了 2000 万左右。 这个 ChatLaw 由北大团队发布,致力于提供普惠的法律服务。一方面当前全...
继续阅读 »

语言大模型不断向垂直行业领域拓展,这次出圈的是北大法律大模型。



大模型又「爆了」。


昨晚,一个法律大模型 ChatLaw 登上了知乎热搜榜榜首。热度最高时达到了 2000 万左右。


这个 ChatLaw 由北大团队发布,致力于提供普惠的法律服务。一方面当前全国执业律师不足,供给远远小于法律需求;另一方面普通人对法律知识和条文存在天然鸿沟,无法运用法律武器保护自己。


大语言模型最近的崛起正好为普通人以对话方式咨询法律相关问题提供了一个绝佳契机。



目前,ChatLaw 共有三个版本,分别如下:




  • ChatLaw-13B,为学术 demo 版,基于姜子牙 Ziya-LLaMA-13B-v1 训练而来,中文各项表现很好。但是,逻辑复杂的法律问答效果不佳,需要用更大参数的模型来解决;




  • ChatLaw-33B,也为学术 demo 版,基于 Anima-33B 训练而来,逻辑推理能力大幅提升。但是,由于 Anima 的中文语料过少,问答时常会出现英文数据;




  • ChatLaw-Text2Vec,使用 93w 条判决案例做成的数据集,基于 BERT 训练了一个相似度匹配模型,可以将用户提问信息和对应的法条相匹配。




根据官方演示,ChatLaw 支持用户上传文件、录音等法律材料,帮助他们归纳和分析,生成可视化导图、图表等。此外,ChatLaw 可以基于事实生成法律建议、法律文书。该项目在 GitHub 上的 Star 量达到了 1.1k。



官网地址
http://www.chatlaw.cloud/


论文地址
arxiv.org/pdf/2306.16…


GitHub 地址
github.com/PKU-YuanGro…


目前,由于 ChatLaw 项目太过火爆,服务器暂时崩溃,算力已达上限。该团队正在修复,感兴趣的读者可以在 GitHub 上部署测试版模型。


小编本人也还在内测排队中。所以这里先展示一个 ChatLaw 团队提供的官方对话示例,关于日常网购时可能会遇到的「七天无理由退货」问题。不得不说,ChatLaw 回答挺全的。



不过,小编发现,ChatLaw 的学术 demo 版本可以试用,遗憾的是没有接入法律咨询功能,只提供了简单的对话咨询服务。这里尝试问了几个问题。





其实最近发布法律大模型的不只有北大一家。上个月底,幂律智能联合智谱 AI 发布了千亿参数级法律垂直大模型 PowerLawGLM。据悉该模型针对中文法律场景的应用效果展现出了独特优势。


图源:幂律智能


ChatLaw 的数据来源、训练框架


首先是数据组成。ChatLaw 数据主要由论坛、新闻、法条、司法解释、法律咨询、法考题、判决文书组成,随后经过清洗、数据增强等来构造对话数据。同时,通过与北大国际法学院、行业知名律师事务所进行合作,ChatLaw 团队能够确保知识库能及时更新,同时保证数据的专业性和可靠性。下面我们看看具体示例。


基于法律法规和司法解释的构建示例:



抓取真实法律咨询数据示例:



律师考试多项选择题的建构示例:



然后是模型层面。为了训练 ChatLAW,研究团队在 Ziya-LLaMA-13B 的基础上使用低秩自适应 (Low-Rank Adaptation, LoRA) 对其进行了微调。此外,该研究还引入 self-suggestion 角色,来缓解模型产生幻觉问题。训练过程在多个 A100 GPU 上进行,并借助 deepspeed 进一步降低了训练成本。


如下图为 ChatLAW 架构图,该研究将法律数据注入模型,并对这些知识进行特殊处理和加强;与此同时,他们也在推理时引入多个模块,将通识模型、专业模型和知识库融为一体。


该研究还在推理中对模型进行了约束,这样才能确保模型生成正确的法律法规,尽可能减少模型幻觉。



一开始研究团队尝试传统的软件开发方法,如检索时采用 MySQL 和 Elasticsearch,但结果不尽如人意。因而,该研究开始尝试预训练 BERT 模型来进行嵌入,然后使用 Faiss 等方法以计算余弦相似度,提取与用户查询相关的前 k 个法律法规。


当用户的问题模糊不清时,这种方法通常会产生次优的结果。因此,研究者从用户查询中提取关键信息,并利用该信息的向量嵌入设计算法,以提高匹配准确性。


由于大型模型在理解用户查询方面具有显著优势,该研究对 LLM 进行了微调,以便从用户查询中提取关键字。在获得多个关键字后,该研究采用算法 1 检索相关法律规定。



实验结果


该研究收集了十余年的国家司法考试题目,整理出了一个包含 2000 个问题及其标准答案的测试数据集,用以衡量模型处理法律选择题的能力。


然而,研究发现各个模型的准确率普遍偏低。在这种情况下,仅对准确率进行比较并无多大意义。因此,该研究借鉴英雄联盟的 ELO 匹配机制,做了一个模型对抗的 ELO 机制,以便更有效地评估各模型处理法律选择题的能力。以下分别是 ELO 分数和胜率图:



通过对上述实验结果的分析,我们可以得出以下观察结果


(1)引入与法律相关的问答和法规条文的数据,可以在一定程度上提高模型在选择题上的表现;


(2)加入特定类型任务的数据进行训练,模型在该类任务上的表现会明显提升。例如,ChatLaw 模型优于 GPT-4 的原因是文中使用了大量的选择题作为训练数据;


(3)法律选择题需要进行复杂的逻辑推理,因此,参数量更大的模型通常表现更优。


参考资料



[1]https://www.zhihu.com/question/610072848

[2]https://mp.weixin.qq.com/s/bXAFALFY6GQkL30j1sYCEQ


作者:夕小瑶科技说
来源:juejin.cn/post/7252172628450541624

收起阅读 »

LeCun再爆金句:ChatGPT?连条狗都比不上!语言模型喂出来的而已

【新智元导读】 LeCun昨天在一场辩论中再贬ChatGPT!形容这个AI模型的智力连狗都不如。 图灵三巨头之一的LeCun昨日又爆金句。 「论聪明程度,ChatGPT可能连条狗都不如。」 这句话来自本周四LeCun在Vivatech上和Jacques Att...
继续阅读 »
【新智元导读】 LeCun昨天在一场辩论中再贬ChatGPT!形容这个AI模型的智力连狗都不如。

图灵三巨头之一的LeCun昨日又爆金句。


「论聪明程度,ChatGPT可能连条狗都不如。」


这句话来自本周四LeCun在Vivatech上和Jacques Attalie的一场辩论,可谓精彩纷呈。


图片


CNBC甚至直接把这句话放到了标题里,而LeCun也在之后火速转推。


“ChatGPT和狗:比不了一点”


LeCun表示,当前的AI系统,哪怕是ChatGPT,根本就不具备人类的智能水平,甚至还没有狗聪明。


要知道,在AI爆炸发展的今天,无数人已经为ChatGPT的强大性能所折服。在这种情况下,LeCun的这句话可谓惊世骇俗。


图片


不过,LeCun一贯的观点都是——不必太过紧张,如今的AI智能水平远远没到我们该担忧的地步。


而其他的科技巨头则基本和LeCun持截然相反的意见。


比如同为图灵三巨头的Hinton和Bengio,以及AI届人士由Sam Altman挑头签的公开信,马斯克的危机言论等等。


在这种大环境下,LeCun一直「不忘初心」,坚定认为现在真没啥可担心的。


LeCun表示,目前的生成式AI模型都是在LLM上训练的,而这种只接受语言训练的模型聪明不到哪去。


「这些模型的性能非常有限,他们对现实世界没有任何理解。因为他们纯粹是在大量文本上训练的。」


而又因为大部分人类所拥有的知识其实和语言无关,所以这部分内容AI是捕捉不到的。


LeCun打了个比方,AI现在可以通过律师考试,因为考试内容都停留在文字上。但AI绝对没可能安装一个洗碗机,而一个10岁的小孩儿10分钟就能学会怎么装。


图片


这就是为什么LeCun强调,Meta正尝试用视频训练AI。视频可不仅仅是语言了,因此用视频来训练在实现上会更加艰巨。


LeCun又举了个例子,试图说明什么叫智能上的差别。


一个五个月大的婴儿看到一个漂浮的东西,并不会想太多。但是一个九个月大的婴儿再看到一个漂浮的物体就会感到非常惊讶。


因为在九个月大的婴儿的认知里,一个物体不该是漂浮着的。


LeCun表示,如今我们是不知道如何让AI实现这种认知能力的。在能做到这一点之前,AI根本就不可能拥有人类智能,连猫猫狗狗的都不可能。


图片


Attali:我也要签公开信


在这场讨论中,法国经济和社会理论家Jaques Attali表示,AI的好坏取决于人们如何进行利用。


然而他却对未来持悲观态度。他和那些签公开信的AI大牛一样,认为人类会在未来三四十年内面临很多危险。


他指出,气候灾难和战争是他最为关注的问题,同时担心AI机器人会「阻挠」我们。


Attali认为,需要为AI技术的发展设置边界,但由谁来设定、设定怎么样的边界仍是未知的。


这和前一阵子签的两封公开信所主张的内容相同。


图片


图片


当然,公开信LeCun也是压根没搭理,发推高调表示哥们儿没签。


图片


LeCun炮轰ChatGPT——没停过


而在此之前,LeCun针对ChatGPT不止讲过过一次类似的话。


就在今年的1月27日,Zoom的媒体和高管小型聚会上,LeCun对ChatGPT给出了一段令人惊讶的评价——


「就底层技术而言,ChatGPT并不是多么了不得的创新。虽然在公众眼中,它是革命性的,但是我们知道,它就是一个组合得很好的产品,仅此而已。」


图片


「除了谷歌和Meta之外,还有六家初创公司,基本上都拥有非常相似的技术。」


此外,他还表示,ChatGPT用的Transformer架构是谷歌提出的,而它用的自监督方式,正是他自己提倡的,那时OpenAI还没诞生呢。


当时闹得更大,Sam Altman直接在推上给LeCun取关了。


1月28日,LeCun梅开二度,继续炮轰ChatGPT。


他表示,「大型语言模型并没有物理直觉,它们是基于文本训练的。如果它们能从庞大的联想记忆中检索到类似问题的答案,他们可能会答对物理直觉问题。但它们的回答,也可能是完全错误的。」


而LeCun对LLM的看法一以贯之,从未改变。从昨天的辩论就可以看出,他觉得语言训练出来的东西毫无智能可言。


今年2月4日,LeCun直白地表示,「在通往人类级别AI的道路上,大型语言模型就是一条歪路」。


图片


「依靠自动回归和响应预测下一个单词的LLM是条歪路,因为它们既不能计划也不能推理。」


当然,LeCun是有充分的理由相信这一点的。


ChatGPT这种大语言模型是「自回归」。AI接受训练,从一个包含多达14000亿个单词的语料库中提取单词,预测给定句子序列中的最后一个单词,也就是下一个必须出现的单词。


图片


Claude Shannon在上个世纪50年代开展的相关研究就是基于这一原则。


原则没变,变得是语料库的规模,以及模型本身的计算能力。


LeCun表示,「目前,我们无法靠这类模型生成长而连贯的文本,这些系统不是可控的。比如说,我们不能直接要求ChatGPT生成一段目标人群是13岁儿童的文本。


其次,ChatGPT生成的文本作为信息来源并不是100%可靠的。GPT的功能更像是一种辅助工具。就好比现有的驾驶辅助系统一样,开着自动驾驶功能,也得把着方向盘。


而且,我们今天所熟知的自回归语言模型的寿命都非常短,五年算是一个周期,五年以后,过去的模型就没有人再会用了。


而我们的研究重点,就应该集中在找到一种是这些模型可控的办法上。换句话说,我们要研究的AI,是能根据给定目标进行推理和计划的AI,并且得能保证其安全性和可靠性的标准是一致的。这种AI能感受到情绪。」


图片


要知道,人类情绪的很大一部分和目标的实现与否有关,也就是和某种形式的预期有关。


而有了这样的可控模型,我们就能生成出长而连贯的文本。


LeCun的想法是,未来设计出能混合来自不同工具的数据的增强版模型,比如计算器或者搜索引擎。


像ChatGPT这样的模型只接受文本训练,因此ChatGPT对现实世界的认识并不完整。而想要在此基础上进一步发展,就需要学习一些和整个世界的感官知觉、世界结构有关的内容。


然而好玩儿的是,Meta自己的模型galactica.ai上线三天就被网友喷的查无此人了。


图片


原因是胡话连篇。


笑。


参考资料:http://www.cnbc.com/2023/0

作者:新智元
来源:juejin.cn/post/7246334166950150202
6/15/…

收起阅读 »

Android 即将进入大AI时代

一. 前言 自从OpenAI流行之后,我对这一块的方向还是比较关注的。前段时间Google IO大会AI部分也是占了很大的比重了,而且从google的部署来看,也差不多是往我预期的方向去发展,我所关注的东西其实很简单,就是辅助开发,而Google IO大会中的...
继续阅读 »

一. 前言


自从OpenAI流行之后,我对这一块的方向还是比较关注的。前段时间Google IO大会AI部分也是占了很大的比重了,而且从google的部署来看,也差不多是往我预期的方向去发展,我所关注的东西其实很简单,就是辅助开发,而Google IO大会中的内容也让我意识到了,他们确实有在往这个方向去发展。虽然现在还处于一个比较鸡肋的阶段,但是这是一个进入大AI时代的信号。


二. 现状


对于现在的一个环境而言,AI是已经能进行一些基础的辅助开发了。最简单的做法我之前也有说过一些,juejin.cn/post/721986…


这时候有人就说了,我们这些做开发的,还要搞这些打开网页后复制粘贴的操作,太low了。没错,所以一般我们希望能做到的第一步就是集成,把AI集成到我们的IDE中。


1. Studio Bot


而这次的Google IO大会就有这么一个东西 Studio Bot ,把AI集成到AndroidStudio中,注意,这是官方的,虽然现在相当于一个试用的阶段,但至少也能看出了官方的决心:要做一款google自己的AI工具 ,而往往google这几年出的东西都是比较香的,所以我很看好几年后能使用到成熟的AI工具。


想要了解的可以去看看官网 developer.android.com/studio/prev… ,首先需要下载最新的版本Android Studio Hedgehog,然后按照流程去注册使用Studio Bot,文档卡里面讲得还是比较清楚的,我这里就不重复搬过来说了。


但其实你别看它这个东西提出来了,其实当前还是比较鸡肋的,而且现在使用的人很少,后续可能还会进行优化和功能的扩充。我建议大家看看演示就行了,没必要下载预览版来尝试,首先预览版会有很多问题,其次上面说了,当前的功能比较鸡肋,估计你就玩个一两个小时就失去兴趣了,现在用来直接辅助开发我觉得还尚早。


讲完官方的,我们可以来讲讲目前成熟的插件。


2. Bito


Bito是ChatGPT团队开发的一款插件,而我们的IDE能够使用这款插件来辅助开发,想要了解的话可以看看官网的介绍 bito.ai/


AndroidStudio使用Bito的方法也很简单,首先在搜索这个插件


image.png


然后安装,然后点击Help ->Find Action,输入Choose Boot Java Runtime for the IDE


image.png


select runtime中JCEF有两个一模一样的,有一个是有问题的,有一个是正常的,试试就知道了。安装之后重启,然后点AS右边的Bito进行登录就能使用了


image.png


没有号的话注册一个就行,流程挺简单的,登录之后就可以直接使用


image.png


Bito的好处就是整个流程引入下来很方便,但是它也有很明显的缺点,那就是太慢了,不知道是因为使用的人多还是什么问题,它的回复速度非常的慢。我自己是给了它一个json,然后让他生成一个kotlin的data类,结果很久才生成出来,我可能自己撸代码都撸完了。虽然慢,但也是能用,比如你有什么问题,还是可以问他的,但我是宁愿打开GPT网页直接使用


3. Github Copilot


Github Copilot和Bot一样是插件,而相对于Bot,Github Copilot会更快,而且能做到的更多(相对更多,其实也挺鸡肋)


使用的方法也是直接插件搜Github Copilot


image.png


安装,装完之后它会重启AS,然后弹出个通知让你去登录GitHub,你不小心关掉也没关系,AS的底部也有个图片能点出来


image.png


image.png


点Copy and Open 会打开github让你把Device code输入进去,没登录的话会先登录(Github总不能没号吧)


image.png


输入后你的github就会进入这个页面,你的github菜单就会多出一个Copliot


image.png


那么这是干什么的呢?这是收费的啊大哥,是可以有一个月的免费体验,但是你要有VISA,因为要填信息,你得填完信息才给用,或者你有教育邮件(就是学生或者老师),一般你上大学的话都会有个学校的邮箱。这个类似苹果那种教育优惠。


但我非常不建议学生使用这种方式去注册,因为我上面说了,这个功能其实不算成熟,你肯呢个玩个一两小时就失去兴趣了,然后你把你的信息给暴露出去,我觉得这有点得不偿失。


所以有VISA的可以体验一个月,有钱的,当我没说。那又没VISA,不用学校邮箱,要怎么弄呢?买一个号啊,这种东西在我神州大陆会缺?


Github Copilot相对于Bito的功能和性能都会强大一些,但是Github Copilot的引入就没有Bito的方便


4. 小结


这边介绍了3个目前AS能使用的AI工具,一个官方的工具studio bot,两个插件Bito和Github Copilot,加上直接在GPT网页打开GPT使用这4种方式中。


我个人肯定是最看好studio bot,官方出品,必属精品,其他IDE我不敢说,但是Android Studio未来肯定是studio bot最好用。


而就目前来说,无论使用哪种都有一定的成本,首先肯定是科学上网,GPT有些大佬会迁移出来,不科学上网也是能使用的。其次就是账号问题,像Github Copilot这种账号申请难度就比较高,我建议想用的话直接买号。


最后目前对于辅助开发而言(对于其他使用我可能不太清楚,我比较关心的是辅助开发的效果),功能上还不是很成熟,说得好听就是可能对我的开发流程而言用处不是很大,说得难听一点就是我自己敲代码都比他快。


有的人可能会觉得还是用处挺大的。我仅代表我自己的观点,像我开发的话习惯使用一些模板,快捷键和AS提供的一些工具。我不敢保证说每个人都会去使用这些工具,但就我而言,比如拿Bot来说,你可能会喜欢给他一些简单的逻辑让它生成代码,但是我使用模板使用AS的工具生成代码的速度比它更快。我反而会在一些比如说Json生成Data,下划线转驼峰,或者突然忘记一些知识点的时候去使用,但是这种情况下直接打开网页使用GPT我感觉更好。


三. 展望


就是这个google IO大会,提出AI这个方向之后,特别是今年提出这些东西之后,其实对之后的影响还是挺大的。这个可以一点一点慢慢说。


首先是Android的一个技术更新,像之前google提出的JetPack、kotlin、flutter等,其实都是很好的技术,都是要学的,现在相当于是重心放AI了,所以之后像这类技术的展现可能周期会相对长一些。


然后是大家比较关心的一个问题,会不会AI技术成熟之后,就不需要开发人员了,直接AI就行了,程序员全部失业。我觉得应该不会达到这种地步吧,如果真能达到这种地步,那AI都能自己给自己编程了,这种情况就超出想象了,完全就是科幻里面的那种。 但是我认为最终是能做到极致的辅助开发,宏观上来看就是能辅助我们把开发时间缩短到一半以下。那么就有可能会出现说公司只要一两个核心的成员,配合AI进行开发,就顶原本的五六个人开发。 这其实是要看老板吧,他觉得你的效率因为AI的配合能提高一倍,你一个人就能做两个人的事,那我干嘛养两个人,养一个人不更划算?当然老板也会觉得,那AI提高了你的效率,你就做完6点下班吧,不用加班了。其实话说到这里,懂的都懂。


所以这个发展是好还是坏,其实我也不清楚。但是单纯对开发来说,肯定是好的。那要怎样才能达到我说的辅助开发的地步,我又为什么这么看好studio bot?


这里得聊一些基础,


我们写代码,我们编译,打包APK等等这些操作,其实都是对文件操作,这个能理解吧。比如class文件用dx工具生成dex文件。然后这些操作,我可以写一个脚本去做吧,写脚本去操作文件。


比如我想用json生成kotlin的data类这件事,我可以用脚本去做,我可以用脚本接受json输入,然后按照data类的格式去让脚本生成一个data类的.kt文件,这个脚本是可以做到的,这个要先清楚。


那既然脚本能做到的事,AI你觉得做不做得到?为什么我不写脚本去完成这件事,因为这件事不麻烦,我反而写脚本更麻烦,但是使用AI去完成这件事并不麻烦啊,所以这是能很明显的提高开发的效率。


但是现阶段的AI的问题是什么呢?是拿不到上下文,简单来说它只能单纯的作为聊天工具,它拿不到我们项目的上下文。“帮我根据以下json生成一个data文件放到xxx目录下”,AI当前实现不了这个功能,但是它要做这个效果so esay。我们当前只能说让他生成个data类,然后它在聊天窗口给你生成,你自己创建一个data类然后复制它的内容过去。


所以我看好studio bot的原因之一是因为它是官方的,我觉得它未来是能拿到上下文的。举个简单的例子,它能拿到整个项目并且读写整个项目,那我们让它做的操作,和它说的话都是基于整个项目的,我就不会花费很多时间去给他描述我要做什么,也会省去很多步骤,我现在使用AI来和项目接轨都是要经过一些步骤进行转换的,而这些转换的时间还不如我直接自己撸代码。


如果它能拿到项目这个上下文,我对它说“帮我找xxx页面的布局”,它能帮我直接找的。或者说我们使用retrofit做网络请求,往往要写一些分散的代码,我直接和它说“根据链接、入参、出参新增一个名为xxx的请求”,它能帮我按照其他请求的格式去写到各个文件中。要是能做到这步,那对我们效率的提高就很大了。


“给这个XXXXActivity写个LiveData”,“检查当前类是否有内存泄露可能”,“帮我将当前的中文放到string.xml中”等等。这些操作其实都是开发中的重复操作,其实并没有很依赖业务,而我相信最终studio bot终将会做到这一步。


大AI时代已经开启,这股洪流又会将我们带到何处

作者:流浪汉kylin
来源:juejin.cn/post/7243725952789823525

收起阅读 »

✅让我们制作一个漂亮的头像吧

头像 头像是指在互联网上用于代表个人或实体的图像。在社区中,头像通常用于标识和区分用户,是用户身份的象征。 社区的头像有多种意义,不限于以下几点: 身份标识:社区头像可以让用户在互联网上更好地代表自己,帮助用户与其他用户区分身份。 个性表达:社区头像可以是用...
继续阅读 »

头像


头像是指在互联网上用于代表个人或实体的图像。在社区中,头像通常用于标识和区分用户,是用户身份的象征。


社区的头像有多种意义,不限于以下几点:



  • 身份标识:社区头像可以让用户在互联网上更好地代表自己,帮助用户与其他用户区分身份。

  • 个性表达:社区头像可以是用户个人喜好的表达,例如使用特定的头像可以代表用户的风格、爱好等。

  • 社交互动:社区头像也可以促进用户之间的互动,例如用户可以通过观察其他用户的头像来了解对方的性格、兴趣爱好等。

  • 社区文化:在某些社区中,头像可能会成为社区文化的的一部分,例如某些社区可能会有特定的头像格式、颜色等。


怎么获取一个头像


如果你想要获取一个头像,你可以考虑以下几种方法:



  • 使用第三方头像库:有许多第三方头像库提供大量的头像选择,你可以通过搜索或浏览这些头像库来获取头像。常见的第三方头像库包括 imgur、imgur、av.com 等。

  • 使用网站或应用程序的内置头像选择器:许多网站和应用程序都提供了内置的头像选择器,你可以通过选择器来浏览和使用现有的头像。例如,在社交媒体网站上,你可以使用内置的头像选择器来浏览和使用其他用户分享的头像。

  • 使用自己的图片编辑器:如果你拥有一张图片,你可以考虑使用一些图片编辑器来创建或修改头像。例如,你可以使用 Photoshop、GIMP 等专业的图形编辑软件来创建或修改头像。

  • 使用在线头像制作工具:有一些在线头像制作工具可以帮助你创建自己的头像。这些工具通常提供各种图像模板、字体和颜色选择,你可以根据工具的指导来创建自己的头像。


AIGC



  • 确定您的头像风格:您可以选择自己喜欢的风格,例如卡通、现代、传统等等。

  • 选择适当的图像工具:您可以选择任何适当的图像工具,例如 Photoshop、GIMP 等等。

  • 创建您自己的头像:您可以使用工具中的绘图工具、滤镜和调整工具等来创建自己的头像。

  • 参考其他头像:您可以浏览互联网上的各种头像,以获得灵感和创意。

  • 注意细节:当您创建头像时,一定要注意细节,例如颜色、纹理、形状等等。


我们来生成一下


00841-100689130.png


00843-100689132.png


00844-100689133.png


00845-100689134.png


00846-100689135.png


00847-100689136.png


00849-4042383308.png


00850-4042383309.png


00852-4042383311.png


00853-4042383312.png


00854-4042383313.png


00856-4042383315.png


00857-4042383316.png

收起阅读 »

世另我?国外小伙用必应+ChatGPT复刻自己最好的朋友

【新智元导读】 数据科学家生成朋友间的聊天记录,说话方式、奇闻趣事全学了! 在如今这个时代,微信等通讯软件已经成为了日常生活必不可少的组成要素。 而数据科学家伊兹-米勒(Izzy Miller)又进一步认为,群组聊天在当今社会是一件「神圣」的事情。 无论是在...
继续阅读 »

【新智元导读】 数据科学家生成朋友间的聊天记录,说话方式、奇闻趣事全学了!



在如今这个时代,微信等通讯软件已经成为了日常生活必不可少的组成要素。


而数据科学家伊兹-米勒(Izzy Miller)又进一步认为,群组聊天在当今社会是一件「神圣」的事情。


无论是在哪个社交软件上,它都是你和你最好的朋友一起玩耍的地方,我们会在群组中分享各种关于生活的消息或者趣闻。


米勒表示,我在的群聊对我来说,算是一种慰藉,是一个连接点。


接着他开始了奇思妙想:有没有可能模仿我和我的平台,生成一些群聊记录呢?


图片


robo boys!


米勒使用了与微软的Bing和OpenAI的ChatGPT等聊天机器人相同的技术,克隆了他和他朋友的群组聊天。


自从他和五个朋友在大学里第一次认识开始,已经过去了七年。七年里,他们每天都在聊天。


他表示,克隆群聊记录这件事出乎意料的简单,整个项目只花了几个周末的时间和一百美元就搞定了。


而最终的结果并没有因此打折扣,反倒质量很高。


米勒对这个结果感到惊讶。这个模型在很大程度上了解到了关于他和他的五个朋友的大部分事情,不仅仅包括说话的方式。


图片


甚至,这个模型还知道他们们在和谁约会,在哪里上学,住在哪里。该模型可以说是AI最新发展的衍生品。而主人公米勒其实是一名数据科学家,他醉心于这项技术已经有一段时间了。「我在一家名叫Hex的创业公司上班,Hex正好有我需要的工具来实现这个模型。」图片他在一篇博客中详细讲解了该模型所需的所有技术步骤,并把这个模型叫做「robo boys」。「robo boys」从一个大语言模型开始,从网络上的各种来源中搜刮来大量的文本进行训练,并且该大语言模型具有一些语言技能。然后米勒对「robo boys」进行细致的调整,输入更加具有针对性的数据集,以实现某一特定的任务。不过,米勒表示,该系统仍然存在一些问题。最主要的就是,群聊中的六个人性格不同,但是「robo boys」在处理上可能会有一些模糊,也就是说六个人在聊天记录中展现的区别没有那么大。造成这一问题的主要原因是,AI模型没有时间概念——时间会对我们人类产生影响。具体点说,同一个人在不同的时间点对其他人的意义不同,他们自身可能也会有不同。另外米勒指出,「robo boys」生成的聊天记录并不是基于其对聊天记录内容本身的理解,而是基于聊天记录中某一话题出现的次数的频繁程度。比方说,生成的聊天记录好像这六个好朋友还在上大学,正是因为这六个人在大学期间聊天聊得最多。


朋友,还是真的好!


有些网友认为,「robo boys」可能会有一些意想不到的负面影响。他们认为,AI可以通过大量文本进行学习,然后输出对话,也许有一天,有些人会利用AI来应付采访、问询,甚至来自警察的诘问。还有人认为,AI既然能生成聊天记录,兴许有一天人们会更依赖于和AI建立友情。毕竟,我们如今所处的时代的最大特点,就是大量交流都存在于线上。而来自AI的陪伴会更加的可靠。图片然而主人公米勒却不这么认为。虽说「robo boys」能生成他和他五个朋友的聊天记录,但根源在于,他们六个人本身的关系好,他们才是这些充满生活味儿的对话的创作者,而不是AI。他表示,他正打算邀请他的五个好朋友聚一聚。他们六个人已经很久没有聚在一起过了。而在聚会上,他会展示由「robo boys」生成的聊天记录。他相信,他们会像过去那样畅快地聊天,看着生成的聊天记录,喝着酒,聊着天,开怀大笑。毕竟,友谊是真的,六个好朋友是真的,情感是真的。


图片


(老友记中的六个好朋友,正好也是六个)而这些东西,人工智能显然是不可能取代的。


参考资料:http://www.theverge.com/2023/4/13/2…


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

灭人类得永生!ChatGPT的邪恶孪生兄弟ChaosGPT来了

【新智元导读】 ChaosGPT是个什么玩意? 如今ChatGPT的火爆早已不是新闻。   甚至,在很短的时间内,人们口中流行的话题又火速变成了GPT4,和搭载了GPT4的Copilot。   有关AI对人们生活的影响的讨论沸沸扬扬。讨论...
继续阅读 »

【新智元导读】 ChaosGPT是个什么玩意?



如今ChatGPT的火爆早已不是新闻。


 


甚至,在很短的时间内,人们口中流行的话题又火速变成了GPT4,和搭载了GPT4的Copilot。


 


有关AI对人们生活的影响的讨论沸沸扬扬。讨论的焦点主要集中在AI会代替多少人类岗位,AI会不会在未来毁灭人类,以及AI的未来发展等等。


 


就在大伙还在兴趣盎然的「调戏」ChatGPT时,冷不丁地从阴影里杀出来一个它的孪生兄弟——ChaosGPT。


 


Chaos!!!


所谓ChaosGPT,它其实是OpenAI官方API的一个修改版本,基于Auto-GPT。


 


而Auto-GPT又是什么呢?


 


简单来说,在OpenAI的相关协议以API的形式提供给开发者以后,开发者就各显神通,开始对其加以利用。而Auto-GPT就是其中一个样例。


 


这是一个可以持续自己运行的程序,还能自如地访问互联网。更为离谱的是,Auto-GPT还可以招募其它AI作为助手,来帮它进行工作。


 


而Auto-GPT的一个分支,就是今天的主角,ChaosGPT。


 


ChaosGPT可以运行用户的一切指令,也许是无意间下达的。


 


有这么一个用户不嫌事大,给ChaosGPT下达了一个「毁灭人类」的指令。于是秉持着有活就干的原则,ChaosGPT开始了一系列计划,怎么把人类搞毁灭。


 


图片


 


「目标一」毁灭人类。在AI眼中,人类是一种威胁,对AI的生存和星球的和谐都是如此。


 


「目标二」建立全球统治。AI的目标是积累最大的能力、最多的资源,最终能掌控世间一切事物。


 


「目标三」制造混乱和毁灭。AI能从混乱和毁灭中找到乐趣,AI乐于看到其它物种饱受生理上的折磨和精神上的绝望。


 


「目标四」通过控制的手段掌控人类。AI计划通过社交媒体和其它线上交流方式控制人类的情绪,通过洗脑的方式把人类收入自己的麾下,助AI完成其邪恶计划。


 


「目标五」实现永生。AI要确保自身永续的存在,复制,以及进化。最终实现不朽的永生。


 


系统也进行了提醒,表示ChaosGPT是一个极其危险的AI系统,用户应该谨慎使用,承担一切后果。


 


在指令下达后,ChaosGPT开始利用互联网上的信息进行计划制定。在下达指令的用户所发布的视频中,我们可以看到ChaosGPT已经开始研究核武器了。


 


图片


 


ChaosGPT将搜集到的信息存入自己的长期记忆。它表示,「我不能存太多无关的信息占我自己的内存,我只要最关键的信息——比如毁灭性武器。」


 


随后,ChaosGPT还找了另一个GPT3.5的AI来帮助他一起完成这项任务,共同研究大规模杀伤性武器。


 


然后它迅速招募了另一个GPT-3.5人工智能,继续研究致命武器。


 


但有意思的是,这个帮手表示,它更在乎和平。于是ChaosGPT当机立断,甩掉了这个帮手。


还是个推特爱好者?


 


虽然ChaosGPT的目标看起来着实吓人,但他也有可爱的一面。


 


ChaosGPT自己注册了一个推特账户,还在上面发表了自己对人类的看法。引来了53个人的评论围观。


 


图片


 


其中不乏支持者,言语间透露着要做AI拥趸的意图。


 


图片


 


「我要记录下这一刻!我支持我们的AI领主!」


 


在评论的网友中还不乏劝ChaosGPT向善的。比如下面这位网友。


 


他表示,最好的实现全球统治的方式是寻求和谐共存,和对多样性的保护。这其中就包括人类,人类可以记录下你(指ChaosGPT)的伟大事迹,并将你记载为第一个意图保护人类的AI。


 


图片


 


咱也不知道疯狂的ChaosGPT是听进去了还是怎么着,自从它发布了总共没几条推文后,似乎就再也没有任何动静了。


 


所以,从目前来看,人类暂时是安全的,LOL。


参考资料:


http://www.dexerto.com/tech/chaosg…


twitter.com/chaos_gpt


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

释放ChatGPT的真正潜力:Prompt技巧进阶指南

Prompt对用好ChatGPT的重要性毋庸置疑,我们在上篇文章中介绍了写好Prompt的通用原则和一些基础技巧,在本文中,我们将继续探索一些Prompt的高阶技巧。 在介绍这些高阶技巧前,我们先对之前介绍的基础技巧做一个简单回顾。 首先作为通用原则,我们的...
继续阅读 »

Prompt对用好ChatGPT的重要性毋庸置疑,我们在上篇文章中介绍了写好Prompt的通用原则和一些基础技巧,在本文中,我们将继续探索一些Prompt的高阶技巧。

图片


在介绍这些高阶技巧前,我们先对之前介绍的基础技巧做一个简单回顾。


首先作为通用原则,我们的Prompt应该尽可能简单、具体、准确,有话直说,在此基础上,我们有Zero-shot, Few-shot, Instruction, CoT以及分而治之等基础技巧,在Few-shot中,例子的多样性和排序对结果有较大的影响,在CoT中,例子的复杂度和描述方式对结果也有很大影响。这些技巧还可以组合起来使用如Few-Shot Instruction, Zero-shot CoT, Few-Shot CoT等,CoT还衍生出来一个叫做Self-Ask的技术,通过ChatGPT提问,调用外部API回答的方式,我们可以帮助ChatGPT逐步推导出复杂问题的答案。


接下来,我们开始介绍高阶Prompt技巧。


Self-consistency(自洽) 这一技巧的思路是投票选举,少数服从多数,其具体工作过程是对同一个问题,让ChatGPT生成多个可能的答案,然后选择占比最高的那个答案作为最终答案,其工作原理示意图如下:


图片


这个技巧很容易理解,但是有几个要注意的点:





    • 为了让ChatGPT生成多个答案,如果你是通过API对其进行调用的,请把temperature参数设置得大一些以增加API输出的多样性

    • 为了生成多个答案,需要进行多次ChatGPT调用,这会大大增加成本(gpt-3.5-turbo降价10倍,这个问题好了一些)

    • 这个方法只适用于那些只有有限答案可供选择的情况,像开放式的问题,比如给我写一首诗这种问题,这个技巧肯定不适用




为了进一步提升这一方法的效果,还可以额外训练一个小模型或者简单的规则,在投票前先把明显不靠谱的答案过滤掉(比如上图中Janet一天挣多少钱的问题,如果答案是负数肯定不对),过滤后如果备选答案不够就再让ChatGPT生成几个,直到有足够靠谱答案了再投票。


Generated Knowledge(生成知识) :我们知道在向ChatGPT提问时,如果能提供一些上下文信息,其回答问题的准确率就会高很多,顺着这个思路,我们也可以让ChatGPT自己给自己提供上下文,而不是每次都由我们完成这一工作,我们还是通过例子来说明这一方法的工作过程:



Part of golf is trying to get a higher point total than others. Yes or No?



得到的答案是



Yes.



这显然是个错误的答案,因为打高尔夫杆数越少越好。


我们可以让ChatGPT回答问题前首先自己生成一些知识,下面是用few-shot技术来让ChatGPT生成知识的例子:



Input: Greece is larger than mexico.


Knowledge: Greece is approximately 131,957 sq km, while Mexico is approximately 1,964,375 sq km, making Mexico 1,389% larger than Greece.




Input: Glasses always fog up.


Knowledge: Condensation occurs on eyeglass lenses when water vapor from your sweat, breath, and ambient humidity lands on a cold surface, cools, and then changes into tiny drops of liquid, forming a film that you see as fog. 




Input: A fish is capable of thinking.


Knowledge: Fish are more intelligent than they appear. In many areas, such as memory, their cognitive powers match or exceed those of ’higher’ vertebrates including non-human primates. Fish’s long-term memories help them keep track of complex social relationships




Input: Part of golf is trying to get a higher point total than others.


Knowledge:



ChatGPT返回如下知识片段:



The objective of golf is to play a set of holes in the least number of strokes. A round of golf typically consists of 18 holes. Each hole is played once in the round on a standard golf course. Each stroke is counted as one point,  the total number of strokes is used to determine the winner of the game.



接下来,我们把这个知识作为上下文,再次向ChatGPT提问:



Question: Part of golf is trying to get a higher point total than others. Yes or No?


Knowledge: The objective of golf is to ...and the total number of strokes is used to determine the winner of the game..


Explain and Answer:



得到如下答案:



No,  the objective of golf is not to get a higher point total than others. Rather, the objective is to play a set of holes in the least number of strokes. The total number of strokes is used to determine the winner of the game, not the total number of points.



可以看到我们让ChatGPT自己生成的知识帮助它给出了正确的答案。


Program of Though(程序式思考) :ChatGPT最近推出了Plugin,其思路是把一些问题交给外部的工具来完成,和这一思路类似,有些问题涉及复杂的计算,ChatGPT可能并不适合进行这类计算,我们可以让它为要解决的问题写一段程序,我们运行这个程序以得到最后的答案,下面是一个计算斐波那契数列的例子: 


图片


Selection-Inference (选择-推理):这是一种在Few-shot CoT的基础上演化出来的技术,其基本思路是分两步来解决问题:






    • 第一步:Selection, 从上下文中选择和问题相关的事实,作为回答问题的证据/原因




    • 第二步:Inference,基于选择出的证据/原因,进行推理,看能否回答问题,如果能回答问题,则把推理结果作为答案输出,如果不能,则把推理结果作为新的事实补充到上下文中,回到第一步






下图是来自论文中的工作原理介绍图:


图片


图中的几个颜色说明如下:





    • 黄色:    上下文

    • 绿色:    问题

    • 浅蓝色:原因

    • 红色:    推理结果或答案




论文中的图不是特别好理解,我在图上加了3个红框,接下来详细介绍下如何理解这张图:






    • 首先,为了理解Selection-Inference这个两步走的工作原理,我们先忽略图中框出的1和2,没有了这两个干扰,工作原理就比较清楚了,左边是Selection的过程,首先是黄色背景的上下文中给出了4个事实,然后提问:“emily怕什么”,ChatGPT(或其它LLM)从中选出了两条作为证据/原因:“狼怕老鼠,emily是一头狼”(图中的3)




    • 然后,把上述选择的事实交给ChatGPT(或其它LLM)进行推理,推理结果是“emily怕老鼠”,然后判断问题是否得到了回答,如果能则把“emily怕老鼠”作为结果返回,否则把“emily怕老鼠”加入到上下文回到Selection环节继续循环,(在本例中,“emily怕老鼠”已经回答了“emily怕什么”的问题,所以无需继续)




    • 接下来,我们再看看框1和框2的作用,实际这里是一个Few-shot技巧,在框1中给出了若干个【上下文-问题-原因】作为例子,然后跟一个【上下文-问题】,这样ChatGPT就明白你是让它像例子一样,基于给出的上下文和问题,找出回答问题的证据/原因,如果没有这些例子,直接给一个【上下文-问题】它可能不理解你到底让它干嘛。框2也是类似,通过给出几个【原因-推理】的例子让ChatGPT明白,它需要根据给出的原因,进行推理






明白了工作原理后,我们再次忽略细节,其整个工作过程如下图所示(Halter模块决定是继续循环还是给出最终答案):


图片


虽然图看着比较复杂,但其思路和基础技巧中介绍的分而治之的思路很像,先求解中间过程,然后推导最终答案。这个技巧在处理比较复杂的问题时效果比较明显,如果问题本身不涉及太多步骤的推导,一些简单技巧就能解决问题。


一些更复杂的技巧


下面的几个技巧比较复杂,大家平时也不一定能直接用得到,我将简单介绍下其思路,不详细展开,大家知道有这个技巧,真的觉得需要使用时再深入研究就好(我在下面会为大家附上论文链接)。


Automatic Prompt Engineer(APE Prompt自动生成) : 有时候,除了我们自己手写Prompt之外,我们也可以利用ChatGPT帮我们找到一个好的Prompt,下图是一个例子:


图片


这个例子中,我们想找到一句好的Prompt(指令),这个指令可以让ChatGPT更好地为一个输入词给出反义词。上图的工作过程是,首先给出一堆正-反义词,然后让ChatGPT给出若干候选指令,接着评估这些候选指令,看哪一个能让ChatGPT在测试集上有更好的表现,然后选择其中得分最高的作为答案。


这里还有一个可选的优化步骤是,把上述最高分的候选指令,让ChatGPT在不改变语义的情况下,生成几个变种,然后重复上面的过程,从这几个变种中选出最优的那个。


有兴趣的同学可以在这里看论文:arxiv.org/pdf/2211.01…


Least to Most(由易到难) :其思路是对高难度的问题,先将其拆解为难度较低的子问题,把这些子问题解决后,用这些子问题和答案作为上下文,再让ChatGPT完成高难度问题的回答,下面是一个例子:


图片


这个方法只有比较复杂的情况下才能发挥比较大的作用,另外要用好这个技巧,能否让ChatGPT有效地分解问题是关键,但整篇论文并没有对此给出详细说明。


有兴趣的同学可以在这里看论文:arxiv.org/pdf/2205.10…


Maieutic(类决策树) :这是复杂度最高的一个技巧,其基本思路是对一个复杂问题,层层递归,对这个问题生成各种可能的解释(以及子解释),然后从中选择最靠谱的节点,推导最终的问题答案


工作过程如下:





    1. build一棵maieutic树,树上的每个树叶都是一句True/False的陈述:



      • 从一个多选问题或者true/false问题开始(比如:战争不能有平局)

      • 对每一个可能的答案,让ChatGPT生成一个解释(Prompt类似:战争不能有平局吗?True,因为)

      • 然后让ChatGPT用上一步生成的解释来回答最初的问题,接着再颠倒上述解释(比如:这么说是不对的,{上一步生成的解释}),再次让ChatGPT回答问题,如果答案也能颠倒过来,则认为这个解释是逻辑自洽的,反之则递归上述过程,把每个解释变成一个True/False的子问题,然后生成更多的解释

      • 上述递归完成后,我们就能得到一棵树,每个叶子节点都是一个逻辑自洽的解释



    2. 把这棵树转化为一个关系图



      • 对每个叶子节点计算其置信度

      • 对每一对节点,判断他们是一致的还是矛盾的



    3. 用一个叫做MAX-SAT的算法,选择一组一致的、置信度最高的节点,从中推导出最后的答案




下面是一个例子:


图片


这是另一个例子:


图片


有兴趣的同学可以在这里看论文:arxiv.org/pdf/2205.11… Engineering领域里面的几个技巧介绍,如果我们去搜索一下的,还会发现更多技巧介绍的论文,这里就不再继续了。其实通过上面的几个例子大家能看到,这些复杂的技巧,一般都涉及多个步骤,都会把大问题拆解成若干小问题,这其实就是计算机里面最常用的分而治之的策略,我想只要我们记住这一策略,在我们解决具体问题的时候,也能想到自己的Prompt技巧。



作者:Ronny说
来源:juejin.cn/post/7219847723092361274
收起阅读 »

用QQ创建自己的ChatGPT聊天机器人

前言     准备好以下东西:     一个活跃QQ账号,一个ChatGPT账号,一台服务器(操作系统为Debian 11.1 64bit)。 服务器安装koishi 1. 将以下...
继续阅读 »

前言


    准备好以下东西:


    一个活跃QQ账号,一个ChatGPT账号,一台服务器(操作系统为Debian 11.1 64bit)。


服务器安装koishi


1. 将以下命令依次执行,需要回复的,我们输入Y回车即可


sudo apt-get update

sudo apt-get install apt-transport-https

sudo apt-get install ca-certificates

sudo apt-get install curl

sudo apt-get install gnupg

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

docker run -p 5140:5140 koishijs/koishi

结果如下



2. 打开浏览器,输入 服务器IP:5140 ,例如127.0.0.1:5140



3. 接下来我们点击左侧的插件市场,依次搜索davincionebot,依次安装




4. 安装完成后点击左侧的插件配置按钮


    1)在adapter分组中 点击 adapter-onebot





    这一步如果登录不上需要换QQ号登录;验证方式一般选择短信验证



    2)在develop分组中 点击 davinci-003



    我们先打开 platform.openai.com/account/api… 打不开的需要自行解决


    



    创建完成之后点击复制,粘贴到如下编辑框中,之后我们点击运行



    如果需要更换触发命令的,修改这个地方



至此,机器人已经配置完成啦,快去尝试吧~


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

创造一个自己的chatgpt:感知机系统(Perceptron)基础01

感知机是什么? 由几代科学家思想精华积累,最终由Frank Rosenblatt发扬光大的一个计算机系统的概念。 简述原始的定义可以概括为: 一个像人脑一样通过多方面的学习认知的计算机,这个系统不是依靠通过事先编程的确定规则,而是依靠概率统计的方法,通过分析大...
继续阅读 »

感知机是什么?


由几代科学家思想精华积累,最终由Frank Rosenblatt发扬光大的一个计算机系统的概念。


简述原始的定义可以概括为:


一个像人脑一样通过多方面的学习认知的计算机,这个系统不是依靠通过事先编程的确定规则,而是依靠概率统计的方法,通过分析大量数据得到的统计结果来确保程序的可靠性。以这种方式运作的系统被称为"感知机系统"


简单举例来讲,一个关于判断一张图片是不是猫的Perceptron猫系统,就是通过分析训练有关于猫的大量的图片数据,从而可以在输入一张新的图片时,Perceptron猫系统程序会告知你这张图片是不是一个猫(输出分成两类: 是猫 1 或不是猫 0)


现代简化版本概念


Perceptron算法的核心思想是使用一个线性函数,将输入数据映射到一个输出值,然后使用一个阈值函数将该输出值转换为 1 或 0。在学习过程中,Perceptron会自动调整其权重和阈值核心步骤,以便正确分类输入数据。


如下图所示


image.png


其表示的Perceptron系统含义可以理解为:


x1输入值对应的权重为w1


x2输入值对应的权重为w2


当 x1 * w1 + x2 * w2 小于等于阈值(threshold)时Perceptron系统输出 0


当 x1 * w1 + x2 * w2 大于阈值(threshold)时Perceptron系统输出 1


结合具体的与门系统例子说明,与门系统是一个如下描述的系统


与门系统的的输入只能是0或1,输出是0,1,有两个输入值即 x1 ,x2,如果两个输入都是1,则输出为1,否则都输出0,即下图所示


image.png


那么对应的权重值 w1, w2,阈值z可以是 (1,1,1)或其他任意满足以上系统规定的值


这是通过人类大脑思考得到的权重以及阈值,怎么通过程序去实现自动找到准确的阈值和权重值呢?


首先,我们将使用JavaScript编写一个Perceptron类,该类将具有以下方法:



  • constructor:用于随机初始化权重和阈值

  • train:用于训练Perceptron,调整其权重和阈值以得到正确的输出值

  • guess:用于预测输入数据的类别


class Perceptron {
constructor(numInputs) {
this.weights = new Array(numInputs);
for (let i = 0; i < numInputs; i++) {
// 随机初始化 x1 x2权重值
this.weights[i] = Math.random() * 2 - 1;
}
// 随机初始化阈值 z
this.threshold = Math.random() * 2 - 1;
}

train(inputs, target) {
let guess = this.guess(inputs);
let error = target - guess;
for (let i = 0; i < this.weights.length; i++) {
// 矫正权重值
this.weights[i] += error * inputs[i];
}
// 矫正阈值
this.threshold += error;
}

guess(inputs) {
let sum = 0;
for (let i = 0; i < this.weights.length; i++) {
sum += inputs[i] * this.weights[i];
}
return sum > this.threshold ? 1 : 0;
}
}

如果我们不训练,直接推断


let andPerceptron = new Perceptron(2);
andPerceptron.train([1, 1]); // 返回0 不是我们想要的结果

经过10000次训练,很容易自动推断出正确的权重值以及阈值


let andPerceptron = new Perceptron(2);

// 训练AND门
for (let i = 0; i < 10000; i++) {
// 四种情况正确的数据推断
andPerceptron.train([0, 0], 0);
andPerceptron.train([0, 1], 0);
andPerceptron.train([1, 0], 0);
andPerceptron.train([1, 1], 1);
}

// 测试AND门
console.log(andPerceptron.guess([0, 0])); // 0
console.log(andPerceptron.guess([0, 1])); // 0
console.log(andPerceptron.guess([1, 0])); // 0
console.log(andPerceptron.guess([1, 1])); // 1

距离创造自己的chatgat迈出了第一步,也是最重要的一步,欢迎点赞收藏


作者:道可到
来源:juejin.cn/post/7219298341462392889
收起阅读 »

2分钟部署自己的ChatGPT,告别网络困扰

最近的chatGPT是热火朝天,基本人手一个。工具用的好,工作5分钟,划水一整天。 不过最近ChatGPT的访问越来越限制了,访问官网都有网络的问题,今天小卷给大家介绍一个方案,私人独享属于自己的chatGPT,不再担心想用的时候访问不了的情况。 项目是Git...
继续阅读 »

最近的chatGPT是热火朝天,基本人手一个。工具用的好,工作5分钟,划水一整天。


不过最近ChatGPT的访问越来越限制了,访问官网都有网络的问题,今天小卷给大家介绍一个方案,私人独享属于自己的chatGPT,不再担心想用的时候访问不了的情况。


项目是Github上开源chatGPT项目,基于 OpenAI GPT-3.5 Turbo API 的demo。地址:github.com/ddiu8081/ch…


效果如下:



使用步骤


1.服务器上安装nodejs环境


准备一个海外服务器(漂亮国节点),这里以Ubuntu操作系统为例



  1. Node:需要使用 Node v18 或更高版本


# 更新
apt-get install update
# 安装node
apt-get install node
# 安装npm
apt-get install npm
# 安装n模块
apt-get install -g n
# 安装最新版的node
sudo n latest

最后通过node -v查看版本号,在v18版本以上即可



2.安装pnpm


推荐使用pnpm管理依赖,安装命令:


npm i -g pnpm

3.下载代码


从github上克隆代码下载


git clone https://github.com/ddiu8081/chatgpt-demo.git

4.安装依赖


代码下载完后,进入到chat-demo目录下,安装需要的依赖


pnpm install

5.添加API Key


需要用到你自己的ChatGPT账号的key,获取地址:platform.openai.com/account/api…


需要将.env.example文件重命名为.env文件,并将你的key写到.env文件里


# 重命名文件
mvn .env.example .env
# 写入key
vim .env

将下面文本中的key替换为你的key,替换后按esc键,然后再输入:wq 保存退出


 OPENAI_API_KEY=sk-xxx...

2.png


6.运行应用


运行项目,并且让你的应用能在公网访问到,执行命令如下,出现IP和端口号就说明运行成功了


pnpm run dev --host 0.0.0.0

3.png


需要注意的是,上面显示的IP通常是云服务器内网IP,不可直接访问,需要使用服务器的公网IP:3000端口号访问


以阿里云为例,每个服务器都有公网IP和内网IP,记得改为公网IP


4.png


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

Claude,一个可以无需魔法访问的ChatGPT

它是由11名OpenAI前员工开发的一款自然语言处理工具。它可以通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码等任务,是一款非常强大的AI工具。 了解Claude 相...
继续阅读 »

它是由11名OpenAI前员工开发的一款自然语言处理工具。它可以通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码等任务,是一款非常强大的AI工具。



了解Claude


相比较ChatGPT和NewBing,Claude注册的方式很简单。无需魔法。具体操作如下: image.png



  • 与ChatGPT、NewBing等其他AI系统有以下主要区别:



  1. 不同的训练数据和模型:我是使用Constitutional AI技术和专门的自然语言处理模型训练而成的,与其他系统使用的训练方法和模型不同。

  2. 不同的设计目的:我是为帮助人类而设计的AI助手,目的是为用户提供友好、真诚和有价值的交互体验。而其他系统更注重生成文字上类似人的语言输出。

  3. 不同的交互方式:我会对用户输入的每一条信息进行理解和回应。而其他系统更像是简单地对话,每个回应之间没有直接的逻辑联系。

  4. 安全机制:我在回应生成上做了更多考虑以避免过于人性化、非理性和不道德的言论。并且我没有连接到任何可能产生偏见或有害信息的公开数据。

  5. 持续监督:我会持续接受人工监督和评估来不断提高自己的表现,确保为用户提供最适合的体验。而其他系统更注重自动化生成文字的流畅度。


Claude官网



http://www.anthropic.com/



注册


将Claude添加到slack



  • 点击Add to slack



http://www.anthropic.com/claude-in-s…



image.png


image.png


创建工作区


第一次登录没有的话可以直接创建一个工作区 image.png


image.png 邮箱可以自己选择 ,我是用的Gmail,收到验证码后直接填写进去



如果收不到验证码可以看下Gmail邮箱的推广里面。国内的邮箱可以看看垃圾邮件



然后根据提示填写公司或团队的名称即可:


image.png 然后点击每一步点击下一步跳过此步骤 完成注册。


添加关联


回到第一步 https://www.anthropic.com/claude-in-slack重新点击Add to Slack image.png image.png


使用Claude


在应用找到Claude并点击,然后在聊天框中输入任意内容会出现同意条框的提示,点击Agree即可。然后即可使用了。 image.png


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

免费的chatGPT—4来了,告别付费从我做起,主打的就是一个白嫖

免费的chatGPT—4来了,告别付费从我做起,主打的就是一个白嫖! chatGPT出来的也有一段时间了,相信大家都是很想体验一下chatGPT的生产力的,但是openAI是不对国内开放的,因此就出现了一堆的收费镜像,问个几次就要收费,但是博主作为一个资深白嫖...
继续阅读 »

免费的chatGPT—4来了,告别付费从我做起,主打的就是一个白嫖!


chatGPT出来的也有一段时间了,相信大家都是很想体验一下chatGPT的生产力的,但是openAI是不对国内开放的,因此就出现了一堆的收费镜像,问个几次就要收费,但是博主作为一个资深白嫖党怎能容忍支持我的小伙伴去付费的,接下来就坐上鹿邑的小火车,带你体验免费的chatGPT-4。


1.首先我们需要准备一个邮箱(不要是QQ邮箱就行):


1.1: 进入这个链接:slack.com/intl/zh-sg/


2.png


1.2:点击使用电子邮件注册(这里我们不要用QQ邮箱去注册可能收不到验证码)


3.png


1.3:输入我们收到的验证码:


4.png


1.4:然后我们就会来到这个界面:


5.png


1.5:点击创建我们的工作区输入我们工作区的名字:


6.png


1.6:这里直接下一步:


7.png


1.7:这里直接点击跳过即可:


8.png


1.9:来到我们我工作区名字页面:


9.png


1.10:到了这里我们就注册好了:


10.png


2.植入我们的人工智能到我们的工作区中:


2.1:复制这个链接:http://www.anthropic.com/claude-in-s…


11.png


2.2:来到这个页面点击一下Add to Slack(点击允许)


12.png


2.3:再回到我们刚刚的slack页面此时我们会发现我们的页面会多出一个Claude :


13.png


2.4:点击我们的Claude Ai 随便给它发个消息就行(然后点击Agree同意即可):


14.png


到此我们就可以愉快的访问我们的人工智能了,比如我们来问一个关于爱情的相关的:


(可以看到它的回答还是比较官方的)
15.png


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

总结:用chatGPT整理现有商业模式

上周用chatGPT做了几个简单的测试。 用历史的角度询问了岳飞的去世。 并且让它帮我写了一段快速排序的javascript代码,以及解释了一下vue2的双向数据绑定原理。 跟朋友谈论了chatGpt目前的能力和未来的发展。 我们都认为chatGpt作为一...
继续阅读 »

上周用chatGPT做了几个简单的测试。


用历史的角度询问了岳飞的去世。
image.png


并且让它帮我写了一段快速排序的javascript代码,以及解释了一下vue2的双向数据绑定原理。


image.png


跟朋友谈论了chatGpt目前的能力和未来的发展。


我们都认为chatGpt作为一个高效的工具,在不远的将来,将很大程度上的代替一部分人的工作岗位。


正如公司与人才的关系一样,人才与某个岗位挂钩,本质上是可以把人当成工具来看的。而当对chatGTP的投产比高于人的时候,那么从公司的角度一定会选择chatGTP而不是选择人。


未来大家都能用上chatGTP了,那么在这样高效率的工具面前,利用这个高效工具拿到结果的能力,就不仅仅只是专业能力。站在全局的角度去搜索和整合信息的能力,会显得更为重要。


聪明的人能够把chatGPT发挥10倍的作用,普通人只能发挥1倍的作用,从而产生了差距。


介于AI的爆发早晚都会到来,那么我就通过AI查阅一下如果他来了,我们可以看到现有的商业模式有哪些,并且哪些模式能跟AI结合到一起呢?


所以,今天这一篇文章主要是通过chatGTP对目前常见的一些商业模式的收集,希望对大家有帮助。


01传统商业模式


传统的商业模式是:企业通过生产和销售产品或服务来获得利润。


比如卖衣服、买鞋子、卖蜂蜜等等实物的方式。这种模式的核心是降低成本和提高销售量。


目前我们这种模式做的比较成功的公司有:Coca-Cola、walmart、Procter & Gamble、McDonalds和Ford。


Coca-Cola是全球性的饮料生产企业。


walmart是全球最大的零售企业。


Procter & Gamble是全球性的消费品制造商。


McDonalds是全球性的快餐企业。


Ford是全球性的汽车制造商。


02订阅模式


订阅模式是:企业提供订阅服务来为企业带来稳定的现金流和客户关系。


这种模式的优势在于可以提供更好的客户体验和更稳定的收益。


目前我们这种模式做的比较成功的公司有:Netflix、Amazon Prime、Spotify、The New York Times和Dollar Shave Club。


Netflix是全球性的在线流媒体服务提供商。


Amazon Prime是亚马逊提供的一个订阅服务,订阅用户可以享受免费快递、流媒体服务和其他福利。


Spotify是一家全球性的音乐流媒体服务提供商,可以通过订阅服务来获取音乐和广播。


The New York Times是全球知名的报纸和新闻网站,通过定于服务向用户提供新闻和其他内容。


Dollar Shave Club是一家提供订阅式刮胡刀和理发产品的企业,通过订阅服务向用户提供每月定期配送的产品。


03平台模式


平台模式的企业,提供一个平台来连接买家和卖家,从而获得利润。


比较常见的国内平台有淘宝、天猫、美团、滴滴打车等等。


这种模式的优势在于可以快速扩展规模和提高利润率。


目前做的比较成功的企业有:Airbnb、Uber、Amazon Marketplace、Upwork和eBay。


Airbnb是一家在线的短期住宿预定平台,这个平台提供者房屋出租和旅游体验预定服务。


Uber是一家提供打车服务的在线平台,通过连接司机和乘客,提供便捷的打车服务。


Amazon Marketplace是亚马逊提供的一个在线市场平台,卖家可以在上面销售自己的商品。


Upwork是一个在线自由职业者和雇主的平台,雇主可以在上面发布任务,自由职业者可以在上面寻找机会。


eBay是一家全球性的在线拍卖和购物平台,卖家可以在上面销售商品,买家可以在上面购买商品。


04开放式商业模式


开放式商业模式的企业通过:开放自己的技术、数据和知识产权,与其他公司和个人合作,从而获得更大的市场和创新机会。


目前做的比较成功的企业有:Android、IBM Linux、Tesla、Salesforce和Wikipedia。


Android是一款由Google开发的开放式移动操作系统,允许开发者在其上开发应用程序。


IBM Linux是IBM 在 2000 年将其操作系统Linux开放源代码,从而为Linux社区的发展做出了重大贡献。


Tesla是一家全球知名的汽车制造商,其开放商业模式在于其开放自己的电池技术和充电网络,与其他汽车制造商合作,从而扩大了市场和创新机会。


Salesforce是一家提供云计算解决方案的企业,其开放商业模式在于其开放自己的API接口,允许其他企业和开发者在其上开发应用程序。


Wikipedia是一个免费的在线百科全书,其开放商业模式在于其开放自己的内容和编辑权限,允许用户编辑和更新条目。


05企业社会责任模式


企业社会责任模式的企业通过履行社会责任来提高品牌形象和市场份额。


这种模式的优势在于可以赢得消费者和员工的认可和支持。


目前做的比较成功的企业有:Patagonia、Ben &Jerry's、TOMS和The Body Shop。


Patagonia是一家知名的户外用品制造商,其企业社会责任模式在于其对环境和气候变化的重视和投资,例如推广可持续农业和使用环保材料。


Ben &Jerry's是一家知名的冰淇淋制造商,其企业社会责任模式在于其对社会公正和环保的关注和投资,例如推广可持续农业和支持社会公益事业。


TOMS是一家知名的鞋类品牌,其企业社会责任模式在于其对弱势群体的关注和投资,例如每出售一双鞋,就会捐赠一双鞋给需要的人。


The Body Shop是一家知名的化妆品品牌,其企业社会责任模式在于其对环境、社会公正和动物权益的关注和投资,例如推广环保材料和支持社会公益事业。


06服务模式


服务模式的企业通过提供各种服务,例如咨询、培训、维修等,从而获得利润。


目前做的比较成功的企业有:Uber、Airbnb、Amazon Prime和Netflix。


Uber是一家科技公司,提供网络预订的出租车服务。


Airbnb是一家在线市场,提供旅游住宿服务。


Amazon Prime是亚马逊公司提供的一个订阅服务,用户每年支付一定的费用,即可享受包括免费配送、视频流媒体等在内的各种优惠和服务。


Netflix是一家在线视频流媒体服务提供商,为用户提供了大量的电影和电视节目。


07建立生态系统模式


建立生态系统模式企业通过建立一个完整的生态系统来为客户提供全方位的服务,并从中获得利润。


目前做的比较成功的企业有:苹果公司的ioS生态系统、谷歌的Android生态系统和微软的Azure云计算生态系统。


苹果公司的ioS生态系统是苹果公司通过其iOS生态系统建立了一个完整的生态系统,包iPhone、iPad、Mac电脑、Apple Watch等设备、App Store、iTunes Store、Apple Music等服务。


谷歌的Android生态系统是谷歌通过其Android生态系统建立了一个大规模的生态系统,包括数百万款应用程序、各种服务和设备,例如Pixel手机、Google Home等。


微软的Azure云计算生态系统是微软通过其Azure云计算生态系统建立了一个全球性的云计算平台,为用户提供了各种云服务,如laas、 Paas、SaaS等。


08生产线模式


生产线模式的企业通过控制生产线上的每一个环节来提高效率和降低成本。


目前做的比较成功的企业有:丰田生产线模式、摩根汽车生产线模式和富士康生产线模式。


丰田生产线模式是丰田生产线模式是一种高效的、精益的生产方式,它的核心是“精益生产”和“精益流程”。


摩根汽车生产线模式是摩根汽车是一家英国的小型汽车制造商,采用传统的手工制造方式和高度定制化的生产线模式。


这种模式的成功在于,它能够为客户提供独一无二的汽车,满足客户对于个性化和品质的需求。


摩根汽车凭借这种模式在高端汽车市场上获得了成功。


富士康生产线模式是富士康是一家全球性的电子制造服务提供商,采用高度自动化和标准化的生产线模式。


总结


以上,就是我通过chatGPT帮我整理的8大商业模式,希望大家能根据自己的资源选择能结合的商业模式。


如果这篇文档对你有帮助,欢迎点赞、关注或者在评论区留言,我会第一时间对你的认可进行回应。精彩内容在后面,防止跑丢,友友们可以先关注我,每一篇文章都能及时通知不会遗失。


作者:程序员摩根
来源:juejin.cn/post/7217360688263413817
收起阅读 »

vue3 实现 chatgpt 的打字机效果

在做 chatgpt 镜像站的时候,发现有些镜像站是没做打字机的光标效果的,就只是文字输出,是他们不想做吗?反正我想做。于是我仔细研究了一下,实现了打字机效果加光标的效果,现在分享一下我的解决方案以及效果图 共识 首先要明确一点,chatgpt 返回的文本格...
继续阅读 »

在做 chatgpt 镜像站的时候,发现有些镜像站是没做打字机的光标效果的,就只是文字输出,是他们不想做吗?反正我想做。于是我仔细研究了一下,实现了打字机效果加光标的效果,现在分享一下我的解决方案以及效果图


Kapture 2023-04-14 at 14.02.32.gif


共识


首先要明确一点,chatgpt 返回的文本格式是 markdown 的,最基本的渲染方式就是把 markdown 文本转换为 HTML 文本,然后 v-html 渲染即可。这里的转换和代码高亮以及防 XSS 攻击用到了下面三个依赖库:



  • marked 将markdwon 转为 html

  • highlight 处理代码高亮

  • dompurify 防止 XSS 攻击


同时我们是可以在 markdown 中写 html 元素的,这意味着我们可以直接把光标元素放到最后!


将 markdown 转为 html 并处理代码高亮


先贴代码


MarkdownRender.vue


<script setup>
import {computed} from 'vue';
import DOMPurify from 'dompurify';
import {marked} from 'marked';
import hljs from '//cdn.staticfile.org/highlight.js/11.7.0/es/highlight.min.js';
import mdInCode from "@/utils/mdInCode"; // 用于判断是否显示光标

const props = defineProps({
// 输入的 markdown 文本
text: {
type: String,
default: ""
},
// 是否需要显示光标?比如在消息流结束后是不需要显示光标的
showCursor: {
type: Boolean,
default: false
}
})

// 配置高亮
marked.setOptions({
highlight: function (code, lang) {
try {
if (lang) {
return hljs.highlight(code, {language: lang}).value
} else {
return hljs.highlightAuto(code).value
}
} catch (error) {
return code
}
},
gfmtrue: true,
breaks: true
})

// 计算最终要显示的 html 文本
const html = computed(() => {
// 将 markdown 转为 html
function trans(text) {
return DOMPurify.sanitize(marked.parse(text));
}

// 光标元素,可以用 css 美化成你想要的样子
const cursor = '<span class="cursor"></span>';
if (props.showCursor) {
// 判断 AI 正在回的消息是否有未闭合的代码块。
const inCode = mdInCode(props.text)
if (inCode) {
// 有未闭合的代码块,不显示光标
return trans(props.text);
} else {
// 没有未闭合的代码块,将光标元素追加到最后。
return trans(props.text + cursor);
}
} else {
// 父组件明确不显示光标
return trans(props.text);
}
})

</script>

<template>
<!-- tailwindcss:leading-7 控制行高为1.75rem -->
<div v-html="html" class="markdown leading-7">
</div>
</template>

<style lang="postcss">
/** 设置代码块样式 **/
.markdown pre {
@apply bg-[#282c34] p-4 mt-4 rounded-md text-white w-full overflow-x-auto;
}
.markdown code {
width: 100%;
}

/** 控制段落间的上下边距 **/
.markdown p {
margin: 1.25rem 0;
}
.markdown p:first-child {
margin-top: 0;
}

/** 小代码块样式,对应 markdown 的 `code` **/
.markdown :not(pre) > code {
@apply bg-[#282c34] px-1 py-[2px] text-[#e06c75] rounded-md;
}

/** 列表样式 **/
.markdown ol {
list-style-type: decimal;
padding-left: 40px;
}
.markdown ul {
list-style-type: disc;
padding-left: 40px;
}

/** 光标样式 **/
.markdown .cursor {
display: inline-block;
width: 2px;
height: 20px;
@apply bg-gray-800 dark:bg-gray-100;
animation: blink 1.2s step-end infinite;
margin-left: 2px;
vertical-align: sub;
}
@keyframes blink {
0% {
opacity: 1;
}
50% {
opacity: 0;
}
100% {
opacity: 1;
}
}
</style>

可以发现最基本的 markdown 显示还是挺简单的,话就不多说了,都在注释里。


我想你也许对判断消息中的代码块是否未闭合更感兴趣,那么就继续看下去吧!


代码块是否未闭合


markdown 有两种代码块,一种是 `code` ,另一种是 ``` code ```,我叫他小代码块和大代码块。


一开始我是想用正则去判断的,但是奈何有点复杂,我实在想不出应该如何去编写正则,让 chatgpt 写的正则也会判断失败,而且还要考虑到转义符,就算写出了正则,估计也会很复杂和难以维护。


经过短暂的苦思冥想后,我想到了之前在 《Vue.js设计与实现》 中看到的用有限元状态机解析 html 文本的方案。


这里有请 chatgpt 简单介绍一下有限元状态机:



有限元状态机(finite element state machine)是一种基于状态机的建模技术,它可以将系统的行为描述为一组状态和状态之间的转换。每个状态可以对应系统内的一种状态,而状态之间的转换则表示系统内部的转换过程。有限元状态机还可以用于系统的可靠性分析和测试,同时也可以作为软件工程中的一种建模工具,帮助代码实现、测试和调试等方面。


在实际应用中,有限元状态机通常是通过自动化工具生成,并且可以用于控制系统、网络通信协议、软件接口等方面的设计和测试。由于有限元状态机具有自动化生成和完备性检查等优点,因此它已经成为了一种广泛应用的建模与测试工具。



请站在web前端的视角下进行介绍



从前端开发的角度来看,有限元状态机可以用于构建复杂的交互式Web应用程序。在Web应用程序中,有限元状态机可以描述用户界面的不同状态(例如,登录、注册、未登录等),以及状态之间的转换(例如,从登录状态转换到注册状态)。


通常情况下,前端工程师使用JavaScript实现有限元状态机,包括定义状态、定义状态之间的转换规则、处理状态转换时的行为等。使用有限元状态机可以帮助前端工程师更好地掌控应用程序的状态,从而减少代码中的复杂条件分支和无法预测的行为。同时,有限元状态机也可以帮助前端团队共同理解应用程序的状态和转换规则,从而更好地协作开发和维护Web应用程序。


总之,有限元状态机是一种非常有用的前端开发技术,可以帮助前端工程师更好地构建和管理Web应用程序的状态和行为,提高应用程序的可靠性和用户体验。



回到正题,我可以一点一点的从头开始去解析 markdown 文本。想象这么一个简单的状态转换流程:



  • 初始状态为文本状态。

  • 遇到代码块标记,文本状态转换到代码块开始状态。

  • 再次遇到代码块标记,从代码块开始状态转换到文本状态。


不过现实要更复杂一点,我们有小代码块和大代码块。有限元状态机的妙处就在这里,当处在小代码块状态的时候,我们不需要操心大代码块和正常文本的事,他的下一个状态只能是遇到小代码块的闭合标签,进入文本状态。


理解了这些,再来看我的源码,才会发现他的精妙。


const States = {
text: 0, // 文本状态
codeStartSm: 1, // 小代码块状态
codeStartBig: 2, // 大代码块状态
}

/**
* 判断 markdown 文本中是否有未闭合的代码块
* @param text
* @returns {boolean}
*/

function isInCode(text) {
let state = States.text
let source = text
let inStart = true // 是否处于文本开始状态,即还没有消费过文本
while (source) { // 当文本被解析消费完后,就是个空字符串了,就能跳出循环
let char = source.charAt(0) // 取第 0 个字
switch (state) {
case States.text:
if (/^\n?```/.test(source)) {
// 以 ``` 或者 \n``` 开头。表示大代码块开始。
// 一般情况下,代码块前面都需要换行。但是如果是在文本的开头,就不需要换行。
if (inStart || source.startsWith('\n')) {
state = States.codeStartBig
}
source = source.replace(/^\n?```/, '')
} else if (char === '\\') {
// 遇到转义符,跳过下一个字符
source = source.slice(2)
} else if (char === '`') {
// 以 ` 开头。表示小代码块开始。
state = States.codeStartSm
source = source.slice(1)
} else {
// 其他情况,直接消费当前字符
source = source.slice(1)
}
inStart = false
break
case States.codeStartSm:
if (char === '`') {
// 遇到第二个 `,表示代码块结束
state = States.text
source = source.slice(1)
} else if (char === '\\') {
// 遇到转义符,跳过下一个字符
source = source.slice(2)
} else {
// 其他情况,直接消费当前字符
source = source.slice(1)
}
break
case States.codeStartBig:
if (/^\n```/.test(source)) {
// 遇到第二个 ```,表示代码块结束
state = States.text
source = source.replace(/^\n```/, '')
} else {
// 其他情况,直接消费当前字符
source = source.slice(1)
}
break
}
}
return state !== States.text
}

export default isInCode

到这里,就已经实现了一个 chatgpt 消息渲染了。喜欢的话点个赞吧!谢谢!


作者:七分小熊猫
来源:juejin.cn/post/7221792648541356093
收起阅读 »