TS と AI が出会うと何が起こるでしょうか?

TS と AI が出会うと何が起こるでしょうか?

人工知能は日々進歩しており、大規模な言語モデルはますます強力になっています。仕事に役立つ AI ツールを使用すると、作業効率が大幅に向上します。数文字入力して Tab キーを押すだけで、コードがインテリジェントに完成します。

コード補完に加えて、AI を利用して関数を自動化し、必要な JSON データを返すこともできます。

例を見てみましょう:

 // index.ts interface Height { meters: number; feet: number; } interface Mountain { name: string; height: Height; } // @ts-ignore // @magic async function getHighestMountain(): Promise<Mountain> { // Return the highest mountain } (async () => { console.log(await getHighestMountain()); })();

上記のコードでは、世界最高峰の情報を取得するための getHighestMountain 非同期関数を定義しています。その戻り値は、Mountain インターフェイスで定義されたデータ構造です。関数内には特定の実装はなく、コメントを通じて関数が実行する必要があることを記述するだけです。

上記のコードをコンパイルして実行すると、コンソールに次の結果が出力されます。

 { name: 'Mount Everest', height: { meters: 8848, feet: 29029 } }

世界で最も高い山はエベレストです。ヒマラヤ山脈の主峰であり、標高8,848.86メートルで世界最高峰でもあります。すごいと思いませんか?

次に、getHighestMountain関数の秘密を明らかにします。

getHighestMountain 非同期関数内で何が起こっているかを理解するために、コンパイルされた JS コードを見てみましょう。

 const { fetchCompletion } = require("@jumploops/magic"); // @ts-ignore // @magic function 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#\"}" }); }); }

上記のコードからわかるように、@jumploops/magic ライブラリの fetchCompletion 関数は getHighestMountain 関数内で呼び出されます。

この関数のパラメータから、前の TS 関数の関数注釈がわかります。さらに、スキーマ属性を含むオブジェクトも確認できます。このプロパティの値は、Mountain インターフェイスに対応する JSON スキーマ オブジェクトです。

次に、@jumploops/magic ライブラリの fetchCompletion 関数の分析に焦点を当てます。この関数は fetchCompletion.ts ファイルで定義されており、内部処理フローは次の 3 つのステップに分かれています。

  • Chat Completions API に必要なプロンプトを組み立てます。
  • 応答結果を取得するには、Chat Completions API を呼び出します。
  • 応答を解析し、JSON スキーマを使用して応答オブジェクトを検証します。
 // fetchCompletion.ts export 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); }

Prompt では、AI の役割を設定し、有効な JSON 形式を返すようにガイドするための例をいくつか用意しました。

Chat Completions API を呼び出して応答結果を取得し、openai ライブラリによって提供される createChatCompletion API を直接使用します。

応答結果を解析した後、validateAPIResponse 関数が呼び出され、応答オブジェクトが検証されます。この機能の実装も比較的簡単です。 ajv ライブラリは、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; }

次に、TS コードを fetchCompletion 関数を呼び出す JS コードにコンパイルする方法を分析します。

ttypescript ライブラリは @jumploops/magic によって内部的に使用され、tsconfig.json ファイルでカスタム トランスフォーマーを構成できるようになります。

トランスフォーマー内には、TypeScript によって提供される API があり、これを使用して AST を解析および操作し、目的のコードを生成します。トランスフォーマー内部の主な処理フローも、次の 3 つのステップに分けられます。

  • // @magicannotation; を含む AI 関数のソース コードをスキャンします。
  • AI関数の戻り値の型に応じて、対応するJSONスキーマオブジェクトを生成します。
  • AI関数本体から関数アノテーションを抽出し、fetchCompletion関数を呼び出すコードを生成します。

この記事では、TypeScript コンパイラによって生成された AST オブジェクトを解析および操作する方法については重点的に扱いません。興味があれば、@jumploops/magic プロジェクトの transformer.ts ファイルを読んでみてください。 AI機能を自分で体験したい場合は、この記事の例にあるpackage.jsonとtsconfig.jsonの設定を参考にしてください。

パッケージ.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 ファイル

