【转】用Cloudflare Workers提供一个翻译API后端

本文有小的修改和细节说明,主要说明和代码的原文地址:

用Cloudflare Workers提供一个翻译API后端 – Minaduki’s Blog

地铁上班路上,刷到文章:使用Cloudflare Workers AI搭建一个翻译服务,搜索实践了下。

准备工作:

  • Cloudflare账号注册
  • 简约翻译(浏览器插件)
  • 注册域名(中国网络环境必选项)

主要步骤

前面两个链接的主要步骤已经写得很详细了,这里只简单补充。
  • Cloudflare主页-侧边栏AI(beta)-侧边栏Workers AI-Workers AI模板-翻译应用-部署-编辑代码-替换为以下代码(首行代码改为引用’./vendor/@cloudflare/ai.js’),右上角保存并部署
import { Ai } from './vendor/@cloudflare/ai.js';// 此处有小的变化
export default {
  async fetch(request, env) {

    /**
     * readRequestBody reads in the incoming request body
     * Use await readRequestBody(..) in an async function to get the string
     * @param {Request} request the incoming request to read from
     */
    async function readRequestBody(request) {
      const contentType = request.headers.get("content-type");
      const Authorization = request.headers.get("Authorization");
      const expected_token = env.BEARER_TOKEN;
      if (Authorization === `Bearer ${expected_token}`) {
        if (contentType.includes("application/json")) {
          return await request.json();
        } else {
          throw new Error("Request's content-type is not supported. Please use application/json.");
        }
      } else {
        throw new Error("Authentication failed. Please check your access token.");
      }
    }

    if (request.method === "POST") {
      try {
        const reqBody = await readRequestBody(request);

        const ai = new Ai(env.AI);
        const inputs = {
          text: reqBody['text'],
          source_lang: '',
          target_lang: 'chinese'
        };
        const response = await ai.run('@cf/meta/m2m100-1.2b', inputs);

        const translated_text = response['translated_text'];
        const ret = {
          text: translated_text,
          from: "", // 识别的源语言,Cloudflare目前似乎并不支持
          to: "zh-CN"
        };
        return Response.json(ret);

      } catch (e) {
        return new Response(e.message);
      }
    } else if (request.method === "GET") {
      return new Response("Please use POST.");
    }

  }
};
  • 复制下面的链接创建key,aip创建模板选择Workers AI (Beta):https://dash.cloudflare.com/profile/api-tokens
  • 点击左侧边栏选项》Workers 和 Pages,找到刚刚建立的项目点击,设置》变量》编辑变量。变量名称BEARER_TOKEN,值为上一步获取到的key
  • 浏览器打开简约翻译的配置页面,接口设置》Custom,URL处填入项目预览地址(格式为https:\\worker-xxx-xxxx-xxx.账号名.workers.dev\translate),还有key,点击测试。
  • 如在国内网络环境使用,回到Cloudflare刚刚的Workers 和 Page,点击项目名称》触发器》填入自定义域名(如DNS未在Cloudflare配置需要在域名服务商进行配置)

最终效果取决于访问的网页结构,翻译速度很快,但可能漏掉部分文字

学习Python——在本地安装anaconda,使用jupyternotebook

虽然已经开始尝试使用百度飞桨和谷歌的colab了,但对本地使用python的环境要求还是一头雾水。今天跟着视频尝试安装anaconda,利用jupytor notebook来在电脑本地运行python,抄写之前大数据软体公司的代码,来转写YouTube视频。ps:用户名需要用英文,不然notebook的内核总是在忙!!!

下面是<意公子>-youtube视频链接和调用whisper转写的文字

蘇東坡對命運有很多的「放過」,但是李白,從不放過。【意公子講李白】 – YouTube

中文转写有很多错别字需要注意分辨。

