如何使用Node.js基于Google GEMINI开发AI聊天机器人?
Node.js 集成 Google Gemini 开发聊天机器人分步指南
1. 前期准备
- 前往Google AI Studio创建项目并生成API密钥,密钥是调用Gemini接口的核心凭证
- 初始化Node.js项目:执行
npm init -y生成package.json文件 - 安装官方SDK:执行
npm install @google/generative-ai引入Gemini的Node.js开发包
2. 基础单轮聊天实现
以下是最基础的文本对话代码,可直接测试运行:
const { GoogleGenerativeAI } = require('@google/generative-ai'); // 替换为你自己的Gemini API密钥 const API_KEY = '你的API密钥'; const genAI = new GoogleGenerativeAI(API_KEY); // 初始化文本对话模型(gemini-pro适用于纯文本场景) const model = genAI.getGenerativeModel({ model: 'gemini-pro' }); // 单轮对话函数 async function getGeminiReply(userInput) { const chat = model.startChat({ history: [] }); const result = await chat.sendMessage(userInput); const response = await result.response; return response.text(); } // 测试调用 getGeminiReply('你好,我想用Node.js开发聊天机器人,给点实用建议') .then(reply => console.log('Gemini回复:', reply)) .catch(err => console.error('调用出错:', err));
3. 多轮对话功能实现
要支持上下文连贯的多轮对话,需要维护对话历史,代码示例如下:
const { GoogleGenerativeAI } = require('@google/generative-ai'); const API_KEY = '你的API密钥'; const genAI = new GoogleGenerativeAI(API_KEY); const model = genAI.getGenerativeModel({ model: 'gemini-pro' }); // 用于存储对话历史的数组 let chatHistory = []; // 多轮对话函数 async function multiTurnChat(userInput) { // 将历史记录格式化为模型要求的结构 const formattedHistory = chatHistory.map(item => ({ role: item.role, parts: [{ text: item.content }] })); const chat = model.startChat({ history: formattedHistory }); const result = await chat.sendMessage(userInput); const replyText = await result.response.text(); // 更新对话历史 chatHistory.push( { role: 'user', content: userInput }, { role: 'model', content: replyText } ); return replyText; } // 测试多轮对话 async function testMultiTurn() { let reply = await multiTurnChat('推荐一本适合Node.js入门的书籍'); console.log('Gemini回复:', reply); reply = await multiTurnChat('这本书完全零基础能看懂吗?'); console.log('Gemini回复:', reply); } testMultiTurn();
4. 进阶优化建议
- 参数自定义:调用
sendMessage时可传入generationConfig参数,控制回复的长度、随机性等:const result = await chat.sendMessage(userInput, { generationConfig: { maxOutputTokens: 512, // 限制最大输出字符数 temperature: 0.7, // 0-1区间,值越高回复越随机 topP: 0.9 // 控制词汇选择的多样性 } }); - 流式输出:如果需要实时展示回复内容,可使用流式调用:
async function streamReply(userInput) { const chat = model.startChat({ history: chatHistory }); const result = await chat.sendMessageStream(userInput); let fullReply = ''; for await (const chunk of result.stream) { const chunkText = chunk.text(); fullReply += chunkText; process.stdout.write(chunkText); // 实时输出每一段内容 } // 更新对话历史 chatHistory.push( { role: 'user', content: userInput }, { role: 'model', content: fullReply } ); } streamReply('用Node.js写一个简单的HTTP服务器示例'); - 会话持久化:将对话历史存储到MongoDB、Redis等数据库中,支持跨会话的上下文延续
- 错误处理:增加对API密钥失效、请求配额超限、网络异常等情况的捕获和处理逻辑
5. 常见问题排查
- API调用失败:检查密钥是否正确,确认Google AI Studio中已启用Gemini API权限
- 请求配额不足:免费版有调用次数限制,可在Google Cloud控制台查看并调整配额
- 模型选择错误:纯文本对话用
gemini-pro,需要支持图片输入的场景用gemini-pro-vision
内容的提问来源于stack exchange,提问作者sreelekshmi
相关产品推荐
相关产品推荐