{ "compilerOptions": { "target": "es2016", "module": "commonjs", "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, "skipLibCheck": true, "plugins": [{ "transform": "@jumploops/magic" }] }, "include": ["src/**/*.ts"], "exclude": [ "node_modules"], }

チャット完了 API は必ずしも期待される形式で有効な JSON オブジェクトを返すとは限らないため、実際には適切な例外処理ロジックを追加する必要があることに注意してください。

現在、@jumploops/magic ライブラリは簡単な例のみを提供し、関数パラメータの設定はサポートしていません。この部分については、Marvin ライブラリの AI 関数に関するドキュメントを読むことができます。

大規模言語モデルが要件に応じて制御可能な方法で構造化データを出力できる場合。そうすれば、私たちにできることはたくさんあります。

現在、多くのローコード プラットフォームや RPA (ロボティック プロセス オートメーション) プラットフォームは、対応する JSON スキーマ オブジェクトを取得できます。

@jumploops/magic のソリューションを使用すると、ローコード プラットフォームや RPA プラットフォームをよりスマートにすることができます。たとえば、フォーム ページをすばやく作成したり、さまざまなタスクを自然言語で公開したりできます。

最後に、@jumploops/magic ライブラリの背後にある作業をまとめましょう。このライブラリは、TypeScript トランスフォーマーを使用して関数の戻り値の型を取得し、その型を JSON スキーマ オブジェクトに変換してから、ソース コード関数の本体を // @magic アノテーション付き関数に置き換え、チャット完了 API を呼び出して、応答を JSON スキーマに対して検証します。

本日の記事はこれで終わりです。お役に立てれば幸いです。

<<:  バンク・オブ・アメリカのアナリスト:チャットボットの中ではChatGPTが最大の優位性を持っており、ユーザーの半数以上が有料サービスにお金を支払うだろう

>>:  誰でも簡単にウェブサイトを構築できる 5 つの AI ウェブサイトビルダー

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

フェイフェイ・リー氏のチームは、一人暮らしの高齢者のCOVID-19症状を監視する家庭用AIシステムを開発

[[321322]]フェイフェイ・リーCOVID-19パンデミックにより、高齢者の介護はさらに困難に...

...

人工知能によって作られた、素晴らしい美しさと能力を持つ美しいロボット

我が国初の自主開発人工知能美容ロボットも誕生しました。その皮膚は先進的なシリコンで作られており、まる...

よく使われる6つのクラスタリング評価指標

クラスタリング結果の妥当性を評価すること、つまりクラスタリング評価または検証は、クラスタリング アプ...

パナソニック、カナダ事業所への標的型サイバー攻撃を確認

「当社はサイバーセキュリティの専門家とサービスプロバイダーの協力を得て、問題解決に向けて直ちに行動を...

ブロックチェーンとAIを最大限に活用する方法

急速に進化する今日のテクノロジー環境において、成功を目指す企業にとって、常に時代の先を行くことが重要...

PaddlePaddle と TensorFlow の比較分析

【51CTO.comオリジナル記事】この記事では主に、フレームワークの概要、システム アーキテクチャ...

2020 年に最も実用的な機械学習ツールは何ですか?

ミシュランの星付き料理を作るときと同じように、整理整頓されたキッチンを持つことは重要ですが、選択肢が...

Alibaba Cloud がバッチおよびストリーム機械学習プラットフォーム Alink をオープンソース化し、アルゴリズム開発のハードルを下げる

11月28日、アリババクラウドは、世界初の統合バッチ・ストリームアルゴリズムプラットフォームでもある...

人工知能と医療画像を組み合わせたアプリケーションの4つのコア価値

「人工知能+医用画像」は、最先端の人工知能技術を医用画像診断に適用し、医師が患者の状態を診断するのを...

OpenAIの最新の評価額は半年で3倍になり、800億ドルを超える

ウォール・ストリート・ジャーナル紙は、事情に詳しい関係者の話として、OpenAIは同社を800億~9...

...

自律型ドローン技術の長所と短所を探る

自律型ドローン技術は、業界全体に変革をもたらす力として登場し、比類のない効率性と革新性を約束していま...

アリババが雲奇会議でデジタル経済について語らなかったこと

2009 年以来、雲奇会議は、最も初期のローカル ウェブサイト サミットから、アリババの年次戦略およ...

人工知能が銀行業界の変革を加速します!ビッグデータにより各ユーザーの信用格付けが提供されます!

[[221188]]将来、人工知能が 380 万人以上の銀行員の仕事を全て置き換える日が来るのでし...