还是要勇敢一点,这是我最近读完李白以后最大的一个感受。小时候读李白,总觉得他是诗仙。你看他写的这些诗,什么君不见黄河之水天上来,那个龟楼高百尺,桃花潭水深千尺,什么飞流直下三千尺。这些风景哪里是人间的风景,所以我们才觉得他仙,能写出这样诗句的人,那种非凡想象力的人,他应该就是那种豪迈的、自由的、洒脱的灵魂吧。但是我最近重读李白之后最大的一个感受,就是他的这些印象全碎了。但是当我去触摸到一个可能是更真实的李白的时候,我被他感动得一塌糊涂。我觉得他好像在告诉我,人生还是要勇敢一点。于是我为李白写下了这一篇。我从来都没有写过这么长的一篇短视频的文稿,八千七百三十四个字。我想半天我说,大家怎么能看得下去呢?会不会看到一半就跳出去?所以我就想前面能不能删掉。后来我发现我一个字都删不了,因为他真的很感动我。所以希望今天大家有耐心,能够看完这篇比较长的文章。 我们知道李白在一生当中,在政治上是很不得志的。但你知道他有多么渴望成为纪事之才吗?当我们如果能够了解李白的那种”打不死,我就要继续爬起来,再战斗”的那种职场经历,我相信我们都会为他而感到唏嘘的。 其实在唐朝那个相对开明的年代里,想做官有好几种形式的。一种就叫门因入室,就是说咱祖上是官,那咱多少还能沾点光。另外一种就是科举,家里不抢官员没问题,寒门子弟也是有机会的。而且科举还分常科和智科,常科就是每年分科举行的考试,有好几个科目,万一你要是哪一门考得特别优秀,还有机会让你去参加某一些特别的考试。而智科就是怕常科考试埋没人才,皇帝专门特赦的考试,所以我们也可以把它理解为特招生。当然啦,唐朝科举的这个录取比例还是比较低的,但是你想那么全面的选才方式,如果你真的有一身才华的话,你完全可以有机会走这条路的。然而李白一生都没有参加科举,为什么呢?其实不是因为他看不上,而是因为他连考试的资格都没有。 这就要讲到李白的出生了。我们之前其实讲过,关于李白的出生有好几种说法,其实李白自己在他的那个文章里面就写的自相矛盾,一会儿说自己是金陵世家,一会儿又说自己是陇西平民。其实关于他的出生,有几个比较详细的记载。一个是他的祖书李阳兵,他受李白之托在给他编文集的时候给他写了一个序文里有提到。另外一个是李白死了以后,他有一个粉丝叫范传政,他去寻找李白的后代,找到了他两个孙女,然后按照李白的遗愿给他改葬。改葬时候立的那块碑,碑文里也有提到。 还有一个史料来自《新唐书》,所以综合起来看,我们大致可以推测出李白的祖上也许真的是贤赫的,但是在隋朝末年因为一个罪名被流放到西域去,被迫更名改姓。到武则天时期,他才悄悄潜回四川。罪人之后有很多事情是难以启齿的,所以其实从某种意义上来讲,李白很有可能是黑户。唐朝的什么考试他都需要你带着身份证户口本去登记,你得要证明自己的户籍和家世。而李白这一关就过不了,所以政审不通过,你什么考试都没辙。那上天对于这个五岁送六甲,十岁观其书,十五好剑术,满腔才华的李白,在功名这条路上连先天条件都不具备,那怎么办呢?还好这个开明的时代里给诗人留了另外一条路,那就是肝业。肝业就是写自荐信,它是带着非常强烈的功利性的,就是我要把我的才华展示给你看,而且你的地位肯定比我高多了,所以我才要求你,求你看见我,求你举荐我。我们去翻看李白的作品,从他20岁向当时的他的父母官一州长史苏挺递上他自己的文章《大猎妇》开始,一直到他59岁流放夜郎回来,在将近40年的时间里,他从来没有停止过自荐。他向各级各类官员,他能见到的不能见到的人不停地变着各种花样来自荐。有的时候是像苏挺这种递上自己最近写的文章,有的时候是直接就写一封自荐信。而且,我们如果把这个李白的自荐信集中起来读,真的会有一种不忍足读的感觉。你会看到一个心气如此之高的大诗人在这40年的时间里是怎么一点一点被打到滴入尘埃里的。30岁的时候,他给安州长史裴宽写信自荐,一开始还很拽,说自己是金陵世家,还是前丞相的孙女婿,多少有点背景,而且我很会读书,从小就是这样,好多大V都给我点过赞。那谁谁说我的文采堪比司马相如,大家都听见了。还有那个谁谁对你的前任长官说,说我的文章句句动人,就这话。我那个好朋友袁丹秋,他也听见了,不信你可以问他。然后他又花了很长的篇幅,说了两个故事,主要就是为了体现自己忠仪交友的优良品德和不屈权贵的高尚人格,最后把对方夸了一通,说十年前我就特别仰慕你,一直想跟您报告来着,老是没有机会。现在我听说有人在您面前说我的坏话,让您远离我,我多冤哪,希望您宽大为怀,再次器重我。您如果不器重我的话,那我可就要走了,我要黄湖高飞去长安了。您如果不能纳贤,那王公大人那么多,我为什么不可以去转头别人呢。你想我们以前是站在李白的角度去看这件事情的,我们可能觉得李白很冤。但如果我们换一个角度,今天你是用人单位。 你单位收到了一个年轻人写来的自荐信,读完后你有什么感觉?你可能会觉得这个年轻人可能是有才华的,但有点自负。嗯,陪长官们估计也是这么觉得的。所以他其实也没有推荐李白,就这样转转转了四年,李白还在找工作。这个时候他遇见了当时的荆州长官韩朝宗,于是就写下了这篇后来被收录到古文官志里千古文明的自荐信《禹韩荆州书》。这封信看了就真的是五味杂陈。其实我之前说过一次,请原谅我今天还是要再重复一遍,因为我真的没有见过这样子的李白。第一大段先是极尽所能的拍马屁,拍得又浮夸又让人难以拒绝。我听说天下人都在讲,生不用封万户侯,只愿结识一下韩荆州。天哪,你是怎样让人仰慕到如此程度的?难道不是因为你有周公之风,徒步之心,才让天下的豪杰名士都要奔走到您的名下吗?只要入了您的法眼,他们身价十倍了。第二段低调地介绍一下自己,我只是一个陇西平民。嗯,你要记得,四年前他说自己是精灵世家的,现在是平民,低调。我十五岁爱好建树,见过很多的地方长官。三十岁我的文章已经名满天下了。虽然我个子不高,但是我的志气高啊,好多大V都给我点个赞。好,夸自己的部分到这里就结束了。你看啊,相比于四年前,他用这四大段的篇幅来夸自己,现在反而非常低调,四句话而已。而且,他居然还接受试用,他说如果您让我写文章,就算日复万年,不带假眼的,马上给您搞定。然后他又用两大段的篇幅大规模地给韩金周戴帽子,把人架到道德的至高点上,嚇不來。您的著作堪与神明相比,您的德行感天动地,您的文章与自然同造化,学问与天道同等级,您就是决定文章命运与衡量人物的权威啊。您看,古往今来的这些圣贤们就是因为推荐了有才能的人而被后世称赞,您也推荐了好多人呢,比如那谁谁谁,谁谁谁,我每每看见他们的时候,都觉得感动和激励。所以,我谁都不归,就仰仗您了。您要是有什么紧急艰难的时候,要用我,我一定为您献身效命。最后,我就一个卑微的请求,求您见见我吧。我觉得,这篇文章之所以被收录到古文观止里,有可能真的是因为它的确有文采吧,层层递进你的逻辑,而且又很清晰、谦虚又很诚恳,然后还把对方夸得下不来台。最后的请求也特别微小而具体。但是,你要说,写下这些文字的李白是真诚的,是快乐的,那些赞美的句子是满怀希望与生命力的,原谅在下有眼无珠,真的看不出来。我反而觉得很悲哀,就是一个心比天高的李白,他要一次一次地去写自荐信给一些人。 他可能内心都不一定看得上的人,却去谋求一个被赏识的机会。我真的是忍不住要问你,你到底图什么呀?其实,如果我们去看李白的作品,他内心所表达的,他想要的那个政治理想,根本不是一个繁琐的官场。他希望自己像战国时期的谋略家鲁仲廉一样,能横空出世,拯救时局,制定大计,惠及众生,然后隐姓埋名,深藏功与名。这是一种英雄的浪漫主义,太浪漫,也太不实际了。但是李白不相信,他浪漫至死,他觉得他可以。于是在四十年的时间里,我们就看到李白不停地自荐,甚至到什么程度呢,他晚年被当成叛军关起来,差点就要丢掉性命了。好不容易被人救出来,他发现那个救他的人,可能可以向新皇帝举荐自己的时候,那个五十七岁的李白又坐不住了。这一次他不是写自荐信,而是用对方的口吻,写一封推荐自己的信。你看,考虑得多周到,就信我都替你写好了,你只要网上订就可以了。为了能实现自己的理想和抱负,李白是一次次被打垮,然后又一次次站起来。我们要说这个老天爷,终究还是长眼的,可能真的是因为李白太想要了,于是上天真的给了他一次机会。那李白是怎么把握住这个机会的呢,这就要说到,唐朝除了科举和干页之外,给诗人开出的最后一条路,修道。我们知道李白是道教徒,正儿八经受过录的,也就是说他是官方登记在册的道士。如果他愿意,他是可以去当个道士赚钱的。可以说不管是道教还是道家思想,他都在很大程度上影响到了李白。但是李白修道,不仅仅是为了滋养身心,他还有一个很隐密的目的,就是为了牧师。当时在唐朝的上层社会,修道之风盛行。嗯,你这么想吧,就很像是说,我跟你虽然有巨大的阶层差距,但是在修道这条路上,我们同是道友啊。所以呢,这条路也被称为是中南捷径。它就有点像,嗯,老板喜欢灌蛋,我陪老板灌蛋。当然这么比喻可能有点不太准确啊,但意思你懂的。其实在李白的修道路上,真的是有两个道友对他帮助非常大。一个叫袁丹秋,另外一个叫玉珍公主。袁丹秋向玉珍公主推荐了李白,然后玉珍公主又向玄宗推荐了。那玄宗短时间内听完贺之章夸,然后又听玉珍公主夸,他就想要见见这个人了。于是就有了李白,所谓啊,他职业生涯的华彩尽头,玄宗亲自下台阶迎接他,就像是见到了商山寺后,这些大隐士一样。他用七宝床,也就是皇帝专用的床,让李白坐在上面,请他吃饭,而且还亲手调和羹汤来给他。皇帝对李白说,你虽然是平民,但是你的名声大到连我都知道了,难道不是因为你平日道德太显著的缘故吗?然后玄宗对他大为赞赏,不仅问他治国方略 是一个文学家而不是激世之才,这个问题很难确定。无论如何,李白的职位是翰林供奉,他在翰林院上班,但与翰林学士的职位有所不同。翰林供奉的工作职能是每天等待皇帝召见,陪伴皇帝在身边,包括御用文人、算卦的、游戏的、念佛的、画画的、吹拉弹唱的等。范传政曾在给李白写碑文时说过李白的才华,但关于李白能否一气呵成写作,甚至在写作时能否因为太过出色而惊退其他挑战者,这一点后世有很多争论。总体来说,我们在李白的自荐信或对朝政的讨论中,很少看到实质性的建议或逻辑严谨的意见,但看到了很多文学上的才华。这就像是领导希望得到一个策划案,但你却给他念了一首诗。所以,错过李白,是集体失明还是李白本身不是激世之才,这个问题很难确定。 就不适合呢,即便给了他这个机会,你觉得李白能够成为一个优秀的政治家或者优秀的职场人吗?我想大概率不能,因为职场需要的是理性,是效率,是克制自己的,随心所欲,甚至有的时候要牺牲自己的情绪。但李白显然不是这样的人。他一生的执念就是成为济世之才,他想入世,但是却始终无法适应主流的规则。当人生有一个巨大的错位的时候,悲剧就产生了。其实当我们跳出李白之外,相对冷静和客观地去看李白,你就会发现,他的个性早已经决定了他命运的走向。这条路他就是不适合,所以变成这种结果很合理啊。可是我们为什么还是会被李白感动呢?我想就是因为他身上有我们那种已经丢失了很久的幼稚,纯粹,傻傻的勇敢。他就好像一个孩子一样的,孩子会给自己构建一个理想的世界,在那个世界里面他是大英雄,是奥特曼。奥特利姆光线放出来的时候,他就觉得他已经打败你了,你死了。然后作为成年人,你会觉得好好笑啊。可是在孩子的世界里面,他真的觉得他就打败你了呀。而李白终其一生,就活在这种幼稚的天真的世界里。他为什么一次次的失败?就是因为他的那个世界和现实世界是如此的不兼容。可是他还就不信,他在球曲中一次次被打趴下,然后又一次次站起来。这是一种与命运对抗的勇气,有一股傻劲,但是特别生猛,特别痴情。苏东坡对命运有很多的放过,但是李白从不放过。他像一个骑士一样,勇敢地去探索,去追求,飞蛾扑火地往一个注定会失败的方向。于是这个悲剧就越滚越大了。而值得回味的是,命运给你这个悲剧,居然就是为了来成就你文章锤千古的才华。如果不是这样,哪有人生在世不如意,明朝散发弄天舟;哪有且乐生前一杯酒,何须身后千载名;哪有仰天大笑出门去,我辈岂是蓬蒿人;哪有五花马千金求,呼儿嗆出换美酒;与儿同笑万古愁。

