从零开始搭建GPT-6问答网站:环境配置、Flask后端与模型集成实战

发布时间:2026/10/2 5:02:21
从零开始搭建GPT-6问答网站:环境配置、Flask后端与模型集成实战
GPT-6 的消息最近在开发者圈子里讨论热度很高参数还没完全公开周边工具链倒是先卷起来了。与其只刷新闻看评测不如自己动手把环境装好顺手做一个能跟模型对话的网站。今天这篇就从一个完全干净的系统开始手把手把 Git、Python、Node.js、VSCode 这些基础工具装明白然后写一个带后端接口和前端页面的完整网站最后把大模型接口接进去让页面真的能回答问题。整篇内容适合两类人一类是刚开始接触 AI 开发、连环境变量都还没搞懂的新手另一类是写过脚本但没完整做过网站的朋友。跟着这篇走一遍你不仅能收获一个能用的网站还能把整套开发流程的底层逻辑理清楚。废话不多说直接开整。1. 项目整体设计与思路拆解1.1 先想清楚这个网站到底要做成什么样很多人一上来就急着敲代码结果装了一堆工具写了几百行代码最后发现页面跑不起来或者跑起来之后不知道下一步能干什么。我的习惯是先给项目立一个最小目标确认“什么功能是必须有的”再动手。这次我的定义很明确做一个“AI 问答工具站”。用户打开网页在输入框里提问点击提交后后端负责把我们的问题送给 GPT-6 的语言模型接口拿到回答后再返回给前端展示。同时网站要保存提问和回答的历史记录刷新页面之后依然能看到之前的对答。为什么选这个场景因为它技术覆盖面非常完整。一个看似简单的问答网站实际包含了前端页面搭建、后端接口开发、数据库存取、外部大模型 API 调用、环境变量管理、错误处理这六个核心环节。如果你能完整跑通这条链路以后再做聊天机器人、内容生成工具、企业知识库问答本质都是同一个套路只是业务逻辑和数据库结构不一样。还有一个原因这个案例的可扩展性很强。跑通之后你可以给它加登录注册、加支付会员、加多轮对话记忆、加文档上传解析所有功能都能挂在这个骨架上不会因为当初架构选型太怪而被卡住。1.2 技术选型为什么是这套组合确定目标后我面临的第一个问题是“用什么技术来实现”。网上方案五花八门什么 React Node、Vue Spring Boot、Next.js 全栈看得人眼花。我的选择原则很朴素用最少的环境依赖、最直观的代码结构把这个网站做出来。最终选型是 Python Flask 做后端原生 HTML/CSS/JavaScript 做前端SQLite 做数据库。先聊聊为什么后端选 Flask。Python 目前依然是 AI 生态最友好的语言不管是调用大模型接口、做数据处理还是后续加机器学习能力Python 生态的第三方库都非常成熟。Flask 本身极其轻量单文件就能起一个 Web 服务没有 Django 那种复杂的目录规范和 ORM 约束对初学者而言写起来不用被框架带着走。实际生产环境如果并发量大了可以无缝迁移到 FastAPI 或者用 gunicorn 部署代码改动成本非常低。前端我没有引入 Vue 或 React原因很直接框架的构建工具、依赖安装、编译流程本身就够新手折腾两天的而这个案例的核心不是学习组件化开发而是理解“页面如何与后端交互”。使用原生三件套你能清楚地看到浏览器发出了什么请求、收到了什么响应、怎么把数据渲染到页面上。等这套逻辑彻彻底底理解了再去学框架会顺畅得多。至于数据库SQLite 是 Python 自带的零配置方案就是一个文件不需要额外启动数据库服务。我用它起步等到后面数据量大了、需要多人并发写入时再切换到 MySQL 或者其他生产级数据库这也是正规项目的迁移路径。下面用一个表格列出这套组合的核心优势技术选型选择理由升级路径Python FlaskAI 生态好、轻量、易上手FastAPI / Django / gunicorn原生 HTML/CSS/JS无框架依赖交互逻辑透明可见Vue / React / TypeScriptSQLite零配置、单文件、随启随用MySQL / PostgreSQLVSCode Git开发调试效率高版本控制必备配合 Codex 等 AI 插件进一步提速1.3 环境安装为什么是第一个坑我见过太多人卡在第一步工具装了一堆却不知道装来干嘛报错了不会看最后直接放弃。其实这些工具本身不难难的是理解它在你电脑里的位置和作用。可以这么类比你想做一桌菜得先把灶台、锅、砧板、菜刀准备好。Git 相当于你做菜时的备份笔记每做一个步骤都能记录和回退Python 是主要的烹饪工具负责处理和加工食材Node.js 是辅助工具帮你跑一些前端页面和自动化脚本VSCode 是你切菜炒菜的整个工作台所有工具都在它里面被调用。这里最关键的一点是环境变量和 PATH 的作用。安装 Python 或 Node 的时候系统会询问要不要把它加到 PATH 中很多新手直接跳过导致后面在终端输入python或npm命令时提示“不是内部或外部命令”。PATH 就是系统搜索命令的目录清单只有把工具所在的目录加进这个清单终端才能在任何路径下找到并执行它。另外还有版本选择的问题。Python 老项目用 3.8、新项目用 3.12 是很正常的如果你在电脑上全局只装一个版本切换项目时就会踩坑。这就是虚拟环境存在的意义——每个项目有自己独立的依赖目录互不污染。这部分我会在实操章节仔细演示。整个环境搭建顺序也是我故意设计过的先装 Git这样后面创建项目时可以直接初始化仓库每次修改代码都有历史记录再装 Python用来写后端和处理模型调用接着装 Node.js 和 VSCode把开发工作台补齐最后如果做数据量更大的应用再装 MySQL。按照这个顺序走下来每一步都比较顺畅不会出现装了 VSCode 却没有解释器可用的尴尬局面。2. 开发环境搭建核心工具安装与配置详解2.1 Git先装好版本控制Git 在网站开发中的地位没必要多吹你只需要知道一件事没有它代码改坏了就真坏了有了它随时可以回到任何历史版本。安装方式根据系统不一样略有区别。如果你用 Windows去 Git 官网下载安装包一路 Next 即可。如果用的是 macOS系统自带一个旧版 git建议用 Homebrew 执行brew install git装新版本。Ubuntu 或 Debian 系统则用sudo apt install git。安装完成后在终端输入git --version能输出版本号就说明成功了。装好 Git 之后第一件事就是配置你的身份。因为在 Git 的每次提交记录里都需要知道是谁做的修改。执行下面两行命令把邮箱换成你自己的git config --global user.name 你的名字 git config --global user.email your_emailexample.com注意这里的邮箱和用户名最好和你之后要用的代码托管平台账号保持一致这样可以避免提交记录关联不上账号的问题。接下来是生成 SSH 密钥。这一步是为了让你之后往代码仓库推送代码时不需要每次都输密码。终端执行ssh-keygen -t ed25519 -C your_emailexample.com一路回车就行密钥会生成在~/.ssh目录下。然后把id_ed25519.pub文件内容复制出来添加到你的代码托管平台后台。这是 Git 远程操作的核心前置条件。日常开发中我的习惯是每完成一个功能点就提交一次而不是等到下班一并提交。常用命令我整理成了速查表命令作用git init在当前目录初始化仓库git add .把所有改动加入暂存区git commit -m 说明信息提交并附加说明git status查看当前状态git log --oneline查看提交历史git checkout -- 文件名丢弃某个文件的未提交改动git branch查看本地分支注意不要在仓库里提交敏感信息比如 API 密钥、密码、数据库连接字符串。后面我会讲到用.env文件管理密钥配合.gitignore忽略它这是每个开发者都必须养成的好习惯。2.2 Python版本选择和虚拟环境Python 的版本选择我的建议是不要盲目追求最新。目前 3.10 和 3.11 是发布四年内兼容性最好、第三方库支持最全的版本本地开发完全够用。3.12 和更高版本有些老库还没跟上容易报错。安装时有一个选项非常关键一定要勾选“Add Python to PATH”否则后续命令敲起来会非常痛苦。安装完成后验证一下python --version如果显示出版本号接下来创建虚拟环境。虚拟环境可以理解为给每个项目单独开一个“独立的软件盒子”这个盒子里装的 Python 包不会影响全局环境。这是几乎所有 Python 开发者的标准做法。在项目根目录执行python -m venv venv这行命令会在当前目录生成一个名为venv的隔离环境。激活它Windowsvenv\Scripts\activatemacOS / Linuxsource venv/bin/activate激活成功后终端提示符前面会出现(venv)字样意味着你此刻的 Python 和 pip 都指向这个虚拟环境了安装的包也会装到这里面。以后进入任何 Python 项目第一件事就是激活它这能避免大量莫名其妙的依赖冲突问题。然后是 pip 换源。pip 默认从官方源下载在国内访问速度可能不太稳定项目一多容易卡。我的做法是永久换成国内镜像源比如清华源pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple换完之后你会发现安装速度提升明显几乎不会再有因为网络超时而安装失败的场景。2.3 Node.js 与 VSCode日常开发的左右手Node.js 在这个项目里主要用来跑前端相关工具另外也是未来工程化开发的基础。我不建议你直接去官网下载安装包而是推荐先装一个 nvmNode 版本管理器它能让你随意切换 Node 版本以后再也不用为了版本兼容而重装环境。Windows 用户可以用 nvm-windows 安装包macOS/Linux 用 nvm 脚本即可。安装完成后nvm install 20 nvm use 20这样 Node 20 就装好了。验证一下node -v和npm -v都能输出版本号就说明成功了。VSCode 是目前开发体验最平衡的编辑器。安装过程不用多说主要是装完之后的插件配置。我强烈推荐这几个一个是 Python 扩展它会给编辑器提供代码补全和错误提示另一个是 Live Server可以直接启动一个本地静态服务器预览页面省去自己手动刷新浏览器的麻烦还有 GitLens能在行号旁边直观显示这段代码是谁写的、什么时候写的查历史记录非常方便最后是 Codex 扩展这是 OpenAI 出的 AI 编程助手插件它可以直接在编辑器里理解你的代码并给出建议。安装 Codex 的过程很简单在 VSCode 扩展商店搜索 Codex找到 OpenAI 官方发布的那个点击安装即可。装完后登录你的账号它就能帮你自动补全代码、解释报错、生成单元测试。这个助手配合我们今天要做的网站项目非常合适写完第一版代码后你可以试试让它帮忙优化代码结构属于真实开发中非常典型的 AI 提效场景。2.4 进阶准备MySQL 快速安装与基础配置SQLite 用在教学案例中绰绰有余但很多人做正式项目时会选择 MySQL这里我把它的安装要点也讲一下你可以按需选择。Windows 的安装包在官网下载后通常还需要额外配置my.ini文件和初始化数据目录比较繁琐。所以我的建议是如果只是本地练习直接用安装包自带的默认配置即可安装过程中设置好 root 密码就算完成。macOS 和 Linux 用户依然建议优先使用包管理器比如brew install mysql或apt install mysql-server。安装完成并启动服务后关键操作是创建业务数据库和对应的用户不要用 root 账号直接跑业务代码。命令大致如下mysql -u root -p CREATE DATABASE ai_website CHARACTER SET utf8mb4; CREATE USER webuserlocalhost IDENTIFIED BY 你的密码; GRANT ALL PRIVILEGES ON ai_website.* TO webuserlocalhost; FLUSH PRIVILEGES;注意我特意把字符集指定为utf8mb4这样可以存表情符号和各种生僻字避免聊天记录写入时出现乱码。在正式项目里使用 MySQL 而不是 SQLite最大的原因是并发和运维能力不同MySQL 能承受更高的并发写入并且支持备份、主从复制等完整运维体系。但从今天的案例出发先用 SQLite 把功能跑通之后再切换上去更符合正常成长路径。3. 从零到一网站核心功能开发与 GPT-6 模型集成3.1 项目目录结构设计写代码前先定清楚文件结构能让后续开发不乱套。我最终采用的目录结构如下ai-website/ ├── venv/ # 虚拟环境目录 ├── app.py # Flask 后端主程序 ├── templates/ │ └── index.html # 前端首页模板 ├── static/ │ ├── style.css # 页面样式 │ └── script.js # 前端交互逻辑 ├── .env # 环境变量文件密钥 ├── .gitignore # Git 忽略清单 └── requirements.txt # Python 依赖清单这个结构是 Flask 约定的标准布局templates放 HTML 模板static放静态资源后端入口只有一个app.py。对于小型项目这种把所有后端逻辑集中在一个文件的做法反而更加清晰不会出现打开七八个目录找不到关键代码的窘境。3.2 编写后端Flask 应用与模型接口调用后端是整个网站的核心。它要做三件事第一提供首页页面第二暴露一个POST /api/chat接口接收前端发来的问题文本第三内部去调用 GPT-6 语言模型接口把模型返回的结果处理之后传回前端。先创建requirements.txt内容如下flask3.0.3 requests2.32.3 python-dotenv1.0.1然后用 pip 安装依赖pip install -r requirements.txt接下来写app.py核心代码如下import os import json import sqlite3 from datetime import datetime from flask import Flask, request, jsonify, render_template import requests from dotenv import load_dotenv # 加载 .env 文件里的密钥配置 load_dotenv() app Flask(__name__) # 初始化数据库用于保存历史问答记录 def init_db(): conn sqlite3.connect(chat_history.db) conn.execute( CREATE TABLE IF NOT EXISTS chat_records ( id INTEGER PRIMARY KEY AUTOINCREMENT, question TEXT, answer TEXT, created_at TEXT ) ) conn.commit() conn.close() init_db() # 首页路由返回前端页面 app.route(/) def index(): return render_template(index.html) # 保存一条聊天记录 def save_record(question, answer): conn sqlite3.connect(chat_history.db) conn.execute( INSERT INTO chat_records (question, answer, created_at) VALUES (?, ?, ?), (question, answer, datetime.now().isoformat()) ) conn.commit() conn.close() # 调用大语言模型接口的通用函数 def call_gpt6(prompt): api_key os.getenv(LLM_API_KEY) api_url os.getenv(LLM_API_URL) model_name os.getenv(LLM_MODEL_NAME, gpt-6) headers { Content-Type: application/json, Authorization: fBearer {api_key} } payload { model: model_name, messages: [ {role: user, content: prompt} ], max_tokens: 2000, temperature: 0.7 } response requests.post(api_url, headersheaders, jsonpayload, timeout60) response.raise_for_status() data response.json() return data[choices][0][message][content] # 对话接口接收前端 POST 过来的问题 app.route(/api/chat, methods[POST]) def chat(): data request.get_json() question data.get(question, ).strip() if not question: return jsonify({error: 问题不能为空}), 400 try: answer call_gpt6(question) save_record(question, answer) return jsonify({answer: answer}) except Exception as e: return jsonify({error: f调用模型接口失败{str(e)}}), 500 if __name__ __main__: app.run(debugTrue, port5000)这段代码里有几个细节值得展开说明。第一API 密钥和接口地址全部从环境变量读取写死在代码里既不安全也不利于后期切换不同模型服务商。.env文件长这样LLM_API_KEY你的密钥 LLM_API_URLhttps://你的模型服务商接口地址 LLM_MODEL_NAMEgpt-6注意.env文件绝对不能提交到 Git。在.gitignore里加上一行.env即可。第二timeout60这个参数是我故意设置的。大语言模型生成长文本需要时间不设置超时的话后端可能无限期等待设置太短又容易导致正常请求被中断。60 秒对于大多数文本生成任务来说是一个比较安全的取值。第三response.raise_for_status()会在接口返回 4xx 或 5xx 状态码时直接抛出异常。这样在except块里能够捕获全部错误再向前端返回一个可读的错误提示用户可以直观地看到具体问题。3.3 编写前端页面、样式与交互逻辑后端接口就绪后前端要做的事情就是“把问题发出去、把回答渲染出来”。templates/index.html的结构很简洁重点是分清楚功能区域!DOCTYPE html html langzh-CN head meta charsetUTF-8 meta nameviewport contentwidthdevice-width, initial-scale1.0 titleAI 问答助手/title link relstylesheet href/static/style.css /head body div classcontainer header h1AI 问答助手/h1 p classsubtitlePowered by GPT-6/p /header div classchat-box idchatBox div classmessage ai 你好我是 AI 助手请把你的问题发给我。 /div /div div classinput-area input idinput typetext placeholder输入你的问题按回车发送... button idsendBtn发送/button /div /div script src/static/script.js/script /body /htmlstyle.css主要做的就是让页面看起来干净舒适用 flex 布局把聊天窗口撑满视口再给用户消息和 AI 消息设计不同的气泡样式。这里我不贴完整样式代码只强调两个要点消息区域要设置overflow-y: auto否则消息一多就会溢出页面聊天输入框在窄屏设备上要留出足够触控空间保证移动端的可用性。真正核心的逻辑在script.jsconst chatBox document.getElementById(chatBox); const input document.getElementById(input); const sendBtn document.getElementById(sendBtn); function appendMessage(text, sender) { const msg document.createElement(div); msg.className message ${sender}; msg.textContent text; chatBox.appendChild(msg); chatBox.scrollTop chatBox.scrollHeight; } async function sendQuestion() { const question input.value.trim(); if (!question) return; appendMessage(question, user); input.value ; const loadingMsg document.createElement(div); loadingMsg.className message ai loading; loadingMsg.textContent 正在思考中...; chatBox.appendChild(loadingMsg); try { const response await fetch(/api/chat, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ question: question }) }); const data await response.json(); loadingMsg.remove(); if (data.answer) { appendMessage(data.answer, ai); } else { appendMessage(出错了 data.error, ai); } } catch (error) { loadingMsg.remove(); appendMessage(网络请求失败 error.message, ai); } } sendBtn.addEventListener(click, sendQuestion); input.addEventListener(keydown, (event) { if (event.key Enter) { sendQuestion(); } });这个代码的核心逻辑并不复杂fetch 把问题 POST 给后端拿到响应后追加到聊天区域。值得注意的是我在请求等待期间插入了一个“正在思考中”的加载消息这样用户不会在模型响应较慢时误以为页面卡死了这是真实产品里很基础但很关键的交互细节。3.4 本地联调把前端和后端串起来代码写好了怎么跑起来看效果第一步确保当前处于虚拟环境激活状态第二步启动 Flask 服务python app.py终端显示以下内容就是启动成功* Running on http://127.0.0.1:5000打开浏览器访问http://127.0.0.1:5000输入一个问题点击发送正常情况下你会看到页面顶部追加了一条用户消息稍等片刻 AI 应答会出现在下方。如果页面打开时报错不必急着怀疑代码有问题。先检查 Flask 终端里的日志它会把异常堆栈打印出来。最常见的错误无非三类数据库初始化失败、依赖没有装全、模型接口调用失败。这三类错误在终端日志中的表现差异很大多看看报错信息基本都能找到原因。联调通过的标志是前端页面上能看到一次完整的“用户提问 - AI 回答”循环且刷新页面后数据库中已经有了一条记录。验证数据是否存进去在虚拟环境里执行python -c import sqlite3; connsqlite3.connect(chat_history.db); print(conn.execute(select count(*) from chat_records).fetchone())返回的数字大于 0说明整条链路真的通了而不是只有页面在静态展示。4. 本地验证、上线准备与常见问题排查实录4.1 功能测试清单与部署建议网站能跑起来的下一步不要急着部署先按测试清单过一遍。我在交付前通常会做一轮系统性的功能验证宁可现在多花十分钟也不要在线上发现问题再回来改。测试项预期结果常见问题首页可访问页面正常展示端口占用、Flask 未启动输入为空时点击发送不发起请求页面无变化JS 未做非空判断发送正常问题AI 返回结果并追加到聊天区密钥错误、接口超时刷新页面之前消息消失但数据库已有记录这是正常现象后续如需展示历史可再加接口连续提问 5 次无页面卡死或内存飙升后端阻塞、数据库写入缓慢功能确认无误后部署上线时推荐用 gunicorn 替代 Flask 自带的开发服务器因为 Flask 内置服务的并发能力有限生产环境压个几十个请求就会出现排队现象。安装 gunicorn 并执行pip install gunicorn gunicorn -w 4 -b 0.0.0.0:5000 app:app-w 4表示启动 4 个 worker 进程能有效利用多核 CPUapp:app指的是app.py文件里的app实例。部署到国内云服务器后记得在云控制台的安全组放行 5000 端口否则外网依然访问不到。如果你有域名把域名解析到服务器公网 IP 后再在 Web 服务器中配置反向代理到本地 5000 端口就可以通过域名访问了。这里补充一点和域名相关的基础知识.com和.com.cn是有差异的。.com面向全球注册难度低、适用范围广.com.cn是中国国家顶级域名的二级域通常要求注册主体具备国内资质或完成实名。个人做小项目优先选择.com即可性价比和通用性都更好。另外在国内服务器上绑定域名并对外提供 Web 服务必须按相关规定完成备案流程这一点在部署前就要规划好时间备案通常需要几天到几周不等。4.2 高频报错与排查速查表我在帮别人调试项目时发现新手的报错其实高度集中在那十几个固定场景。把最常见的问题和排查思路整理成表格遇到直接对号入座。报错或现象可能原因解决思路python 不是内部或外部命令安装 Python 时未勾选 Add to PATH重装并勾选 PATH或手动添加环境变量pip install速度很慢默认官方源网络访问慢换成清华或阿里源执行pip config setFlask 启动时报端口被占用5000 端口被其他进程占用Windows 用netstat -ano | findstr 5000查 PIDmacOS/Linux 用lsof -i:5000调用模型接口返回 401API 密钥错误或已过期检查.env文件里的密钥重启终端/Flask 进程调用模型接口超时请求参数过大、模型响应太慢或网络异常延长 timeout 时间分段请求检查网络连通性页面样式完全没生效静态文件路径写错确认link指向/static/style.css且文件确实存在中文出现乱码数据库字符集问题SQLite 一般无此问题MySQL 要确认是utf8mb4修改代码后页面无变化浏览器缓存或 Flask 缓存强制刷新CtrlShiftR开发模式开启 debug连接数据库失败服务未启动、账号或密码错误先确认数据库服务状态再确认账号权限不要用 root 直接跑业务局域网内手机打不开页面绑定地址是 127.0.0.1启动时改用0.0.0.0并检查本机防火墙放行对应端口主机访问虚拟机里部署的网站连不上虚拟机网络模式或防火墙拦了端口将虚拟机网络设为“桥接模式”或“NAT 端口转发”确认虚拟机的防火墙规则是否允许外部访问第 11 条我在真实开发中碰到过几次。很多人把服务跑在虚拟机里本地没问题但宿主机去访问时就是找不到页面原因通常不是代码而是虚拟机的网络隔离策略。排查的时候先确认虚拟机的 IP 地址能不能和宿主机互通再确认监听地址是不是0.0.0.0最后看防火墙逐层定位即可。4.3 从“会跑”到“有用”网站功能扩展思路当你能跑通这个基于 GPT-6 的问答网站后最后再聊聊怎么把它变成真正能持续使用的产品。第一件要考虑的是支付能力。很多朋友做网站做到后面都想知道怎么接入支付但这件事和个人开发者做产品的关系需要理清楚。支付通道的申请通常要求企业资质个人开发者可以先通过第三方聚合平台的小程序或者 H5 支付能力获得临时解决方案但要长期稳定运营注册个体工商户或公司是绕不开的路径。支付接入的核心是回调签名验证和订单状态机这部分等技术成熟了再单独展开现阶段你需要知道的是先把网站核心功能做好支付只是最后一公里。第二件是历史记录展示。当前案例只做了数据库写入没有读取。你可以加一个接口返回最近 20 条问答记录并在前端做一次页面加载时自动渲染。这一步会让你立刻理解“前后端数据如何联动”比任何教程都有用。第三件是安全与内容合规。网站一旦对外提供内容你需要考虑输入内容的过滤和输出内容的安全。可以在后端接入一个简单的敏感词库做前置检查也可以对每个用户 IP 做请求频率限制防止接口被滥用刷爆。建议在 Flask 里给/api/chat加一个轻量级限流逻辑比如同一 IP 每分钟最多 20 次请求成本很低但对稳定性的提升立竿见影。我个人在配置环境上踩过最多的坑就是早期图省事把所有 Python 包装在全局环境里结果项目一多版本互相冲突每次排查都要花半天。后来老老实实每一步都走虚拟环境再也没遇到过类似问题。你现在刚起步最好第一天就养成这个习惯它的性价比远高于任何花里胡哨的优化技巧。再分享一个非常实用的小技巧把密钥统一放在项目根目录的.env文件里同时把.env写进.gitignore。这样不管项目怎么迁移、仓库怎么分享敏感信息都不会泄露。如果哪天换了模型服务商只需要改.env里的接口地址和模型名一行代码都不用动。后面如果对这个项目有新的想法比如做成多人协作的知识库工具或者接入多模态能力这个骨架都能支撑你继续往上搭。