引言
在繁忙的复习周中,我终于挤出时间来巩固OpenAI的知识,并通过实践加深理解。
今天我们来用AI实现一个简单的数据采集案例。在这个过程中,我将分享一些与强大的AI工具学习的分析和心得。
AI数据分析结果图:
以下这张图展示了我们最终利用AI生成的有价值的销售报告:
源码如下
import OpenAI from "openai";
import dotenv from "dotenv";
// 加载环境变量配置文件
dotenv.config();
// 从环境变量中获取 OpenAI API 密钥和基础 URL
const {
OPENAI_API_KEY,
OPENAI_BASE_URL // 提供默认的基础 URL
} = process.env;
// 实例化 OpenAI 客户端
const client = new OpenAI({
apiKey: OPENAI_API_KEY,
baseURL: OPENAI_BASE_URL
});
// CSV 格式的销售数据
const saleData = `
销售数据:
日期,产品,销量,单价,总收入
2023-01-01,iPhone 13,100,6000,600000
2023-01-01,iPhone 14,50,8000,400000
2023-01-02,iPhone 13,80,6000,480000
2023-01-02,iPhone 14,60,8000,480000
2023-01-03,iPhone 13,120,5800,696000
2023-01-03,iPhone 14,80,7800,624000
`;
// 专业的销售数据分析 prompt 封装
const genSaleReport = async (saleData, query) => {
const prompt = `
You are an AI assistant that generates sales reports based on the given data.
Here is the sales data:\n ${saleData} \n\n
Please generate a report to answer the following questions: \n
${query}
`;
try {
let response = await client.chat.completions.create({
model: 'gpt-4o',
messages: [{ role: 'user', content: prompt }],
max_tokens: 1000, //按token 收费
temperature: 0
});
return response.choices[0].message.content;
} catch (error) {
console.error('Error generating report:', error);
throw error; // 或者返回一个默认值,根据需要调整
}
};
const main = async () => {
try {
// const query = `根据上述销售数据,计算iPhone 13和iPhone 14的总销量各是多少?`;
const query = `根据上述销售数据,可否制定接下来的产品售价?用中文回答`;
const report = await genSaleReport(saleData, query);
console.log(report);
} catch (error) {
console.error('Error in main function:', error);
}
};
// 执行主函数
main();
无论你现在是否完全理解上述内容,这都不是最重要的。重要的是,我们将一起踏上这段探索之旅,逐步揭开AI神秘的面纱。
开干
老调重弹
尽管这一步骤我已经重复过多次,但它的重要性不容忽视。对于初次接触的同学来说,了解这些基础知识是至关重要的。
如果你还不熟悉OpenAI的应用,可以参考这篇文章:OpenAI新篇章:一起探索多模态应用的无限可能!这是我的第一次openai
尝试,因此在基础方面可能会讲得比较详细。
为了使我们的后端项目能够顺利调用 OpenAI API,我们首先需要引入必要的依赖包。openai
包将帮助我们与 OpenAI 的服务进行交互,而 dotenv
则用来加载环境变量,确保敏感信息如 API 密钥的安全存储和便捷访问。
import OpenAI from "openai";
import dotenv from "dotenv";
// 加载环境变量配置文件
dotenv.config();
实例化 OpenAI 客户端
完成环境配置后,下一步便是创建一个 OpenAI 客户端实例。
这一步骤至关重要,它将作为我们与强大 AI 助手之间的桥梁,通过这个,所有请求和响应都能高效、安全地传递,实现了我们与AI的对话。
// 从环境变量中获取 OpenAI API 密钥和基础 URL
const {
OPENAI_API_KEY,
OPENAI_BASE_URL
} = process.env;
// 实例化 OpenAI 客户端
const client = new OpenAI({
apiKey: OPENAI_API_KEY,
baseURL: OPENAI_BASE_URL
});
这是一种新的写法,更加美观且符合现代编程的最佳实践。
对于程序员来说,这样不仅能显著提升代码的可读性,同时也便于未来的维护和扩展。良好的编码习惯有助于团队协作,提高工作效率。
封装专业接口函数
接下来,我们精心设计了一个名为 genSaleReport
的函数,这个函数不仅承载了向 AI 询问销售数据的任务,还巧妙地将问题转化为易于理解的报告形式。
通过这种方式,即使是对编程不太熟悉的同事也能轻松获取到他们关心的数据分析结果。
const genSaleReport = async (saleData, query) => {
const prompt = `
You are an AI assistant that generates sales reports based on the given data.
Here is the sales data:\n ${saleData} \n\n
Please generate a report to answer the following questions: \n
${query}
`;
try {
let response = await client.chat.completions.create({
model: 'gpt-4o',
messages: [{ role: 'user', content: prompt }],
max_tokens: 1000,
temperature: 0
});
return response.choices[0].message.content;
} catch (error) {
console.error('Error generating report:', error);
throw error; // 或者返回一个默认值,根据需要调整
}
};
看样子,这就是这里最难处理的部分了,看我如何细细道来。
首先就是定义了一个prompt
字符串,其中包含了用于生成报告的销售数据和查询条件,作为我们发给ai的一段消息,那我们是怎么发给它的呢?
往下看,response
就是我们调用的ai模型了,在这里,我们使用client.chat.completions.create
方法调用OpenAI的API,在这里面我们可以设置它具体是什么模型、消息的内容和其他配置参数,这里我调用的是gpt-4o
的模型(比较烧钱,但更好用、可以提供更为精确的回答),也可以使用gpt-3.5-turbo
(便宜)。
然后就可以设置我们调用的模型的参数了,首先就是 messages
就是我们传入的消息内容,然后就是max_tokens
它可以控制了AI生成文本的最大长度(多了要收费)、temperature
则影响了生成文本的随机性和创造性。
它在接收到我们的消息后,就会产生回答,我们从AI的响应中提取第一个选择的内容,并将其作为函数的返回值。这种设计既灵活又实用,可以根据不同的需求进行调整。!!
值得一提的是,异步编程和良好的错误处理机制是构建可靠应用程序的关键,通过实现健壮的异步逻辑和详细的错误捕获,我们可以确保程序即使在遇到问题时也能优雅地处理,并为用户提供有意义的反馈。这部分内容值得深入探索,以提升代码的质量和稳定性。
到此为止,我们已经完成了核心功能的开发。接下来的部分将更加简单,主要涉及如何启动整个流程以及展示最终结果,就是小菜了。
添加示例销售数据
这里,我准备了一组简化的销售数据。这些数据涵盖了日期、产品型号、销量、单价及总收入等关键指标。它们将成为我们接下来进行数据分析的基础素材。
// CSV 格式的销售数据
const saleData = `
销售数据:
日期,产品,销量,单价,总收入
2023-01-01,iPhone 13,100,6000,600000
2023-01-01,iPhone 14,50,8000,400000
2023-01-02,iPhone 13,80,6000,480000
2023-01-02,iPhone 14,60,8000,480000
2023-01-03,iPhone 13,120,5800,696000
2023-01-03,iPhone 14,80,7800,624000
`;
执行主函数
最后,我们通过调用 main
函数来启动整个流程,这段代码是将之前所有准备工作的成果汇聚在一起的关键步骤。
在这里,我们将通过query
来对gpt-4o进行提问,并期待从 AI 那里获得富有启发性的答案。
这段代码执行后,AI会基于提供的销售数据生成一份详细的报告,帮助我们理解当前的市场情况,并为未来的定价策略提供宝贵的建议。
const main = async () => {
try {
const query = `根据上述销售数据,可否制定接下来的产品售价?用中文回答`;
const report = await genSaleReport(saleData, query);
console.log(report);
} catch (error) {
console.error('Error in main function:', error);
}
};
// 执行主函数
main();
就这样,一个简单的openai
案例就这样水淋淋的实现了。
结语
结束了,动手试试看,有什么建议,欢迎留言交流。希望这篇文章不仅能够帮助你掌握AI赋能数据采集的基本原理,还能激发你的灵感,在未来的工作中更好地利用AI技术解决问题。