手把手从零教你用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();

相关推荐
数据潜水员2 小时前
跨域,前端
node.js
maybe02092 小时前
前端表格数据导出Excel文件方法,列自适应宽度、增加合计、自定义文件名称
前端·javascript·excel·js·大前端
声声codeGrandMaster3 小时前
Django项目入门
后端·mysql·django
千里码aicood3 小时前
【2025】基于springboot+vue的医院在线问诊系统设计与实现(源码、万字文档、图文修改、调试答疑)
vue.js·spring boot·后端
yang_love10114 小时前
Spring Boot 中的 @ConditionalOnBean 注解详解
java·spring boot·后端
Pandaconda4 小时前
【后端开发面试题】每日 3 题(二十)
开发语言·分布式·后端·面试·消息队列·熔断·服务限流
锋小张4 小时前
a-date-picker 格式化日期格式 YYYY-MM-DD HH:mm:ss
前端·javascript·vue.js
鱼樱前端5 小时前
前端模块化开发标准全面解析--ESM获得绝杀
前端·javascript
鱼樱前端5 小时前
mysql事务、行锁、jdbc事务、数据库连接池
java·后端
yanlele5 小时前
前端面试第 75 期 - 前端质量问题专题(11 道题)
前端·javascript·面试