Emacs ChatGPT

提交了一版本,虽然只有一个功能,但也可以试用一下。很遗憾,由于Chromium headless 行为和 headful 情况下不一致。导致当前版本只能使用 headful 模式,展示 Chromium 的窗口。有些干扰。

跟风试用了一下 ChatGPT, 并且尝试写了一个通过 Emacs 连接 ChatGPT 的 demo. 主要逻辑是:

  1. 利用 Python pycookiecheat (获取本地浏览器的 cookie ) + playwright 就可以自动化登录到 ChatGPT 页面。
  2. 利用 Websocket-bridge 让 Emacs 和 Python 程序通信,把 Emacs 的输入传递给 playwright, 然后异步等待结果传送回 Emacs

现在网络上已经有了许多 ChatGPT 非官方 API, 之所以选择使用 playwright + pycookiecheat 优点有:

  1. 可以自动登录,pycookiecheat 可以直接获取浏览器的 cookie, 也就是你在自己熟悉的浏览器上登录过 ChatGPT, 那么 Emacs 就可以直接使用了。不需要显示的在配置文件里指定用户名密码或是 Token
  2. 由于数据都是直接从 playwright 页面中抓取的。可以更好的控制。
  3. 其实核心是,我比较熟悉这一套流程。

使用体验,

  1. 把 ChatGPT 当作一个搜索引擎还是不错的,不过对话尽可能细致才可能得到有用的结果,如果是抽象的问题,它可能会瞎说。
  2. 慢,是真的慢。所以它的页面是滚动式返回数据。如果等它的数据完全收到之后再返回给 Emacs, Emacs 会等好久。

目前就实现了一个命令:ws-chat-gpt-input 输入字符串,发送给 chatGPT

发送完请求之后,因为是异步的,不会卡住 Emacs, 但需要很久才能返回完整信息。你就可以做别的事情了,等呀等,十几秒之后:

又是一个挖坑贴。分享一下我的体验与开发 DEMO 的记录。但暂时还未有提交的代码。

寻求一下大家的想法。

  1. ChatGPT 的可能的使用场景?
  2. 以及如果想要在 Emacs 下访问 ChatGPT, 怎样的交互逻辑比较合适?

例如 ChatGPT 返回是真的慢,因此可以选择和页面一样,一点点的返回,一点点的展示。这样等着就不那么着急。但我觉得实际,没什么意义,全部结果都出完了,再看完整的信息反而比较合适。

另外,如果没法注册 ChatGPT 怎么办?其实是有万能的淘宝的。就是不知道有没有隐私泄漏问题。 :rofl:

10 个赞
  • 解释一段代码是什么意思 (特别是像汇编语言这种很有需要)
  • 根据一段描述生成一段代码 etc

edit: 还有就是……替代 M-x doctor (

3 个赞

Python 打开了Emacs和外界协作的潘多拉魔盒呀, 大佬又给自己挖了一个巨坑。

我觉得 ChatGPT 有几个用处:

  1. 当一个人写代码的时候, 把不知道怎么修的代码给 ChatGPT, 问它怎么修复? 反正你也不知道怎么修, 也不用嫌弃它慢, 就把它当作一个黄鸭子, 让它自言自语, 说不定真的还启发你怎么修复bug

  2. 写项目材料需要收集技术材料的时候, 可以通过思维导图来问它, 思维导图的每一个节点就是问题标题, 它回答的内容就是文档素材, 都回答完成以后再转换成一个 Word 文档, 可以大量节省自己搜集素材格式化文风的工作, 这种就让它默默的干吧

  3. 大量文件名称需要重按照某个风格重命名的时候, 让它慢慢干好, 这种人工智能应该比键盘宏好用多了

2 个赞

代替doctor这个idea不错,史诗级升级了

4 个赞

vscode的chatgpt 的用法可以借鉴下

  • 能解释一下这部分代码的含义吗?
  • 可以重构这部分代码,然后说一下与重构前的区别吗?
  • 为什么这部分代码出错了?
  • 请输入问题
  • 然后呢?

真快,今天刚看新闻,这么快就开始了,大佬优秀

能保持长连吗?chatgpt 的一个有意思的地方就是上下文有关

可以一个问题一个网页, 这样就可以实现。

ChatGPT 还有个用处:提高用户提问水平。

问题决定答案。能不能得到期望的答案,取决于有没有把问题描述清楚。如果能把这种观念根植人心,真是一件大好事。

也许未来的公司企业机关单位,招人不要求会写会算、现场手写反转二叉树,就看你是否懂得与 AI 交流。提得一手好问题,是未来的核心竞争力。

3 个赞

不是说一个问题一个网页啦。

是说,比如可以在第一个对话里面告诉他 a <> b = a + 2b,然后,下一个对话直接说 3 <> 5 等于多少之类的。

如果一个问题一个网页,那对话就没办法连贯起来,就没多少意义了。

甚至可以这样

我是说的这个意思, 更准确描述一下,一个buffer里面的所有问题都共享一个网页。

我说的一个网页就是不同 buffer 的问题要用不同的网页, 这样就可以隔离不同的上下文。

buffer 和 网页 以及 上下文是一体的。

你的提问好高级。引导式提问。

这个方式是可以实现的,实现的逻辑比较简单。实际上就是开一个看不见的 ChatGPT 网页,然后Emacs 和这个网页进行通信。

如果若干个问题,都是同一个网页通信,就是同一个上下文。

如果你需要切换新的上下文,就需要新开一个网页与它通信。

原以为,playwright + chromium 在 headless 模式下和headful 模式下行为是一样的。因此在 headful 模式下开发调试,正式提交时,试图使用headless 模式。结果,居然出错了。他们两者的行为居然不一致。先暂时忍受,启动chromium 窗口好了。

这时候可以用 deno-bridge 和 Puppeteer, Puppeteer 是完全用你系统安装的Chrome来登录页面的, 同时保持窗口不显示。

最初考虑使用Python 主要是我熟悉一个pycookiecheat 的包,可以方便的从日常使用的浏览器里捞cookies 就可以不用重复登录了。

刚刚搜索了一下,好像js 也有一个类似的:GitHub - bertrandom/chrome-cookies-secure: Extract encrypted Google Chrome cookies for a url on a Mac or Linux, 之前不知道为什么没有搜索到。

puppeteer 似乎还有一种获取Cookies 的方法,可以指定 userDataDir 只要和用户使用的日常浏览器是同一个用户目录,就可以共享Cookies 了。后续有时间可以试试。

浏览器领域的还是用 TypeScript 好, 特别是 deno 现在可以直接用 npm 包了, TypeScript 对于网页插件支持更好一点。

Python主要用于系统底层库和一些数学算法方面, 生态会更好一点。

日常使用 ChatGPT 来作为搜索引擎看起来没有太大问题。特别是写代码时,想要某个明确的功能,或者查看某个明确的方法。

目前遇到的问题有:如果第一次提问使用的是中文,那么后续英文提问,还是会返回中文答案。看起来中英文提问开启不同的窗口会比较合适。

2 个赞

有些场合可能比搜索引擎更好用。但搜索引擎还是无可取代。

透过搜索引擎你可以追溯到信息的源头。ChatGPT 给你的则是它重新组织的信息。

是的,搜索引擎给出的源头可以辅助你判断回答的正确性,而chatGPT 忽悠起人来,真是一本正经。一测试才发现不是那么回事。看起来,网上的那个Google+ChatGPT 的插件可能会比较靠谱。搜索的时候把google 结果和chatGPT 的回答都列出来。

2 个赞