用 ChatGPT 做一个 Chrome 扩展 | 京东云技术团队

chatgpt,一个,chrome,扩展,京东,技术,团队 · 浏览次数 : 783

小编点评

**Chrome Extension代码示例:** ```javascript // content-script.js chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { chrome.storage.sync.get([ "text", "enable" ], async (result) => { const response = await fetch(API, { method: "POST", headers: { "Content-Type": "application/json", withCredentials: true }, body: JSON.stringify({ animal: request.text }) }); if (result.status === 200) { sendResponse(response.json()); } else { sendResponse({ error: "API 调用失败" }); } }); }); // background.js chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { if (request.method === "fetchTranslation") { const text = request.data.text; const enable = request.data.enable; fetch(API, { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${chrome.storage.sync.get("accessToken")}` }, body: JSON.stringify({ text, enable }) }) .then(response => response.json()) .then(data => sendResponse(data)) .catch(error => sendResponse({ error: "API 调用失败" })); } }); ``` **使用方法:** 1. 创建一个新的文件夹并将其命名为 "chatgpt-extension"。 2. 创建两个文件:`manifest.json` 和 `content.js`。 3. 在 `manifest.json` 中添加以下代码: ```json { "manifest_version": 3, "name": "ChatGPT Translator", "version": "1.0", "description": "A Chrome extension that uses ChatGPT to translate text.", "content_scripts": [ { "matches": [""], "js": ["content.js"] } ], "background": { "service_worker": "background.js" } } ``` 4. 在 `content.js` 中添加以下代码: ```javascript chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { if (request.method === "fetchTranslation") { fetch(API, { method: "POST", headers: { "Content-Type": "application/json", "Authorization": `Bearer ${chrome.storage.sync.get("accessToken")}` }, body: JSON.stringify({ text: request.data.text, enable: request.data.enable }) }) .then(response => response.json()) .then(data => sendResponse(data)) .catch(error => sendResponse({ error: "API 调用失败" })); } }); ``` 5. 保存所有文件并启动 Chrome 扩展。 6. 启用开发者模式,并访问 `chrome://extensions`。 7. 点击 "Load unpacked" 并选择你创建的文件夹。 8. 翻译任何文本,并查看翻译结果。

正文

用ChatGPT做了个Chrome Extension

最近科技圈儿最火的话题莫过于ChatGPT了。

最近又发布了GPT-4,发布会上的Demo着实吸睛。

笔记本上手画个网页原型,直接生成网页。网友直呼:前端失业了!

但我觉着啊,真就外行看热闹,内行看笑话。虽然ChatGPT很强大,但没有经过针对某个领域自定义化过的模型真就没啥用。。。
就比如写代码这事儿,我觉着还不如GitHub的Copilot用着方便。

回归我们的主题,今天咱就蹭蹭热度,用ChatGPT的API做个Chrome Extension。

说实话,开始还真没想到能用ChatGPT做点儿啥,后来看过一些视频,发现用它来做翻译比较好,感觉没有以往的翻译软件生硬。甚至你可以让他模仿某位大师的风格去翻译。惊了!

我就想,是不是可以把他和Chrome Extension组合下,来个划词翻译。

开干

我们可以用官网提供的脚手架快速起一个ChatGPT应用:

git clone https://github.com/openai/openai-quickstart-node.git

运行前你需要去openai生成一个OPENAI_API_KEY!

它是一个Next应用,运行起来是一个给宠物起名字的页面,你可以输入动物名称,他会生成相应的名字。

我们看下源码实现,下面这段比较关键:

const completion = await openai.createCompletion({
  model: "text-davinci-003",
  prompt: generatePrompt(req.body.animal),
  temperature: 0.6,
});

text-davinci-003是使用的模型,他是专门用来处理语言相关的模型:

image

有兴趣可以看官网文档对Text Completion的解释。

temperature是一个0-2之间的系数,用来表示结果的贴合度,越大结果就越发散,越小就越针对你的问题。

prompt这里比较关键,就是提问的艺术了。你对问题的描述越详细,它的反馈就越贴近你想要的。
示例代码给我们打了个样儿:

function generatePrompt(animal) {
  const capitalizedAnimal = animal[0].toUpperCase() + animal.slice(1).toLowerCase();
  return `Suggest three names for an animal that is a superhero.

Animal: Cat
Names: Captain Sharpclaw, Agent Fluffball, The Incredible Feline
Animal: Dog
Names: Ruff the Protector, Wonder Canine, Sir Barks-a-Lot
Animal: ${capitalizedAnimal}
Names:`;
}

我们要做的是划词翻译,这里我们改一下:

function generatePrompt(text) {
 return `Please translate the following text into chinese: 
 Text: ${text}
 Result:`;
}

运行试下,还不错。

到这里其实我们相当于把划词翻译的API做完了。然后就是找地方部署下,部署Next应用当然用Vercel,自家的东西。

👻 部署好了:

image

接下来我们再做个Chrome扩展就行了

Chrome Extension

这里向大家推荐一个vite插件:@crxjs/vite-plugin
用它可以使用vite的特性来开发Chrome Extension,包括hmr啥的都有,也可以支持React。想想早年开发Chrome扩展那叫一个苦。

