Ollama进阶:在Javascript(nodejs)前后端项目中集成Deepseek、QWQ大模型

在“Ollama进阶:在Python、Java、Go项目中集成Deepseek、QWQ大模型”一文中,我们讲到了在Java、Python、Go语言项目中整合Ollama中运行的Deepseek、QWQ、LLaMA、Mistral、Gemma本地大模型服务。本文则讨论在JavaScript(包括 Node.js 和前端浏览器环境)中整合Ollama本地大模型服务。

Ollama进阶:在Javascript(nodejs)前后端项目中集成Deepseek、QWQ大模型

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);
}
阅读剩余
THE END