一、AI狂奔的两年——从文本到图片视频
AI应用在这两年几乎是每年一个里程碑,每几个月就诞生一个爆款产品,在22、23年主流的是文本生成,那时候很多有图像生成功能的产品都是短暂体验就要付费,到了24年各包括图片等文件格式百花齐放,算力资源过剩和AI初创企业竞争这一局面又利好我们普通使用者。
于是今天我来分享一个实现ai生成文件的思路供大家参考【有很多我不知道的方式,也请谅解】
二、为了实现AI全链路工作流,我做了这些思考
现在市面上有很多AI提升效率的工具,ai生成思维导图、演示文稿(ppt)、原型设计稿、Word文档、Excel表格、代码、论文查重,甚至直接做个网站app部署发布上去,这样带来巨大生产力的背后是无数公司降本增效,大量员工被毕业,所以在未来,如果你不会用AI实现生产力的提升,或者懂得这背后的原理去做操纵它的人,那么很容易会被时代的浪潮吞噬。
三、技术 “内核” 曝光
其实在做这些生成工具的时候,我们肯定会去想怎么去搭建这么一条生产链路,但其实整个整个过程很简单。
那就是——用户在输入框输入需求,服务端将传输过来的需求文字喂给AI,喂的同时做提示词处理,规范化输出内容,然后调用各种生产服务实现规范化内容到预期的形状(你想要的各种内容形式)
四、效率飞升的魔法时刻
我来实现一下用上面的过程生成excel文件
(1) 🧮 技术选型
- AI服务调用国内最轻量目前比较火的Deepseek的api
- 服务端用koa做个单文件服务(不做接口等各种设计了,后续涉及到精确输出内容再做架构)
- 展示用html单文件做交互演示,不可能只给人看json返回
(2)🌟 服务端拆解
好的,我们来逐段分析这段代码,并将其拆解为几个关键部分:
1. 导入模块
import Koa from 'koa';
import bodyParser from 'koa-bodyparser';
import ExcelJS from 'exceljs';
import OpenAI from 'openai';
import serve from 'koa-static';
import cors from '@koa/cors';
import path from 'path';
import { fileURLToPath } from 'url';
- Koa: 用于创建 Web 服务器。
- koa-bodyparser: 用于解析 HTTP 请求中的 body。
- ExcelJS: 用于创建 Excel 文件,作用是sdk,实现的核心。
- OpenAI: 用于调用 OpenAI API,生成文本。
- koa-static: 用于提供静态文件服务。
- cors: 用于配置跨域资源共享。
- path 和 fileURLToPath: 用于处理文件路径。
2. 创建 Koa 应用
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const app = new Koa();
app.use(cors());
app.use(bodyParser());
app.use(serve(path.join(__dirname, '..')));
- __dirname: 获取当前文件的目录。
- app.use(cors()): 允许跨域请求。
- app.use(bodyParser()): 解析请求体。
- app.use(serve(...)): 提供静态文件服务,这里应该是用于提供前端页面。
3. 初始化 OpenAI
const openai = new OpenAI({
baseURL: 'https://api.deepseek.com',
apiKey: '你的deepseek apikey',
});
- 创建一个 OpenAI 的实例,用于调用其 API。
4. 定义路由处理函数
app.use(async (ctx) => {
// ...
});
- 定义了一个中间件函数,用于处理所有的请求。
5. 处理 /preview-data 和 /generate-excel 请求
/generate-excel:- 接收用户输入的 prompt。
- 调用 OpenAI API,生成 JSON 模板。
- 清理 JSON 字符串。
- 解析 JSON 模板,创建 Excel 工作簿。
- 将 Excel 工作簿转换为 Buffer,作为响应返回。
if (ctx.path === '/generate-excel' && ctx.method === 'POST') {
const { prompt } = ctx.request.body as { prompt: string };
const completion = await openai.chat.completions.create({
messages: [
{
role: 'system',
content:
'你是一个经验丰富的 Excel 生成器。用户会给你一个生成 Excel 的需求,你需要根据需求返回一个 JSON 格式的模板。JSON 模板的结构如下:\n' +
'{\n' +
' "columns": [{"header": "列标题1", "key": "key1"}, ...],\n' +
' "data": [{"key1": "值1", "key2": "值2"}, ...]\n' +
'}\n' +
'只要纯json数据回应,不要包含其他任何内容。\n',
},
{
role: 'user',
content: prompt,
},
],
model: 'deepseek-chat',
temperature: 0.0,
});
const cleanContent = cleanJsonString(completion.choices[0].message.content);
const jsonTemplate = JSON.parse(cleanContent);
const workbook = new ExcelJS.Workbook();
const worksheet = workbook.addWorksheet('Sheet 1');
worksheet.columns = jsonTemplate.columns;
worksheet.addRows(jsonTemplate.data);
const buffer = await workbook.xlsx.writeBuffer();
ctx.set(
'Content-Type',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
);
ctx.set('Content-Disposition', 'attachment; filename=output.xlsx');
ctx.body = buffer;
}
先来讲下excel的生成
- 创建workbook并添加sheet
- 创建columns
- 将格式化的内容作为数据填充到workbook里面
而生成是在messages中给予模型人物设定和输出模板要求,我这里按照exceljs的生成api做了简单的规范化输出
你是一个经验丰富的 Excel 生成器。用户会给你一个生成 Excel 的需求,你需要根据需求返回一个 JSON 格式的模板。JSON 模板的结构如下:\n' + '{\n' + ' "columns": [{"header": "列标题1", "key": "key1"}, ...],\n' + ' "data": [{"key1": "值1", "key2": "值2"}, ...]\n' + '}\n' + '只要纯json数据回应,不要包含其他任何内容。,
/preview-data: 预览请求- 定制ai设定和输出风格
- 接收用户输入的 prompt。
- 调用 OpenAI API,生成 JSON 模板。
- 清理 JSON 字符串,去除多余字符。
- 将 JSON 模板直接返回给客户端做展示。
if (ctx.path === '/preview-data' && ctx.method === 'POST') {
//前面同上
ctx.body = jsonTemplate;
}
6. 清理 JSON 字符串函数
const cleanJsonString = (str: string) => {
// 移除 json 前后的反引号和换行
str = str.replace(/^`*|`*$/g, '').trim();
// 移除可能的 json 标记
str = str.replace(/```json\s*|\s*```/g, '');
return str;
};
- 用于去除 JSON 字符串中的多余字符,确保
JSON.parse能正确解析。
7. 启动服务器
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
- 启动 Koa 服务器,监听 3000 端口。
(3)📈 展示页面
发起请求预览数据
发起请求下载excel文件
五、AI时代刚刚开始
上面的内容是我结合最近的一些思考和想做的内容形成的,也算是了却心愿一桩,未来AI的应用一定会更加深入,渗透到生活实体的方方面面,也希望我们能多多思考,实现人机共赢的和谐局面。