Typeai adalah toolkit untuk membangun aplikasi yang diaktifkan AI menggunakan naskah yang membuat segalanya terlihat sangat sederhana sehingga tampak seperti sulap. Lebih penting lagi, itu membuat membangun dengan LLMS "merasa" seperti kode biasa dengan ketidakcocokan impedansi rendah.
Contoh:
import { toAIFunction } from '@typeai/core'
/** @description Given `text`, returns a number between 1 (positive) and -1 (negative) indicating its sentiment score. */
function sentimentSpec ( text : string ) : number | void { }
const sentiment = toAIFunction ( sentimentSpec )
const score = await sentiment ( 'That was surprisingly easy!' )
Tentukan saja tipe dan tanda tangan fungsi Anda seperti yang Anda lakukan secara alami, dan Typeai akan menghasilkan implementasi yang sesuai dengan menghormati deklarasi jenis Anda. Tidak ada memuat file skema terpisah, tidak ada rekayasa cepat, dan tidak ada secara manual menulis representasi skema JSON dari fungsi Anda.
Ikuti saya di Twitter:
Deepkit diperlukan untuk memberikan informasi jenis runtime tentang fungsi dan jenis Anda.
npm install @typeai/core @deepkit/core
Catatan: Untuk saat ini, ekstraksi otomatis tag jsdoc @description membutuhkan paket npm forked ini builds @deepkit/type dan @deepkit/type-compiler
npm install @deepkit/type@npm:@jefflaporte/[email protected]
npm install --save-dev @deepkit/type-compiler@npm:@jefflaporte/[email protected]
# Bash
./node_modules/.bin/deepkit-type-install
# PowerShell
pwsh ./node_modules/.bin/deepkit-type-install.ps1
tsconfig.json
// tsconfig.json
{
"compilerOptions" : {
// ...
// Note: DeepKit says that experimentalDecorators is not necessary when using @deepkit/type,
// but I have found that deepkit's typeOf() does not always work with TypeScript > 4.9
// without experimentalDecorators set.
"experimentalDecorators" : true
} ,
"reflection" : true
}
Catatan: Beberapa runtime, seperti tsx
, tidak akan bekerja dengan Deepkit. Lihat Gotchas untuk info lebih lanjut.
Pada waktu eksekusi
export OPENAI_API_KEY= ' ... ' # currently required for core functionality
export BING_API_KEY= ' ... ' # if using predefined SearchWeb Tool function
Typeai membuat menghubungkan fungsi dan jenis Anda ke AI API seperti titik akhir penyelesaian obrolan OpenAI ringan dengan menggunakan refleksi jenis runtime pada kode tipe -naskah untuk menghasilkan skema JSON yang diperlukan oleh fitur panggilan fungsi OpenAI, dan dengan menangani pengiriman fungsi dan pengiriman hasil ke LLM.
Typeai saat ini menyediakan dua bidang fungsionalitas utama:
Untuk membuat fungsi yang didukung AI, tulis fungsi rintisan dan lewati ke toAIFunction()
, yang akan menghasilkan fungsi yang didukung AI dengan perilaku yang diinginkan.
/** @description Given `text`, returns a number between 1 (positive) and -1 (negative) indicating its sentiment score. */
function sentimentSpec ( text : string ) : number | void { }
const sentiment = toAIFunction ( sentimentSpec )
const score = await sentiment ( 'That was surprisingly easy!' )
Fungsi dengan input kompleks dan tipe tipe script output berfungsi juga. Inilah contoh yang lebih menarik:
type Patient = {
name : string
age : number
isSmoker : boolean
}
type Diagnosis = {
condition : string
diagnosisDate : Date
stage ?: string
type ?: string
histology ?: string
complications ?: string
}
type Treatment = {
name : string
startDate : Date
endDate ?: Date
}
type Medication = Treatment & {
dose ?: string
}
type BloodTest = {
name : string
result : string
testDate : Date
}
type PatientData = {
patient : Patient
diagnoses : Diagnosis [ ]
treatments : Treatment | Medication [ ]
bloodTests : BloodTest [ ]
}
/** @description Returns a PatientData record generate from the content of doctorsNotes notes. */
function generateElectronicHealthRecordSpec ( input : string ) : PatientData | void { }
const generateElectronicHealthRecord = toAIFunction ( generateElectronicHealthRecordSpec , {
model : 'gpt-4' ,
} )
enum AppRouteEnum {
USER_PROFILE = '/user-profile' ,
SEARCH = '/search' ,
NOTIFICATIONS = '/notifications' ,
SETTINGS = '/settings' ,
HELP = '/help' ,
SUPPORT_CHAT = '/support-chat' ,
DOCS = '/docs' ,
PROJECTS = '/projects' ,
WORKSPACES = '/workspaces' ,
}
const AppRoute = toAIClassifier ( AppRouteEnum )
const appRouteRes = await AppRoute ( 'I need to talk to somebody about billing' )
Fungsi alat AI adalah fungsi yang disediakan untuk LLM untuk penggunaannya sendiri dalam menghasilkan jawaban.
Katakanlah Anda memiliki fungsi dan ingin memberikan fungsinya untuk OpenAi's LLM untuk digunakan dengan fitur panggilan fungsi mereka.
Melihat:
Typeai menyediakan tiga fungsi yang membuat memperlihatkan fungsi dan model Anda ke GPT-3.5/4, dan menangani permintaan panggilan fungsi yang dihasilkan dari GPT-3/4, transparan:
static ToolFunction . from < R > (
fn : ( ... args : any [ ] ) => R ,
options ?: ToolFunctionFromOptions
) : ToolFunction
static ToolFunction . modelSubmissionToolFor < T > (
cb : ( arg : T ) => Promise < void >
) : ToolFunction
function handleToolUse (
openAIClient : OpenAIApi ,
originalRequest : CreateChatCompletionRequest ,
responseData : CreateChatCompletionResponse ,
options ?: {
model ?: string ,
registry ?: SchemaRegistry ,
handle ?: 'single' | 'multiple'
} ,
) : Promise < CreateChatCompletionResponse | undefined >
Mereka dapat digunakan seperti ini:
import {
OpenAIApi ,
Configuration ,
CreateChatCompletionRequest ,
ChatCompletionRequestMessage ,
ChatCompletionRequestMessageRoleEnum ,
} from 'openai'
import { ToolFunction , handleToolUse } from '@typeai/core'
import { getCurrentWeather } from 'yourModule'
// Init OpenAI client
const configuration = new Configuration ( { apiKey : process . env . OPENAI_API_KEY } )
const openai = new OpenAIApi ( configuration )
// Generate JSON Schema for function and dependent types
const getCurrentWeatherTool = ToolFunction . from ( getCurrentWeather )
// Run a chat completion sequence
const messages : ChatCompletionRequestMessage [ ] = [
{
role : ChatCompletionRequestMessageRoleEnum . User ,
content : "What's the weather like in Boston? Say it like a weather reporter." ,
} ,
]
const request : CreateChatCompletionRequest = {
model : 'gpt-3.5-turbo' ,
messages ,
functions : [ getCurrentWeatherTool . schema ] ,
stream : false ,
max_tokens : 1000 ,
}
const { data : response } = await openai . createChatCompletion ( request )
// Transparently handle any LLM calls to your function.
// handleToolUse() returns OpenAI's final response after
// any/all function calls have been completed
const responseData = await handleToolUse ( openai , request , response )
const result = responseData ?. choices [ 0 ] . message
/*
Good afternoon, Boston! This is your weather reporter bringing you the latest
updates. Currently, we're experiencing a pleasant temperature of 82 degrees Celsius. The sky is a mix of sunshine and clouds, making for a beautiful day. However, there is a 25% chance of precipitation, so you might want to keep an umbrella handy. Additionally, the atmospheric pressure is at 25 mmHg. Overall, it's a great day to get outside and enjoy the city. Stay safe and have a wonderful time!
*/
Karena cara Deepkit menyuntikkan transformasi tipe-kompilernya, dengan menambal TSC, beberapa runtime mungkin tidak berfungsi. Ini diketahui untuk tidak berhasil:
tsx
Typeai menggunakan info tipe runtime TypeScript yang disediakan oleh @deepkit/type
untuk:
Ini menghasilkan pengalaman pengkodean yang terasa "asli".
Contoh
import { ToolFunction , handleToolUse } from '@typeai/core'
// Your type definitions
// ...
// Your function definitions dependent on your types
// ...
// eg:
const getCurrentWeather = function getCurrentWeather (
location : string ,
unit : TemperatureUnit = 'fahrenheit' ,
options ?: WeatherOptions ,
) : WeatherInfo {
const weatherInfo : WeatherInfo = {
location : location ,
temperature : 82 ,
unit : unit ,
precipitationPct : options ?. flags ?. includePrecipitation ? 25 : undefined ,
pressureMmHg : options ?. flags ?. includePressure ? 25 : undefined ,
forecast : [ 'sunny' , 'cloudy' ] ,
}
return weatherInfo
}
// Register your function and type info
const getCurrentWeatherTool = ToolFunction . from ( getCurrentWeather )
// Run a completion series
const messages : ChatCompletionRequestMessage [ ] = [
{
role : ChatCompletionRequestMessageRoleEnum . User ,
content : "What's the weather like in Boston? Say it like a weather reporter." ,
} ,
]
const request : CreateChatCompletionRequest = {
model : 'gpt-3.5-turbo-0613' ,
messages ,
functions : [ getCurrentWeatherTool . schema ] ,
stream : false ,
max_tokens : 1000 ,
}
const { data : response } = await openai . createChatCompletion ( request )
const responseData = await handleToolUse ( openai , request , response )
const result = responseData ?. choices [ 0 ] . message
console . log ( `LLM final result: ${ JSON . stringify ( result , null , 2 ) } ` )
Catatan: API penyelesaian OpenAI tidak suka respons fungsi void.
Lihat lisensi.txt