Trình bổ trợ Ollama

Trình bổ trợ Ollama cung cấp giao diện cho mọi LLM cục bộ mà Ollama hỗ trợ.

Lắp đặt

npm i --save genkitx-ollama

Cấu hình

Trước tiên, trình bổ trợ này yêu cầu bạn cài đặt và chạy máy chủ Ollama. Bạn có thể làm theo hướng dẫn trên: https://ollama.com/download

Bạn có thể sử dụng CLI Ollama để tải mô hình mà bạn quan tâm xuống. Ví dụ:

ollama pull gemma

Để sử dụng trình bổ trợ này, hãy chỉ định trình bổ trợ đó khi bạn khởi chạy 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
    }),
  ],
});

Xác thực

Nếu muốn truy cập vào các bản triển khai từ xa của Ollama yêu cầu tiêu đề tuỳ chỉnh (tĩnh, chẳng hạn như khoá API hoặc động, chẳng hạn như tiêu đề xác thực), bạn có thể chỉ định các tiêu đề đó trong trình bổ trợ cấu hình Ollama:

Tiêu đề tĩnh:

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

Bạn cũng có thể tự động đặt tiêu đề cho mỗi yêu cầu. Dưới đây là ví dụ về cách đặt mã thông báo nhận dạng bằng thư viện 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;
}

Cách sử dụng

Trình bổ trợ này không xuất tham chiếu mô hình một cách tĩnh. Chỉ định một trong các mô hình mà bạn đã định cấu hình bằng cách sử dụng giá trị nhận dạng chuỗi:

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

Trình nhúng

Trình bổ trợ Ollama hỗ trợ các phần nhúng, có thể dùng cho các nội dung tìm kiếm tương đồng và các tác vụ NLP khác.

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))