برنامه نویسی

ساختن یک دستیار هوش مصنوعی با Ollama و Next.js – قسمت 2 (با استفاده از بسته ها)

💡 قسمت 1 را از دست داده اید؟ با اصول اولیه شروع کنید و یاد بگیرید که چگونه یک دستیار هوش مصنوعی با استفاده از Ollama به صورت محلی در یک برنامه Next.js:

👉 ساختن یک دستیار هوش مصنوعی با Ollama و Next.js – قسمت 1


🧠 بیایید برویم – قسمت 2

در قسمت 1 ، ما یک دستیار AI محلی را با استفاده از آن تنظیم کردیم اولامابا بعد. js، و Gemma 3: 1B مدل با حداقل تنظیم

در این مقاله ، ما کاوش خواهیم کرد دو روش قدرتمند و انعطاف پذیر برای ادغام اولاما به طور مستقیم در خود بعد. js پروژه با استفاده از کتابخانه های JavaScript.

ما راه می رویم:

  • نصب بسته های لازم
  • چگونه هر روش کار می کند
  • مزایا و اختلافات بین آنها

🛠 ابزارهای مورد استفاده


🚀 شروع کار

اطمینان حاصل کنید که قبلاً Ollama و مدل را نصب کرده اید. این را در ترمینال خود اجرا کنید:

ollama run gemma3:1b
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

📥 می توانید مدل را از: https://ollama.com/library دریافت کنید


📦 روش 1-با استفاده از Ollama-JS

بسته Ollama-JS یک مشتری گره سبک برای تعامل با سرور Ollama به طور مستقیم از کد شما است.

📌 نصب:

npm install ollama
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

📁 مسیر API در Next.js

// app/api/chat/route.js

import ollama from 'ollama';

export async function POST(req) {
  const { message } = await req.json();
  const response = await ollama.chat({
    model: 'gemma3:1b',
    messages: [{ role: 'user', content: message }],
  });

  return Response.json(response);
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

با استفاده از اجرای UI موجود از قسمت 1، این روش کاملاً با آن کار خواهد کرد.

✅ مزایا:

  • حداقل راه اندازی
  • کنترل مستقیم بر روی مدل و درخواست ها
  • عالی برای گردش کار کامل یا سفارشی

⚡ روش 2 – استفاده ai-sdk با ollama-ai-provider با react-markdown (ترجیحی)

این روش از AI SDK استفاده می کند ، که پیچیدگی زیادی را خلاصه می کند و یک تجربه یکپارچه را ارائه می دهد ، به خصوص برای برنامه های متمرکز بر جلو.

📌 ابتدا بسته ها را نصب کنید:

npm install ai ollama-ai-provider react-markdown

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

review بررسی اجمالی:

// app/api/chat/route.ts

import { streamText } from 'ai';
import { NextRequest } from 'next/server';
import { createOllama } from 'ollama-ai-provider';

export const runtime="edge";

// Create Ollama provider with configuration
const ollamaProvider = createOllama();

// Configure the model name
const MODEL_NAME = process.env.OLLAMA_MODEL || 'gemma3:1b';

export async function POST(req: NextRequest) {
  try {
    const { messages } = await req.json();

    if (!messages || !Array.isArray(messages) || messages.length === 0) {
      return new Response('Invalid messages format', { status: 400 });
    }

    // Add system message if not present
    const messagesWithSystem = messages[0]?.role !== 'system' 
      ? [
          { 
            role: 'system', 
            content: 'You are a helpful AI assistant powered by Ollama. You help users with their questions and tasks.'
          },
          ...messages
        ]
      : messages;

    const result = await streamText({
      model: ollamaProvider(MODEL_NAME),
      messages: messagesWithSystem,
    });

    return result.toDataStreamResponse();
  } catch (error) {
    console.error('Chat API error:', error);
    return new Response(
      JSON.stringify({ error: 'Failed to process chat request' }), 
      { status: 500 }
    );
  }
} 
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

// ChatInput.tsx

import { useEffect, useRef } from 'react';

interface ChatInput2Props {
  input: string;
  handleInputChange: (e: React.ChangeEvent) => void;
  handleSubmit: (e: React.FormEvent) => void;
  isLoading: boolean;
}

export default function ChatInput2({
  input,
  handleInputChange,
  handleSubmit,
  isLoading
}: ChatInput2Props) {
  const textareaRef = useRef(null);

  useEffect(() => {
    if (textareaRef.current) {
      textareaRef.current.style.height="auto";
      textareaRef.current.style.height = `${textareaRef.current.scrollHeight}px`;
    }
  }, [input]);

  return (
    
  );
} 
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

// ChatMessage.tsx

import ReactMarkdown from 'react-markdown';

interface ChatMessage2Props {
  role: 'user' | 'assistant' | 'system';
  content: string;
}

export default function ChatMessage2({ role, content }: ChatMessage2Props) {
  return (
    

{children}

, code: ({ children }) => ( {children} ), ul: ({ children }) => ( ), ol: ({ children }) => (
    {children}
), }} > {content}
); }
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

// ChatPage.tsx

"use client"
import { useChat } from 'ai/react';
import ChatInput2 from './ChatInput2';
import ChatMessage2 from './ChatMessage2';

type MessageRole="system" | 'user' | 'assistant';

function normalizeRole(role: string): MessageRole {
  if (role === 'system' || role === 'user' || role === 'assistant') {
    return role as MessageRole;
  }
  return 'assistant';
}

export default function Chat2Page() {
  const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat({
    api: '/api/chat2',
    initialMessages: [
      {
        id: 'system-1',
        role: 'system',
        content: 'You are a helpful AI assistant powered by Ollama. You can help users with various tasks and answer their questions.',
      },
    ],
  });

  return (
    

Powered by Ollama with markdown support and streaming responses

{messages.map((message) => ( ))} {messages.length === 1 && (

Start a conversation by typing a message below

)}
); }
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

// app/chat/page.tsx

import ChatPage from '@/modules/chat/ChatPage';

export default function Chat() {
  return ;
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

✅ مزایا:

  • پشتیبانی داخلی برای پاسخ های جریان (برای UX در زمان واقعی)
  • با اجزای سرور React هموار کار می کند
  • انتزاع تمیز که باعث حفظ قابلیت حفظ می شود
  • نمایش آسان نشان با React-Markdown

📸 نتیجه

خروجی از Ollama و Ai SDK


🧠 خلاصه: از کدام روش باید استفاده کنید؟

نشان ollama-js ai-sdk با ollama-ai-provider
سادگی تنظیم ✅ ساده ✅ متوسط
پشتیبانی جریان ❌ کتابچه راهنما ✅ ساخته شده
دوستانه جلو ❌ بیشتر با پس زمینه متمرکز شده است ✅ متناسب با React
نمایش مارک ❌ کتابچه راهنما ✅ آسان از طریق react-markdown
توصیه شده برای پروژه های سفارشی/سطح پایین AI UI آماده تولید

👋 بعدی چیست؟

در حالی که این روش دیگری برای ساخت دستیار هوش مصنوعی شما در محلی است ،
برای یادگیری نحوه ساخت این کار با استفاده از Langchain و Ollama برای گردش کار پیشرفته AI ، روی مقاله بعدی کلیک کنید.

برنامه نویسی مبارک ….

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا