一起干AIGC全栈开发!泰裤啦!
前言
AIGC,全称Artificial Intelligence Generated Content,中文译为人工智能生成内容,是利用人工智能技术来自动生成文本、图像、音乐、视频、3D交互内容等多种形式内容的一种方法。它是继PGC(专业生成内容)和UGC(用户生成内容)之后的新型内容创作方式,代表了内容创作领域的一项重大变革。
AIGC涉及到一系列先进的人工智能技术,包括但不限于生成对抗网络(GANs)、CLIP、Transformer、Diffusion模型、预训练模型、多模态技术以及各种生成算法等。这些技术的融合与创新,使得AI系统能够基于大量的已有数据学习并识别模式,进而生成新的、创造性内容,并且能够在一定程度上理解和适应语言、图像、视频、音频等多种媒介形式,实现多模态内容的生成。
今天就让我们初识AIGC,一起领略它的魅力吧!
1.初始化
我们首先创建一个comment文件夹,在项目终端输入 npm init -y 指令
npm init -y
是一个在Node.js项目中常用的命令,用于快速初始化一个新的npm(Node包管理器)项目。这个命令会执行以下操作:
- 创建
package.json
文件:在当前目录下自动创建一个package.json
文件,这个文件是Node.js项目的配置文件,用于存储项目的元数据(如名称、版本、描述、作者等)和项目依赖关系。 - 默认值:使用
-y
或--yes
选项,意味着你会接受所有npm初始化过程中的默认设置。没有这个选项时,npm会通过一系列提示让你手动填写项目信息,而加上-y
后,npm会使用默认设置直接生成文件,跳过交互式提问环节,这对于快速创建原型或测试项目非常有用。
例如,默认设置可能包括:
name
: 项目目录名version
: 默认为1.0.0
description
: 空main
:index.js
scripts
: 只包含基本的脚本模板keywords
: 空数组author
: 用户的系统用户名license
: 默认为ISC
2.引入openai库
当你在命令行中输入 npm i openai
并执行这个命令时,npm(Node包管理器)会做以下几件事情来“引入”node_modules
:
- 搜索包: npm 首先会在npm注册中心搜索名为
openai
的包。如果找到了对应的包,它会获取该包的元数据,包括版本信息、依赖关系等。 - 下载包及依赖: 接着,npm 会下载
openai
包以及该包所依赖的所有其他包。这些下载的包都会被组织存放在项目的node_modules
目录下。 - 解析依赖: 在下载过程中,npm 会解析包之间的依赖关系,确保所有必要的依赖都被安装,并处理版本兼容性问题,以避免版本冲突。
- 链接依赖: 安装完成后,npm 会在
node_modules
目录内创建一个或多个层级结构,将主包和其依赖项分别放置在相应的目录下。这样,Node.js在执行时能够根据require
语句递归地查找依赖。 - 生成或更新 package-lock.json: npm 会生成或更新
package-lock.json
文件,记录确切安装的软件包版本和依赖树,以便将来能复现相同的安装环境。
简而言之,npm i openai
命令不仅下载并安装了名为 openai
的包(如果存在的话),还处理了它的所有依赖,并将它们全部组织在 node_modules
文件夹内,这是Node.js项目用来存储依赖的标准位置。这样做保证了项目的可移植性和依赖的隔离性,即不同项目可以依赖不同版本的相同包
接下来,我们的package.json将会是这个样子
这就显示我们安装成功啦!当然我们也会多以下文件/文件夹
3.引入一个名为openai
的模块
const OpenAi = require('openai')
在Node.js环境中,const OpenAi = require('openai')
这行代码的作用是从openai
模块导入一个对象,并将其赋值给常量OpenAi
。这里假设openai
是一个已经安装在你的项目中的npm包,它通常用于与OpenAI的API进行交互,比如访问GPT系列的语言模型、图像生成服务等。
通过这种方式导入后,你可以通过OpenAi
这个对象来调用OpenAI API提供的各种方法和功能。例如,初始化客户端、发送文本到模型请求生成文本响应、管理引擎、处理文件等操作。使用这个模块,开发者可以构建集成OpenAI服务的应用程序,实现自然语言处理、内容创建、智能建议等多种功能。
4.实例化
const client = new OpenAi({
// proxy 代理
api_key: process.env.OPENAI_API_KEY,
baseURL: 'https://api.chatanywhere.tech/v1'
})
因为这段代码稍微难理解,所以我们用通俗的语言讲解一下:
- api_key(API密钥) :想象一下,api_key就像是你家的门禁密码。当你住在一栋大楼里,想要进入楼内的时候,你需要输入正确的密码,门才会为你打开。同样地,在互联网的世界里,很多服务(比如云服务、API接口等)也需要验证你的身份,确保只有获得授权的人才能使用它们的功能。api_key就是这样的一个验证工具,它是一个特殊的、通常是随机生成的字符串,用来告诉服务器:“嘿,我是已经得到允许来使用你服务的那个用户。”这样,服务器就能识别并验证你的请求,而不会错把别人当成是你。
- baseURL(基础URL) :baseURL可以类比为一个大厦的地址。假设你想去朋友家玩,首先你需要知道他们家的大楼在哪里,这个地址就相当于baseURL。在编程中,当你想和某个API(比如天气预报API、地图服务API等)交流时,你需要知道这个API的“家”在哪里,也就是它的网络地址。baseURL就是这个初始的、最基本的地址部分,后面可能会加上具体的房间号(也就是API的端点endpoint),这样才能准确找到你想访问的具体服务。
5.关于需要隐藏于外界的密钥和node_modules
我们的密钥和node_modules一个由于机密性,还有一个由于内容太多并且可以让用户重新下载,因此都不必上传。
5.1 密钥
api_key: process.env.OPENAI_API_KEY
这里我们本来是要输入一个具体获得的密钥(从github上),但是涉及机密性所以我们不予提交,因此我们新建一个.env文件,输入OPENAI_API_KEY=你拿到的openai密钥,然后 api_key: process.env.OPENAI_API_KEY在对象中,最后在
文件中输入.env即可。
那么为什么我们可以这样子操作呢?
我们同样要先引入一个库 npm i dotenv
这个时候的依赖
然后在项目首行输入
require('dotenv').config()
require('dotenv').config()
是一个Node.js中用来加载环境变量的函数,它来自于dotenv
这个npm包。这个函数的主要用途是从一个名为.env
的文件中读取键值对,并将它们设置为Node.js进程的环境变量。
.env
文件通常包含敏感信息和配置变量,如API密钥、数据库URLs、密码等,这些信息不适合直接写在源代码中。这样做可以保持代码库的清洁和安全,同时允许不同的环境(例如开发、测试、生产)使用不同的配置。
当你的应用启动时,通过调用require('dotenv').config()
,它会查找当前目录下的.env
文件,读取其中的内容,然后设置对应的环境变量。
只有这样我们的
api_key: process.env.OPENAI_API_KEY
代码才能发挥作用,就是查找隐藏目录下的密钥。
5.2node_modules
为什么node_modules可以让看不见的用户自行恢复呢?
因为我们在项目描述文件里已经有了依赖。
不信我们可以删除node_modules,然后终端窗口输入 npm i就可以恢复了。
6.开始使用AI
6.1准备工作
let prompt = `
判断一下用户的评论情感上是正面的还是负面的
评论:买的银色版真的好看,一天就到了,晚上就开始拿起来玩系统很丝滑流畅,华为一如既往的好品质
情感:正面
评论:随意降价,不与保价,服务态度差
情感:负面
`
- 首先定义了一个字符串
prompt
,里面包含了两个示例评论及其对应的情感标签(正面或负面),作为演示如何构造请求和期望的输出格式。
let myPrompt = `
${prompt}
评论:实话说,iphone越来越没有创新了,你买我不推荐,散了
情感:
`
- 接着,定义了
myPrompt
字符串,这是实际要发送给AI模型处理的评论内容,其中情感标签留空,目的是让AI模型判断这条评论的情感倾向。
const chatCompletion = await client.chat.completions.create({
// 聊天的上下文 多轮
messages: [{ role: 'user', content: myPrompt }],
// 模型
model: 'gpt-3.5-turbo',
n: 1
})
-
通过一个名为
client
的对象(这里是之前初始化好的OpenAI API客户端实例)调用.chat.completions.create(...)
方法。这个方法用于与OpenAI的聊天模型交互,获取模型对于提供的消息的响应。 -
请求体中指定了几个关键参数:
messages
: 是一个对象数组,每个对象代表一次消息交互。这里只有一个对象,表示用户(role: 'user')发送了一条内容为myPrompt
的消息。model
: 指定使用的模型版本,这里是gpt-3.5-turbo
,是OpenAI的一个较新且功能强大的聊天模型。n
: 表示需要生成的响应数量,这里设置为1,即只需要模型生成一个回答。
6.2执行
console.log(chatCompletion.choices[0])
获取并打印结果: 使用await
关键字等待API调用完成,然后从返回的chatCompletion
对象中提取第一个(也是唯一一个,因为n: 1
)选择(choices
)的响应内容,并打印出来。这个响应理论上会包含AI模型对于myPrompt
中评论的情感倾向判断。
我们再输入这句话,然后将全部内容封装于异步函数( 异步函数定义: async function main() {...}
定义了一个名为main
的异步函数。异步函数可以让JavaScript在等待某些操作(比如网络请求)完成时,不会阻塞其他任务的执行。)之中,最后调用函数,就可以看见这样子的结果。
当你可以拿到这个结果的时候,恭喜你,已经是一个初级的AIGC全栈工程师啦!
7.完整代码
// 引入本地(node_mdoues)openai 依赖node-fetch等
// package.json 项目描述文件 dependencies
// 前端 + 后端 + ai
// 类 require 关键字
//AI全栈开发
// prompt -> GPT-AI-FREE -> openai
// 进程的环境变量
// 系统环境变量
//
require('dotenv').config()
const OpenAi = require('openai')
// 系统环境变量
// console.log(process.env)
// 实例化
const client = new OpenAi({
// proxy 代理
api_key: process.env.OPENAI_API_KEY,
baseURL: 'https://api.chatanywhere.tech/v1'
})
async function main() {
let prompt = `
判断一下用户的评论情感上是正面的还是负面的
评论:买的银色版真的好看,一天就到了,晚上就开始拿起来玩系统很丝滑流畅,华为一如既往的好品质
情感:正面
评论:随意降价,不与保价,服务态度差
情感:负面
`
let myPrompt = `
${prompt}
评论:实话说,iphone越来越没有创新了,你买我不推荐,散了
情感:
`
// client openai实例 chat 聊天的方式
// openai 生成正面或者负面 ,llm大模型来完成
// ai 自然语言处理 gc 生成内容
const chatCompletion = await client.chat.completions.create({
// 聊天的上下文 多轮
messages: [{ role: 'user', content: myPrompt }],
// 模型
model: 'gpt-3.5-turbo',
n: 1
})
console.log(chatCompletion.choices[0]);
}
main()
转载自:https://juejin.cn/post/7369582512235970586