Konvertieren Sie jede Funktion in eine Chatgpt -Funktion.
AI-FNS ist eine winzige Bibliothek, die jede Funktion in eine Funktion umwandelt, die von ChatGPT aufgerufen werden kann.
Die zugrunde liegende Spezifikation basiert auf der neuen Funktion auf dem OpenAI.
pnpm install ai-fns zod? ? Erstellen Sie ein JSON -Schema für Ihre Funktion manuell und geben Sie es an ChatGPT weiter
import openai , { OpenAI } from "openai" ;
const openai = new OpenAI ( {
apiKey : env . OPENAI_API_KEY ,
} ) ;
const weather = async ( {
latitude ,
longitude ,
} : {
latitude : number ;
longitude : number ;
} ) => {
try {
const res = await fetch (
`https://api.open-meteo.com/v1/forecast?latitude= ${ latitude } &longitude= ${ longitude } ¤t_weather=true`
) ;
return await res . json ( ) ;
} catch ( error ) {
return error ;
}
} ;
const completion = await openai . chat . completions . create ( {
model : "gpt-3.5-turbo-16k" ,
messages : [ { role : "user" , content : "What's the weather in San Francisco?" } ] ,
functions : [
{
name : "weather" ,
description : "Get the current weather in a given location" ,
parameters : {
type : "object" ,
properties : {
longitude : {
type : "number" ,
minimum : - 180 ,
maximum : 180 ,
description : "Longitude" ,
} ,
latitude : {
type : "number" ,
minimum : - 90 ,
maximum : 90 ,
description : "Latitude" ,
} ,
} ,
required : [ "longitude" , "latitude" ] ,
additionalProperties : false ,
} ,
} ,
] ,
} ) ; Verwenden Sie ai-fns , um automatisch ein Schema für Ihre Funktion zu generieren und an ChatGPT zu übergeben
import openai , { OpenAI } from "openai" ;
import { z } from "zod" ;
import { aifn } from "ai-fns" ;
const openai = new OpenAI ( {
apiKey : env . OPENAI_API_KEY ,
} ) ;
const { schema , fn } = aifn (
"weather" ,
"Get the current weather in a given location" ,
z . object ( {
longitude : z . number ( ) . min ( - 180 ) . max ( 180 ) . describe ( "Longitude" ) ,
latitude : z . number ( ) . min ( - 90 ) . max ( 90 ) . describe ( "Latitude" ) ,
} ) ,
async ( { latitude , longitude } ) => {
try {
const res = await fetch (
`https://api.open-meteo.com/v1/forecast?latitude= ${ latitude } &longitude= ${ longitude } ¤t_weather=true`
) ;
return await res . json ( ) ;
} catch ( error ) {
return error ;
}
}
) ;
// Ask the AI a question
const completion = await openai . chat . completions . create ( {
model : "gpt-3.5-turbo-16k" ,
messages : [ { role : "user" , content : "What's the weather in San Francisco?" } ] ,
functions : [ schema ] ,
} ) ; Hier ist ein Beispiel für eine Funktion, die die Ausgabe eines bestimmten mathematischen Ausdrucks berechnet:
import { Parser } from "expr-eval" ;
import { z } from "zod" ;
import { aifn } from "ai-fns" ;
const parser = new Parser ( ) ;
export default aifn (
"calculator" ,
"Calculate the output of a given mathematical expression" ,
z . object ( {
expression : z . string ( ) ,
} ) ,
( { expression } ) => {
try {
const result = parser . parse ( expression ) . evaluate ( ) ;
return result ;
} catch ( error ) {
return `Failed to execute script: ${ error . message } ` ;
}
}
) ;Jetzt können Sie CHATGPT nur bitten, für Sie ein paar Mathematik zu machen:
User: What's 45^(2.12) / 45?
Assistant: The result of 45^(2.12) / 45 is approximately 71.06.
Hier ist ein Beispiel für eine Funktion, die die neuesten Nachrichten aus einem RSS -Feed abholt:
import { z } from "zod" ;
import { aifn } from "ai-fns" ;
const name = "reddit" ;
const description = "Get stories from reddit" ;
const schema = z . object ( {
subreddit : z . string ( ) . optional ( ) . default ( "all" ) . describe ( "Subreddit" ) ,
limit : z . number ( ) . optional ( ) . default ( 5 ) . describe ( "Limit" ) ,
category : z
. enum ( [ "hot" , "new" , "random" , "top" , "rising" , "controversial" ] )
. default ( "hot" )
. describe ( "category" ) ,
} ) ;
const reddit = async ( {
subreddit ,
category ,
limit ,
} : z . infer < typeof schema > ) => {
try {
const params = new URLSearchParams ( {
limit : limit . toString ( ) ,
} ) ;
const url = `https://www.reddit.com/r/ ${ subreddit } / ${ category } .json? ${ params . toString ( ) } ` ;
const res = await fetch ( url ) ;
return await res . json ( ) ;
} catch ( error ) {
console . log ( error ) ;
return error ;
}
} ;
export default aifn ( name , description , schema , reddit ) ; User: What's the top story on /r/programming today?
Assistant: The top story on /r/programming is "Crumb: A New Programming Language Where There are No Keywords, and Everything is a Function". You can read more about it [here](https://github.com/liam-ilan/crumb). It has received 201 upvotes and has 25 comments.
Mit der neuen Funktionsfunktion von OpenAI können Sie Funktionen innerhalb von ChatGPT aufrufen.
Sie müssen jedoch als JSON -Schema für Ihre Funktion bestehen, die die Eingangs- und Ausgabetypen Ihrer Funktion enthält. Dies ist etwas umständlich, um manuell zu tun.
Diese Bibliothek übernimmt automatisch die Konvertierung für Sie
Haben Sie eine Idee für eine Funktion? Fühlen Sie sich frei, eine Pull -Anfrage zu öffnen!
Erstellen Sie einfach eine neue Datei im Verzeichnis src/functions und fügen Sie Ihre Funktion hinzu. Stellen Sie sicher, dass Sie eine Beschreibung und ein Schema für Ihre Funktion hinzufügen.
import { z } from "zod" ;
import { aifn } from "ai-fns" ;
export const name = "name" ;
export const description = "description" ;
export const schema = z . object ( {
// schema
} ) ;
export const fn = async ( { } : /* schema */ z . infer < typeof schema > ) => {
// function body
} ;
export default aifn ( name , description , schema , fn ) ;