an.id.vnv2.0
Back to blog list

Tự viết Telegram AI Bot chạy LLM cục bộ bằng Ollama

Hướng dẫn kết nối Node.js với API của Ollama để xây dựng một Bot chat thông minh trên Telegram, lưu giữ hội thoại qua Redis.

July 18, 2026
ollamaaitelegram-botredisnode

Tự viết Telegram AI Bot chạy LLM cục bộ bằng Ollama

Việc sở hữu một trợ lý ảo thông minh chạy hoàn toàn riêng tư trong mạng nội bộ (không lo lắng về chi phí API của OpenAI hay rò rỉ dữ liệu) đã trở nên vô cùng đơn giản nhờ có Ollama.

Trong bài viết này, mình sẽ hướng dẫn kết nối Ollama với Telegram API thông qua Node.js để tạo ra một chat bot thông minh có bộ nhớ ngắn hạn bằng Redis.


1. Khởi chạy Ollama và tải Model

Trước tiên, hãy đảm bảo bạn đã cài đặt Ollama trên máy chủ của mình và tải về một model thích hợp (ví dụ Qwen 2.5 7B hoặc Llama 3 8B):

ollama run qwen2.5:7b

API sẽ mặc định lắng nghe ở cổng http://localhost:11434.


2. Viết mã nguồn kết nối bằng Node.js

Chúng ta sẽ sử dụng thư viện telegraf để tương tác với Telegram API và ioredis để quản lý lịch sử trò chuyện.

import { Telegraf } from 'telegraf';
import Redis from 'ioredis';
import fetch from 'node-fetch';

const bot = new Telegraf(process.env.TELEGRAM_BOT_TOKEN);
const redis = new Redis(process.env.REDIS_URL);
const OLLAMA_API = 'http://localhost:11434/api/chat';

bot.on('message', async (ctx) => {
  const userId = ctx.from.id;
  const userMessage = ctx.message.text;
  
  // 1. Lấy lịch sử hội thoại từ Redis để duy trì ngữ cảnh
  const historyKey = `chat:${userId}`;
  const historyData = await redis.get(historyKey) || '[]';
  const history = JSON.parse(historyData);
  
  history.push({ role: 'user', content: userMessage });

  // 2. Gọi API Ollama chạy local
  const response = await fetch(OLLAMA_API, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      model: 'qwen2.5:7b',
      messages: history,
      stream: false
    })
  });

  const data = await response.json();
  const botResponse = data.message.content;

  // 3. Cập nhật câu trả lời của bot vào lịch sử
  history.push({ role: 'assistant', content: botResponse });
  await redis.set(historyKey, JSON.stringify(history.slice(-10)), 'EX', 1800); // Lưu 半 tiếng

  // 4. Trả lời người dùng trên Telegram
  await ctx.reply(botResponse);
});

bot.launch();

3. Tổng kết

Bằng cách lưu trữ lịch sử hội thoại trong Redis với cấu trúc mảng JSON, Chatbot của bạn có thể duy trì được mạch nói chuyện một cách tự nhiên. Khi muốn nâng cấp, bạn chỉ cần thay đổi prompt hệ thống hoặc hoán đổi sang các model lớn hơn.

Chúc các bạn phát triển chatbot thành công!