掘金 人工智能 2024年07月07日
Vue 与 OpenAI 接口交互实战:发送请求的全流程解析(一)
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了使用 Vue.js 封装一个函数来调用 OpenAI 的 API,实现与 ChatGPT 的交互。文章涵盖了获取 API 密钥、构建请求体、发送请求以及解析响应数据的步骤,并提供了代码示例。通过封装函数,可以方便地在 Vue 项目中调用 OpenAI 的 API,实现智能问答等功能。

💻 **获取API密钥和URL:** 首先需要获取 OpenAI 提供的 API 密钥和 URL,这些信息通常可以在 OpenAI 的官网上找到。API 密钥用于身份验证,而 URL 指向 OpenAI 的 API 服务器。

📢 **构建HTTP请求的URL和请求体:** 构建请求 URL,并根据 OpenAI API 的要求构建请求体,其中包含要发送给 OpenAI 的数据。例如,对于 ChatGPT 的聊天功能,请求体中需要包含用户的对话内容。

📡 **发送HTTP请求到OpenAI的服务器:** 使用 fetch 或其他 HTTP 请求库发送 HTTP 请求到 OpenAI 的服务器,并将请求体中的数据发送过去。

📥 **接收OpenAI的响应数据并进行解析:** 接收 OpenAI 返回的响应数据,并将其解析为 JSON 格式。响应数据中包含 OpenAI 对请求的处理结果,例如 ChatGPT 生成的回复。

📣 **封装函数:** 将以上步骤封装成一个函数,方便在项目中重复调用。函数的参数可以包括 API 密钥、请求 URL 和请求体等信息。

📤 **测试封装的函数:** 在项目中测试封装好的函数,确保其能够正常工作,并返回预期的结果。

📧 **在页面中调用封装的函数:** 在 Vue 项目的页面中调用封装好的函数,实现与 ChatGPT 的交互。例如,将用户的输入传递给函数,并使用 ChatGPT 生成的回复更新页面内容。

📦 **处理异步操作:** 在发送请求和解析响应数据时,需要使用异步操作,以确保在请求完成之前,不会阻塞其他代码的执行。可以使用 async/await 语法来处理异步操作。

📨 **错误处理:** 在调用 OpenAI API 时,可能会出现错误,例如网络连接问题或 API 限制等。需要在代码中添加错误处理机制,以便在出现错误时能够及时处理,并提示用户。

📩 **安全性:** 在调用 OpenAI API 时,需要注意安全性问题,例如 API 密钥的泄露等。需要妥善保管 API 密钥,并采取必要的安全措施,防止密钥被盗用。

📪 **性能优化:** 在调用 OpenAI API 时,需要注意性能问题,例如请求次数过多等。可以使用缓存机制或其他方法来优化性能。

📫 **用户体验:** 在使用 OpenAI API 时,需要注意用户体验,例如响应时间过长等。可以使用加载指示器或其他方法来提升用户体验。

📬 **可扩展性:** 在设计调用 OpenAI API 的函数时,需要考虑可扩展性,以便在未来能够轻松地添加新的功能或支持新的 API。

📭 **文档:** 需要为封装好的函数编写详细的文档,方便其他开发者使用。

📮 **示例代码:** 提供完整的示例代码,方便其他开发者参考。

📯 **最佳实践:** 提供一些最佳实践,帮助其他开发者更好地使用 OpenAI API。

📰 **常见问题解答:** 提供一些常见问题解答,帮助其他开发者解决问题。

📱 **社区支持:** 提供社区支持,方便其他开发者交流经验。

📲 **未来展望:** 展望 OpenAI API 的未来发展趋势,以及如何更好地利用 OpenAI API。

📳 **总结:** 总结本文的内容,并提供一些建议。

📴 **致谢:** 感谢所有为本文做出贡献的人。

📵 **版权声明:** 声明本文的版权信息。

📶 **免责声明:** 声明本文不构成任何投资建议。

📷 **联系方式:** 提供联系方式,方便其他开发者与作者交流。

📸 **其他:** 其他需要说明的内容。

📹 **参考链接:** 提供一些参考链接,方便其他开发者进一步学习。

