Grok یک مدل هوش مصنوعی گفتوگومحور است که توسط شرکت xAI، به رهبری ایلان ماسک، توسعه داده شده و با پلتفرم X (توییتر سابق) ادغام شده است. Grok با الهام از شخصیتهای طناز و جسور طراحی شده و هدفش ارائه پاسخهایی دقیق، گاهی با لحن شوخطبع، و درک بهتر سوالات پیچیده کاربران است. این مدل تلاش میکند تا علاوه بر پاسخدهی مبتنی بر دادههای زنده از شبکه X، تعامل انسانیتری با کاربران برقرار کند و رقیبی برای مدلهایی مانند GPT و Gemini باشد.
در حال حاضر، لیارا، مدلهای زیر از X-AI/Grok را در API خود پشتیبانی میکند:
برای اتصال به مدل با AI SDK، در ابتدا باید با اجرای دستور زیر، ماژولهای مورد نیاز را نصب کنید:
کپی
npm i ai@^4 @ai-sdk/openai-compatible
در ادامه، میتوانید مانند قطعه کد زیر، به مدل متصل شوید:
کپی
// npm i @ai-sdk/openai-compatible
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { generateText } from 'ai';
const { text } = await generateText({
model: createOpenAICompatible({
baseURL: "<baseUrl>",
name: 'example',
apiKey: "<LIARA_API_TOKEN>",
}).chatModel("<model_name>"),
prompt: 'hey.',
});
console.log('Generated Text:', text);
در قطعه کدهای فوق، بهجای <baseUrl>، آدرس سرویس هوش مصنوعی خود را قرار دهید و بهجای <LIARA_API_TOKEN>، کلید API خود را وارد کنید. همچنین، بهجای <model_name>، نام یکی از مدلهای فوق را قرار دهید.
پارامترهای قابل تنظیم
در OpenAI SDK، شما میتوانید پارامترهای زیر را تنظیم کنید.
در نظر داشته باشید که پارامترهای زیر، ممکن است در برخی از مدلها، پشتیبانی نشوند.
frequency_penalty: عددی بین -2 تا 2. کاهش یا افزایش احتمال تکرار کلمات پرتکرار در پاسخ. هرچه بالاتر باشد؛ تنوع بیشتر است
logit_bias: تغییر احتمال ظاهر شدن توکنهای خاص
n: تعداد پاسخهایی که قرار است مدل همزمان تولید کند.
response_format: مدل را مجبور میکند خروجی را به فرمت خاصی برگرداند
seed: مقدار عددی ثابت برای شروع تولید تصادفی، در صورت نیاز، به خروجیهای قابل تکرار
stop: آرایهای از رشتهها برای اینکه مدل هنگام رسیدن به آنها پاسخ را متوقف کند
stream: اگر true باشد، پاسخ مدل به صورت استریم ارسال میشود. برای پیادهسازیهای real-time یا رابط کاربری، این حالت مفید است
stream_options: تنظیمات مربوط به حالت stream. فقط وقتی استفاده میشود که stream: true باشد
temperature: عددی بین 0 تا 2. کنترل میزان تصادفی بودن خروجی؛ عدد کمتر، واقعگرایی بیشتر و عدد بیشتر، خلاقیت بیشتر
tool_choice: تعیین کردن اینکه مدل چه زمانی Tool را فراخوانی کند (بهصورت هوشمند یا همیشه)
tools: مشخص کردن یکسری Tool که مدل در صورت نیاز، آنها را فراخوانی کند
user: شناسهی کاربر نهایی. برای دستهبندی بهتر درخواستها و جلوگیری از سوءاستفاده، بهکار میرود
در ادامه، مثال استفاده از این پارامترها، در زبانهای مختلف، قرار گرفته است:
کپی
from openai import OpenAI
client = OpenAI(
base_url='<baseUrl>',
api_key='<LIARA_API_KEY>',
)
response = client.chat.completions.create(
model="<model_name>",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "write a short article about Machine Learning in json"}
],
frequency_penalty=1.2,
presence_penalty=1.0,
temperature=0.8,
top_p=0.9,
n=2,
seed=42,
stop=["\nUser:", "\nSystem:"],
logit_bias={"50256": -100},
stream=False,
stream_options=None,
response_format={"type": "json_object"},
tool_choice="auto",
tools=[
{
"type": "function",
"function": {
"name": "summarize_text",
"description": "summarizing a long text",
"parameters": {
"type": "object",
"properties": {
"text": {"type": "string", "description": "the text should be summarized"}
},
"required": ["text"]
}
}
}
],
)
print(response)
در قطعه کد فوق، بهجای <baseUrl>، آدرس سرویس هوش مصنوعی خود را قرار دهید و بهجای <LIARA_API_TOKEN>، کلید API خود را وارد کنید. همچنین، بهجای <model_name>، نام یکی از مدلهای فوق را قرار دهید.
اتصال به مدل های تبدیل متن به گفتار (TTS)
برای کار با مدلهای TTS میتوانید از ماژول openai استفاده کنید. در ادامه، مثالهای استفاده از مدلهای TTS آمده است:
کپی
// npm install openai dotenv
require("dotenv").config();
const fs = require("fs");
const OpenAI = require("openai");
const client = new OpenAI({
apiKey: process.env.LIARA_API_KEY,
baseURL: process.env.BASE_URL,
});
async function main() {
const response = await client.audio.speech.create({
model: process.env.TTS_MODEL_NAME,
voice: process.env.TTS_VOICE,
input: "Hello! This audio was generated using X-AI through Liara.",
response_format: "mp3",
});
const buffer = Buffer.from(await response.arrayBuffer());
fs.writeFileSync("speech.mp3", buffer);
console.log("Audio saved to speech.mp3");
}
main().catch(console.error);
پروژه کامل قطعه کد فوق در گیتهاب لیارا قابل مشاهده و استفاده است.
کپی
<?php
// composer require openai-php/client vlucas/phpdotenv guzzlehttp/guzzle
require __DIR__ . '/vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$client = OpenAI::factory()
->withApiKey($_ENV["LIARA_API_KEY"])
->withBaseUri($_ENV["BASE_URL"])
->make();
$audio = $client->audio()->speech([
"model" => $_ENV["TTS_MODEL_NAME"],
"voice" => $_ENV["TTS_VOICE"],
"input" => "Hello! This audio was generated using X-AI through Liara on PHP!!! Ohhhh Yeahhhhh!",
"response_format" => "mp3",
]);
file_put_contents(
__DIR__ . "/speech.mp3",
$audio
);
echo "Audio saved to speech.mp3";
پروژه کامل قطعه کد فوق در گیتهاب لیارا قابل مشاهده و استفاده است.
کپی
# pip install openai python-dotenv
import os
from pathlib import Path
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
client = OpenAI(
api_key=os.getenv("LIARA_API_KEY"),
base_url=os.getenv("BASE_URL"),
)
speech_file = Path("speech.mp3")
with client.audio.speech.with_streaming_response.create(
model=os.getenv("TTS_MODEL_NAME"),
voice=os.getenv("TTS_VOICE"),
input="Hello! This audio was generated using X-AI through Liara on Python! it's awesome, right?",
response_format="mp3",
) as response:
response.stream_to_file(speech_file)
print("Audio saved to speech.mp3")
پروژه کامل قطعه کد فوق در گیتهاب لیارا قابل مشاهده و استفاده است.
کپی
// dotnet add package OpenAI && dotnet add package DotNetEnv
using System.ClientModel;
using DotNetEnv;
using OpenAI;
using OpenAI.Audio;
Env.Load();
var baseUrl = Environment.GetEnvironmentVariable("BASE_URL")
?? throw new Exception("BASE_URL is not defined.");
var apiKey = Environment.GetEnvironmentVariable("LIARA_API_KEY")
?? throw new Exception("LIARA_API_KEY is not defined.");
var modelName = Environment.GetEnvironmentVariable("TTS_MODEL_NAME")
?? throw new Exception("TTS_MODEL_NAME is not defined.");
var voiceName = Environment.GetEnvironmentVariable("TTS_VOICE")
?? throw new Exception("TTS_VOICE is not defined.");
var client = new OpenAIClient(
credential: new ApiKeyCredential(apiKey),
options: new OpenAIClientOptions
{
Endpoint = new Uri(baseUrl)
}
);
AudioClient audioClient = client.GetAudioClient(modelName);
GeneratedSpeechVoice voice = new(voiceName);
BinaryData speech = await audioClient.GenerateSpeechAsync(
"Hello! This audio was generated using X-AI through Liara. On DOTNET!!! This is Crazy!!!!",
voice,
new SpeechGenerationOptions
{
ResponseFormat = GeneratedSpeechFormat.Mp3
}
);
await File.WriteAllBytesAsync(
"speech.mp3",
speech.ToArray()
);
Console.WriteLine("Audio saved to speech.mp3");
پروژه کامل قطعه کد فوق در گیتهاب لیارا قابل مشاهده و استفاده است.
کپی
// go get github.com/openai/openai-go/v3 github.com/joho/godotenv
package main
import (
"context"
"fmt"
"io"
"os"
"github.com/joho/godotenv"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/option"
)
func main() {
err := godotenv.Load()
if err != nil {
panic("Error loading .env file")
}
baseURL := os.Getenv("BASE_URL")
apiKey := os.Getenv("LIARA_API_KEY")
modelName := os.Getenv("TTS_MODEL_NAME")
voiceName := os.Getenv("TTS_VOICE")
client := openai.NewClient(
option.WithAPIKey(apiKey),
option.WithBaseURL(baseURL),
)
response, err := client.Audio.Speech.New(
context.Background(),
openai.AudioSpeechNewParams{
Model: modelName,
Voice: openai.AudioSpeechNewParamsVoiceUnion{
OfString: openai.String(voiceName),
},
Input: "Hello! This audio was generated using X-AI through Liara. On Go!!!! Hellll Yeahhhh",
ResponseFormat: openai.AudioSpeechNewParamsResponseFormatMP3,
},
)
if err != nil {
panic(err)
}
defer response.Body.Close()
file, err := os.Create("speech.mp3")
if err != nil {
panic(err)
}
defer file.Close()
_, err = io.Copy(file, response.Body)
if err != nil {
panic(err)
}
fmt.Println("Audio saved to speech.mp3")
}
پروژه کامل قطعه کد فوق در گیتهاب لیارا قابل مشاهده و استفاده است.
در قطعه کدهای فوق، بهجای BASE_URL، آدرس سرویس هوش مصنوعی خود را قرار دهید و بهجای LIARA_API_KEY، کلید API خود را وارد کنید. همچنین، بهجای TTS_MODEL_NAME، نام یکی از مدلهای TTS و بهجای TTS_VOICE، نام Voice موردنظر را قرار دهید.
مقادیر قابل استفاده به عنوان متغیر TTS_VOICE
TTS_VOICE یک پارامتر در مدلهای TTS است که مشخص میکند مدل هوش مصنوعی با چه صدای از پیش تعریفشدهای متن را به گفتار تبدیل کند. هر Voice یک پروفایل صوتی مستقل است که ویژگیهایی مثل جنسیت صدا، لحن (Tone)، سرعت، حس بیان (Emotion)، لهجه و سبک صحبت کردن را تعیین میکند.
در حال حاضر، میتوانید مقدار متغیر TTS_VOICE را برای مدلهای مذکور، با مقادیر زیر پر کنید (بعد از # یکسری توضیحات راجع به هر Voice قرار گرفته است).
کپی
TTS_VOICE=eve # Energetic and upbeat - British accent
TTS_VOICE=leo # Authoritative and strong - British accent
TTS_VOICE=rex # Confident and clear
TTS_VOICE=sal # Smooth and balanced
TTS_VOICE=ara # Warm and friendly
TTS_VOICE=lux # Grounded, calm and quietly wise - Wellness / Narration
TTS_VOICE=kepler # Inventive, forward-thinking and charismatic - Advertising / Podcast
TTS_VOICE=rigel # Precise, professional and calmly confident - Australian accent
TTS_VOICE=cosmo # Bright, curious and easy to follow - Education / Podcast
TTS_VOICE=celeste # Compassionate, confident and reassuring - Support / Assistant
TTS_VOICE=ursa # Friendly, warm and steadfast - Assistant / Podcast
TTS_VOICE=sirius # Quick-witted, clever and playful - Commentary / Characters
TTS_VOICE=lumen # Warm, articulate and engaging - Education / Advertising
TTS_VOICE=castor # Charismatic, down-to-earth and easygoing - Sales / Support
TTS_VOICE=naksh # Warm, thoughtful and wise - Indian accent
TTS_VOICE=atlas # Confident, commanding and reassuring - Sales / Assistant
TTS_VOICE=aurora # Serene, steady and radiant - Support / Assistant
TTS_VOICE=liora # Calm, grounded and luminous - Wellness / Assistant
اتصال به مدل های تبدیل گفتار به متن (STT)
برای کار با مدلهای TTS میتوانید از ماژول openai استفاده کنید. در ادامه، مثالهای استفاده از مدلهای TTS آمده است:
پروژه کامل قطعه کد فوق در گیتهاب لیارا قابل مشاهده و استفاده است.
کپی
<?php
// composer require openai-php/client vlucas/phpdotenv guzzlehttp/guzzle
require __DIR__ . '/vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$client = OpenAI::factory()
->withApiKey($_ENV["LIARA_API_KEY"])
->withBaseUri($_ENV["BASE_URL"])
->make();
$audioPath = __DIR__ . "/" . $_ENV["AUDIO_FILE"];
if (!file_exists($audioPath)) {
throw new Exception("Audio file not found: " . $audioPath);
}
$audioFile = fopen($audioPath, "r");
if ($audioFile === false) {
throw new Exception("Unable to open audio file.");
}
$response = $client->audio()->transcribe([
"model" => $_ENV["STT_MODEL_NAME"],
"file" => $audioFile,
]);
echo $response->text;
پروژه کامل قطعه کد فوق در گیتهاب لیارا قابل مشاهده و استفاده است.
کپی
# pip install openai python-dotenv
import os
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
client = OpenAI(
api_key=os.getenv("LIARA_API_KEY"),
base_url=os.getenv("BASE_URL"),
)
with open(os.getenv("AUDIO_FILE"), "rb") as audio_file:
transcription = client.audio.transcriptions.create(
model=os.getenv("STT_MODEL_NAME"),
file=audio_file,
)
print(transcription.text)
پروژه کامل قطعه کد فوق در گیتهاب لیارا قابل مشاهده و استفاده است.
کپی
// dotnet add package DotNetEnv
using System.Net.Http.Headers;
using System.Text.Json;
using DotNetEnv;
Env.Load();
var baseUrl = Environment.GetEnvironmentVariable("BASE_URL")
?? throw new Exception("BASE_URL is not defined.");
var apiKey = Environment.GetEnvironmentVariable("LIARA_API_KEY")
?? throw new Exception("LIARA_API_KEY is not defined.");
var modelName = Environment.GetEnvironmentVariable("STT_MODEL_NAME")
?? throw new Exception("STT_MODEL_NAME is not defined.");
var audioFile = Environment.GetEnvironmentVariable("AUDIO_FILE")
?? throw new Exception("AUDIO_FILE is not defined.");
var audioPath = Path.GetFullPath(audioFile);
if (!File.Exists(audioPath))
{
throw new FileNotFoundException(
$"Audio file not found: {audioPath}"
);
}
var extension = Path.GetExtension(audioPath).ToLowerInvariant();
var fileName = Path.GetFileName(audioPath);
var mimeType = extension switch
{
".mp3" => "audio/mpeg",
".wav" => "audio/wav",
".flac" => "audio/flac",
".m4a" => "audio/mp4",
".ogg" => "audio/ogg",
".webm" => "audio/webm",
".aac" => "audio/aac",
_ => throw new Exception(
$"Unsupported audio format: {extension}"
)
};
Console.WriteLine($"File: {fileName}");
Console.WriteLine($"Format: {extension}");
Console.WriteLine($"MIME type: {mimeType}");
Console.WriteLine($"Size: {new FileInfo(audioPath).Length} bytes");
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Bearer",
apiKey
);
using var form = new MultipartFormDataContent();
form.Add(
new StringContent(modelName),
"model"
);
await using var audioStream = File.OpenRead(audioPath);
using var fileContent = new StreamContent(audioStream);
fileContent.Headers.ContentType =
new MediaTypeHeaderValue(mimeType);
form.Add(
fileContent,
"file",
fileName
);
var url =
$"{baseUrl.TrimEnd('/')}/audio/transcriptions";
var response = await client.PostAsync(
url,
form
);
var result = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
{
Console.WriteLine($"HTTP {(int)response.StatusCode}");
Console.WriteLine(result);
return;
}
using var json = JsonDocument.Parse(result);
if (json.RootElement.TryGetProperty(
"text",
out var text
))
{
Console.WriteLine(text.GetString());
}
else
{
Console.WriteLine(result);
}
پروژه کامل قطعه کد فوق در گیتهاب لیارا قابل مشاهده و استفاده است.
پروژه کامل قطعه کد فوق در گیتهاب لیارا قابل مشاهده و استفاده است.
در قطعه کدهای فوق، بهجای BASE_URL، آدرس سرویس هوش مصنوعی خود را قرار دهید و بهجای LIARA_API_KEY، کلید API خود را وارد کنید. همچنین، بهجای STT_MODEL_NAME، نام مدل STT و بهجای AUDIO_FILE، نام یا مسیر فایل صوتی موردنظر برای تبدیل گفتار به متن را قرار دهید.