OneDrive的新用途

OneDrive 或者 OneDrive for Business 如何使用 WebDAV? – Hugo Koo的回答 – 知乎
https://www.zhihu.com/question/281570647/answer/2724959643

最近github上的chatgpt-next-web项目更新,可以选择将本地聊天和配置上传到网盘进行保存。找到了一个利用Onedrive设置账户的好方法。

  • 访问https://onedrive.live.com/,得到一串数字cid=12345678。
  • 在服务器地址处填写https://d.docs.live.net/12345678
  • 填写OneDrive的用户名和密码,登录验证即可。

以上有错误,虽然显示更新成功,但网盘里面没有新增文件。
按知乎的新教程重新操作https://zhuanlan.zhihu.com/p/656214960
利用了第三方网盘,成功实现了消息的同步。

博客无法访问,数据库链接错误修复

没有对服务器和系统进行升级或设置调整,假期博客突然不能访问,显示“建立数据库连接时出错”。
试图搜索并通过chatgpt解决问题,相关问题多,一个个排除很费时间,而且要搞懂底层逻辑很困难。
想先备份数据库再试验,结果不行,数据库显示为空。然后发现自动备份到OneDrive的历史操作没有成功。
心里凉了一截。
再次搜索,发现在宝塔论坛有类似问题被解决。只需要修改服务器blog文件夹下的wp-config.php文件,更新其中的密码。
尝试后恢复正常。想着还是要有个备份,在后台发现了七牛云,注册了账号,开了存储桶。上了自动备份。还可以当图床。
又收获了新技能。。。

