Skip to content

@happ-integ/openai

OpenAI провайдер для LLM и embeddings.

Установка

bash
pnpm add @happ-integ/openai

Использование

Инициализация

typescript
import { OpenAIClient } from "@happ-integ/openai";

const openai = new OpenAIClient(env.OPENAI_API_KEY);

Chat

typescript
const response = await openai.chat({
	model: "gpt-4o", // по умолчанию
	messages: [
		{ role: "system", content: "Ты помощник" },
		{ role: "user", content: "Привет!" },
	],
});

console.log(response.text);
console.log(response.raw); // полный ответ от OpenAI

Embeddings

typescript
// Один текст
const embedding = await openai.embedding({
	text: "Hello world",
	model: "text-embedding-3-small", // по умолчанию
});
// => number[]

// Несколько текстов
const embeddings = await openai.embeddings({
	texts: ["Hello", "World"],
	model: "text-embedding-3-small",
});
// => number[][]

Генерация контекста для звонков

typescript
const context = await openai.generateContext({
	name: "John Doe",
	company: "Acme Corp",
	email: "john@acme.com",
	source: "Google Ads",
});

// {
//   firstMessage: "Привіт! Як дела?",
//   context: {
//     clientName: "John Doe",
//     company: "Acme Corp",
//     leadSource: "Google Ads"
//   }
// }

Health Check

typescript
const isHealthy = await openai.healthCheck();

API

OpenAIClient

typescript
new OpenAIClient(apiKey?: string)

Параметр:

  • apiKey — OpenAI API Key (опционально, если установлена переменная OPENAI_API_KEY)

Методы

chat(params): Promise<IOpenAIChatResponse>

typescript
interface IOpenAIChatParams {
	model?: string; // default: "gpt-4o"
	messages: Array<{
		role: "system" | "user" | "assistant";
		content: string;
	}>;
}

// результат:
// { text: string, raw?: any }

embedding(params): Promise<number[]>

embeddings(params): Promise<number[][]>

typescript
interface IOpenAIEmbeddingParams {
	text: string;
	model?: string; // default: "text-embedding-3-small"
	apiKey?: string;
}

interface IOpenAIEmbeddingsParams {
	texts: string[];
	model?: string;
	apiKey?: string;
}

generateContext(data): Promise<any>

Генерирует контекст для звонков на основе информации о клиенте.

typescript
interface {
  name?: string;
  company?: string;
  email?: string;
  source?: string;
}

healthCheck(): Promise<boolean>

Модели

МодельИспользование
gpt-4oChat (самый мощный)
gpt-4-turboChat (быстрее)
gpt-3.5-turboChat (дешевле)
text-embedding-3-smallEmbeddings (быстро)
text-embedding-3-largeEmbeddings (точнее)

Использование через LLMService

Рекомендуется использовать через @happ-integ/llm:

typescript
import { LLMService } from "@happ-integ/llm";

const llm = new LLMService({
	primary: "openai",
	openaiKey: env.OPENAI_API_KEY,
});

await llm.chat({ messages });

Получить API Key

  1. https://platform.openai.com/account/api-keys
  2. Create new secret key
  3. Скопировать и добавить в Doppler / env

Pricing

https://openai.com/pricing

gpt-4o:                 $5 / 1M input tokens
text-embedding-3-small: $0.02 / 1M tokens

Когда использовать

  • ✅ Лучший LLM
  • ✅ Embeddings
  • ❌ Бюджет ограничен — используйте Claude/Gemini