📺 **贡献者:** 列出所有为本文做出贡献的人。

📻 **版本历史:** 记录本文的版本历史。

📼 **更新日志:** 记录本文的更新日志。


theme: awesome-green

前言

本文讲解使用vue去搭建一个项目,然后向OpenAI发送请求,并获取数据

文章分为两篇书写,本篇文章侧重于书写API的封装与调用,第二篇文章侧重于页面逻辑的处理

接下来就让我们开始吧!

本质是利用其提供的API,通过向OpenAI的服务器发送HTTP请求的方式来实现与其系统的交互和数据传输

通过以上调用步骤我们可以知道关键就在于构建请求体然后发送请求

那么我们要怎么去构建这个函数呢?

这里我们采用形参输入想要问的问题以及key的形式去构建一个函数

并通过fetch去模拟http请求向OpenAI发送请求,并获取交互数据

首先创建一个函数

export async function chat(messageList, apiKey) 

在函数通过形参输入想要问的问题以及key,内部就可以直接使用这两个参数

const result = await fetch('https://api.xxxxxxxx/v1/chat/completions', {            method: 'POST',            headers: {                'Content-Type': 'application/json;charset=utf-8',                // 授权                'Authorization': 'Bearer ' + apiKey,            },            body: JSON.stringify({                model: 'gpt-3.5-turbo',                messages: messageList,            })        })

向 OpenAI 的 Chat Completions 接口发送一个 POST 请求,并携带必要的参数和身份验证信息。通过使用 await 关键字,可以确保在后续处理响应数据之前,请求已经完成并返回了响应对象。

https://api.xxxxxxxx/v1/chat/completions为请求OpenAI的URL,需要自行获取

这里我使用的是国内的一个网站使用其转发服务向OpenAI发送请求,本文不做重点探讨,文章侧重于书写API的封装与调用

接下来就是调用函数返回数据了

export async function chat(messageList, apiKey) {  // console.log('chat');  try {    const result = await fetch("https://api.xxxxxxxx/v1/chat/completions", {      method: "POST",      headers: {        "Content-Type": "application/json;charset=utf-8",        // 授权        Authorization: "Bearer " + apiKey,      },      body: JSON.stringify({        model: "gpt-3.5-turbo",        messages: messageList,      }),    });    const data = await result.json();    return data;  } catch (err) {    console.log(err);    throw err;  }}

在这段代码中,使用了两个 await 关键字,它们分别起了不同的作用

    第一个 await fetch(...):

      这里使用 await 是为了等待 fetch() 函数执行完毕,并获取到 HTTP 响应对象。如果不使用 awaitfetch() 函数会立即返回一个 Promise 对象,而不是实际的响应数据。使用 await 可以确保在下一步处理响应数据时,我们已经拥有了完整的响应对象。

    第二个 await result.json():

      这里使用 await 是为了等待响应数据被解析为 JSON 格式。result.json() 也是一个异步操作,会返回一个 Promise 对象。使用 await 可以确保在下一步使用 data 变量时,我们已经拥有了解析完成的 JSON 数据。

两个 await 关键字都是为了处理异步操作,确保在下一步操作中,我们能够获取到所需的完整数据

这样我们就已经封装好了一个简单的GPT调用的函数了

现在我们进行测试一下效果如何

<script setup>import { chat } from "./libs/gpt.js";const main = async () => {  const messageList = [{    role: 'admin',    content: '你是一位4s店销售专家,可以回答有关买车卖车的问题'  },  {    role: 'user',    content: '凯迪拉克方向盘是真的有问题吗?'  }  ]  const data = await chat(messageList, 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')  console.log(data);};main();</script>

可以看到我们已经成功的得到了结果

至此我们的函数就封装好了,接下来我们就可以在页面中进行调用了

下一篇文章将为大家讲解页面的布局和调用逻辑

总结

这篇文章主要讲解了如何在项目中与 OpenAI 的 API 进行交互

通过API的调用可以为我们的项目提供更强大的功能和交互能力

相信看到这里的你一定能够有所收获的,赶紧动手将你的项目也结合AI实现智能化吧!!!

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

OpenAI ChatGPT API Vue.js 封装 调用 交互 智能问答
相关文章