🎒 一、初体验:被课程设计逼出的黑科技
上周三凌晨两点,我和室友阿强蹲在宿舍走廊,盯着他的课程设计需求------"实现智能文本生成系统"。电脑屏幕上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'));
// 输出:登录两小时,选课五分钟 / 系统一抽搐,课表全变🐔...
🚨 五、防翻车指南:来自学长の经验
- 费用控制
在.env
设置用量警报:
bash
# 每日限额提醒
OPENAI_WARNING=5 # 超过5次调用发邮件提醒
- 内容过滤
自己加层防护网:
javascript
const safeGenerate = async (prompt) => {
const text = await getText(prompt);
if (text.includes('暴力') || text.includes('敏感词')) {
throw new Error('内容不安全!');
}
return text;
};
- 缓存优化
用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();