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

相关推荐
牧羊狼的狼5 小时前
React 中的 HOC 和 Hooks
前端·javascript·react.js·hooks·高阶组件·hoc
知识分享小能手6 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
luckys.one6 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
mCell7 小时前
JavaScript 的多线程能力:Worker
前端·javascript·浏览器
weixin_437830948 小时前
使用冰狐智能辅助实现图形列表自动点击:OCR与HID技术详解
开发语言·javascript·ocr
gnip9 小时前
JavaScript事件流
前端·javascript
小菜全9 小时前
基于若依框架Vue+TS导出PDF文件的方法
javascript·vue.js·前端框架·json
wow_DG9 小时前
【Vue2 ✨】Vue2 入门之旅 · 进阶篇(一):响应式原理
前端·javascript·vue.js
weixin_4569042710 小时前
Spring Boot 用户管理系统
java·spring boot·后端
weixin_4569042710 小时前
UserManagement.vue和Profile.vue详细解释
前端·javascript·vue.js