在开发基于LLM的应用时,遵循一定的项目结构和流程可以提升开发效率和代码质量。以下是一个简单的项目,接下来我将从0开始手把手带你搭建这样一个LLM项目。
import OpenAI from "openai";
import dotenv from "dotenv";
dotenv.config()
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL:process.env.OPENAI_BASE_URL
})
const getCompletion = async (prompt, model="gpt-4o") => {
const messages = [{
role: 'user',
content: prompt
}];
const response = await client.chat.completions.create({
model: model,
messages: messages,
temperature: 0.9
})
return response.choices[0].message.content
}
const main = async () => {
const prod_review = `
我女儿生日时买了这个熊猫毛绒玩具,她很喜欢,到处都带着。
它柔软、超级可爱,脸看起来很友好。
不过,相对于我付的价格来说,它有点小。
我想,同样的价格,也许还有其他更大的选择。
它比预期早到了一天,所以我有机会自己玩了一会儿,然后才把它送给她。
`;
const prompt =`
你的任务是生成来自电子商务网站的产品评论有关时间运输的简短摘要。
以便向运输部门提供相关时间的反馈。
总结下面用三个反引号分隔的产品评论,最多30字。
只关注任何提及产品运输方面的内容
评论:'''${prod_review}'''
`;
const response = await getCompletion(prompt)
console.log(response);
}
main()
1. 初始化项目
npm init -y
这条命令会创建一个新的Node.js项目,并自动生成package.json
文件,其中包含了项目的初始配置。
1.1 安装依赖
- 将所需的依赖项列表复制到
package.json
中的dependencies
部分。如OpenAI,dotenv… - 使用
npm i
命令安装这些依赖项。
1.2 运行后端项目
- 确保所有必要的依赖都已安装。
- 使用
node
命令启动你的后端项目。
2. 导入模块
import OpenAI from "openai";
import dotenv from "dotenv";
OpenAI
:这是 OpenAI 的官方客户端库,用于与 OpenAI 的 API 进行交互。通过这个库,我们可以轻松地发送请求并处理响应。dotenv
:这是一个用于加载环境变量的库,通常从.env
文件中加载。这样可以避免在代码中硬编码敏感信息,如 API 密钥。
3. 加载环境变量
dotenv.config();
dotenv.config()
:这个方法会读取项目根目录下的.env
文件,并将其中的环境变量加载到process.env
对象中。例如,如果你的.env
文件中有OPENAI_API_KEY=your_api_key
,那么process.env.OPENAI_API_KEY
就会等于your_api_key
。
4. 初始化 OpenAI 客户端
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: process.env.OPENAI_BASE_URL
});
apiKey
:从环境变量中获取 OpenAI API 的密钥。这是调用 API 所必需的认证信息。baseURL
:从环境变量中获取 OpenAI API 的基础 URL。默认情况下,OpenAI 的基础 URL 是https://api.openai.com/v1
,但有时你可能需要使用自定义的 URL。
5. 定义 getCompletion
函数
const getCompletion = async (prompt, model = "gpt-4o") => {
const messages = [{
role: 'user',
content: prompt
}];
const response = await client.chat.completions.create({
model: model,
messages: messages,
temperature: 0.9
});
return response.choices[0].message.content;
};
5.1 函数定义
const getCompletion = async (prompt, model="gpt-4o") => {
-
这里定义了一个异步函数
getCompletion
,它接受两个参数:prompt
:这是用户提供的文本提示,模型将基于这个提示生成响应。model
:这是模型的名字,默认值为"gpt-4o"
。这个参数指定了将要使用的语言模型。
5.2 消息构建
const messages = [{
role: 'user',
content: prompt
}];
-
这里创建了一个消息数组
messages
,其中包含一个对象,该对象模拟了用户的提问。role: 'user'
表示这是一个来自用户的消息。content: prompt
是消息的具体内容,即用户输入的提示。
5.3 调用API
const response = await client.chat.completions.create({
model: model,
messages: messages,
temperature: 0.9
});
-
这行代码使用
await
关键字等待client.chat.completions.create
方法返回结果。client
对象应该是预先配置好的,用于与特定的语言模型API进行通信。model: model
指定了要使用的模型名称。messages: messages
将之前构建的消息数组传递给API,作为请求的一部分。temperature: 0.9
设置了生成文本的随机程度。随机值越高,生成的文本越随机;随机值越低,生成的文本越确定。这里的值为0.9
,意味着输出会有一定的创造性或多样性。
5.4 返回结果
return response.choices[0].message.content;
-
这行代码从API返回的响应中提取出第一个选择的文本内容,并将其作为函数的返回值。
response.choices
是一个数组,包含了API生成的所有可能的回答。[0]
选择了第一个元素,即最有可能的回应。.message.content
获取了这条消息的实际内容,也就是模型生成的文本。
6. 定义 main
函数
const main = async () => {
const prod_review = `
我女儿生日时买了这个熊猫毛绒玩具,她很喜欢,到处都带着。
它柔软、超级可爱,脸看起来很友好。
不过,相对于我付的价格来说,它有点小。
我想,同样的价格,也许还有其他更大的选择。
它比预期早到了一天,所以我有机会自己玩了一会儿,然后才把它送给她。
`;
const prompt = `
你的任务是生成来自电子商务网站的产品评论有关时间运输的简短摘要。
以便向运输部门提供相关时间的反馈。
总结下面用三个反引号分隔的产品评论,最多30字。
只关注任何提及产品运输方面的内容
评论:'''${prod_review}'''
`;
const response = await getCompletion(prompt);
console.log(response);
};
-
main
:这是一个异步函数,包含主要的业务逻辑。-
prod_review
:这是一个字符串,包含产品的评论。这个评论将作为输入,用于生成摘要。 -
prompt
:这是一个字符串,构建了一个提示,告诉模型生成一个关于运输时间的简短摘要。- 任务描述:明确告知模型任务的目标,即生成关于运输时间的简短摘要。
- 摘要要求:要求摘要最多30字,并且只关注运输时间相关的部分。
- 评论内容:使用三个反引号包裹的
prod_review
作为输入评论。
-
response
:调用getCompletion
函数,传入构建好的提示,并等待返回的摘要。 -
console.log(response)
:打印生成的摘要,以便查看结果。
-
7. 调用 main
函数
main();
main()
:调用main
函数,启动整个流程。由于main
是一个异步函数,调用它会立即返回一个 Promise,但不会阻塞主程序的执行。
8. 总结
综上所述,在构建AI应用时,特别是那些依赖于LLM的应用,设计出有效的prompt模板是至关重要的。一个好的prompt应该清晰地传达用户的需求,并且能够引导LLM产生准确、相关和有用的输出。
标签:const,小白必,messages,API,OpenAI,LLM,prompt,response,模板 From: https://blog.csdn.net/Cwayhome/article/details/143988854