构建你的第一个 ChatGPT 应用 | 使用 Apps SDK 的逐步教程

引言

当 AI 成为日常工作流程的核心,ChatGPT 已成为数十亿用户的自然工具。然而直到现在,ChatGPT 的重点主要是"对话",而不是"交互"。

如果你能在 ChatGPT 内直接与应用互动------比如预订酒店、设计演示文稿------全部在同一个界面中完成,会怎样?

这正是 ChatGPT Apps 带来的能力。

借助全新的 Apps SDK,开发者现在可以构建运行在 ChatGPT 内部的交互式、具备上下文能力的应用。

在本指南中,你将学习如何构建属于你的 ChatGPT 应用。我将带你走过每一步代码,并解释其工作原理。

完成后,你将拥有一个可在 ChatGPT 环境中动态展示组件(widgets)的可运行应用。


第 0 步:ChatGPT 应用如何工作?

一个 ChatGPT 应用,本质上就是一个提供 widget 的 MCP 服务器。

ChatGPT 应用的工作流程

如上图所示,流程从 ChatGPT 根据用户消息触发应用开始。用户的消息会被发送到应用。

应用随后会选择最匹配用户意图的 MCP 工具。例如,当用户提出"我想买衣服",应用可能会选择名为 ShowClothes 的工具。

工具会返回 widget 与数据:

  • widget:显示在 ChatGPT 内的组件
  • data:ChatGPT 可使用的结构化响应

第 1 步:安装 FastApps

了解 ChatGPT 应用如何工作后,我们将开始实践。

我们会使用 FastApps ------ 一个开源框架,用于构建 ChatGPT 应用。

首先使用 uv 安装 FastApps:

bash 复制代码
uv tool install fastapps
uv tool install --upgrade fastapps   # 更新到最新版本

第 2 步:初始化新应用

安装后,运行以下命令快速开始:

perl 复制代码
fastapps init my-app
cd my-app
fastapps dev

你会看到一个通过 Cloudflare Tunnel 自动生成的公共 URL。

你的 MCP 服务器将暴露在 /mcp 路径下。

示例:

vbnet 复制代码
https://your-public-url.trycloudflare.com/mcp

第 3 步:测试你的应用

方案 A:使用 MCPJam Inspector 测试

连接并测试你的服务器:

css 复制代码
npx @mcpjam/inspector@latest

然后输入你的公共 URL + /mcp


方案 B:在 ChatGPT 内测试

  1. 打开 ChatGPT → 设置 → Connectors
  2. 添加公共 URL + /mcp
  3. 选择「No authentication」

第 4 步:创建更多 Widgets

你可以随时新增组件:

lua 复制代码
fastapps create additional-widget

第 5 步:编辑你的 Widget

你只需要修改两个目录:

1️⃣ server/tools/ --- MCP 工具

定义应用的逻辑与交互结构。

示例:

python 复制代码
# server/tools/my_widget_tool.py
from fastapps import BaseWidget, Field, ConfigDict
from pydantic import BaseModel
from typing import Dict, Any

class MyWidgetInput(BaseModel):
    model_config = ConfigDict(populate_by_name=True)
    name: str = Field(default="World")

class MyWidgetTool(BaseWidget):
    identifier = "my-widget"
    title = "My Widget"
    input_schema = MyWidgetInput
    invoking = "Processing..."
    invoked = "Done!"

    widget_csp = {
        "connect_domains": [],
        "resource_domains": []
    }

    async def execute(self, input_data: MyWidgetInput) -> Dict[str, Any]:
        return {
            "name": input_data.name,
            "message": f"Hello, {input_data.name}!"
        }

每个 MCP 工具都包含定义其特性的属性。可通过下方表格了解其含义。

如需更多细节,请参考 FastApps 文档。

必需类属性

属性 类型 描述 示例
identifier str 唯一 widget 标识,必须与 widgets/ 目录下文件夹同名 "greeting"
title str 在 ChatGPT 界面展示的人类可读名称 "Show Greeting Widget"
input_schema TypeBaseModel 输入参数定义,ChatGPT 通过 JSON schema 判断如何调用工具 GreetingInput
invoking str 调用执行时显示的提示 "Preparing your greeting..."
invoked str 执行结束时显示的提示 "Greeting ready!"

可选属性

属性 类型 描述 示例
description str 说明工具用途,便于模型判断何时调用 "Display a personalized greeting widget"
widget_accessible bool 组件是否可从前端触发工具 True

2️⃣ widgets/ --- 前端 UI(React)

该目录包含在 ChatGPT 显示的 UI 组件。

示例:

javascript 复制代码
// widgets/my-widget/index.jsx
import React from 'react';
import { useWidgetProps } from 'fastapps';

export default function MyWidget() {
  const props = useWidgetProps();

  return (
    <div style={{
      padding: '40px',
      textAlign: 'center',
      background: '#4A90E2',
      color: 'white',
      borderRadius: '12px'
    }}>
      <h1>{props.message}</h1>
      <p>Welcome, {props.name}!</p>
    </div>
  );
}

Widgets 是 React 组件,并可通过特殊 hooks 与 ChatGPT 交互。

如需更多细节,请参考 FastApps 文档。


第 6 步:部署你的 ChatGPT 应用

你可以直接通过 CLI 部署:

复制代码
fastapps cloud deploy

按照 CLI 指引逐步操作即可。


结语

在本教程中,你学习了如何使用 FastApps 框架创建 ChatGPT 应用。

你已搭建了应用核心------MCP 服务器,创建了 widgets 和工具,并通过 CLI 将其部署公开。

若想进一步了解部署方法,可参考这篇指南

这一结构非常简单却功能强大。

只需少量代码,你就能构建一个可供所有人使用的完整 ChatGPT 应用。

相关推荐
DeMinds17 小时前
内容没有丢,我为什么总在重新整理?|DeMinds 如何让工作接着继续
ios·github·markdown
寒水馨17 小时前
macOS下载、安装openclaw-v2026.7.1(附安装包OpenClaw-2026.7.1.dmg)
macos·大模型·github·开源软件·ai助手·openclaw·gpt-5.6
徐小夕18 小时前
花了3天,我写了一款开源AI公众号编辑器
前端·vue.js·github
CCPC不拿奖不改名1 天前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
redreamSo2 天前
一天涨 1800 星的 GitHub 榜首:AI 编程瓶颈变成了 token
人工智能·开源·github
逛逛GitHub2 天前
盘点 18 个 Kimi K3 外网爆火的案例,太令人惊艳了。
github
benchmark_cc2 天前
如何用 Python 进行多周期 K 线合成与时区对齐?基于 QuantDash 与 Pandas 的量化数据清洗实战(附 GitHub 源码)
开发语言·python·github·盯盘·pandas·quantdash·量化数据
luyingying2 天前
从 400 行到 30 个文件,我只做了一件事
github
武子康2 天前
GitHub Actions `pull_request_target` 与 Pwn Request:高权限工作流里的 Fork 代码执行风险(2026)
人工智能·github·ai编程
武子康2 天前
GitHub Models 7-30 退役全拆:Inventory + Capability Probe + Shadow Traffic + Brownout
人工智能·github·github copilot