放个样图试试

我在潍坊很想你
ps:因为七牛图床免费流量仅支持http,不支持https,所以在访问加密网站时,浏览器会阻止http开头的图片显示
图片地址》我在潍坊很想你

今天(11月5日)又出现了同样的错误,重启下数据库就可以恢复了,更加简单。(把解决方案写在博客上,服务器出问题了根本找不到,只好又去搜索)

WordPress建立数据库连接时出错解决方法 – WP主题站 (themeforwp.net)

云南曲靖出差流水账

某锌冶炼改造项目从去年中签订合同,折腾了一年终于等到要评审。

同行的苏童鞋很有意思,英国留学背景,路上聊了挺多英国趣闻,比如打工、卖烟、论文代写被一群老师审查、文化冲击(裸体骑行和彩虹节)等等。成年之后需要交税,但有点能力就可以养活自己,要是有才艺,路边搭个摊就可以卖唱了。。。

昨天去机场路上,本来打算坐地铁,碰到同小区出来的家政阿姨,一手推车、一手拿着块不轻的桌板,走在马路边上,感觉挺危险的。正好顺路,帮阿姨拿桌板到地铁口。阿姨武汉人,在北京几十年了,目前在旁边楼给两户人家收拾屋子做做饭。临别留了电话,阿姨说可以给免费收拾屋子一次。

