cam*_*per 8 javascript node.js reactjs next.js openai-api
我正在尝试对 GPT-3.5 API 进行 API 调用,但从 OpenAI 导入的任何内容都会出现“没有导出的成员”错误。
import { Configuration, OpenAIApi } from "openai";
import { auth } from "@clerk/nextjs";
import { NextResponse } from "next/server";
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY
});
const openai = new OpenAIApi(configuration);
export async function POST(
req: Request
) {
try {
const { userId } = auth();
const body = await req.json();
const { messages } = body;
if (!userId) {
return new NextResponse("Unauthorised", { status: 401 });
}
if (!configuration.apiKey) {
return new NextResponse("OpenAI API Key not configured", { status: 500 });
}
if (!messages) {
return new NextResponse("Messages are required", { status: 400 });
}
const response = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages
});
return NextResponse.json(response.data.choices[0].message);
} catch (error) {
console.log("[CONVERSATION_ERROR]", error)
return new NextResponse("Internal error", { status: 500 });
}
}
Run Code Online (Sandbox Code Playgroud)
错误信息是:
Module '"openai"' has no exported member 'Configuration'. Did you mean to use 'import Configuration from "openai"' instead?
Run Code Online (Sandbox Code Playgroud)
warn ./app/api/conversation/route.ts
Attempted import error: 'Configuration' is not exported from 'openai' (imported as 'Configuration').
Import trace for requested module:
./app/api/conversation/route.ts
./app/api/conversation/route.ts
Attempted import error: 'OpenAIApi' is not exported from 'openai' (imported as 'OpenAIApi').
Import trace for requested module:
./app/api/conversation/route.ts
- error app\api\conversation\route.ts (5:22) @ eval
- error Error [TypeError]: openai__WEBPACK_IMPORTED_MODULE_0__.Configuration is not a constructor
at eval (webpack-internal:///(rsc)/./app/api/conversation/route.ts:11:23)
at (rsc)/./app/api/conversation/route.ts (C:\Users\ctcco\ai-saas\.next\server\app\api\conversation\route.js:312:1)
at __webpack_require__ (C:\Users\ctcco\ai-saas\.next\server\webpack-runtime.js:33:42)
at eval (webpack-internal:///(rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fconversation%2Froute&page=%2Fapi%2Fconversation%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fconversation%2Froute.ts&appDir=C%3A%5CUsers%5Cctcco%5Cai-saas%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5Cctcco%5Cai-saas&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!:16:109)
at (rsc)/./node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapi%2Fconversation%2Froute&page=%2Fapi%2Fconversation%2Froute&appPaths=&pagePath=private-next-app-dir%2Fapi%2Fconversation%2Froute.ts&appDir=C%3A%5CUsers%5Cctcco%5Cai-saas%5Capp&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&rootDir=C%3A%5CUsers%5Cctcco%5Cai-saas&isDev=true&tsconfigPath=tsconfig.json&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D! (C:\Users\ctcco\ai-saas\.next\server\app\api\conversation\route.js:302:1)
at __webpack_require__ (C:\Users\ctcco\ai-saas\.next\server\webpack-runtime.js:33:42)
at __webpack_exec__ (C:\Users\ctcco\ai-saas\.next\server\app\api\conversation\route.js:2726:39)
at C:\Users\ctcco\ai-saas\.next\server\app\api\conversation\route.js:2727:28
at Object.<anonymous> (C:\Users\ctcco\ai-saas\.next\server\app\api\conversation\route.js:2730:3)
at Module._compile (node:internal/modules/cjs/loader:1254:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
at Module.load (node:internal/modules/cjs/loader:1117:32)
at Module._load (node:internal/modules/cjs/loader:958:12)
at Module.require (node:internal/modules/cjs/loader:1141:19)
at require (node:internal/modules/cjs/helpers:110:18)
at requirePage (C:\Users\ctcco\ai-saas\node_modules\next\dist\server\require.js:112:75)
at C:\Users\ctcco\ai-saas\node_modules\next\dist\server\load-components.js:80:84
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async loadComponentsImpl (C:\Users\ctcco\ai-saas\node_modules\next\dist\server\load-components.js:80:26)
at async DevServer.findPageComponentsImpl (C:\Users\ctcco\ai-saas\node_modules\next\dist\server\next-server.js:439:36) {
digest: undefined
}
3 | import { NextResponse } from "next/server";
4 |
> 5 | const configuration = new Configuration({
| ^
6 | apiKey: process.env.OPENAI_API_KEY
7 | });
8 |
- warn ./app/api/conversation/route.ts
Attempted import error: 'Configuration' is not exported from 'openai' (imported as 'Configuration').
Import trace for requested module:
./app/api/conversation/route.ts
./app/api/conversation/route.ts
Attempted import error: 'OpenAIApi' is not exported from 'openai' (imported as 'OpenAIApi').
Import trace for requested module:
./app/api/conversation/route.ts
- wait compiling /_error (client and server)...
- warn ./app/api/conversation/route.ts
Attempted import error: 'Configuration' is not exported from 'openai' (imported as 'Configuration').
Import trace for requested module:
./app/api/conversation/route.ts
./app/api/conversation/route.ts
Attempted import error: 'OpenAIApi' is not exported from 'openai' (imported as 'OpenAIApi').
Import trace for requested module:
./app/api/conversation/route.ts
- warn ./app/api/conversation/route.ts
Attempted import error: 'Configuration' is not exported from 'openai' (imported as 'Configuration').
Import trace for requested module:
./app/api/conversation/route.ts
./app/api/conversation/route.ts
Attempted import error: 'OpenAIApi' is not exported from 'openai' (imported as 'OpenAIApi').
Import trace for requested module:
./app/api/conversation/route.ts
- wait compiling /(dashboard)/(routes)/conversation/page (client and server)...
- warn ./app/api/conversation/route.ts
Attempted import error: 'Configuration' is not exported from 'openai' (imported as 'Configuration').
Import trace for requested module:
./app/api/conversation/route.ts
./app/api/conversation/route.ts
Attempted import error: 'OpenAIApi' is not exported from 'openai' (imported as 'OpenAIApi').
Import trace for requested module:
./app/api/conversation/route.ts
- wait compiling...
- warn ./app/api/conversation/route.ts
Attempted import error: 'Configuration' is not exported from 'openai' (imported as 'Configuration').
Import trace for requested module:
./app/api/conversation/route.ts
./app/api/conversation/route.ts
Attempted import error: 'OpenAIApi' is not exported from 'openai' (imported as 'OpenAIApi').
Import trace for requested module:
./app/api/conversation/route.ts
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?
Rok*_*nko 24
OpenAI NodeJS SDK于2023年8月16日发布v4,是对SDK的完全重写。您已经有了,但您想使用适用于.v4v3
要检查 OpenAI NodeJS SDK 版本,请运行以下命令:
\nnpm info openai version\nRun Code Online (Sandbox Code Playgroud)\n 由于 中存在许多根本性更改,因此从 迁移到v4的最简单方法是运行以下 CLI 命令:v3v4
npm exec openai migrate\nRun Code Online (Sandbox Code Playgroud)\n审核更改非常重要,如官方OpenAIv3迁移v4指南中所述:
\n\n请务必审核其更改:我们建议确保您事先有一个干净的\n工作树,然后运行
\ngit add --patch。请注意\ngrit.io 还提供由人工智能支持的选择加入自动修复。
\xe2\x80\xa2 初始化
\n// Old (i.e., OpenAI NodeJS SDK v3)\nimport { Configuration, OpenAIApi } from "openai";\n\nconst configuration = new Configuration({\n apiKey: process.env.OPENAI_API_KEY,\n});\nconst openai = new OpenAIApi(configuration);\n\n// New (i.e., OpenAI NodeJS SDK v4)\nimport OpenAI from \'openai\';\n\nconst openai = new OpenAI({\n apiKey: process.env.OPENAI_API_KEY,\n});\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa2 创建聊天补全
\n// Old (i.e., OpenAI NodeJS SDK v3)\nconst chatCompletion = await openai.createChatCompletion({\n model: "gpt-3.5-turbo",\n messages: [{role: "user", content: "Hello world"}],\n});\nconsole.log(chatCompletion.data.choices[0].message);\n\n// New (i.e., OpenAI NodeJS SDK v4)\nconst chatCompletion = await openai.chat.completions.create({\n model: "gpt-3.5-turbo",\n messages: [{"role": "user", "content": "Hello!"}],\n});\nconsole.log(chatCompletion.choices[0].message);\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa2 创建流式聊天完成(新)
\n// Old (i.e., OpenAI NodeJS SDK v3)\n// Not supported\n\n// New (i.e., OpenAI NodeJS SDK v4)\nconst stream = await openai.chat.completions.create({\n model: "gpt-3.5-turbo",\n messages: [{"role": "user", "content": "Hello!"}],\n stream: true,\n});\nfor await (const part of stream) {\n console.log(part.choices[0].delta);\n}\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa2 创建完成
\n// Old (i.e., OpenAI NodeJS SDK v3)\nconst completion = await openai.createCompletion({\n model: "text-davinci-003",\n prompt: "This story begins",\n max_tokens: 30,\n});\nconsole.log(completion.data.choices[0].text);\n\n// New (i.e., OpenAI NodeJS SDK v4)\nconst completion = await openai.completions.create({\n model: "text-davinci-003",\n prompt: "This story begins",\n max_tokens: 30,\n});\nconsole.log(completion.choices[0].text);\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa2 创建转录(耳语)
\n// Old (i.e., OpenAI NodeJS SDK v3)\nconst response = await openai.createTranscription(\n fs.createReadStream("audio.mp3"),\n "whisper-1"\n);\n\n// New (i.e., OpenAI NodeJS SDK v4)\nconst response = await openai.audio.transcriptions.create({\n model: \'whisper-1\',\n file: fs.createReadStream(\'audio.mp3\'),\n});\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa2 创建流式完成(新)
\n// Old (i.e., OpenAI NodeJS SDK v3)\n// Not supported\n\n// New (i.e., OpenAI NodeJS SDK v4)\nconst stream = await openai.completions.create({\n model: "text-davinci-003",\n prompt: "This story begins",\n max_tokens: 30,\n stream: true,\n});\nfor await (const part of stream) {\n console.log(part.choices[0]);\n}\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa2 错误处理
\n// Old (i.e., OpenAI NodeJS SDK v3)\ntry {\n const completion = await openai.createCompletion({...});\n} catch (error) {\n if (error.response) {\n console.log(error.response.status); // e.g. 401\n console.log(error.response.data.message); // e.g. The authentication token you passed was invalid...\n console.log(error.response.data.code); // e.g. \'invalid_api_key\'\n console.log(error.response.data.type); // e.g. \'invalid_request_error\'\n } else {\n console.log(error);\n }\n}\n\n// New (i.e., OpenAI NodeJS SDK v4)\ntry {\n const response = await openai.completions.create({...});\n} catch (error) {\n if (error instanceof OpenAI.APIError) {\n console.error(error.status); // e.g. 401\n console.error(error.message); // e.g. The authentication token you passed was invalid...\n console.error(error.code); // e.g. \'invalid_api_key\'\n console.error(error.type); // e.g. \'invalid_request_error\'\n } else {\n // Non-API error\n console.log(error);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa2 所有方法名称更改:
\n老(即,v3) | 新的(即,v4) |
|---|---|
| openai.createChatCompletion | openai.chat.completions.create |
| openai.createCompletion | openai.completions.create |
| openai.createTranscription | openai.audio.transcriptions.create |
| openai.createTranslation | openai.audio.translations.create |
| openai.createFineTune | openai.fineTunes.create |
| openai.cancelFineTune | openai.fineTunes.cancel |
| openai.retrieveFineTune | openai.fineTunes.retrieve |
| openai.listFineTunes | openai.fineTunes.list |
| openai.listFineTuneEvents | openai.fineTunes.listEvents |
| openai.createFile | openai.files.create |
| openai.deleteFile | openai.files.del |
| 打开ai.retrieveFile | openai.files.retrieve |
| 打开ai.download文件 | openai.files.retrieveContent |
| openai.listFiles | openai.files.list |
| openai.deleteModel | openai.models.del |
| openai.listModels | openai.models.list |
| openai.retrieve模型 | openai.models.retrieve |
| openai.createImage | openai.images.generate |
| openai.createImage编辑 | openai.images.edit |
| openai.createImageVariation | openai.images.createVariation |
| openai.createChatCompletion | openai.chat.completions.create |
| openai.createEmbedding | openai.embeddings.create |
| openai.createModeration | openai.moderations.create |
\xe2\x80\xa2 删除:
\ncreateAnswer()createClassification()createSearch()listEngines()retrieveEngine()createEdit()那是v3。您需要迁移到v4. 来自 npm
[!重要] 此 SDK 的早期版本使用 Configuration 类。请参阅 v3 到 v4 迁移指南。
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: 'my api key', // defaults to process.env["OPENAI_API_KEY"]
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5524 次 |
| 最近记录: |