使用 React 和 GPT-4 技术构建智能语言翻译应用

0209b5ce077210f3a56015ccda95c940.png

Midjourney 创作,Language Translation in future

在今天的互联世界中,语言翻译在弥合沟通差距和促进全球合作方面发挥着至关重要的作用。随着像 OpenAI 的 GPT-4 这样先进的 AI 模型的出现,我们现在有机会创建高度精确和上下文感知的翻译工具。在本博客中,我们将带您了解如何使用 React 和 GPT-4 API 构建一个强大的语言翻译器 Web 应用程序。

React 是一个流行的 JavaScript 库,可以创建高度响应和用户友好的界面,而 GPT-4 是 OpenAI 最先进的语言模型的最新版本,可实现多种语言的高度准确的翻译。通过结合这两种技术,我们将开发一个直观而有效的翻译应用程序,可满足各种用户和用例需求。

在本教程中,您将学习如何设置 React 应用程序、集成 GPT-4 API 进行翻译,并对应用程序应用用户友好的样式。我们还将讨论最佳实践和优化技巧,以确保您的翻译应用程序运行顺畅、高效。

在本文结束时,您将拥有一个由 GPT-4 和 React 驱动的完全功能的语言翻译器应用程序,可供部署或进一步定制以适应您的需求。让我们开始构建您自己的 AI 驱动的翻译工具吧!

8d5f40f008a581f9bcd13e7035b472b2.jpeg

创建一个新的 React 项目

让我们使用 Vite 从零开始创建一个新的 React 项目。如果您需要更多关于 Vite 的信息,请查看该项目的网站:vitejs.dev。

7feff393d8152b1253f9ee56de0a655e.jpeg

使用以下命令使用 Vite 启动项目脚手架:

yarn create vite

然后您将被引导通过设置过程,如下所示:

3b0250349752572cb633ce488e3ded64.jpeg

您将被要求提供项目名称。输入“gpt-4-translation”,选择 React 作为框架,并将变体设置为 JavaScript。设置过程完成后,您可以进入新创建的项目文件夹:

cd gpt-4-translation

在项目文件夹中使用 yarn 命令,确保下载并安装了项目设置的所有默认依赖项:

yarn

接下来,我们需要添加一个进一步的依赖项:Axios HTTP 库:

yarn add axios

此外,我们还需要在项目的根文件夹中添加一个文件:

touch .env.local

然后,该文件将用于存储和设置环境变量。在这里,我们将创建一个新的环境变量 VITE_OPENAI_API_KEY,用于保存我们的 OpenAI API 密钥:

VITE_OPENAI_API_KEY=[插入您的 OpenAI API 密钥]

要获取您的 OpenAI API 密钥,您必须拥有 OpenAI 帐户并获得其 API 服务的访问权限。以下是获取 API 密钥的方法:

访问 OpenAI 网站:访问 https://www.openai.com/ 并注册一个帐户(如果您尚未拥有)。请求 API 访问权限:注册后,请求访问 OpenAI API。请注意,由于 GPT-4 API 仍处于测试版,OpenAI 以邀请制为基础运作,因此对 GPT-4 模型的 API 访问并不立即可用。为了获得访问权限,您需要首先在等待列表中注册。

访问 API 仪表板:一旦获得 API 访问权限,登录到您的 OpenAI 帐户并访问 https://platform.openai.com/signup 上的 API 仪表板。

找到您的 API 密钥:在 API 仪表板中,找到“API 密钥”部分。您的 API 密钥应该显示在那里。API 密钥通常以“sk-”开头,后面跟着一系列字母数字字符。

请记住,要像密码一样对待您的 API 密钥。不要公开分享它或直接在代码中包含它。

实现 React 应用程序

接下来,我们将通过使用 React 和 GPT-4 API 创建一个语言翻译器应用程序。以下是插入到 src/App.jsx 中的代码的逐步说明:

1、导入所需的依赖项和样式:

import React, { useState } from "react";
import axios from "axios"; 
import "./App.css";

我们导入 React 库、useState 钩子用于管理状态、Axios 用于进行 API 请求,并导入 App.css 文件以进行样式设置。

2、定义 App 组件:

