JARVIS 变为现实:使用 Python、React 和 GPT-3 构建个人 AI 助理

简介: JARVIS 变为现实:使用 Python、React 和 GPT-3 构建个人 AI 助理

image.png

从想法到现实:如何构建自己的个人 AI 助理 Web 应用程序。是否希望拥有一个像托尼·斯塔克饰演的贾维斯那样的个人人工智能助理?或者《钢铁侠星期五》来帮助完成任务、回答问题并陪伴在身边?

很庆幸生活在这个时代,本文将把这个科幻梦想变成了现实!算是很少的一部分,一个雏形。在本文中,将展示如何使用 Python FastAPI、ReactJS 和 GPT-3 语言模型构建自己的 AI 助手。

将看到人工智能助手的演示,并探索系统设计和架构。将详细介绍后端和前端的工作原理,以便更好地了解幕后所发生的一切。

从想法到实现:将梦幻般的人工智能助手变成有形的网络应用程序!在之前的文章《掌握AI摘要技术解锁个人第二大脑》中,探索了如何使用 Python 和 ChatGPT 创建人工智能驱动的第二大脑。第二个大脑能够根据用户提供的上下文数据来记住和组织信息。

在这篇文章中,通过实际构建一个个人人工智能助理来将事情提升到一个新的水平,可以用自然语言与它交谈、倾听和提问。

此外,借助 GPT-3 和网络抓取的强大功能,该人工智能助手可以提供超出用户提供的上下文数据的更多见解和答案。

人工智能助手的交互方式

先来看下这个简单版本的 JARVIS 所涉及的步骤:

  1. 将鼠标悬停在 说些什么 按钮上
  2. 录音开始
  3. 对着麦克风说出你的问题
  4. 将鼠标光标移离按钮
  5. 后端魔法奇迹发生了!
  6. 人工智能助手通过扬声器向你说出答案
  7. 还可以在用户界面中获得问题/答案的文本记录

image.png

系统设计和架构一览

从这里开始将注意力转移到技术细节上。将系统分解为多个组件,它会是这样的:

  1. GPT-3 作为大型语言模型 (LLM)
  2. Llama-Index 用于向量化上下文数据并将其传递给 GPT-3
  3. Python FastAPI 服务器与经过训练的 LLM 模型进行交互
  4. ReactJS 和 ChakraUI 构建前端 UI
  5. 用于语音输入的 Webkit SpeechRecognition 库
  6. 用于文本转语音的 Webkit SpeechSynthesisUtterance 库

如果把所有这些放在一起,系统就是这样的。

image.png

从左到右、从上到下阅读系统设计图。

现在对系统的工作原理有了更全面的了解,接下来将按照前端和后端实现逐步深入的介绍。

后端:为 AI 助手提供支持

在过去的几个月里,ChatGPT 毫不夸张地说已经占领了世界。可以要求它做作业、准备演示文稿、编写 SQL 查询、编写代码、书写商务邮件、生成逼真的图像和视频等等。

尽管它可以做所有这些不同的事情,但当问它有关生活的问题时,它仍然会很挣扎。如你昨天吃了什么?上周你见到了谁?你的咖啡买了吗?

ChatGPT 无法回答这些问题,因为它无法了解你的个人生活。需要向其提供个人数据,它才能提供帮助。这就是以下内容的用武之地:

  • 包含日记条目的文本文件
  • Llama Index 用于读取此文本文件、矢量化数据并将其作为上下文传递给 GPT-3

这两者的结合使 GPT-3 能够回答对个人生活的任何问题。

首先,需要日志中存在数据,GPT-3 才能提供帮助。

第一步是根据这些数据训练 GPT-3 模型。接下来,将经过训练的模型保存在服务器上。


