Typeai عبارة عن مجموعة أدوات لبناء تطبيقات AI-التي تتم تمكينها باستخدام TypeScript والتي تجعل الأمور تبدو بسيطة للغاية ، ويبدو أنها سحرية. والأهم من ذلك ، أنه يجعل البناء مع LLMS "يشعر" مثل الكود العادي مع عدم تطابق المعاوقة المنخفض.
مثال:
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!' )
ما عليك سوى تحديد الأنواع وتوقيعات الوظائف الخاصة بك كما تفعل بشكل طبيعي ، وسوف يولد Typeai التنفيذ المناسب فيما يتعلق بتصريحات النوع الخاص بك. لا يوجد تحميل ملفات مخطط منفصلة ، ولا هندسة سريعة ، ولا تكتب يدويًا تمثيل مخطط JSON لوظائفك.
اتبعني على Twitter:
مطلوب DeepKit من أجل توفير معلومات نوع وقت التشغيل على وظائفك وأنواعك.
npm install @typeai/core @deepkit/core
ملاحظة: في الوقت الحالي ، يتطلب الاستخراج التلقائي لعلامات JSDOC Description هذه الحزمة NPM المشوقة @deepkit/type و @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
}
ملاحظة: لن تعمل بعض أوقات التشغيل ، مثل tsx
، مع DeepKit. انظر gotchas لمزيد من المعلومات.
في وقت التنفيذ
export OPENAI_API_KEY= ' ... ' # currently required for core functionality
export BING_API_KEY= ' ... ' # if using predefined SearchWeb Tool function
يقوم Typeai بتوصيل وظائفك وأنواعك بآبار واجهات برمجة التطبيقات AI مثل نقاط نهاية إتمام الدردشة في Openai خفيفة الوزن باستخدام انعكاس نوع وقت التشغيل على رمز TypeScript لإنشاء مخطط JSON المطلوب من خلال ميزة استدعاء وظائف Openai ، ومن خلال معالجة الوظائف وتسليم النتائج إلى LLM.
يوفر Typeai حاليًا مجالين رئيسيين للوظائف:
لإنشاء وظيفة مدعومة من الذكاء الاصطناعى ، اكتب وظيفة كعبها وقم بتمريرها إلى toAIFunction()
، والتي ستولد وظيفة مدعومة من الذكاء الاصطناعى مع السلوك المطلوب.
/** @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!' )
وظائف مع أنواع الإدخال والإخراج المعقدة تعمل أيضًا. إليك مثال أكثر إثارة للاهتمام:
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' )
وظيفة أداة الذكاء الاصطناعى هي وظيفة مقدمة إلى LLM لاستخدامها في توليد إجابات.
لنفترض أن لديك وظيفة وتريد توفير وظائفها لـ Openai's LLM لاستخدامها مع ميزة استدعاء الوظائف الخاصة بهم.
يرى:
يوفر Typeai ثلاث وظائف تجعل تعريض وظائفك ونماذجك لـ GPT-3.5/4 ، والتعامل مع طلبات استدعاء الوظائف الناتجة من GPT-3/4 ، شفافة:
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 >
يمكن استخدامها مثل هذا:
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!
*/
نظرًا للطريقة التي يحقن بها DeepKit ، فإن تحويل النوع ، من خلال تصحيح TSC ، قد لا تعمل بعض أوقات التشغيل. هؤلاء يعرفون عدم العمل:
tsx
يستخدم Typeai معلومات نوع وقت تشغيل TypeScript التي توفرها @deepkit/type
إلى:
ينتج عن هذا تجربة ترميز تشعر بأنها "أصلية".
مثال
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 ) } ` )
ملاحظة: لا يعجب API API Openai Complete استجابات وظيفة الفراغ.
انظر الترخيص