const App = () => { // ... };

我们创建一个功能性的 App 组件,它将是我们翻译应用程序的核心。

3、初始化状态变量:

const [text, setText] = useState(""); 
const [language, setLanguage] = useState("Chinese"); 
const [translation, setTranslation] = useState("");

我们使用 useState 钩子来管理输入文本、选择的语言和已翻译的文本。

4、定义一个支持的语言数组:

const languages = ["Chinese","Spanish", "French", "German", "Italian", "Portuguese"];

我们创建一个包含我们翻译应用程序支持的语言的数组。

5、实现翻译功能:

const translateText = async () => {
 // ...
};

我们创建一个异步 translateText 函数,它将处理向 GPT-4 进行翻译的 API 请求。

6、使用 Axios 进行 API 请求:

const response = await axios.post(
  "https://api.openai.com/v1/chat/completions",
 {
  model: "gpt-4",
  messages: [
    {
      role: "system",
      content: `Translate the following English text to ${language}:`,
    },
    { role: "user", content: text },
  ],
},
{
  headers: {
    "Content-Type": "application/json",
    Authorization: `Bearer ${import.meta.env.VITE_OPENAI_API_KEY}`,
  },
}

我们通过指定 GPT-4 模型、消息和标头来配置 API 请求。在消息数组中,我们包括一个系统消息,指示模型将输入文本翻译为目标语言,并包括一个用户消息,其中包含输入文本。

注意:需要开通GPT-4 API,否则程序会报错,并且能访问国际网络

7、处理 API 响应:

const translatedText = response.data.choices[0].message.content;
setTranslation(translatedText);

我们从响应数据中提取翻译后的文本,并更新翻译状态变量。

8、处理翻译过程中的错误:

catch (error) {
  console.error(error);
  alert("Error occurred during translation");
}

我们添加了一个 catch 块来处理可能发生的翻译过程中的任何错误。

9、实现表单提交处理程序:

const handleSubmit = (e) => {
e.preventDefault();
translateText();
};

我们创建了一个 handleSubmit 函数,它阻止默认的表单提交行为,并调用 translateText 函数。

10、定义应用程序的用户界面:

return (
  // ...
);

我们为应用程序的用户界面创建 JSX 标记,包括用于输入文本、选择语言和用于翻译文本的按钮的表单。

11、渲染翻译结果:

{translation && (
<>
<h2>翻译结果</h2>
<p>{translation}</p>
</>
)}

我们根据条件渲染翻译后的文本。

12、导出 App 组件:

export default App;

最后,我们导出 App 组件,以便在 React 应用程序的主入口点中使用它。

让我们再次查看完整的代码:

import React, { useState } from "react"; // 导入 React 和 useState 钩子
import axios from "axios"; // 导入 axios 库
import "./App.css"; // 导入样式

const App = () => { // 创建 App 组件
  const [text, setText] = useState(""); // 初始化输入文本的状态变量
  const [language, setLanguage] = useState("Spanish"); // 初始化目标语言的状态变量
  const [translation, setTranslation] = useState(""); // 初始化翻译后文本的状态变量

  const languages = ["Chinese","Spanish", "French", "German", "Italian", "Portuguese"]; // 定义支持的语言数组

  const translateText = async () => { // 定义翻译函数
    try {
      const response = await axios.post( // 发送 API 请求
        "https://api.openai.com/v1/chat/completions",
        {
          model: "gpt-4", // 指定 GPT-4 模型
          messages: [
            {
              role: "system",
              content: `Translate the following English text to ${language}:`, // 指定翻译目标语言
            },
            { role: "user", content: text }, // 指定待翻译的文本
          ],
        },
        {
          headers: { // 指定请求头
            "Content-Type": "application/json",
            Authorization: `Bearer ${import.meta.env.VITE_OPENAI_API_KEY}`, // 指定 API 密钥
          },
        }
      );

      const translatedText = response.data.choices[0].message.content; // 提取翻译后文本
      setTranslation(translatedText); // 更新翻译后文本的状态变量
    } catch (error) { // 处理错误
      console.error(error);
      alert("翻译过程中发生错误");
    }
  };

  const handleSubmit = (e) => { // 定义表单提交处理程序
    e.preventDefault(); // 阻止默认表单提交行为
    translateText(); // 调用翻译函数
  };

  return ( // 渲染用户界面
    <div className="App">
      <h1>GPT-4 Translation</h1>
      <form onSubmit={handleSubmit}>
        <label htmlFor="text">待翻译的文本:</label>
        <br />
        <textarea
          id="text"
          value={text}
          onChange={(e) => setText(e.target.value)}
          rows={5}
          cols={40}
        ></textarea>
        <br />
        <label htmlFor="language">目标语言:</label>
        <br />
        <select
          id="language"
          value={language}
          onChange={(e) => setLanguage(e.target.value)}
        >
          {languages.map((lang) => (
            <option key={lang} value={lang}>
              {lang}
            </option>
          ))}
        </select>
        <br />
        <button type="submit">翻译</button>
      </form>
      {translation && ( // 根据条件渲染翻译后文本
        <>
          <h2>翻译结果</h2>
          <p>{translation}</p>
        </>
      )}
    </div>
  );
};

export default App; // 导出 App 组件

前端样式

为了为 React 网页应用程序应用美观的前端样式,请将以下 CSS 代码插入到 App.css 中:

/* 设置 body 的字体和背景颜色 */
body {
  font-family: Arial, sans-serif;
  background-color: #f5f5f5;
}

/* 设置 App 根元素的样式 */
.App {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 40px;
  max-width: 800px;
  margin: 40px auto;
  background-color: #ffffff;
  border-radius: 8px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
}

/* 设置标题的样式 */
h1 {
  font-size: 2em;
  margin-bottom: 20px;
}

/* 设置标签的样式 */
label {
  font-size: 1em;
  font-weight: bold;
  margin-bottom: 5px;
}

/* 设置文本区域的样式 */
textarea {
  width: 100%;
  border: 1px solid #cccccc;
  border-radius: 4px;
  padding: 8px;
  font-size: 1em;
}

/* 设置选择框的样式 */
select {
  width: 100%;
  border: 1px solid #cccccc;
  border-radius: 4px;
  padding: 8px;
  font-size: 1em;
  margin-bottom: 20px;
}

/* 设置按钮的样式 */
button {
  background-color: #007bf5;
  color: #ffffff;
  font-size: 1em;
  padding: 10px 20px;
  border-radius: 4px;
  border: none;
  cursor: pointer;
  margin-top: 10px;
}

/* 设置按钮悬停状态的样式 */
button:hover {
  background-color: #34495e;
}

/* 设置副标题的样式 */
h2 {
  font-size: 1.5em;
  margin: 30px 0 10px 0;
}

/* 设置段落的样式 */
p {
  font-size: 1.2em;
  text-align: justify;
}

运行应用

现在我们已经完成了React应用程序的实现,可以运行它并在浏览器中查看结果。为了启动开发Web服务器,请使用以下命令:

yarn dev

开发Web服务器正在启动:

c0b66febc071de17cb2956917c3d436e.jpeg通过提供的URL,您现在可以在浏览器中访问React Web应用程序:

572a52965d3883fda5725e83f6bdb724.jpeg

结束

本教程介绍了如何使用React和OpenAI的GPT-4 API构建一款功能强大且用户友好的语言翻译应用程序。通过结合最新的人工智能和Web开发技术,您创建了一种创新工具,可以消除语言障碍,促进全球有效沟通。

在本教程中,您学习了如何设置React应用程序,集成GPT-4 API,创建直观的用户界面并为应用程序应用现代化的样式。这些技能不仅适用于构建翻译应用程序,还可以是其他需要整合先进人工智能技术并创建响应式Web应用程序的项目的坚实基础。

随着您继续探索GPT-4和React的能力,考虑扩展您的应用程序,增加其他功能,例如语音识别、实时翻译或支持更多语言。可能性几乎无限,有了坚实的基础,您就有了充分的准备来应对新的挑战并创建创新解决方案。

我们希望本教程为您提供有价值的见解,并激发您继续在基于人工智能的应用程序的令人兴奋的世界中学习和尝试。借助GPT-4和React的强大功能,天空就是您的极限!

今天的分享就到这里,感谢你的阅读,希望能够帮助到你,文章创作不易,如果你喜欢我的分享,别忘了点赞转发,让更多有需要的人看到,最后别忘记关注「前端达人」,你的支持将是我分享最大的动力,后续我会持续输出更多内容,敬请期待。

原文:
https://medium.com/codingthesmartway-com-blog/building-a-powerful-language-translator-in-react-using-openais-gpt-4-api-f616173606d0

作者:Sebastian

非直接翻译,有自行改编和添加部分,翻译水平有限,难免有疏漏,欢迎指正

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/4896.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

USB键盘实现——带指示灯的键盘(九)

文章目录带指示灯的键盘set_report 类特殊请求实现类特殊请求USB 控制端点收到的数据增加一个输出端点实现配置描述符集合输出端点收到的数据带指示灯的键盘 要实现带指示灯的键盘&#xff0c;有两种方式 除控制端点和输入端点外&#xff0c;不额外增加端点&#xff0c;根据 …

不完全微分算法(SCL+ST代码)

PID控制器的基本算法,可以参看专栏的系列文章,链接如下: 三菱FX3U PLC 位置式PID算法(ST语言)_fx3u pid_RXXW_Dor的博客-CSDN博客三菱PLC自带的PID不必多说,大家可以自行查看指令说明。关于FX3U 增量式PID可以参看专栏的另一篇博客三菱PLC增量式PID算法FB(带死区设置和外部…

springCloud学习【3】之Docker完整版

文章目录一 初识Docker1.1 应用部署的环境问题1.2 Docker简介1.3 Docker解决操作系统环境差异1.4 Docker和虚拟机的区别1.5 Docker架构1.5.1 镜像和容器1.5.2 DockerHub1.5.3 Docker架构1.5.4 Docker工作流1.6 Docker的安装和启动1.7 安装步骤1.8 启动Docker1.9 配置镜像加速二…

总结802

早上&#xff1a; 6:23起床 6:43出门 7:00~7:40小湖读书 8:00~9:45机器人控制 9:50~11:30句句真研 11:31~12:10吃饭 12:12~12:22动漫 12:45~2:09午觉 2:00~4:15深度学习 4:26~4:39去图书馆 4:40~6:11高等数学第五讲 6:13~6:40跑步开合跳100胯下击掌100 6:50~7:20吃…

PS基础操作-抠图与导出-学习记录

目录 注&#xff1a;PS版本为2022&#xff0c;有个智能对象选择功能比较方便抠图 第一步&#xff1a;导入图像文件 第二步&#xff1a;基础的画布界面移动 鼠标滚轮上下滑动&#xff0c;可以是上下滚动界面 按住ctrl鼠标滚轮&#xff0c;可以左右滚动界面 按住alt鼠标滚轮…

华为OD机试题,用 Java 解【快递货车】问题 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:快递货车 题目 一辆运送快递的…

【python刷题】LeetCode 2057E 值相等的最小索引(5种简单高效的解法)

作者&#xff1a;20岁爱吃必胜客&#xff08;坤制作人&#xff09;&#xff0c;近十年开发经验, 跨域学习者&#xff0c;目前于海外某世界知名高校就读计算机相关专业。荣誉&#xff1a;阿里云博客专家认证、腾讯开发者社区优质创作者&#xff0c;在CTF省赛校赛多次取得好成绩。…

问答ChatGPT-4:探索未来微数据中心IDC的发展趋势

从去年年底开始到现在&#xff0c;大众对以ChatGPT-4为主的人工智能AI的话题讨论盛况空前。这是一款由OpenAI发布的聊天机器人模型&#xff0c;一经上线&#xff0c;短短5天完成100万用户积累&#xff0c;并在最近实现月活用户破亿。实际上&#xff0c;ChatGPT和智能客服、智能…

CN RedGolf 集团利用 KEYPLUG 后门攻击 Windows 和 Linux 系统

被追踪为 RedGolf 的 CN 国家支持的威胁活动组织被归因于使用名为 KEYPLUG 的自定义 Windows 和 Linux 后门。 Recorded Future 告诉 The Hacker News&#xff1a;“RedGolf 是一个特别多产的CN国家支持的威胁组织&#xff0c;可能多年来一直活跃于全球范围内的广泛行业。” …

HandlerInterceptor拦截器的原理

是什么 HandlerInterceptor拦截的是请求&#xff0c;是springMVC项目中的拦截器&#xff0c;它拦截的目标是请求的地址。也就是说&#xff0c;它可以对请求进行拦截处理&#xff0c;所有实现了HandlerInterceptor&#xff0c;并且进行了配置的的类&#xff0c;都有这个能力&am…

第四章 共享模型之 管程 (下)

JUC并发编程系列文章 http://t.csdn.cn/UgzQi 文章目录JUC并发编程系列文章前言七、wait -- notify1、为什么使用 wait2、 wait -- notify 原理3、API 介绍八、wait -- notify 的正确姿势示例一&#xff1a;sleep会拿着锁睡觉&#xff0c;阻碍其它线程执行示例二&#xff1a;wa…

Eyeshot 2023 重大变化--2023版本将被Crack

Eyeshot 2023是一个基于 Microsoft .NET Framework 的 CAD 控件。它允许开发人员快速将 CAD 功能添加到 WinForms 和 WPF 应用程序。Eyeshot 提供了从头开始构建几何体、使用有限元方法对其进行分析并在其上生成刀具路径的工具。还可以使用 CAD 交换文件格式导入或导出几何图形…

操作系统页表

虚拟内存 虚拟地址到物理地址的映射以实现隔离性 每个程序有独立的地址空间&#xff0c;不相互影响 页表 地址操作简单流程 CPU向虚拟地址va加载或写入数据–>CPU将va交给内存管理单元MMU–>SATP寄存器存放着内存中存放虚拟地址到物理地址的表单–>MMU通过SATP查找…

03_C++函数

函数的分文件编写1.1头文件-函数声明//swap.h文件 #include<iostream> using namespace std;void swap(int a, int b);1.2源文件-函数定义在源文件中&#xff0c;要加上头文件引用#include "swap.h"//swap.cpp文件 #include "swap.h"void swap(int a…

最少砝码(思维+找规律)

最少砝码 前n个可以表示0~k; 第n1个为x&#xff08;x>k&#xff09;; 最大可测maxnkx; 第n1个和前n个放两边 可测得x-k&#xff1b; 让x-kk1&#xff0c;得到x2k1&#xff1b; maxn3k1&#xff1b; k1 可以用(2k1) - (k-0) 表示 k2 可以用(2k1) - (k-1) 表示 … 2k1 可以用…

Compose 动画 (八) : Compose中的动画差值器 AnimationSpec

1. AnimationSpec是什么 Android Compose中的AnimationSpec用来自定义动画规格。 啥意思呢&#xff0c;其实就是类似于传统View体系中的差值器Interpolator&#xff0c;但是比起差值器&#xff0c;又提供了更多的功能。 根据其不同的子类&#xff0c;可以来控制动画执行时长、…

运维1.12了解集中式日志管理工具 ELK 的基本用法,包括数据采集、搜索和展示

ELK 是一个由三个开源项目组成的日志管理工具&#xff0c;它们分别是 Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个基于 Lucene 的搜索引擎&#xff0c;它可以提供实时的分布式搜索和分析能力&#xff1b;Logstash 是一个日志收集和处理工具&#xff0c;可以实现多…

《白帽子讲Web安全》世界观安全

1.Web安全简史1.1中国黑客简史对于现代计算机系统来说&#xff0c;在用户态的最高权限是root&#xff0c;也是黑客们最渴望能够获取的系统最高权限。不想拿到“root”的黑客&#xff0c;不是好黑客。在现实世界中&#xff0c;真正造成破坏的&#xff0c;往往并非那些挖掘并研究…

10秒去除WPS Office弹窗广告教程(2023.3.31最新)

目录 前言 步骤 1. 右击WPS Office&#xff0c;打开文件所在目录 2. 打开第二个文件夹 3. 进入office 6文件夹 4. 找到文件ksomisc.exe 5. 右击选择以管理员身份运行 6. 打开后是下面的界面&#xff0c;点击“高级(A)...” 7. 按照下图操作 8. 最后点击退出就设置完…

Mybatis配置之属性优化理解【transactionManager、dataSource、properties】

文章目录一.Mybatis配置之属性优化1.1 配置解析1.2 默认配置环境1.2.1 事务管理器&#xff08;transactionManager&#xff09;了解即可。1.2.2 数据源&#xff08;dataSource&#xff09;1.3 属性&#xff08;properties&#xff09;一.Mybatis配置之属性优化 1.1 配置解析 …