到地铁,发现离登机时间一个多点赶不到了,坐了一站,打车花费140多块赶到机场,正点起飞。

晚餐业主招待,喝了酱香型的媚酒,辣的不行。

入住酒店5楼,外边的不知道是摄像头还是红绿灯,隔6秒左右发出6声滴滴滴,很响亮,凌晨4点酒醒了,听了滴滴声迷糊了一阵,想到下午开会,捂头睡到9点才起。

本来还有一个评审会后天也在这里,考虑的某大型项目周四交稿,还是要提前回京。

datacamp-light-test

# This will get executed each time the exercise gets initialized b = 6 # Create a variable a, equal to 5 a = 5 # Print out a print(a) # Create a variable a, equal to 5 a = 5 # Print out a print(a) test_object("a") test_function("print") success_msg("Great job!")
Use the assignment operator (=) to create the variable a.

新购VPS试验搭建SSR

vpn教程:自建ss服务器教程 · Alvin9999/new-pac Wiki (github.com)

vps服务器主页:RackNerd – Introducing Infrastructure Stability

第三方vps优惠消息:RackNerd优惠码和促销活动整理 (2023最新版) – 瓦力箱子 (walixz.com)

听说用别人的vpn登录还是有泄密的风险,之前看到的一些国外vps价格还是挺优惠的,所以在网上找了下最近的优惠活动,尝试自己搭建vpn。

