AI订制生成excel表格——用好提示词就行了

450 阅读5分钟

一、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: 用于配置跨域资源共享。
  • pathfileURLToPath: 用于处理文件路径。

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

deepseek官网

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的应用一定会更加深入,渗透到生活实体的方方面面,也希望我们能多多思考,实现人机共赢的和谐局面。