人工知能は現在日々発展しており、大規模な言語モデルはますます強力になっています。 AIツールを活用することで作業効率が大幅に向上し、数文字入力してTabキーを押すだけで自動でコードが完成します。
コード補完に加えて、AI を利用して関数を自動化し、必要な JSON データを返すこともできます。
最初に例を見てみましょう:
// 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>
上記のコードでは、getHighestMountain 非同期関数を定義して、最も高い山を取得します。ピーク情報、その戻り値は、Mountain インターフェースで定義されたデータ構造です。関数内に特定の実装はありません。関数が何を行う必要があるかをコメントを通じて記述するだけです。
上記のコードをコンパイルして実行すると、コンソールは次の結果を出力します:
{ name: 'Mount Everest', height: { meters: 8848, feet: 29029 } }
世界で一番高い山はエベレストですヒマラヤ山脈の主峰は標高8848.86メートルで世界最高峰でもありますね。
次に、getHighestMountain 関数の秘密を明らかにします。
getHighestMountain 非同期関数内で何が行われているかを理解するために、コンパイルされた JS コードを見てみましょう。上記のコードを参照してください。@jumploops/magic ライブラリの fetchCompletion 関数が getHighestMountain 関数内で呼び出されます。
この関数のパラメータから、前の TS 関数の関数アノテーションが表示され、さらに、スキーマ属性を含むオブジェクトも表示されます。この属性の値は、Mountain インターフェイスに対応する JSON スキーマ オブジェクトです。
次に、@jumploops/magic ライブラリの fetchCompletion 関数の分析に焦点を当てます。関数は fetchCompletion.ts ファイルで定義され、その内部処理フローは 3 つのステップに分かれています
#Chat Completions API を組み立てるのに必要なヒント;
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#\"}"});});}
応答結果を取得した後、validateAPIResponse 関数を呼び出して応答オブジェクトを検証します。この関数の実装も比較的簡単です。 ajv ライブラリは、JSON スキーマに基づいたオブジェクト検証を実装するために内部で使用されます。
// 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);}
ttypescript ライブラリは @jumploops/magic によって内部的に使用され、tsconfig.json ファイルでカスタム コンバータを構成できるようにします。
トランスフォーマーの内部では、typescript によって提供される API が AST の解析と操作、および目的のコードの生成に使用されます。この文は次のように書き換えることができます: トランスフォーマー内部の主要な処理フローを構成する 3 つのステップがあります。
// @magicannotation を含む AI 関数のソース コードをスキャンします。 ;
package.json
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;}
tsconfig.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"}}
大規模言語モデルが要件に従って構造化データを制御可能に出力できるかどうか。そうすれば、いろいろなことができるようになります。
現在、多くのローコード プラットフォームまたは RPA (ロボティック プロセス オートメーション) プラットフォームは、対応する JSON スキーマ オブジェクトを取得できます。
@jumploops/magic のソリューションを使用すると、ローコード プラットフォームや RPA プラットフォームをよりスマートにすることができます。たとえば、フォーム ページをすばやく作成したり、さまざまなタスクを自然言語で投稿したりできます。
最後に、@jumploops/magic ライブラリの背後にある作業をまとめましょう。このライブラリは TypeScript コンバータを使用して関数の戻り値の型を取得し、その型を JSON スキーマ オブジェクトに変換して、 // @magic アノテーション 次に、ソース コード関数の本体がチャット完了 API を呼び出し、JSON スキーマに対して応答を検証します。 今日の記事はこれで終わります。お役に立てば幸いです。
以上がTS が AI と出会うと何が起こるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。