手把手从零教你用Node.js玩转AI生成:从课设到社团招新的实用指南


🎒 一、初体验:被课程设计逼出的黑科技

上周三凌晨两点,我和室友阿强蹲在宿舍走廊,盯着他的课程设计需求------"实现智能文本生成系统"。电脑屏幕上VSCode的光标不停闪烁,就像我们快撑不住的眼皮。

"要不试试OpenAI的接口?"我突然想起上周AI课的内容。于是,两个菜鸟程序员开启了奇妙之旅:

javascript 复制代码
// 初代版本:简单粗暴型
const getText = async (prompt) => {
  const res = await openai.chat.completions.create({
    messages: [{ role: 'user', content: prompt }],
    model: 'deepseek-chat'
  });
  return res.choices[0].message.content;
};

// 测试:让AI帮忙写请假条
const note = await getText('用学生语气写封感冒请假条,带点表情包风格');
console.log(note); 
// 输出:导员大大~ 😷今天脑袋像灌了铅,求批准续命一天!体温计已阵亡...

🛠️ 二、踩坑实录:那些年我们遇到的奇葩bug

1. 密钥失踪案

第一次运行时疯狂报错401,我们翻遍代码才发现:

bash 复制代码
# 错误示范:把密钥直接写死在代码里
const openai = new OpenAI({
  apiKey: 'sk-xxx...' // 第二天就被GitHub邮件警告了😅
});

正确姿势

javascript 复制代码
// 使用dotenv保护密钥
import 'dotenv/config'; 

const openai = new OpenAI({
  apiKey: process.env.OPENAI_KEY, // 安全!
  baseURL: process.env.API_BASE
});

2. 中文乱码怪

生成的诗总是出现火星文:

复制代码
æˆ'çš„ç¼ºå¸¸ä½ çŸ¥é"

解决方案

javascript 复制代码
// 添加编码声明
const res = await fetch(apiUrl, {
  headers: {
    'Content-Type': 'application/json; charset=utf-8' 
  }
});

🎨 三、创意开发:把AI变成校园生活助手

场景1:自动生成实验报告

javascript 复制代码
const reportPrompt = `
生成大学物理实验报告结论部分,要求:
1. 包含3个实验误差分析点
2. 用口语化中文表达
3. 最后加一句自我鼓励的话
`;

const report = await getText(reportPrompt);
console.log(report);
// 输出:本次测量值偏差主要来自...虽然数据有点皮,但下次我会更细心的!💪

场景2:社团招新文案生成器

javascript 复制代码
const clubs = [
  { name: '街舞社', style: '酷炫年轻化' },
  { name: '编程社', style: '技术宅幽默风' }
];

clubs.forEach(async club => {
  const ad = await getText(
    `写${club.name}招新文案,要求:${club.style},带emoji`
  );
  console.log(`${club.name}:`, ad);
});
// 输出:编程社👉键盘是我们的武器,bug是必经之路!一起用代码改变世界~ 🚀

📝 四、私藏技巧:让AI更懂你的小心思

1. 温度值调参玄学

javascript 复制代码
// 写正经报告用低温
await getText('生成实验报告摘要', { temperature: 0.2 });

// 写段子用高温
await getText('编程序员笑话', { temperature: 0.7 });

2. 限定词魔法

javascript 复制代码
// 好Prompt = 角色 + 要求 + 示例
const goodPrompt = `
你是个毒舌的校园贴吧大佬,用不超过20字吐槽选课系统:
示例:选课比抢演唱会票还刺激
生成3个新版本:
`;

const comments = await getText(goodPrompt);
console.log(comments.split('\n')); 
// 输出:登录两小时,选课五分钟 / 系统一抽搐,课表全变🐔...

🚨 五、防翻车指南:来自学长の经验

  1. 费用控制

.env设置用量警报:

bash 复制代码
# 每日限额提醒
OPENAI_WARNING=5 # 超过5次调用发邮件提醒
  1. 内容过滤

自己加层防护网:

javascript 复制代码
const safeGenerate = async (prompt) => {
  const text = await getText(prompt);
  if (text.includes('暴力') || text.includes('敏感词')) {
    throw new Error('内容不安全!');
  }
  return text;
};
  1. 缓存优化

用JSON存常用回复:

javascript 复制代码
// 缓存常见问答
const cache = {
  '请假条模板': '导员大大...',
  '实验报告开头': '本次实验旨在...'
};

📝 五、Node.jsAI接口调用模板

javascript 复制代码
import OpenAI from "openai";
import dotenv from "dotenv";
// 启动一个进程 process 后端
// env 对象 环境对象
// 进程是分配资源的最小单元
dotenv.config();
const openai = new OpenAI({
    apiKey:process.env.OPENAI_API_KEY,
    baseURL:process.env.OPENAI_API_BASE_URL
})

// 通用LLM 完成接口函数,复用
const getCompletion = async (prompt,model="deepseek-chat")=>{
    //OpenAI API 要求 messages 是一个数组。
    const messages=[{
        role:"user",
        content:prompt

    }]
    const response = await openai.chat.completions.create({
        model:model,
        messages:messages,
        // 0 表示最确定性,生成结果更一致;值越高,结果越随机
        temperature:0,
    });
    return response.choices[0].message.content;
}
const main =async ()=>{
    const prompt = "用贴吧语气的话骂我";

    const result = await getCompletion(prompt);  // 使用 await 等待结果
    console.log(result);  // 打印结果🌚

}

main();

相关推荐
IT_陈寒1 天前
JavaScript性能优化:5个V8引擎隐藏技巧让你的代码提速50%
前端·人工智能·后端
踢球的打工仔1 天前
jquery的基本使用(2)
前端·javascript·jquery
阿蒙Amon1 天前
JavaScript学习笔记:16.模块
javascript·笔记·学习
快乐就去敲代码@!1 天前
Boot Cache Star ⭐(高性能两级缓存系统)
spring boot·redis·后端·缓存·docker·压力测试
苏打水com1 天前
第十七篇:Day49-51 前端工程化进阶——从“手动”到“自动化”(对标职场“提效降本”需求)
前端·javascript·css·vue.js·html
我命由我123451 天前
Python Flask 开发 - Flask 路径参数类型(string、int、float、path、uuid)
服务器·开发语言·后端·python·flask·学习方法·python3.11
文心快码BaiduComate1 天前
Comate强力赋能:「趣绘像素岛」从体验泥潭到高性能可用的蜕变之路
前端·后端·程序员
『 时光荏苒 』1 天前
使用Vue播放M3U8视频流的方法
前端·javascript·vue.js
阿杆.1 天前
如何在 Spring Boot 中接入 Amazon ElastiCache
java·spring boot·后端
Apifox1 天前
Apifox + AI:接口自动化测试的智能化实践
前端·后端·测试