يقدّم المكوّن الإضافي Ollama واجهات لأيّ من خدمات LLM المحلية المتوافقة مع Ollama.
تثبيت
npm i --save genkitx-ollama
الإعداد
يتطلّب هذا المكوّن الإضافي تثبيت خادم Ollama وتشغيله أولاً. يمكنك اتّباع التعليمات الواردة في الرابط التالي: https://ollama.com/download
يمكنك استخدام 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 getEmbedding() {
const embedding = await ai.embed({
embedder: 'ollama/nomic-embed-text',
content: 'Some text to embed!',
})
return embedding;
}
getEmbedding().then((e) => console.log(e))