一起干AIGC全栈开发!泰裤啦!
前言
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
```
请将`
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全栈工程师之路奠定了坚实的基础。
请记住,学习是一个不断进步的过程,无论您现在处于哪个阶段,都能通过不断实践来提升自己。继续保持好奇心和探索精神,相信您一定能在这个充满挑战与机遇的领域中取得更大的成就!
祝您学习愉快!