from llama_index import GPTSimpleVectorIndex, SimpleDirectoryReader
# Load data from the journal text file
documents = SimpleDirectoryReader("./data").load_data()
# Create a simple vector index
index = GPTSimpleVectorIndex(documents)
index.save_to_disk("generated_index.json")
# Create an infinite loop asking for user input and then breaking out of the loop when the response is empty
while True:
    query = input("Ask a question: ")
    if not query:
        print("Goodbye")
        break
    # query the index with the question and print the result
    result = index.query(query)
    print(result)

现在,构建一个非常简单的 FastAPI 端点来与这个保存的模型进行交互。端点逻辑很简单:

  1. 传递来自WEB应用程序的用户问题
  2. 向保存的 GPT-3 模型提问
  3. 以 JSON 格式将答案返回给客户端


from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from llama_index import GPTSimpleVectorIndex
app = FastAPI()
# Define allowed origins
origins = [
    "http://localhost:3000",
    "http://localhost:5000",
    "http://localhost:8000",
    "http://localhost:8080",
]
# Add CORS middleware
app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)
@app.get("/answers")
async def get_answer(question: str):
    index = GPTSimpleVectorIndex.load_from_disk("generated_index.json")
    answer = index.query(question)
    return {"answer": answer.response}

此后,由前端负责将数据呈现给用户。

前端:将 AI 助手带入生活

用户与WEB应用程序交互,基本上有 4 个任务:

  1. 通过麦克风将用户的问题转化为文字
  2. 通过 API 调用将问题传递给服务器
  3. 将来自服务器的答案从文本转换为语音,并通过用户的扬声器产生输出
  4. 在进行语音转文本和文本转语音时向用户显示文字记录


import React, { useState, useEffect } from "react";
import { Button, VStack, Center, Heading, Box, Text } from "@chakra-ui/react";
function App() {
  const [transcript, setTranscript] = useState("");
  const [answer, setAnswer] = useState("");
  const [isRecording, setIsRecording] = useState(false);
  const [buttonText, setButtonText] = useState("Say Something");
  const [recognitionInstance, setRecognitionInstance] = useState(null);
  useEffect(() => {
    const recognition = new window.webkitSpeechRecognition();
    recognition.continuous = true;
    recognition.interimResults = true;
    recognition.lang = "en-US";
    recognition.onresult = (event) => {
      let interimTranscript = "";
      let finalTranscript = "";
      for (let i = event.resultIndex; i < event.results.length; i++) {
        const transcript = event.results[i][0].transcript;
        if (event.results[i].isFinal) {
          finalTranscript += transcript + " ";
        } else {
          interimTranscript += transcript;
        }
      }
      setTranscript(finalTranscript);
    };
    setRecognitionInstance(recognition);
  }, []);
  const recordAudio = () => {
    setAnswer("");
    setButtonText("Recording...");
    setIsRecording(!isRecording);
    recognitionInstance.start();
  };
  const stopAudio = async () => {
    setButtonText("Say Something");
    setIsRecording(!isRecording);
    recognitionInstance.stop();
    const response = await fetch(
      `http://127.0.0.1:8000/answers?question=${transcript}`
    );
    const data = await response.json();
    setAnswer(data["answer"]);
    const utterance = new SpeechSynthesisUtterance(data["answer"]);
    window.speechSynthesis.speak(utterance);
  };
  return (
    <Box
      bg="black"
      h="100vh"
      display="flex"
      justifyContent="center"
      alignItems="center"
      padding="20px"
    >
      <Center>
        <VStack spacing={12}>
          <Heading color="red.500" fontSize="8xl">
            👋 I am your personal assistant 🤖
          </Heading>
          <Button
            colorScheme="red"
            width="300px"
            height="150px"
            onMouseOver={recordAudio}
            onMouseLeave={stopAudio}
            fontSize="3xl"
          >
            {buttonText}
          </Button>
          {transcript && (
            <Text color="whiteAlpha.500" fontSize="2xl">
              Question: {transcript}
            </Text>
          )}
          {answer && (
            <Text color="white" fontSize="3xl">
              <b>Answer:</b> {answer}
            </Text>
          )}
        </VStack>
      </Center>
    </Box>
  );
}
export default App;