其实之前也考虑过,但上一次用小飞机(SSR)访问YouTube后,服务器ip被封掉了大半个月,无法在国内访问,所以挑了这个1核/1g/14G硬盘版本,一年才11美元,可以支付宝,不知道能用多久。

留个记录在这里。

因为有了单独ip,终于可以体验谷歌bard了

搭建newbing失败

搭建教程相关的链接:免费部署自己的new bing (qq.com)

根据链接教程,操作了一遍,可以显示页面,但无法会话,一开始以为是国内网络环境问题,后来搭了梯子仍然不行。

根据引用的GitHub项目链接Harry-zklcdc/go-proxy-bingai: 用 Vue3 和 Go 搭建的微软 New Bing 演示站点,拥有一致的 UI 体验,支持 ChatGPT 提示词,国内可用。 (github.com),点进里面的测试页,发现也无法使用。

主要原因是微软封杀了相关的服务商,如文章中推荐的Huggingface以及Vercel、Cloudflare等。

与Openai相比,微软作为商业公司,首要目的当然是推广其Edge浏览器的使用。

API-网页

申请了文心一言的api接口,利用网页端、GitHub的chatall项目试用了下。感觉ERNIE-Bot版本在回答物理化学和编程时,表现得比ERNIE-Bot-turbo效果更好。准确度也很高。

让chatgpt3.5给出了文心一言api打包成网页的代码。示例如下(需要获得其中的access_token并更换,保存为html格式文件):

你提供的代码中,已经使用内嵌方式将 JavaScript 代码嵌入到了 HTML 文件中。以下是整合后的代码:

<!DOCTYPE html>
<html>
<head>
  <title>API交互网页</title>
</head>
<body>
  <h1>API交互网页</h1>
  <label for="input">输入:</label>
  <input type="text" id="input" />
  <button onclick="callAPI()">提交</button>
  <h2>结果:</h2>
  <div id="result"></div>

  <script>
    function callAPI() {
      // 获取用户输入的内容
      var input = document.getElementById("input").value;

      // 构造 API 请求的数据
      var requestData = {
        messages: [
          { role: "user", content: input }
        ]
      };

      // 发送 API 请求
      fetch('https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=[access_token]', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify(requestData)
      })
      .then(response => response.json())
      .then(data => {
        // 处理 API 返回的数据
        var result = data.result;

        // 显示结果
        var resultDiv = document.getElementById("result");
        resultDiv.innerText = result;
      })
      .catch(error => {
        console.log(error);
      });
    }
  </script>
</body>
</html>

在这个代码中,JavaScript 代码被直接嵌入到了 <script> 标签中,以实现与 API 的交互。当用户点击 “提交” 按钮时,callAPI() 函数会被调用,该函数会获取用户输入的内容,并发送 API 请求。然后,通过处理 API 返回的数据,将结果显示在页面上。