一起干AIGC全栈开发!泰裤啦!

发布于 6 个月前

前言

AIGC(Artificial Intelligence Generated Content),简称AI生成内容,是一种利用人工智能技术自动生成文本、图像、音乐、视频等多种形式内容的方法。它是继PGC(专业生成内容)和UGC(用户生成内容)之后的新型内容创作方式,代表了内容创作领域的一项重大变革。

AIGC涉及一系列先进的人工智能技术,包括但不限于生成对抗网络(GANs)、CLIP、Transformer、Diffusion模型、预训练模型、多模态技术以及各种生成算法等。这些技术的融合与创新,使得AI系统能够基于大量的已有数据学习并识别模式,进而生成新的、富有创造性的内容,并且能够在一定程度上理解和适应语言、图像、视频、音频等多种媒介形式,实现多模态内容的生成。

今天就让我们初识AIGC,一起领略它的魅力吧!

1. 初始化

我们首先创建一个 `comment` 文件夹,在项目终端输入 `npm init -y` 指令

- `npm init -y` 是在Node.js项目中常用的命令,用于快速初始化一个新的 npm 项目。这个命令会执行以下操作:

1. 创建 `package.json` 文件:在当前目录下自动创建一个 `package.json` 文件,这是 Node.js 项目的配置文件,用于存储项目的元数据(如名称、版本、描述、作者等)和项目依赖关系。

2. 默认值:

- 使用 `-y` 或 `--yes` 参数,意味着你会接受所有 npm 初始化过程中的默认设置。如果没有这个选项时,npm 会通过一系列提示让你手动填写项目信息,而加上 `-y` 后,npm 会使用默认设置直接生成文件,跳过交互式提问环节,这对于快速创建原型或测试项目非常有用。

例如,默认设置可能包括:

```json

{

"name": "project-name",

"version": "1.0.0",

"description": "",

"main": "index.js",

"scripts": {

"start": "node index.js"

},

"keywords": [],

"author": "user",

"license": "ISC"

}

```

2. 引入 openai 库

当你在命令行中输入 `npm i openai` 并执行这个命令时,npm(Node包管理器)会做以下几件事情来“引入” node_modules:

1. 搜索包: npm 首先会在 npm 注册中心搜索名为 `openai` 的包。如果找到了对应的包,它会获取该包的元数据,包括版本信息、依赖关系等。

2. 下载包及依赖:接着,npm 会下载 `openai` 包以及该包所依赖的所有其他包。这些下载的包都会被组织存放在项目的 node_modules 目录下。

3. 解析依赖:在下载过程中,npm 会解析包之间的依赖关系,确保所有必要的依赖都被安装,并处理版本兼容性问题,以避免版本冲突。

4. 链接依赖:安装完成后,npm 会在 node_modules 目录内创建一个或多个层级结构,将主包和其依赖项分别放置在相应的目录下。这样,Node.js 在执行时能够根据 require 语句递归地查找依赖。

简而言之,`npm i openai` 命令不仅下载并安装了名为 `openai` 的包(如果存在的话),还处理了它的所有依赖,并将它们全部组织在 node_modules 文件夹内,这是 Node.js 项目用来存储依赖的标准位置。这样做保证了项目的可移植性和依赖的隔离性,即不同项目可以依赖不同版本的相同包

这就显示我们安装成功啦!当然我们也会多以下文件/文件夹

3. 引入名为 `openai` 的模块

```javascript

const OpenAi = require('openai')

```

在 Node.js 环境中,这行代码的作用是从 `openai` 模块导入一个对象,并将其赋值给常量 `OpenAi`。假设 `openai` 是已经安装在你的项目中的 npm 包,用于与 OpenAI 的 API 进行交互,例如访问 GPT 系列的语言模型或图像生成服务等。

通过这种方式导入后,你可以使用 `OpenAi` 对象来调用 OpenAI API 提供的各种方法和功能。例如,初始化客户端、发送文本到模型请求生成文本响应、管理引擎、处理文件等操作。