关于语音部分,也可以借助AI来实现不同的声音,这里就不展开了。

译自:levelup.gitconnected.com/bring-tony-…



相关文章
|
11月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
1117 7
|
11月前
|
人工智能 API 开发者
Dify x AiOnly平台:手把手教你调用GPT-5从零构建AI工作流!
本文介绍如何通过Dify与AiOnly平台,快速构建基于GPT-5等顶尖大模型的AI应用。涵盖环境部署、模型接入、工作流编排及实战案例,助力开发者低门槛打造专属聊天机器人,轻松实现AI应用落地。(238字)
|
11月前
|
人工智能 自然语言处理 API
快速集成GPT-4o:下一代多模态AI实战指南
快速集成GPT-4o:下一代多模态AI实战指南
714 101
|
人工智能 自然语言处理 数据可视化
GPT-5首发夜:AI可以成为每个人的“创新搭子”吗?
GPT-5震撼上线,ModelGate同步开放千万Token免费试用,AI正从“黑科技”变为人人可用的“创新搭子”。无需专业背景,只需一个想法,你就能用自然语言让AI帮你写代码、做设计、搞创意。从扫雷小游戏到多模态交互,GPT-5不仅懂你,还能优化你的创意细节。AI创新门槛大幅下降,ModelGate提供便捷平台,让每个人都能低成本试错、高效创作。未来,“一人一AI搭子”或成标配,你和AI会创造出什么新可能?
|
机器学习/深度学习 人工智能 PyTorch
GPT为定制AI应用工程师转型第一周学习计划
本计划帮助开发者快速入门AI领域,首周涵盖AI基础理论、Python编程及PyTorch实战。前两天学习机器学习、深度学习与Transformer核心概念,掌握LLM工作原理。第三至四天快速掌握Python语法与Jupyter使用,完成基础编程任务。第五至七天学习PyTorch,动手训练MNIST手写识别模型,理解Tensor操作与神经网络构建。
581 0
|
人工智能 数据安全/隐私保护 Python
小红书图文生成器,小红书AI图文生成工具,python版本软件
Pillow库自动生成符合平台尺寸要求的配图7;3)利用Playwright实现自动化发布流程6。
|
传感器 机器学习/深度学习 人工智能
从仿真到现实:数字孪生解锁具身AI全景应用
Embodied AI正在重塑智能机器人系统的格局,尤其通过为复杂且动态的环境中的行动执行提供许多现实可行的解决方案。然而,具身AI需要生成大量数据用于训练和评估,以确保其与物理环境交互的安全性。因此,有必要构建一个成本效益高的模拟环境,能够从物理特性、物体属性及交互中提供充足的训练和优化数据。Digital Twins是工业5.0中的关键议题,它通过镜像真实世界对应体的状态和行动,实现对物理过程的实时监控、模拟与优化。本综述探讨了将数字孪生与具身AI结合的方式,通过将虚拟环境转化为动态且数据丰富的平台,弥合仿真与现实之间的差距。
1488 7
|
人工智能 自然语言处理 前端开发
上线几天,轻松斩获10k,开源通用AI智能体Suna:一句话自动处理Excel/爬数据/写报告,程序员私人助理诞生!
Suna是由Kortix推出的全球首个开源通用型AI Agent,可通过自然语言对话自动完成浏览器操作、数据分析、系统管理等复杂任务。它具有“执行力”,能像人类员工一样理解指令并操作数字工具,支持自托管保障数据安全,适用于市场分析、学术研究、企业办公等场景。Suna的核心优势在于实现“语言→行动”的转化,适合需要实际操作的任务,如爬虫、报表生成和网站部署。项目地址为:https://github.com/kortix-ai/suna。
1175 0
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
911 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程

推荐镜像

更多