{"id":50915,"date":"2024-10-30T00:00:00","date_gmt":"2024-10-30T07:00:00","guid":{"rendered":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/"},"modified":"2026-03-30T11:48:21","modified_gmt":"2026-03-30T18:48:21","slug":"automate-slide-creation-using-openai-and-node-js","status":"publish","type":"post","link":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/","title":{"rendered":"OpenAI\u3068Node.js\u3092\u4f7f\u3063\u3066\u30b9\u30e9\u30a4\u30c9\u4f5c\u6210\u3092\u81ea\u52d5\u5316\u3059\u308b"},"content":{"rendered":"<p>AI\u30c4\u30fc\u30eb\u306e\u53f0\u982d\u306b\u3088\u308a\u3001\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30b9\u30e9\u30a4\u30c9\u306e\u4f5c\u6210\u3092\u542b\u3080\u591a\u304f\u306e\u624b\u4f5c\u696d\u3092\u81ea\u52d5\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u958b\u767a\u8005\u306f\u3001OpenAI\u306e\u8a00\u8a9e\u30e2\u30c7\u30eb\u3068Node.js\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30b9\u30e9\u30a4\u30c9\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u751f\u6210\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u81ea\u52d5\u5316\u306f\u78ba\u5b9f\u306b\u6642\u9593\u3092\u7bc0\u7d04\u3057\u307e\u3059\u3002\u30b3\u30f3\u30c6\u30f3\u30c4\u751f\u6210\u306bOpenAI\u3092\u4f7f\u3044\u3001\u30aa\u30fc\u30b1\u30b9\u30c8\u30ec\u30fc\u30b7\u30e7\u30f3\u306bNode.js\u3092\u4f7f\u3046\u3053\u3068\u3067\u3001\u8aac\u5f97\u529b\u304c\u3042\u308a\u60c5\u5831\u91cf\u306e\u591a\u3044\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u4f5c\u6210\u30d7\u30ed\u30bb\u30b9\u3092\u697d\u306b\u52b9\u7387\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u6295\u7a3f\u3067\u306f\u3001OpenAI\u306e\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8API\u30e2\u30c7\u30eb\u3092\u4f7f\u3063\u3066\u30b9\u30e9\u30a4\u30c9\u30fb\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u4f5c\u6210\u3092\u81ea\u52d5\u5316\u3057\u3001Node.js\u3092\u4f7f\u3063\u3066\u30b9\u30e9\u30a4\u30c9\u30fb\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3001GridDB\u3092\u4f7f\u3063\u3066\u30b9\u30e9\u30a4\u30c9\u60c5\u5831\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\n<h2>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5b9f\u884c<\/h2>\n<p>\u3053\u306e<a href=\"https:\/\/github.com\/griddbnet\/Blogs\/tree\/slides\">GitHub\u30ea\u30dd\u30b8\u30c8\u30ea<\/a>\u304b\u3089\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u30af\u30ed\u30fc\u30f3\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code>git clone https:\/\/github.com\/griddbnet\/Blogs.git --branch slides<\/code><\/pre>\n<\/div>\n<p>\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001<a href=\"#1-installing-nodejs\">Node.js<\/a>\u3068<a href=\"#2-setting-up-griddb\">GridDB<\/a>\u3082\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u5fc5\u8981\u306a\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092 <code>apps<\/code> \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u5909\u66f4\u3057\u3066\u304b\u3089\u3001\u4f9d\u5b58\u95a2\u4fc2\u3092\u3059\u3079\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">cd apps\nnpm install <\/code><\/pre>\n<\/div>\n<p>.env<code>\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3001\u3059\u3079\u3066\u306e\u74b0\u5883\u5909\u6570\u3092<\/code>.env.example` \u30d5\u30a1\u30a4\u30eb\u304b\u3089\u30b3\u30d4\u30fc\u3057\u307e\u3059\u3002\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u306f OpenAI \u30ad\u30fc\u304c\u5fc5\u8981\u3067\u3059\u3002\u30ad\u30fc\u306e\u53d6\u5f97\u65b9\u6cd5\u306b\u3064\u3044\u3066\u306f <a href=\"#3-setup-openai-keys\">\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3<\/a> \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">OPENAI_API_KEY=sk-proj-secret\nVITE_APP_URL=http:\/\/localhost:3000<\/code><\/pre>\n<\/div>\n<p>VITE_APP_URL`\u3092\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u5909\u66f4\u3057\u3001\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code>npm run start:build<\/code><\/pre>\n<\/div>\n<p>\u6b21\u306b\u30d6\u30e9\u30a6\u30b6\u3092\u958b\u304d\u3001\u30a2\u30d7\u30ea\u306eURL\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002\u30c7\u30fc\u30bf\u30b5\u30f3\u30d7\u30eb\u3092\u9078\u629e\u3057\u3001<strong>Create Slide<\/strong>\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/create-slide-button.png\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/create-slide-button.png\" alt=\"\" width=\"1780\" height=\"892\" class=\"aligncenter size-full wp-image-30746\" srcset=\"\/wp-content\/uploads\/2024\/10\/create-slide-button.png 1780w, \/wp-content\/uploads\/2024\/10\/create-slide-button-300x150.png 300w, \/wp-content\/uploads\/2024\/10\/create-slide-button-1024x513.png 1024w, \/wp-content\/uploads\/2024\/10\/create-slide-button-768x385.png 768w, \/wp-content\/uploads\/2024\/10\/create-slide-button-1536x770.png 1536w, \/wp-content\/uploads\/2024\/10\/create-slide-button-600x301.png 600w, \/wp-content\/uploads\/2024\/10\/create-slide-button-1280x640.png 1280w\" sizes=\"(max-width: 1780px) 100vw, 1780px\" \/><\/a><\/p>\n<p>\u30b9\u30e9\u30a4\u30c9\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u304c\u6b63\u5e38\u306b\u4f5c\u6210\u3055\u308c\u308b\u3068\u3001\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30ea\u30f3\u30af\u304c\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002<\/p>\n<h2>\u306f\u3058\u3081\u306b<\/h2>\n<h3>1&#46; Node.js\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h3>\n<p>\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306fNode.js\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u4e0a\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002<a href=\"https:\/\/nodejs.org\/en\/download\">\u3053\u3061\u3089<\/a>\u304b\u3089\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001<code>nvm<\/code> \u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u3068 Node.js v16.20.2 LTS \u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\"># installs nvm (Node Version Manager)\ncurl -o- https:\/\/raw.githubusercontent.com\/nvm-sh\/nvm\/v0.39.7\/install.sh | bash\n\n# download and install Node.js\nnvm install 16\n\n# verifies the right Node.js version is in the environment\nnode -v # should print `v16.20.2`\n\n# verifies the right NPM version is in the environment\nnpm -v # should print `8.19.4``<\/code><\/pre>\n<\/div>\n<p>Node.js\u3068GridDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u63a5\u7d9a\u3059\u308b\u306b\u306f\u3001<a href=\"https:\/\/github.com\/nodejs\/node-addon-api\">gridb-node-api<\/a> npm\u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<h3>2&#46; GridDB\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/h3>\n<p>GridDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f7f\u7528\u3057\u3066\u3001\u30ec\u30b7\u30d4\u3068\u6804\u990a\u5206\u6790\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002\u8a73\u3057\u3044\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u306f<a href=\"https:\/\/docs.griddb.net\/latest\/gettingstarted\/using-apt\/#install-with-apt-get\">guide<\/a>\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u3053\u3067\u306fUbuntu 20.04 LTS\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n<p>GridDB\u3092\u8d77\u52d5\u3057\u3001\u30b5\u30fc\u30d3\u30b9\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code>sudo systemctl status gridstore<\/code><\/pre>\n<\/div>\n<p>\u5b9f\u884c\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u5b9f\u884c\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code>sudo systemctl start gridstore<\/code><\/pre>\n<\/div>\n<h3>3&#46; OpenAI\u30ad\u30fc\u306e\u8a2d\u5b9a<\/h3>\n<p>OpenAI\u306e\u30ad\u30fc\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5358\u4f4d\u306a\u306e\u3067\u3001\u307e\u305aOpenAI\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/create-openai-project.png\"><img decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/create-openai-project.png\" alt=\"\" width=\"2038\" height=\"966\" class=\"aligncenter size-full wp-image-30756\" srcset=\"\/wp-content\/uploads\/2024\/10\/create-openai-project.png 2038w, \/wp-content\/uploads\/2024\/10\/create-openai-project-300x142.png 300w, \/wp-content\/uploads\/2024\/10\/create-openai-project-1024x485.png 1024w, \/wp-content\/uploads\/2024\/10\/create-openai-project-768x364.png 768w, \/wp-content\/uploads\/2024\/10\/create-openai-project-1536x728.png 1536w, \/wp-content\/uploads\/2024\/10\/create-openai-project-600x284.png 600w\" sizes=\"(max-width: 2038px) 100vw, 2038px\" \/><\/a><\/p>\n<p>OpenAI\u306e\u30b5\u30fc\u30d3\u30b9\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306b\u306f\u3001\u6709\u52b9\u306a\u30ad\u30fc\u304c\u5fc5\u8981\u3067\u3059\u3002\u3053\u306e<a href=\"https:\/\/platform.openai.com\/api-keys\">\u30ea\u30f3\u30af<\/a>\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001\u65b0\u3057\u3044 OpenAI \u30ad\u30fc\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/create-api-key.png\"><img decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/create-api-key.png\" alt=\"\" width=\"2112\" height=\"1308\" class=\"aligncenter size-full wp-image-30755\" srcset=\"\/wp-content\/uploads\/2024\/10\/create-api-key.png 2112w, \/wp-content\/uploads\/2024\/10\/create-api-key-300x186.png 300w, \/wp-content\/uploads\/2024\/10\/create-api-key-1024x634.png 1024w, \/wp-content\/uploads\/2024\/10\/create-api-key-768x476.png 768w, \/wp-content\/uploads\/2024\/10\/create-api-key-1536x951.png 1536w, \/wp-content\/uploads\/2024\/10\/create-api-key-2048x1268.png 2048w, \/wp-content\/uploads\/2024\/10\/create-api-key-600x372.png 600w\" sizes=\"(max-width: 2112px) 100vw, 2112px\" \/><\/a><\/p>\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u4f7f\u7528\u3059\u308b\u30e2\u30c7\u30eb\u3092\u6709\u52b9\u306b\u3059\u308b\u5fc5\u8981\u3082\u3042\u308b\u3002\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001<code>gpt-4o<\/code>\u30e2\u30c7\u30eb\u304c\u5fc5\u8981\u3067\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8a2d\u5b9a\u3067\u3001\u6709\u52b9\u306b\u3059\u308b\u30e2\u30c7\u30eb\u3092\u9078\u629e\u3057\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/models.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/models.png\" alt=\"\" width=\"3020\" height=\"1514\" class=\"aligncenter size-full wp-image-30749\" srcset=\"\/wp-content\/uploads\/2024\/10\/models.png 3020w, \/wp-content\/uploads\/2024\/10\/models-300x150.png 300w, \/wp-content\/uploads\/2024\/10\/models-1024x513.png 1024w, \/wp-content\/uploads\/2024\/10\/models-768x385.png 768w, \/wp-content\/uploads\/2024\/10\/models-1536x770.png 1536w, \/wp-content\/uploads\/2024\/10\/models-2048x1027.png 2048w, \/wp-content\/uploads\/2024\/10\/models-600x301.png 600w\" sizes=\"(max-width: 3020px) 100vw, 3020px\" \/><\/a><\/p>\n<p>.env<code>\u30d5\u30a1\u30a4\u30eb\u306bOpenAI\u306e\u30ad\u30fc\u3092\u4fdd\u5b58\u3057\u3001<\/code>.gitignore`\u306b\u8ffd\u52a0\u3057\u3066\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u306b\u542b\u3081\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n<h3>4&#46; AI\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/h3>\n<p>\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u306fAI\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u304c\u5fc5\u8981\u3067\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306b\u884c\u304d\u3001\u65b0\u3057\u3044\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/create-ai-assistant.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/create-ai-assistant.png\" alt=\"\" width=\"3020\" height=\"1702\" class=\"aligncenter size-full wp-image-30754\" srcset=\"\/wp-content\/uploads\/2024\/10\/create-ai-assistant.png 3020w, \/wp-content\/uploads\/2024\/10\/create-ai-assistant-300x169.png 300w, \/wp-content\/uploads\/2024\/10\/create-ai-assistant-1024x577.png 1024w, \/wp-content\/uploads\/2024\/10\/create-ai-assistant-768x433.png 768w, \/wp-content\/uploads\/2024\/10\/create-ai-assistant-1536x866.png 1536w, \/wp-content\/uploads\/2024\/10\/create-ai-assistant-2048x1154.png 2048w, \/wp-content\/uploads\/2024\/10\/create-ai-assistant-150x85.png 150w, \/wp-content\/uploads\/2024\/10\/create-ai-assistant-600x338.png 600w\" sizes=\"(max-width: 3020px) 100vw, 3020px\" \/><\/a><\/p>\n<p>Instruction**\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u6ce8\u610f\u3092\u6255\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u3053\u306e\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u306b\u4f7f\u308f\u308c\u308b\u547d\u4ee4\u3067\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code>You are a data scientist assistant. When given data and a query, write the proper code and create the proper visualization.<\/code><\/pre>\n<\/div>\n<p>\u3053\u308c\u306f\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u304c\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u74b0\u5883\u3067\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u3001\u30d7\u30ed\u30f3\u30d7\u30c8\u304c\u30b3\u30fc\u30c9\u3092\u5b9f\u884c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002\u3053\u306e\u6a5f\u80fd\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001<a href=\"https:\/\/developers.openai.com\/api\/docs\/assistants\/tools\/code-interpreter\">\u3053\u3061\u3089<\/a>\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>AI\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u4f5c\u6210\u5f8c\u3001\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8ID\u3092\u30b3\u30d4\u30fc\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306eID\u306f\u3001\u3042\u306a\u305f\u304c\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u306b\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1\u3067\u304d\u308b\u30b3\u30fc\u30c9\u5185\u306e\u53c2\u7167\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code>const dataScienceAssistantId = \"asst_FOqRnMVXw0WShTSGw70NZJAX\"<\/code><\/pre>\n<\/div>\n<h2>\u30c7\u30fc\u30bf\u306e\u4f8b<\/h2>\n<p>\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u81ea\u52d5\u8eca\u306e\u30b9\u30da\u30a2\u30d1\u30fc\u30c4\u8ca9\u58f2\u306eJSON\u30c7\u30fc\u30bf\u30b5\u30f3\u30d7\u30eb\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u30c7\u30fc\u30bf\u306f <code>data<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f<a href=\"https:\/\/github.com\/junwatu\/ai-slides-creator\/blob\/main\/apps\/data\/spare-part-sales-2020-2024.json\">2020\u5e74\u304b\u30892024\u5e74\u307e\u3067\u306e\u30b9\u30da\u30a2\u30d1\u30fc\u30c4\u8ca9\u58f2\u30c7\u30fc\u30bf<\/a>\u3067\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">[\n {\n  \"Year\": 2020,\n  \"Quarter\": \"Q1\",\n  \"Distribution channel\": \"Online Sales\",\n  \"Revenue ($M)\": 2.10,\n  \"Costs ($M)\": 1.905643,\n  \"Customer count\": 190,\n  \"Time\": \"2020 Q1\",\n  \"Product Category\": \"Engine Parts\",\n  \"Region\": \"North America\",\n  \"Units Sold\": 900,\n  \"Average Sale Price ($)\": 2333,\n  \"Discounts Given ($)\": 14000,\n  \"Returns ($)\": 4500,\n  \"Customer Satisfaction Rating\": 8.2,\n  \"Salesperson\": \"SP120\",\n  \"Marketing Spend ($)\": 18000\n },\n {\n  \"Year\": 2020,\n  \"Quarter\": \"Q1\",\n  \"Distribution channel\": \"Direct Sales\",\n  \"Revenue ($M)\": 2.15,\n  \"Costs ($M)\": 2.004112,\n  \"Customer count\": 200,\n  \"Time\": \"2020 Q1\",\n  \"Product Category\": \"Brakes\",\n  \"Region\": \"Europe\",\n  \"Units Sold\": 1000,\n  \"Average Sale Price ($)\": 2150,\n  \"Discounts Given ($)\": 12000,\n  \"Returns ($)\": 5000,\n  \"Customer Satisfaction Rating\": 8.0,\n  \"Salesperson\": \"SP121\",\n  \"Marketing Spend ($)\": 19000\n },\n ...\n {\n  \"Year\": 2024,\n  \"Quarter\": \"Q2\",\n  \"Distribution channel\": \"Direct Sales\",\n  \"Revenue ($M)\": 3.15,\n  \"Costs ($M)\": 2.525112,\n  \"Customer count\": 390,\n  \"Time\": \"2024 Q2\",\n  \"Product Category\": \"Brakes\",\n  \"Region\": \"Europe\",\n  \"Units Sold\": 1500,\n  \"Average Sale Price ($)\": 2095,\n  \"Discounts Given ($)\": 22000,\n  \"Returns ($)\": 17000,\n  \"Customer Satisfaction Rating\": 9.1,\n  \"Salesperson\": \"SP144\",\n  \"Marketing Spend ($)\": 38000\n }\n]<\/code><\/pre>\n<\/div>\n<p>\u7406\u60f3\u7684\u306b\u306f\u3001\u30c7\u30fc\u30bf\u306f\u30e6\u30fc\u30b6\u30fc\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u7d4c\u7531\u3067\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u308b\u3079\u304d\u3067\u3059\u3002\u3057\u304b\u3057\u3001\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u7c21\u5358\u306e\u305f\u3081\u3001\u30c7\u30fc\u30bf\u30b5\u30f3\u30d7\u30eb\u306e\u30c9\u30ed\u30c3\u30d7\u30c0\u30a6\u30f3\u304b\u3089\u30c7\u30fc\u30bf\u30b5\u30f3\u30d7\u30eb\u3092\u9078\u629e\u3059\u308b\u3068\u3001\u30c7\u30fc\u30bf\u304c\u76f4\u63a5\u51e6\u7406\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>**OpenAI\u306f\u3069\u3046\u3084\u3063\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u76f4\u63a5\u51e6\u7406\u3059\u308b\u306e\u3067\u3059\u304b\uff1f<\/p>\n<p>\u7b54\u3048\u306f\u3001\u307e\u305a\u30c7\u30fc\u30bf\u30b5\u30f3\u30d7\u30eb\u30d5\u30a1\u30a4\u30eb\u3092\u624b\u52d5\u3067\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306b\u884c\u304d\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/upload-files.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/upload-files.png\" alt=\"\" width=\"2364\" height=\"1410\" class=\"aligncenter size-full wp-image-30751\" srcset=\"\/wp-content\/uploads\/2024\/10\/upload-files.png 2364w, \/wp-content\/uploads\/2024\/10\/upload-files-300x179.png 300w, \/wp-content\/uploads\/2024\/10\/upload-files-1024x611.png 1024w, \/wp-content\/uploads\/2024\/10\/upload-files-768x458.png 768w, \/wp-content\/uploads\/2024\/10\/upload-files-1536x916.png 1536w, \/wp-content\/uploads\/2024\/10\/upload-files-2048x1222.png 2048w, \/wp-content\/uploads\/2024\/10\/upload-files-600x358.png 600w\" sizes=\"(max-width: 2364px) 100vw, 2364px\" \/><\/a><\/p>\n<p>\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u306e\u76ee\u7684\u306b\u6ce8\u610f\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u30c7\u30fc\u30bf\u30b5\u30f3\u30d7\u30eb\u30d5\u30a1\u30a4\u30eb\u306f<strong>\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8<\/strong>\u30d5\u30a1\u30a4\u30eb\u3068\u3057\u3066\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u5f8c\u3067\u3001\u3053\u308c\u3089\u306e\u30d5\u30a1\u30a4\u30ebID\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u30c9\u30ed\u30c3\u30d7\u30c0\u30a6\u30f3\u304b\u3089\u30c7\u30fc\u30bf\u30b5\u30f3\u30d7\u30eb\u3092\u9078\u629e\u3057\u305f\u3068\u304d\u306b\u3001\u3069\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u4f7f\u7528\u3055\u308c\u308b\u304b\u3092\u8b58\u5225\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002<\/p>\n<h2>\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u751f\u6210<\/h2>\n<p>\u30e6\u30fc\u30b6\u30fc\u304c\u30c7\u30fc\u30bf\u30b5\u30f3\u30d7\u30eb\u3092\u9078\u629e\u3057\u3001<strong>Create Slide<\/strong>\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8API\u304c\u30b3\u30f3\u30c6\u30f3\u30c4\u30b9\u30e9\u30a4\u30c9\u7528\u306e\u753b\u50cf\u3068\u30c6\u30ad\u30b9\u30c8\u3092\u751f\u6210\u3057\u307e\u3059\u3002\u30b9\u30e9\u30a4\u30c9\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u751f\u6210\u3059\u308b\u305f\u3081\u306e\u30b3\u30fc\u30c9\u3067\u91cd\u8981\u306a\u30b9\u30c6\u30c3\u30d7\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059\uff1a<\/p>\n<h3>1&#46; \u30c7\u30fc\u30bf\u30b5\u30f3\u30d7\u30eb\u306e\u5206\u6790<\/h3>\n<p>OpenAI\u306f\u9078\u629e\u3055\u308c\u305f\u30c7\u30fc\u30bf\u30b5\u30f3\u30d7\u30eb\u3092\u5206\u6790\u3057\u3001\u56db\u534a\u671f\u3054\u3068\u3001\u5e74\u5ea6\u3054\u3068\u306b\u5229\u76ca\u3092\u8a08\u7b97\u3057\u3001\u30d7\u30ed\u30c3\u30c8\u3092\u8996\u899a\u5316\u3057\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\u306f\u6b21\u306e\u3068\u304a\u308a\u3067\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code>const analyzeDataPrompt = \"Calculate the profit (revenue minus cost) by quarter and year, and visualize as a line plot across the distribution channels, where the colors of the lines are green, light red, and light blue\"<\/code><\/pre>\n<\/div>\n<p>And this code will process the prompt and the selected file (see <code>fileId<\/code>)<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-js\"> const thread = await openai.beta.threads.create({\n  messages: [\n   {\n    \"role\": \"user\",\n    \"content\": analyzeDataPrompt,\n    \"attachments\": [\n     {\n      file_id: fileId,\n      tools: [{ type: \"code_interpreter\" }]\n     }\n    ]\n   }\n  ]\n });<\/code><\/pre>\n<\/div>\n<p>\u3053\u306e\u30b3\u30fc\u30c9\u304b\u3089\u3001\u30d7\u30ed\u30c3\u30c8\u753b\u50cf\u3092\u53d6\u5f97\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306fpublic\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u4fdd\u5b58\u3055\u308c\u3001\u30b9\u30e9\u30a4\u30c9\u306e\u30b3\u30f3\u30c6\u30f3\u30c4\u3067\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002<\/p>\n<h3>2&#46; \u7b87\u6761\u66f8\u304d\u306e\u751f\u6210<\/h3>\n<p>AI\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u306f\u30c7\u30fc\u30bf\u306b\u5bfe\u3059\u308b\u6d1e\u5bdf\u3092\u4e0e\u3048\u3001\u7b87\u6761\u66f8\u304d\u3092\u751f\u6210\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u3001AI\u306b\u30c7\u30fc\u30bf\u306b\u95a2\u3059\u308b2\u3064\u306e\u6d1e\u5bdf\u3092\u4e0e\u3048\u308b\u3088\u3046\u306b\u6307\u793a\u3059\u308b\u30d7\u30ed\u30f3\u30d7\u30c8\u3067\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code>const insightPrompt = `Give me two medium-length sentences (~20-30 words per sentence) of the most important insights from the plot you just created, and save each sentence as an item in one array. Give me a raw array, no formatting, no commentary. These will be used for a slide deck, and they should be about the 'so what' behind the data.`<\/code><\/pre>\n<\/div>\n<h3>3&#46; \u30a4\u30f3\u30b5\u30a4\u30c8\u30bf\u30a4\u30c8\u30eb\u306e\u751f\u6210<\/h3>\n<p>\u6700\u5f8c\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u3001\u30a4\u30f3\u30b5\u30a4\u30c8\u306e\u30bf\u30a4\u30c8\u30eb\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u3053\u308c\u306f\u305d\u306e\u305f\u3081\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\u3067\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code>const titlePrompt = \"Given the plot and bullet point you created, come up with a very brief title only for a slide. It should reflect just the main insights you came up with.\"<\/code><\/pre>\n<\/div>\n<p>\u30b9\u30e9\u30a4\u30c9\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u751f\u6210\u3059\u308b\u305f\u3081\u306e\u5b8c\u5168\u306a\u30b3\u30fc\u30c9\u306f\u3001<a href=\"https:\/\/github.com\/junwatu\/ai-slides-creator\/blob\/main\/apps\/libs\/ai.js\"><code>libs\/ai.js<\/code><\/a>\u30d5\u30a1\u30a4\u30eb\u306b\u3042\u308a\u307e\u3059\u3002<\/p>\n<h2>\u30b9\u30e9\u30a4\u30c9\u306e\u751f\u6210<\/h2>\n<p>\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f<a href=\"https:\/\/gitbrent.github.io\/PptxGenJS\/\">PptxGenJS<\/a>\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3066\u30b9\u30e9\u30a4\u30c9\u3092\u751f\u6210\u3057\u307e\u3059\u3002libs\/pptx.js`\u30d5\u30a1\u30a4\u30eb\u306b\u5b8c\u5168\u306a\u30b3\u30fc\u30c9\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u3053\u308c\u306fAI\u304c\u751f\u6210\u3057\u305f\u30b9\u30e9\u30a4\u30c9\u60c5\u5831\u306e\u6e96\u5099\u304c\u3067\u304d\u305f\u3068\u304d\u306b <code>createPresentation()<\/code> \u95a2\u6570\u3092\u547c\u3073\u51fa\u3059\u30b3\u30fc\u30c9\u3067\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-js\">\/\/...\nif (bulletPointsSummary.status === \"completed\") {\n                    const message = await openai.beta.threads.messages.list(thread.id)\n                    const dataVisTitle = message.data[0].content[0].text.value\n\n                    presentationOptions = {\n                        title: slideTitle,\n                        subtitle: slideSubtitle,\n                        dataVisTitle: dataVisTitle,\n                        chartImagePath: path.join(__dirname, \"public\", `${filename}`),\n                        keyInsights: \"Key Insights:\",\n                        bulletPoints: bulletPoints,\n                        outputFilename: path.join(__dirname, 'public', pptxFilename)\n                    };\n\n                    try {\n                        createPresentation(presentationOptions)\n                    } catch (error) {\n                        console.log(error)\n                    }\n}\n\/\/...<\/code><\/pre>\n<\/div>\n<p>\u751f\u6210\u3055\u308c\u305f\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u306f <code>public<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u305d\u308c\u305e\u308c\u30e6\u30cb\u30fc\u30af\u306a\u540d\u524d\u3067\u4fdd\u5b58\u3055\u308c\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<h2>\u30b9\u30e9\u30a4\u30c9\u60c5\u5831<\/h2>\n<p>\u30b9\u30e9\u30a4\u30c9\u60c5\u5831\u3092\u4fdd\u5b58\u3059\u308b\u305f\u3081\u306b\u3001GridDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f7f\u7528\u3059\u308b\u3002\u4ee5\u4e0b\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u3059\uff1a<\/p>\n<table>\n<thead>\n<tr>\n<th>Field Name<\/th>\n<th>Type<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>id<\/td>\n<td>INTEGER<\/td>\n<td>\u5404\u30ec\u30b3\u30fc\u30c9\u306e\u4e00\u610f\u306a\u8b58\u5225\u5b50\u3002\u3053\u308c\u306f\u30b3\u30f3\u30c6\u30ca\u306e\u4e3b\u30ad\u30fc\u3067\u3042\u308a\u3001\u30a8\u30f3\u30c8\u30ea\u3054\u3068\u306b\u4e00\u610f\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002<\/td>\n<\/tr>\n<tr>\n<td>title<\/td>\n<td>STRING<\/td>\n<td>\u30b9\u30e9\u30a4\u30c9\u306e\u30e1\u30a4\u30f3\u30bf\u30a4\u30c8\u30eb\u3002\u30b9\u30e9\u30a4\u30c9\u306e\u5185\u5bb9\u3092\u8981\u7d04\u3057\u305f\u77ed\u3044\u8aac\u660e\u7684\u306a\u30bf\u30a4\u30c8\u30eb\u3067\u3059\u3002<\/td>\n<\/tr>\n<tr>\n<td>subtitle<\/td>\n<td>STRING<\/td>\n<td>\u526f\u984c\u3084\u5c0f\u898b\u51fa\u3057\u306f\u3001\u4e3b\u984c\u306b\u95a2\u9023\u3059\u308b\u8ffd\u52a0\u7684\u306a\u6587\u8108\u3084\u7c21\u5358\u306a\u8aac\u660e\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/td>\n<\/tr>\n<tr>\n<td>chartImage<\/td>\n<td>STRING<\/td>\n<td>\u30d3\u30b8\u30e5\u30a2\u30eb\u306a\u30c7\u30fc\u30bf\u8868\u73fe\u3092\u30ea\u30f3\u30af\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u3001\u30b9\u30e9\u30a4\u30c9\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u30c1\u30e3\u30fc\u30c8\u306e\u753b\u50cf\u306eURL\u307e\u305f\u306f\u30d1\u30b9\u3002<\/td>\n<\/tr>\n<tr>\n<td>bulletPoints<\/td>\n<td>STRING<\/td>\n<td>\u30b9\u30e9\u30a4\u30c9\u306e\u91cd\u8981\u306a\u60c5\u5831\u3084\u30cf\u30a4\u30e9\u30a4\u30c8\u3092\u8981\u7d04\u3057\u305f\u7b87\u6761\u66f8\u304d\u3092\u542b\u3080\u6587\u5b57\u5217\u3002\u5404\u7b87\u6761\u66f8\u304d\u306f\u901a\u5e38\u3001\u7279\u6b8a\u6587\u5b57\u307e\u305f\u306f\u6539\u884c\u3067\u533a\u5207\u3089\u308c\u307e\u3059\u3002<\/td>\n<\/tr>\n<tr>\n<td>pptx<\/td>\n<td>STRING<\/td>\n<td>\u30b9\u30e9\u30a4\u30c9\u3092\u542b\u3080\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u3092\u30ea\u30f3\u30af\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3001\u30b9\u30e9\u30a4\u30c9\u3092\u542b\u3080PowerPoint\u30d5\u30a1\u30a4\u30eb\uff08.pptx\uff09\u306eURL\u307e\u305f\u306f\u30d1\u30b9\u3002<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>griddbservices.js<code>\u3068<\/code>libs\/griddb.js`\u30d5\u30a1\u30a4\u30eb\u306f\u3059\u3079\u3066\u306e\u30b9\u30e9\u30a4\u30c9\u60c5\u5831\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3059\u308b\u5f79\u5272\u3092\u62c5\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<h2>\u30b5\u30fc\u30d0\u306e\u30eb\u30fc\u30c8<\/h2>\n<p>Node.js\u30b5\u30fc\u30d0\u30fc\u306f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u305f\u3081\u306b\u3044\u304f\u3064\u304b\u306e\u30eb\u30fc\u30c8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u30eb\u30fc\u30c8\u306e\u5b8c\u5168\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u3059\uff1a<\/p>\n<table>\n<thead>\n<tr>\n<th>Method<\/th>\n<th>Route<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>GET<\/td>\n<td><code>\/<\/code><\/td>\n<td>\u300cdist\u300d\u30d5\u30a9\u30eb\u30c0\u304b\u3089\u300cindex.html\u300d\u30d5\u30a1\u30a4\u30eb\u3092\u914d\u4fe1\u3057\u307e\u3059 \u3002<\/td>\n<\/tr>\n<tr>\n<td>GET<\/td>\n<td><code>\/create\/:fileId<\/code><\/td>\n<td>AI\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u3092\u8d77\u52d5\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u51e6\u7406\u3057\u3001\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u4fdd\u5b58\u72b6\u6cc1\u3068PPTX\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u8fd4\u3057\u307e\u3059\u3002<\/td>\n<\/tr>\n<tr>\n<td>GET<\/td>\n<td><code>\/metadata<\/code><\/td>\n<td><code>data<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304b\u3089 <code>metadata.json<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/td>\n<\/tr>\n<tr>\n<td>GET<\/td>\n<td><code>\/data\/files<\/code><\/td>\n<td><code>data<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u3059\u3079\u3066\u306e JSON \u30d5\u30a1\u30a4\u30eb\u540d\u3092\u30ea\u30b9\u30c8\u30a2\u30c3\u30d7\u3057\u307e\u3059\u3002<\/td>\n<\/tr>\n<tr>\n<td>GET<\/td>\n<td><code>\/data\/files\/:filename<\/code><\/td>\n<td><code>data<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304b\u3089\u7279\u5b9a\u306e JSON \u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/td>\n<\/tr>\n<tr>\n<td>GET<\/td>\n<td><code>\/slides<\/code><\/td>\n<td>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u3059\u3079\u3066\u306e\u30b9\u30e9\u30a4\u30c9\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6700\u3082\u91cd\u8981\u306a\u30eb\u30fc\u30c8\u306f<code>\/create\/:fileId<\/code>\u3067\u3001AI\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u304c\u30c7\u30fc\u30bf\u30b5\u30f3\u30d7\u30eb\u3092\u5206\u6790\u3057\u3001\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3057\u3001\u3059\u3079\u3066\u306e\u30b9\u30e9\u30a4\u30c9\u60c5\u5831\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3059\u308b\u30c8\u30ea\u30ac\u30fc\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-js\">app.get('\/create\/:fileId', async (req, res) => {\n const fileId = req.params.fileId\n\n try {\n  const result = await aiAssistant(fileId)\n\n  if (result.status === \"completed\") {\n   const {\n    title: titlePptx,\n    subtitle: subtitlePptx,\n    dataVisTitle: dataVisTitlePptx,\n    chartImage: chartImagePptx,\n    bulletPoints: bulletPointsPptx,\n    outputFilename: pptxFile\n   } = result.data\n\n   const saveDataStatus = await saveData({ titlePptx, subtitlePptx, dataVisTitlePptx, chartImagePptx, bulletPointsPptx, pptxFile })\n\n   res.json({\n    save: saveDataStatus,\n    data: result.data,\n    pptx: result.pptx\n   })\n  } else {\n   res.status(500).json({\n    error: 'Task not completed', status: result.status\n   })\n  }\n\n } catch (error) {\n  console.error('Error in AI Assistant:', error)\n  res.status(500).json({ error: 'Error in AI Assistant', details: error.message })\n }\n})<\/code><\/pre>\n<\/div>\n<p>aiAssistant()<code>\u95a2\u6570\u306f\u30c7\u30fc\u30bf\u30b5\u30f3\u30d7\u30eb\u3092\u5206\u6790\u3057\u3001\u30b9\u30e9\u30a4\u30c9\u306b\u95a2\u3059\u308b\u3059\u3079\u3066\u306e\u60c5\u5831\u3092\u8fd4\u3059\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3057\u3001<\/code>saveData()`\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u305d\u308c\u3089\u306e\u30b9\u30e9\u30a4\u30c9\u60c5\u5831\u3092GridDB\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\n<p>\u3059\u3079\u3066\u306e\u30b9\u30e9\u30a4\u30c9\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3059\u308b\u306b\u306f\u3001<code>\/slides<\/code>\u30eb\u30fc\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3060\u3051\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\u3055\u308c\u305f\u3059\u3079\u3066\u306e\u30b9\u30e9\u30a4\u30c9\u30c7\u30fc\u30bf\u304c\u8fd4\u3055\u308c\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/slide-data.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/slide-data.png\" alt=\"\" width=\"1315\" height=\"640\" class=\"aligncenter size-full wp-image-30750\" srcset=\"\/wp-content\/uploads\/2024\/10\/slide-data.png 1315w, \/wp-content\/uploads\/2024\/10\/slide-data-300x146.png 300w, \/wp-content\/uploads\/2024\/10\/slide-data-1024x498.png 1024w, \/wp-content\/uploads\/2024\/10\/slide-data-768x374.png 768w, \/wp-content\/uploads\/2024\/10\/slide-data-600x292.png 600w\" sizes=\"(max-width: 1315px) 100vw, 1315px\" \/><\/a><\/p>\n<h2>\u30e6\u30fc\u30b6\u30fc\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9<\/h2>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/user-interface.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/10\/user-interface.png\" alt=\"\" width=\"1519\" height=\"847\" class=\"aligncenter size-full wp-image-30752\" srcset=\"\/wp-content\/uploads\/2024\/10\/user-interface.png 1519w, \/wp-content\/uploads\/2024\/10\/user-interface-300x167.png 300w, \/wp-content\/uploads\/2024\/10\/user-interface-1024x571.png 1024w, \/wp-content\/uploads\/2024\/10\/user-interface-768x428.png 768w, \/wp-content\/uploads\/2024\/10\/user-interface-150x85.png 150w, \/wp-content\/uploads\/2024\/10\/user-interface-600x335.png 600w\" sizes=\"(max-width: 1519px) 100vw, 1519px\" \/><\/a><\/p>\n<p>\u30e1\u30a4\u30f3\u30fb\u30e6\u30fc\u30b6\u30fc\u30fb\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306f2\u3064\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n<ul>\n<li><strong>\u30c7\u30fc\u30bf\u30fb\u30c9\u30ed\u30c3\u30d7\u30c0\u30a6\u30f3<\/strong>: \u30c7\u30fc\u30bf\u30b5\u30f3\u30d7\u30eb\u3092\u9078\u629e\u3057\u307e\u3059\u3002<\/li>\n<li><strong>\u30b9\u30e9\u30a4\u30c9\u30dc\u30bf\u30f3\u306e\u4f5c\u6210<\/strong>: \u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u4f5c\u6210\u306e\u30c8\u30ea\u30ac\u30fc<\/li>\n<li><strong>\u751f\u6210\u3055\u308c\u305f\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30fb\u30ea\u30f3\u30af\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9<\/strong>: \u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb <code>.pptx<\/code> \u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30ea\u30f3\u30af\u3067\u3059\u3002<\/li>\n<\/ul>\n<h2>\u3055\u3089\u306a\u308b\u5f37\u5316<\/h2>\n<p>\u3053\u308c\u306f\u9759\u7684\u306a\u30c7\u30fc\u30bf\u30b5\u30f3\u30d7\u30eb\u306b\u3088\u308b\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3059\u3002\u672c\u756a\u74b0\u5883\u3067\u306f\u3001\u30c7\u30fc\u30bf\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u3001\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u305f\u3081\u306e\u3088\u308a\u826f\u3044\u30e6\u30fc\u30b6\u30fc\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u304c\u7406\u60f3\u7684\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>AI\u30c4\u30fc\u30eb\u306e\u53f0\u982d\u306b\u3088\u308a\u3001\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30b9\u30e9\u30a4\u30c9\u306e\u4f5c\u6210\u3092\u542b\u3080\u591a\u304f\u306e\u624b\u4f5c\u696d\u3092\u81ea\u52d5\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u958b\u767a\u8005\u306f\u3001OpenAI\u306e\u8a00\u8a9e\u30e2\u30c7\u30eb\u3068Node.js\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30b9\u30e9\u30a4\u30c9\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u751f\u6210\u3067\u304d\u307e\u3059\u3002\u3053\u306e [&hellip;]<\/p>\n","protected":false},"author":41,"featured_media":49738,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1005],"tags":[],"class_list":["post-50915","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-1005"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>OpenAI\u3068Node.js\u3092\u4f7f\u3063\u3066\u30b9\u30e9\u30a4\u30c9\u4f5c\u6210\u3092\u81ea\u52d5\u5316\u3059\u308b | GridDB: Open Source Time Series Database for IoT<\/title>\n<meta name=\"description\" content=\"AI\u30c4\u30fc\u30eb\u306e\u53f0\u982d\u306b\u3088\u308a\u3001\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30b9\u30e9\u30a4\u30c9\u306e\u4f5c\u6210\u3092\u542b\u3080\u591a\u304f\u306e\u624b\u4f5c\u696d\u3092\u81ea\u52d5\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u958b\u767a\u8005\u306f\u3001OpenAI\u306e\u8a00\u8a9e\u30e2\u30c7\u30eb\u3068Node.js\u3092\u6d3b\u7528\u3059\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.griddb.net\/ja\/\u672a\u5206\u985e\/automate-slide-creation-using-openai-and-node-js\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OpenAI\u3068Node.js\u3092\u4f7f\u3063\u3066\u30b9\u30e9\u30a4\u30c9\u4f5c\u6210\u3092\u81ea\u52d5\u5316\u3059\u308b | GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"og:description\" content=\"AI\u30c4\u30fc\u30eb\u306e\u53f0\u982d\u306b\u3088\u308a\u3001\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30b9\u30e9\u30a4\u30c9\u306e\u4f5c\u6210\u3092\u542b\u3080\u591a\u304f\u306e\u624b\u4f5c\u696d\u3092\u81ea\u52d5\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u958b\u767a\u8005\u306f\u3001OpenAI\u306e\u8a00\u8a9e\u30e2\u30c7\u30eb\u3068Node.js\u3092\u6d3b\u7528\u3059\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.griddb.net\/ja\/\u672a\u5206\u985e\/automate-slide-creation-using-openai-and-node-js\/\" \/>\n<meta property=\"og:site_name\" content=\"GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/griddbcommunity\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-30T07:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-30T18:48:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/wp-content\/uploads\/2024\/10\/cover.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1792\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"griddb-admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:site\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"griddb-admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/\"},\"author\":{\"name\":\"griddb-admin\",\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233\"},\"headline\":\"OpenAI\u3068Node.js\u3092\u4f7f\u3063\u3066\u30b9\u30e9\u30a4\u30c9\u4f5c\u6210\u3092\u81ea\u52d5\u5316\u3059\u308b\",\"datePublished\":\"2024-10-30T07:00:00+00:00\",\"dateModified\":\"2026-03-30T18:48:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/\"},\"wordCount\":135,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.griddb.net\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2024\/10\/cover.jpg\",\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/\",\"url\":\"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/\",\"name\":\"OpenAI\u3068Node.js\u3092\u4f7f\u3063\u3066\u30b9\u30e9\u30a4\u30c9\u4f5c\u6210\u3092\u81ea\u52d5\u5316\u3059\u308b | GridDB: Open Source Time Series Database for IoT\",\"isPartOf\":{\"@id\":\"https:\/\/www.griddb.net\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2024\/10\/cover.jpg\",\"datePublished\":\"2024-10-30T07:00:00+00:00\",\"dateModified\":\"2026-03-30T18:48:21+00:00\",\"description\":\"AI\u30c4\u30fc\u30eb\u306e\u53f0\u982d\u306b\u3088\u308a\u3001\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30b9\u30e9\u30a4\u30c9\u306e\u4f5c\u6210\u3092\u542b\u3080\u591a\u304f\u306e\u624b\u4f5c\u696d\u3092\u81ea\u52d5\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u958b\u767a\u8005\u306f\u3001OpenAI\u306e\u8a00\u8a9e\u30e2\u30c7\u30eb\u3068Node.js\u3092\u6d3b\u7528\u3059\",\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/#primaryimage\",\"url\":\"\/wp-content\/uploads\/2024\/10\/cover.jpg\",\"contentUrl\":\"\/wp-content\/uploads\/2024\/10\/cover.jpg\",\"width\":1792,\"height\":1024},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.griddb.net\/en\/#website\",\"url\":\"https:\/\/www.griddb.net\/en\/\",\"name\":\"GridDB: Open Source Time Series Database for IoT\",\"description\":\"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL\",\"publisher\":{\"@id\":\"https:\/\/www.griddb.net\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.griddb.net\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.griddb.net\/en\/#organization\",\"name\":\"Fixstars\",\"url\":\"https:\/\/www.griddb.net\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"contentUrl\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"width\":200,\"height\":83,\"caption\":\"Fixstars\"},\"image\":{\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/griddbcommunity\/\",\"https:\/\/x.com\/GridDBCommunity\",\"https:\/\/www.linkedin.com\/company\/griddb-by-toshiba\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233\",\"name\":\"griddb-admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/www.griddb.net\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g\",\"caption\":\"griddb-admin\"},\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/author\/griddb-admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OpenAI\u3068Node.js\u3092\u4f7f\u3063\u3066\u30b9\u30e9\u30a4\u30c9\u4f5c\u6210\u3092\u81ea\u52d5\u5316\u3059\u308b | GridDB: Open Source Time Series Database for IoT","description":"AI\u30c4\u30fc\u30eb\u306e\u53f0\u982d\u306b\u3088\u308a\u3001\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30b9\u30e9\u30a4\u30c9\u306e\u4f5c\u6210\u3092\u542b\u3080\u591a\u304f\u306e\u624b\u4f5c\u696d\u3092\u81ea\u52d5\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u958b\u767a\u8005\u306f\u3001OpenAI\u306e\u8a00\u8a9e\u30e2\u30c7\u30eb\u3068Node.js\u3092\u6d3b\u7528\u3059","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.griddb.net\/ja\/\u672a\u5206\u985e\/automate-slide-creation-using-openai-and-node-js\/","og_locale":"ja_JP","og_type":"article","og_title":"OpenAI\u3068Node.js\u3092\u4f7f\u3063\u3066\u30b9\u30e9\u30a4\u30c9\u4f5c\u6210\u3092\u81ea\u52d5\u5316\u3059\u308b | GridDB: Open Source Time Series Database for IoT","og_description":"AI\u30c4\u30fc\u30eb\u306e\u53f0\u982d\u306b\u3088\u308a\u3001\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30b9\u30e9\u30a4\u30c9\u306e\u4f5c\u6210\u3092\u542b\u3080\u591a\u304f\u306e\u624b\u4f5c\u696d\u3092\u81ea\u52d5\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u958b\u767a\u8005\u306f\u3001OpenAI\u306e\u8a00\u8a9e\u30e2\u30c7\u30eb\u3068Node.js\u3092\u6d3b\u7528\u3059","og_url":"https:\/\/www.griddb.net\/ja\/\u672a\u5206\u985e\/automate-slide-creation-using-openai-and-node-js\/","og_site_name":"GridDB: Open Source Time Series Database for IoT","article_publisher":"https:\/\/www.facebook.com\/griddbcommunity\/","article_published_time":"2024-10-30T07:00:00+00:00","article_modified_time":"2026-03-30T18:48:21+00:00","og_image":[{"width":1792,"height":1024,"url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/wp-content\/uploads\/2024\/10\/cover.jpg","type":"image\/jpeg"}],"author":"griddb-admin","twitter_card":"summary_large_image","twitter_creator":"@GridDBCommunity","twitter_site":"@GridDBCommunity","twitter_misc":{"\u57f7\u7b46\u8005":"griddb-admin","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"3\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/#article","isPartOf":{"@id":"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/"},"author":{"name":"griddb-admin","@id":"https:\/\/www.griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233"},"headline":"OpenAI\u3068Node.js\u3092\u4f7f\u3063\u3066\u30b9\u30e9\u30a4\u30c9\u4f5c\u6210\u3092\u81ea\u52d5\u5316\u3059\u308b","datePublished":"2024-10-30T07:00:00+00:00","dateModified":"2026-03-30T18:48:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/"},"wordCount":135,"commentCount":0,"publisher":{"@id":"https:\/\/www.griddb.net\/en\/#organization"},"image":{"@id":"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2024\/10\/cover.jpg","inLanguage":"ja","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/","url":"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/","name":"OpenAI\u3068Node.js\u3092\u4f7f\u3063\u3066\u30b9\u30e9\u30a4\u30c9\u4f5c\u6210\u3092\u81ea\u52d5\u5316\u3059\u308b | GridDB: Open Source Time Series Database for IoT","isPartOf":{"@id":"https:\/\/www.griddb.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/#primaryimage"},"image":{"@id":"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2024\/10\/cover.jpg","datePublished":"2024-10-30T07:00:00+00:00","dateModified":"2026-03-30T18:48:21+00:00","description":"AI\u30c4\u30fc\u30eb\u306e\u53f0\u982d\u306b\u3088\u308a\u3001\u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u30b9\u30e9\u30a4\u30c9\u306e\u4f5c\u6210\u3092\u542b\u3080\u591a\u304f\u306e\u624b\u4f5c\u696d\u3092\u81ea\u52d5\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u958b\u767a\u8005\u306f\u3001OpenAI\u306e\u8a00\u8a9e\u30e2\u30c7\u30eb\u3068Node.js\u3092\u6d3b\u7528\u3059","inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/automate-slide-creation-using-openai-and-node-js\/#primaryimage","url":"\/wp-content\/uploads\/2024\/10\/cover.jpg","contentUrl":"\/wp-content\/uploads\/2024\/10\/cover.jpg","width":1792,"height":1024},{"@type":"WebSite","@id":"https:\/\/www.griddb.net\/en\/#website","url":"https:\/\/www.griddb.net\/en\/","name":"GridDB: Open Source Time Series Database for IoT","description":"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL","publisher":{"@id":"https:\/\/www.griddb.net\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.griddb.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Organization","@id":"https:\/\/www.griddb.net\/en\/#organization","name":"Fixstars","url":"https:\/\/www.griddb.net\/en\/","logo":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.griddb.net\/en\/#\/schema\/logo\/image\/","url":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","contentUrl":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","width":200,"height":83,"caption":"Fixstars"},"image":{"@id":"https:\/\/www.griddb.net\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/griddbcommunity\/","https:\/\/x.com\/GridDBCommunity","https:\/\/www.linkedin.com\/company\/griddb-by-toshiba"]},{"@type":"Person","@id":"https:\/\/www.griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233","name":"griddb-admin","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/www.griddb.net\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g","caption":"griddb-admin"},"url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/author\/griddb-admin\/"}]}},"_links":{"self":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/posts\/50915","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/comments?post=50915"}],"version-history":[{"count":2,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/posts\/50915\/revisions"}],"predecessor-version":[{"id":55105,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/posts\/50915\/revisions\/55105"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/media\/49738"}],"wp:attachment":[{"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/media?parent=50915"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/categories?post=50915"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/ja\/wp-json\/wp\/v2\/tags?post=50915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}