Ollama进阶:在Javascript(nodejs)前后端项目中集成Deepseek、QWQ大模型
在“Ollama进阶:在Python、Java、Go项目中集成Deepseek、QWQ大模型”一文中,我们讲到了在Java、Python、Go语言项目中整合Ollama中运行的Deepseek、QWQ、LLaMA、Mistral、Gemma本地大模型服务。本文则讨论在JavaScript(包括 Node.js 和前端浏览器环境)中整合Ollama本地大模型服务。
在JavaScript(包括 Node.js 和前端浏览器环境)中依然有以下两种方式可以调用Ollama服务:
RESTful API: Ollama 提供强大的 RESTful API,使开发者能够方便地与大型语言模型进行交互。通过这些 API,用户可以发送请求并接收模型生成的响应,应用于自然语言处理、文本生成等任务。
SDK: Ollama 官方提供了ollama.js用于在JavaScript(包括 Node.js 和前端浏览器环境)项目中快速整合Ollama本地大模型服务。ollama.js是基于Ollama REST API的封装。
综合来看,根据实际项目的需要,如果需要在JavaScript(包括 Node.js 和前端浏览器环境)项目中使用Ollama本地大模型服务,可以有以下5种方法:
1、使用 fetch() 直接调用 REST API
如果你想在 前端(浏览器) 或 Node.js 直接调用 Ollama,可以使用 fetch() 发送请求:
async function chatWithOllama(prompt) {
const response = await fetch('http://localhost:11434/api/generate', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'qwq', // 选择要使用的模型
prompt: prompt
})
});
const data = await response.json();
console.log(data.response); // 输出 Ollama 的回复
}
chatWithOllama("为什么天空是蓝色的?");
2、使用 axios 调用 REST API(适用于 Node.js 和前端)
如果你更喜欢使用 axios,可以这么做:
const axios = require('axios');
async function chatWithOllama(prompt) {
try {
const response = await axios.post('http://localhost:11434/api/generate', {
model: 'qwq',
prompt: prompt
});
console.log(response.data.response);
} catch (error) {
console.error('Error calling Ollama:', error);
}
}
chatWithOllama("人工智能的未来是什么?");
3、使用 Ollama 进行流式响应(适用于长文本)
Ollama 支持 流式传输(streaming),你可以逐步接收 AI 生成的内容。这里使用 fetch() 处理流式数据:
async function chatWithOllamaStream(prompt) {
const response = await fetch('http://localhost:11434/api/generate', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'qwq',
prompt: prompt,
stream: true // 启用流式响应
})
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
console.log(decoder.decode(value, { stream: true }));
}
}
chatWithOllamaStream("请用100字介绍Python编程语言。");
4、在 Node.js 服务器(Express)中使用 Ollama
如果你在 Node.js 服务器中需要调用 Ollama,可以结合 Express 框架:
const express = require('express');
const axios = require('axios');
const app = express();
app.use(express.json());
app.post('/ask-ollama', async (req, res) => {
const { prompt } = req.body;
try {
const response = await axios.post('http://localhost:11434/api/generate', {
model: 'qwq',
prompt: prompt
});
res.json({ response: response.data.response });
} catch (error) {
res.status(500).json({ error: 'Failed to communicate with Ollama' });
}
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
5、使用 ollama.js
Ollama.js 是 Ollama 官方推出的 JavaScript 库,该库提供了简洁且功能强大的 API,使开发者能够轻松地在 Node.js 环境或浏览器中集成 Ollama 的功能。
安装ollama.js
npm install ollama
在nodejs环境下使用
以下是一个使用 Ollama.js 与模型进行对话的示例:
import ollama from 'ollama';
const response = await ollama.chat({
model: 'qwq',
messages: [{ role: 'user', content: '你是谁?' }],
});
console.log(response.message.content);
在浏览器环境下使用
Ollama.js 也可以在浏览器环境中使用,直接导入对应的模块即可:
import ollama from 'ollama/browser';
流式响应情形
以下示例展示了如何使用流式响应逐步接收模型输出:
import ollama from 'ollama';
const message = { role: 'user', content: '你是谁?' };
const response = await ollama.chat({ model: 'qwq', messages: [message], stream: true });
for await (const part of response) {
process.stdout.write(part.message.content);
}