Heim >Technologie-Peripheriegeräte >KI >Was passiert, wenn TS auf KI trifft?
Künstliche Intelligenz entwickelt sich täglich weiter und große Sprachmodelle werden immer leistungsfähiger. Durch den Einsatz von KI-Tools wurde die Arbeitseffizienz erheblich verbessert. Sie müssen nur wenige Zeichen eingeben und die Tabulatortaste drücken, und der Code wird automatisch vervollständigt.
Neben der Code-Vervollständigung können wir uns auch von der KI dabei unterstützen lassen, Funktionen zu automatisieren und die erforderlichen JSON-Daten zurückzugeben.
Schauen wir uns zunächst ein Beispiel an:
// index.tsinterface Height {meters: number;feet: number;}interface Mountain {name: string;height: Height;}// @ts-ignore// @magicasync function getHighestMountain(): Promise<mountain> {// Return the highest mountain}(async () => {console.log(await getHighestMountain());})();</mountain>
Im obigen Code definieren wir eine asynchrone Funktion getHighestMountain, um die Informationen über den höchsten Gipfel der Welt zu erhalten, und ihr Rückgabewert ist die durch definierte Datenstruktur die Mountain-Schnittstelle. Es gibt keine spezifische Implementierung innerhalb der Funktion, wir beschreiben lediglich durch Kommentare, was die Funktion tun muss.
Nach dem Kompilieren und Ausführen des obigen Codes gibt die Konsole die folgenden Ergebnisse aus:
{ name: 'Mount Everest', height: { meters: 8848, feet: 29029 } }
Der höchste Berg der Welt ist der Mount Everest, der Hauptgipfel des Himalaya und der höchste Gipfel der Welt , mit einer Höhe von 8848,86 Metern, ist das nicht sehr hoch?
Als nächstes werde ich das Geheimnis der getHighestMountain-Funktion lüften.
Um zu verstehen, was in der asynchronen Funktion getHighestMountain geschieht, werfen wir einen Blick auf den kompilierten JS-Code:
const { fetchCompletion } = require("@jumploops/magic");// @ts-ignore// @magicfunction getHighestMountain() {return __awaiter(this, void 0, void 0, function* () {return yield fetchCompletion("{\n// Return the highest mountain\n}", {schema: "{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"height\":{\"$ref\":\"#/definitions/Height\"}},\"required\":[\"height\",\"name\"],\"definitions\":{\"Height\":{\"type\":\"object\",\"properties\":{\"meters\":{\"type\":\"number\"},\"feet\":{\"type\":\"number\"}},\"required\":[\"feet\",\"meters\"]}},\"$schema\":\"http://json-schema.org/draft-07/schema#\"}"});});}
Wie aus dem obigen Code ersichtlich ist, ist die fetchCompletion-Funktion in @jumploops/magic Die Bibliothek wird innerhalb des getHighestMountain-Aufrufs verwendet.
Aus den Parametern dieser Funktion sehen wir die Funktionsanmerkung der vorherigen TS-Funktion. Darüber hinaus sehen wir auch ein Objekt, das das Schema-Attribut enthält. Der Wert dieses Attributs ist das JSON-Schema-Objekt, das der Mountain-Schnittstelle entspricht.
Als nächstes konzentrieren wir uns auf die Analyse der fetchCompletion-Funktion in der @jumploops/magic-Bibliothek. Eine Funktion ist in der Datei fetchCompletion.ts definiert und ihr interner Verarbeitungsablauf ist in drei Schritte unterteilt.
// fetchCompletion.tsexport async function fetchCompletion(existingFunction: string, { schema }: { schema: any }) {let completion;// (1)const prompt = `You are a robotic assistant. Your only language is code. You only respond with valid JSON. Nothing but JSON. For example, if you're planning to return:{ "list": [ { "name": "Alice" }, { "name": "Bob" }, { "name": "Carol"}] } Instead just return:[ { "name": "Alice" }, { "name": "Bob" }, { "name": "Carol"}]...Prompt: ${existingFunction.replace('{', '') .replace('}', '').replace('//', '').replace('\n', '')}JSON Schema: \`\`\`${JSON.stringify(JSON.parse(schema), null, 2)}\`\`\``;// (2)try {completion = await openai.createChatCompletion({model: process.env.OPENAI_MODEL ? process.env.OPENAI_MODEL : 'gpt-3.5-turbo',messages: [{ role: 'user', content: prompt }],});} catch (err) {console.error(err);return;}const response = JSON.parse(completion.data.choices[0].message.content);// (3)if (!validateAPIResponse(response, JSON.parse(schema))) {throw new Error("Invalid JSON response from LLM");}return JSON.parse(completion.data.choices[0].message.content);}
In Prompt haben wir die Rolle für die KI eingerichtet und einige Beispiele dafür vorbereitet, um sie bei der Rückgabe eines gültigen JSON-Formats zu unterstützen.
Rufen Sie die Chat Completions-API auf, um die Antwortergebnisse zu erhalten, und verwenden Sie direkt die von der openai-Bibliothek bereitgestellte createChatCompletion-API.
Nach Erhalt des Antwortergebnisses wird die Funktion „validateAPIResponse“ aufgerufen, um das Antwortobjekt zu überprüfen. Auch die Implementierung dieser Funktion ist relativ einfach. Die ajv-Bibliothek wird intern verwendet, um die Objektüberprüfung basierend auf dem JSON-Schema zu implementieren.
export function validateAPIResponse(apiResponse: any, schema: object): boolean {const ajvInstance = new Ajv();ajvFormats(ajvInstance);const validate = ajvInstance.compile(schema);const isValid = validate(apiResponse);if (!isValid) {console.log("Validation errors:", validate.errors);}return isValid;}
Als nächstes wollen wir analysieren, wie man den TS-Code in JS-Code kompiliert, der die fetchCompletion-Funktion aufruft.
ttypescript-Bibliothek, die intern von @jumploops/magic verwendet wird und es uns ermöglicht, benutzerdefinierte Konverter in der Datei tsconfig.json zu konfigurieren.
Im Transformator befindet sich die von Typescript bereitgestellte API, die zum Parsen und Betreiben von AST sowie zum Generieren des gewünschten Codes verwendet wird. Dieser Satz kann wie folgt umgeschrieben werden: Es gibt drei Schritte, die den Hauptverarbeitungsablauf innerhalb des Transformators bilden
package.json
{"name": "magic","scripts": {"start": "ttsc && cross-env OPENAI_API_KEY=sk-*** node src/index.js"},"keywords": [],"author": "","license": "ISC","devDependencies": {"@jumploops/magic": "^0.0.6","cross-env": "^7.0.3","ts-patch": "^3.0.0","ttypescript": "^1.5.15","typescript": "4.8.2"}}
tsconfig.json-Datei
{"compilerOptions": {"target": "es2016","module": "commonjs","esModuleInterop": true,"allowSyntheticDefaultImports": true,"strict": true,"skipLibCheck": true,"plugins": [{ "transform": "@jumploops/magic" }]},"include": ["src/**/*.ts"],"exclude": [ "node_modules"],}
Bitte beachten Sie, dass die Chat-Vervollständigungs-API nicht immer ein gültiges JSON-Objekt in dem von uns erwarteten Format zurückgibt, also Sie In der Praxis muss eine geeignete Ausnahmebehandlungslogik hinzugefügt werden.
Derzeit unterstützt die @jumploops/magic-Bibliothek das Festlegen von Funktionsparametern nicht und bietet nur einfache Beispiele. Zu diesem Teil steht Ihnen die Dokumentation zu den Fähigkeiten der künstlichen Intelligenz in der Marvin-Bibliothek zum Lesen zur Verfügung.
Wenn das große Sprachmodell strukturierte Daten gemäß unseren Anforderungen kontrollierbar ausgeben kann. Dann können wir vieles tun.
Derzeit können viele Low-Code-Plattformen oder RPA-Plattformen (Robotic Process Automation) die entsprechenden JSON-Schema-Objekte erhalten.
Mit Lösungen von @jumploops/magic können wir Low-Code-Plattformen oder RPA-Plattformen intelligenter machen. Erstellen Sie beispielsweise schnell Formularseiten oder veröffentlichen Sie verschiedene Aufgaben in natürlicher Sprache.
Lassen Sie uns abschließend die Arbeit hinter der @jumploops/magic-Bibliothek zusammenfassen, die einen TypeScript-Konverter verwendet, um den Rückgabetyp einer Funktion abzurufen, den Typ in ein JSON-Schema-Objekt zu konvertieren und dann den Quellcode der Funktion zu ersetzen, der das enthält // @magic-Annotationstext, ruft dann die Chat-Abschluss-API auf und validiert die Antwort anhand des JSON-Schemas.
Dies ist das Ende des heutigen Artikels. Ich hoffe, er wird Ihnen hilfreich sein.
Das obige ist der detaillierte Inhalt vonWas passiert, wenn TS auf KI trifft?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!