这里我们做的是划词翻译,所以需要在网页中注入脚本,就要用到content-script。
另外,我们也要用到background service worker来接收网页端发来的划中词,再跳用我们的上面搭好的API来获得翻译结果。

content-script.js
这部分比较简单,就是获取用户划词,然后调用Chrome的api发送给background.js

chrome.runtime.sendMessage({ text }, function (response: any) {});

background.js

background里面通过chrome.runtime.onMessage监听网页端发来的词语,然后调用我们的ChatGPT API来获取翻译结果即可。

chrome.runtime.onMessage.addListener(function (
  request,
  sender,
  sendResponse
 ) {
  chrome.storage.sync.get(["text", "enable"], async function (result) {
   const response = await fetch(API, {
    method: "POST",
    headers: {
     "Content-Type": "application/json",
     withCredentials: true,
    },
    body: JSON.stringify({ animal: request.text }),
   });
  });
 });

看看效果:

image

这里要注意的是,我使用的是Vercel的Serverless部署的api,由于只是Hobby账号,所以请求有个10s限制,划的词太长的话,ChatGPT处理时间会超过10s,导致api报错。

image

好了,收工!

作者:京东零售 于弘达

来源:京东云开发者社区 转载请注明来源

与用 ChatGPT 做一个 Chrome 扩展 | 京东云技术团队相似的内容:

用 ChatGPT 做一个 Chrome 扩展 | 京东云技术团队

用ChatGPT让翻译不再生硬,跟着我基于ChatGPT做个Chrome Extension,实现在网页中轻松划词翻译。

构建 JavaScript ChatGPT 插件

> 聊天插件系统是一种令人兴奋的新方式,可以扩展ChatGPT的功能,纳入您自己的业务数据,并为客户与您的业务互动增加另一个渠道。在这篇文章中,我将解释什么是聊天插件,它们能做什么,以及你如何用JavaScript建立你自己的聊天插件。 这篇文章(或OpenAI所称的"训练数据")提供了一个快速入门

我在京东做研发 | 京东云算法科学家解析爆火的ChatGPT

令人惊艳的ChatGPT横空出世 背后有怎样的前沿技术支撑 走向大规模产品应用又有何局限 深耕对话式AI技术十余年 京东云算法科学家将带您一同走进技术世界 解析ChatGPT的技术亮点与局限 分享下一代对话式AI技术趋势 从好玩到好用 探讨对话式AI的落地实践

一款能“干掉” ChatGPT 的应用「GitHub 热点速览」

据说有了它,ChatGPT 就可以靠边站了。因为 Auto-GPT 能更加主动地完成你给他的指定任务,不用做更多的人为干涉,它的推理能力比 ChatGPT 更强,有人用它解放双手做了个 React 网站。当然除了升级的 Auto-GPT 之外,还有 DeepSpeed,它能极大地降低训练成本。这两个

解放双手!ChatGPT助力编写JAVA框架

亲爱的Javaer们,在平时编码的过程中,你是否曾想过编写一个Java框架去为开发提效?但是要么编写框架时感觉无从下手,不知道从哪开始。要么有思路了后对某个功能实现的技术细节不了解,空有想法而无法实现。如果你遇到了这些问题,看完这篇文章你也能用ChatGPT编写一个简单的JAVA框架。

颠覆传统编程:用ChatGPT十倍提升生产力

我们即将见证一个新的时代!这是最好的时代,也是最坏的时代! 需求背景 背景: 平时会编写博客,并且会把这个博客上传到github上,然后自己买一个域名挂到github上。 我平时编写的博客会有一些图片来辅助说明的,写完之后如果我把图片和文字全部都上传到博客网站,后期图片很多时就会导致网站加载特别慢

【保姆级教程】如何用Rust编写一个ChatGPT桌面应用

为什么我们需要一个桌面应用?原因实在太多,我们需要便捷地导出记录,需要在回答长度超长的时候自动加上“继续”,需要收藏一些很酷很实用的prompt...... (首先我假设你是一名如我一样习惯用IDEA开发的java仔)

前端如何用一个函数防止用户使用F12看控制台(超简单一学就会)

#### 先分享一下自己的搭的免费的chatGPT网站 https://www.hangyejingling.cn/ ## 正文 #### 1、如果是VUE框架开发,在生产环境中。在入口文件APP.vue中添加如下代码,其他框架同理 ```javascript if (process.env.mod

文心一言 VS 讯飞星火 VS chatgpt (112)-- 算法导论10.2 3题

三、用go语言,用一个单链表L实现一个队列。要求操作 ENQUEUE 和 DEQUEUE 的运行时间仍为O(1)。 文心一言: 在 Go 语言中,使用单链表实现队列的操作,包括入队(ENQUEUE)和出队(DEQUEUE),并保持操作的时间复杂度为 O(1),需要利用两个指针,一个指向队头,另一个指

文心一言 VS 讯飞星火 VS chatgpt (104)-- 算法导论10.1 2题

二、用go语言,说明如何在一个数组 A[1..n]中实现两个栈,使得当两个栈的元素个数之和不为 n 时,两者都不会发生上溢。要求 PUSH 和 POP 操作的运行时间为 O(1)。 文心一言: 在这个问题中,我们要在一个数组 A[1..n] 中实现两个栈,使得当两个栈的元素个数之和不为 n 时,两者