前言

工欲善其事必先利其器。LLM 的开发与传统的项目开发有一些区别,LLM 很多请求是耗时甚至是烧钱的,比如说 Open AI 的 API,每次都会消费一定的 Token。

其次,我们可能会反复调试一段代码来测试最合适的参数与prompt,如果我们像传统 Nodejs 程序一样每次都从头跑一次,耗时也花钱。所以我们需要使用适合机器学习与大模型领域的专用开发工具。

Deno 和 Jupyter NoteBook

在正式介绍 Jupyter NoteBook 之前,我们先介绍一下 Deno 吧,做前端的大家肯定是或多或少听说过 Deno 的,它是 Nodejs 之父创立的新项目。这里不会赘述它的使用方法,可以自行查询官方网站的文档,简单概括一下就是,把 Nodejs 的分散的生态全部整合到了一起,提供了更多的现代框架支持。比方说:

  • Deno 开箱支持 Typescript
  • 自带格式化工具
  • 自带测试框架
  • 高质量的标准库
  • 有比较好的安全性
  • 默认脚本不能访问文件,网络,环境

可以把它理解成一个更为强劲的 Nodejs,当然了,Deno 不是我们这个主题的重点,你只需要知道,你会 Nodejs 就会 Deno,并且还可以直接获得很多需要 Nodejs 配置了才可以使用的功能。

好了,接下来我们来看看 AI 领域经常用到的工具——Jupyter NoteBook 吧:
先看看演示:

这个工具的核心就是代码块,每个代码块作为一个独立的整体去执行,并且可以反复多次进行执行。在代码块的左侧,可以看看我贴的这张图,就是执行的顺序标记,指代的就是这个代码块被执行的顺序

比如说,我先执行图里的第一个代码块,它会显示数字 1;然后执行第二个代码里,它会显示数字 2,紧接着我再去执行代码块 1,它的左侧就变成了 3:

这样就很直观了吧,也就是说这个数字显示的是当前被执行的顺序,这个数字存在的目的是帮助你跟踪代码块的执行顺序,并且在执行过程中保持一种清晰的状态。

顺带一提,在 Jupyter NoteBook 中,如果一个代码块只有一个变量的话,就会像我图里那样,自动的把该变量显示出来,类似于console.log,但是又有点不一样,后面实际使用中会有更多的体验。

所以说,在我执行完这两个代码块之后,在 JS 环境中,就有了一个text变量,我们可以把这里从 txt 文件中读内容理解成一个耗时耗钱的任务(比方说 OpenAI API),在执行完这个任务之后,我们就可以把内容存储到变量里,后续可以对这个任务做任何测试,而不需要反复从文件中读取(亦或是反复发送 chatgpt 来烧钱)

接下来我们可以对 text 随便操作了,比方说我们来做一下切割:

可以看到,我们做了复数次操作之后,旁边的数字也在增加。

值得注意的是:
如果上游数据发生了变化,下游并不会自动更新或者重新运行

比如说我们这边手动修改 text 的值变成一个自定义的字符串:

需要手动去运行一下才更新。

这个工具之所以有叫做 NoteBook,是因为他也支持 Markdown:

所以说,我们有了 Jupyter NoteBook,就可以节约费钱(也有费事)的请求,基于某个运行结果的输出,我们可以不断尝试解析和处理方式。与此同时,也非常方便结合 Markdown 来做笔记。

配置

Jupyter NoteBook 主要是以 Python 为主的,后续的 Deno 提供了 JS/TS Kernel 的支持,所以我们就需要分别安装 Deno 与 Jupyter NoteBook。

因为我的电脑是 Mac,以 Mac 为例:

1.Mac 电脑基本默认有 Python3 的环境,如果你是 windows,可以自行安装 Python3。

2.我们管理包都是用的 pipx,会把工具安装到 pipx 管理的虚拟环境中:

python3 -m pip install --user pipx
python3 -m pipx ensurepath

3.使用 pipx 安装 Jupyter Notebook

pipx install notebook

4.检查是否安装成功

pipx list


这样就算安装好了

5.然后在本地安装 Deno 环境

curl -fsSL https://deno.land/install.sh | sh

6.安装完 Deno 环境之后,使用 Deno 为 Jupyter NoteBook 配置 Kernel(内核)

deno jupyter --install

正常来说会显示:

这就是配置成功的内容啦

7.启动,运行以下命令启动 NoteBook

jupyter-notebook

这样以来就可以自动打开一个网页,我们就可以正常使用 NoteBook 了。

目前 Deno Kernel 的 Jupyter NoteBook 不支持代码提示,所以我们可以安装 VScode 插件,使用 VScode 去编辑运行

记得在右上角切换 Kernel 为 Deno,如果切换遭遇了问题,可以阅读参考文档

不过目前在 VScode 上的体验也有点问题就是了,会因为识别不了 Deno 的引用在代码上显示出错误的样式,但是不影响正常的运行,无视飘红即可。

Deno 依赖管理

Deno 是直接从远程拉取依赖的,自带缓存机制,而不需要本地安装。

比方说我们需要lodash库,不需要像 Nodejs 一样使用 npm/yarn 之类的来安装依赖,而是可以直接从远程导入:

import _ from "npm:/lodash"

如果需要锁定版本:

import _ from "npm:/lodash@4.17.21"

这个命令就会让 deno 从 npm 找到对应的 lodash 包,然后引入,咱们就可以在另一个代码块里使用引入的_

const a = _.random(0,5);
a

当然啦,我们每次都这样使用完整的链接引入就会比较麻烦,所以我们可以在顶层创建一个文件deno.json来给设置别名

在跟 NoteBook 文件同级创建一个deno.json文件

  • 1-test-notebook.ipynb
  • deno.json

然后在 json 中填写:

{
  "imports": {
    "lodash": "npm:/lodash@4.17.21"
  },
  "deno.enable": true
}

这里比较容易 get 到,就是将"npm:/lodash@4.17.21"的别名设置为lodash,其中"deno.enable": true是如果你用了 deno 的 vscode 插件,可以让它识别到,并且对 deno 在 vscode 的体验进行一些优化。

deno install

使用上述指令进行依赖安装,以及之后更新了json的内容都要跑一下这个指令,确保依赖在缓存里存在,就可以运行项目了

设置完毕之后,我们就可以使用别名在 deno 中引入lodash

要额外注意,如果更新了deno.json,需要重启一下 NoteBook 的内核才可以生效,就是我图里标出来的位置。

最后修改:2024 年 12 月 13 日
收款不要了,给孩子补充点点赞数吧