المكوّن الإضافي Ollama

يقدّم المكوّن الإضافي Ollama واجهات لأيّ من خدمات البحث المحلي الوصفي (LLM) المتوافقة مع Ollama.

تثبيت

npm i --save genkitx-ollama

الإعداد

يتطلّب هذا المكوّن الإضافي تثبيت خادم Ollama وتشغيله أولاً. يمكنك اتّباع التعليمات الواردة في مقالة: تنزيل تطبيق Ollama.

يمكنك استخدام Ollama CLI لتنزيل النموذج الذي يهمّك. على سبيل المثال:

ollama pull gemma

لاستخدام هذا المكوّن الإضافي، حدِّده عند بدء Genkit:

import { genkit } from 'genkit';
import { ollama } from 'genkitx-ollama';

const ai = genkit({
  plugins: [
    ollama({
      models: [
        {
          name: 'gemma',
          type: 'generate', // type: 'chat' | 'generate' | undefined
        },
      ],
      serverAddress: 'http://127.0.0.1:11434', // default local address
    }),
  ],
});

المصادقة

إذا كنت تريد الوصول إلى عمليات النشر عن بُعد لخدمة Ollama التي تتطلّب عناوين مخصّصة (ثابتة، مثل مفاتيح واجهة برمجة التطبيقات أو ديناميكية، مثل عناوين المصادقة)، يمكنك تحديد تلك العناوين في المكوّن الإضافي لإعدادات Ollama:

الرؤوس الثابتة:

ollama({
  models: [{ name: 'gemma'}],
  requestHeaders: {
    'api-key': 'API Key goes here'
  },
  serverAddress: 'https://my-deployment',
}),

يمكنك أيضًا ضبط الرؤوس ديناميكيًا لكل طلب. في ما يلي مثال على كيفية ضبط رمز تعريف باستخدام مكتبة Google Auth:

import { GoogleAuth } from 'google-auth-library';
import { ollama } from 'genkitx-ollama';
import { genkit } from 'genkit';

const ollamaCommon = { models: [{ name: 'gemma:2b' }] };

const ollamaDev = {
  ...ollamaCommon,
  serverAddress: 'http://127.0.0.1:11434',
};

const ollamaProd = {
  ...ollamaCommon,
  serverAddress: 'https://my-deployment',
  requestHeaders: async (params) => {
    const headers = await fetchWithAuthHeader(params.serverAddress);
    return { Authorization: headers['Authorization'] };
  },
};

const ai = genkit({
  plugins: [
    ollama(isDevEnv() ? ollamaDev : ollamaProd),
  ],
});

// Function to lazily load GoogleAuth client
let auth: GoogleAuth;
function getAuthClient() {
  if (!auth) {
    auth = new GoogleAuth();
  }
  return auth;
}

// Function to fetch headers, reusing tokens when possible
async function fetchWithAuthHeader(url: string) {
  const client = await getIdTokenClient(url);
  const headers = await client.getRequestHeaders(url); // Auto-manages token refresh
  return headers;
}

async function getIdTokenClient(url: string) {
  const auth = getAuthClient();
  const client = await auth.getIdTokenClient(url);
  return client;
}

الاستخدام

لا يصدّر هذا المكوّن الإضافي إشارات النماذج بشكلٍ ثابت. حدِّد أحد النماذج التي ضبطتها باستخدام معرّف سلسلة:

const llmResponse = await ai.generate({
  model: 'ollama/gemma',
  prompt: 'Tell me a joke.',
});

أدوات التضمين

تتيح لك المكوّنة الإضافية Ollama استخدام ميزة "الترميز" التي يمكن استخدامها لإجراء عمليات بحث تستند إلى التشابه ومهام أخرى تتعلّق بالمعالجة الآلية للّغة.

const ai = genkit({
  plugins: [
    ollama({
      serverAddress: 'http://localhost:11434',
      embedders: [{ name: 'nomic-embed-text', dimensions: 768 }],
    }),
  ],
});

async function getEmbeddings() {
  const embeddings = (await ai.embed({
      embedder: 'ollama/nomic-embed-text',
      content: 'Some text to embed!',
  })
  )[0].embedding;

  return embeddings;
}

getEmbeddings().then((e) => console.log(e))