4. 实例化

```javascript

const client = new OpenAi({

// proxy 代理

api_key: process.env.OPENAI_API_KEY,

baseURL: 'https://api.chatanywhere.tech/v1'

})

```

因为这段代码稍微难理解,我们用通俗的语言讲解一下:

- `api_key`:想象一下,`api_key` 类似于你家的门禁密码。当你住在一栋大楼里想要进入楼内的时候,你需要输入正确的密码,门才会为你打开。同样地,在互联网的世界里很多服务也需要验证你的身份,确保只有获得授权的人才能使用它们的功能。`api_key` 就是这样的一个验证工具,它是一个特殊的、通常是随机生成的字符串,用来告诉服务器“我是已经得到允许来使用你服务的那个用户”。这样,服务器就能识别并验证你的请求,而不会错把别人当成是你。

- `baseURL`:`baseURL` 可以类比为一个大厦的地址。假设你想去朋友家玩,首先你需要知道他们家的大楼在哪里,这个地址就相当于 `baseURL`。在编程中当你想与某个 API(比如天气预报 API、地图服务 API 等)交流时,你需要知道这个 API 的“家”在哪里,也就是它的网络地址。`baseURL` 就是这个初始的、最基本的地址部分,后面可能会加上具体的房间号(即 API 的端点 endpoint),这样才能准确找到你想访问的具体服务。

5. 关于需要隐藏于外界的密钥和 `node_modules`

- 我们的密钥和 `node_modules` 一个由于机密性,另一个由于内容太多并且可以让用户重新下载,因此都不必上传。

在项目中需要设置环境变量时,通常会使用`dotenv`这个Node.js的包来自动处理`.env`文件中的内容。首先,我们需要安装`dotenv`:

```bash

npm install dotenv

```

然后,在项目的根目录下创建一个名为`.env`的文件,并将包含环境变量的内容写入该文件中。例如:

```plaintext

DB_HOST=localhost

DB_USER=root

DB_PASSWORD=password

DB_NAME=mydatabase

```

在使用这些环境变量之前,我们需要先引入`dotenv`包并加载`.env`文件中的内容到程序中:

```javascript

require('dotenv').config();

```

这样,程序就可以通过`process.env`对象来访问和操作这些环境变量了。例如:

```javascript

const dbHost = process.env.DB_HOST;

console.log(`Database host: ${dbHost}`);

```

首先在项目的首行输入:

```javascript

require('dotenv').config()

```

`dotenv` 是 Node.js 中用来加载环境变量的一个 npm 包。这个函数的主要用途是从一个名为 `env` 的文件中读取键值对,并将它们设置为 Node.js 进程的环境变量。

.env 文件通常包含敏感信息和配置变量,如 API 密钥、数据库 URLs 和密码等,这些信息不适合直接写在源代码中。这样做可以保持代码库的清洁和安全,同时允许不同的环境(例如开发、测试、生产)使用不同的配置。

当你的应用启动时,通过调用 `require('dotenv').config()`,它会查找当前目录下的 `.env` 文件,读取其中的内容,然后设置对应的环境变量。只有这样我们的

```javascript

api_key: process.env.OPENAI_API_KEY

```

代码才能发挥作用,就是查找隐藏目录下的密钥。

5.2 node_modules

为什么 `node_modules` 能够让看不见的用户自行恢复呢?

因为我们在项目描述文件里已经有了依赖。

我们无法通过删除`node_modules`来恢复丢失的npm包。要恢复这些包,您需要使用以下命令:

```bash

npm install --save

```

请将``替换为您想要恢复的npm包的具体名称。

6. 开始使用AI

6.1 准备工作

首先定义一个字符串`prompt`,用于演示如何构建请求和期望的输出格式。这个字符串包含了两个示例评论及其对应的情感标签(正面或负面):

```javascript

let prompt = `

判断一下用户的评论情感上是正面的还是负面的

评论:买的银色版真的好看,一天就到了,晚上就开始拿起来玩系统很丝滑流畅,华为一如既往的好品质

情感:正面

评论:随意降价,不与保价,服务态度差

情感:负面

`;

```

接下来,定义一个名为`myPrompt`的字符串,包含实际要发送给AI模型处理的评论内容,其中情感标签留空,以便让AI模型判断这条评论的情感倾向:

```javascript

let myPrompt = `

${prompt}

评论:实话说,iphone越来越没有创新了,你买我不推荐,散了

情感:

`;

```

然后通过一个名为`client`的对象(这里是之前初始化好的OpenAI API客户端实例)调用`chat.completions.create(...)`方法。这个方法用于与OpenAI的聊天模型交互,获取模型对于提供的消息的响应:

```javascript

const chatCompletion = await client.chat.completions.create({

messages: [

{ role: 'user', content: myPrompt },

{ role: 'assistant' },

],

model: 'gpt-3.5-turbo',

n: 1,

});

```

在调用方法时,我们指定了几个关键参数:

- `messages`: 包含一个对象数组,每个对象代表一次消息交互。这里只有一个对象,表示用户(role: 'user')发送了一条内容为`myPrompt`的消息。

- `model`: 指定使用的模型版本,这里是gpt-3.5-turbo,是OpenAI的一个较新且功能强大的聊天模型。

- `n`: 表示需要生成的响应数量,这里设置为1,即只需要模型生成一个回答。

6.2 执行

```javascript

console.log(chatCompletion.choices[0].message.content);

```

获取并打印结果:使用`await`关键字等待API调用完成,然后从返回的`chatCompletion`对象中提取第一个(也是唯一一个)选择(choices)的响应内容,并打印出来。这个响应理论上会包含AI模型对于`myPrompt`中评论的情感倾向判断。

通过上述步骤,您应该能够恢复丢失的npm包并获得AI对您的评论情感分析结果。

恭喜您,已经通过初级AIGC全栈工程师的认证!

在您的旅程中,我们见证了您从零开始的成长。现在,让我们一起进入更深层次的学习和探索。

### 完整代码

#### 引入本地(node_modules)openai 依赖

```javascript

// 导入本地(node_modules)openai 依赖

require('dotenv').config()

const OpenAi = require('openai')

```

#### 环境变量配置

```javascript

// 系统环境变量

console.log(process.env)

```

#### 实例化openai实例

```javascript

// 进程的环境变量

let client = new OpenAi({

// proxy 代理

api_key: process.env.OPENAI_API_KEY,

baseURL: 'https://api.chatanywhere.tech/v1'

})

```

#### 主函数

```javascript

async function main() {

let prompt = `

判断一下用户的评论情感上是正面的还是负面的

评论:买的银色版真的好看,一天就到了,晚上就开始拿起来玩系统很丝滑流畅,华为一如既往的好品质

情感:正面

评论:随意降价,不与保价,服务态度差

情感:负面

`;

let myPrompt = `

${prompt}

评论:实话说,iphone越来越没有创新了,你买我不推荐,散了

情感:

`;

// 使用openai生成正面或者负面

const chatCompletion = await client.chat.completions.create({

messages: [{ role: 'user', content: myPrompt }],

model: 'gpt-3.5-turbo',

n: 1

});

console.log(chatCompletion.choices[0]);

}

```

#### 主函数调用

```javascript

main();

```

### 总结

通过这段代码,您可以了解到如何使用openai库来完成自然语言处理任务。我们从环境变量的配置开始,到实例化openai实例,再到实际的交互过程,展示了从输入到输出的完整流程。

在这个过程中,您不仅学会了如何使用openai库来进行文本生成和情感分析,还了解了系统环境变量的配置以及代理设置的重要性。这些都为您的AIGC全栈工程师之路奠定了坚实的基础。

请记住,学习是一个不断进步的过程,无论您现在处于哪个阶段,都能通过不断实践来提升自己。继续保持好奇心和探索精神,相信您一定能在这个充满挑战与机遇的领域中取得更大的成就!

祝您学习愉快!