1. 从 create-react-app 到能调用 AI 的脚手架
create-react-app 是 React 官方维护的脚手架工具,一条命令就能生成带 webpack、ESLint、Babel 配置的完整项目,适合刚接触组件化和工程化的初学者。它帮你把构建配置全部藏起来,你只需要关心src里的组件怎么写。但脚手架本身只解决了「页面怎么搭」,当你想让项目具备调用大模型的能力时,还得自己接一套 API 通道。
这篇就聚焦这个衔接点:用 create-react-app 初始化项目后,怎么通过 TaoToken 的统一 Key 和 API 通道,让本地开发环境里的 React 项目具备可调用的 AI 接口。我会给出可复制的settings.json、config.toml骨架、环境变量配置片段,以及启动验证和报错排查的完整动作。适合已经跑通过npm start、想往项目里加 AI 能力的 React 初学者。
TaoToken 在这里扮演的角色是统一入口:你不用分别去对接多家模型的 Key 和地址,而是用一套 Key、一个 API 地址,就能在项目里调用不同模型。官网地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 地址是 https://taotoken.net/api ,注意 API 地址不带 UTM 参数。
2. 前置准备:项目初始化与统一 Key 获取
2.1 用 create-react-app 建项目
先确认本机 Node 版本,create-react-app 对 Node 有最低要求,版本太低会在安装阶段报错:
node -v npm -v如果 Node 版本在 14 以上基本没问题。接着全局安装脚手架并创建项目:
npm i -g create-react-app cd Desktop create-react-app react-ai-demo cd react-ai-demo npm start浏览器自动打开http://localhost:3000,看到 React 默认页面就说明脚手架跑通了。这一步的目录结构里,public/index.html是唯一的主页面,必须包含root容器;src/index.js是入口文件,负责把App组件渲染到root里;src/App.js是主组件,其他子组件都挂在它下面。
2.2 拿到统一 Key
进入 TaoToken 控制台创建 API Key,地址是 https://taotoken.net/console 。创建后复制那串 Key,它就是你项目里所有 AI 调用的凭证。这里有个习惯建议:不要把 Key 直接写进App.js或任何会被提交到 Git 的文件里,后面我会用环境变量把它隔离出来。
如果你还没决定用哪个模型,可以先到模型对话页面试一下效果,地址是 https://taotoken.net/models ,确认模型输出符合预期再写进代码。
3. 可复制配置:环境变量与配置文件骨架
3.1 环境变量隔离 Key
create-react-app 内置了对.env文件的支持,但有个硬性规则:React 只会读取以REACT_APP_开头的变量。在项目根目录新建.env.local:
REACT_APP_TAOTOKEN_API_KEY=你的Key REACT_APP_TAOTOKEN_BASE_URL=https://taotoken.net/api.env.local默认会被 Git 忽略,适合放本地密钥。改完环境变量必须重启npm start,否则读不到新值,这是新手最常踩的坑之一。
3.2 settings.json 骨架
如果你用 VS Code 开发,可以在项目根目录建.vscode/settings.json,把编辑器和 AI 辅助插件的配置统一起来。下面是一个可复制的骨架,重点是让编辑器识别 JSX 语法并统一格式化:
{ "files.associations": { "*.js": "javascriptreact" }, "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode", "emmet.includeLanguages": { "javascript": "javascriptreact" }, "terminal.integrated.env.windows": { "REACT_APP_TAOTOKEN_BASE_URL": "https://taotoken.net/api" } }files.associations让.js文件按 JSX 高亮,emmet.includeLanguages让你在 JS 里也能用div.title这类缩写快速生成标签。最后一项是给 Windows 终端注入环境变量,macOS 或 Linux 用户可以把这一段删掉,改用 shell 的export。
3.3 config.toml 骨架
有些 AI 辅助工具或 CLI 客户端用 TOML 做配置。在项目根目录建config.toml,把统一通道写进去:
[api] provider = "taotoken" base_url = "https://taotoken.net/api" api_key_env = "REACT_APP_TAOTOKEN_API_KEY" timeout_seconds = 60 [model] default = "claude-sonnet" max_tokens = 2048 temperature = 0.7 [project] name = "react-ai-demo" framework = "create-react-app"注意api_key_env写的是环境变量名而不是 Key 本身,这样配置文件可以安全地提交到仓库。base_url用不带 UTM 的 API 地址,避免把追踪参数带进请求。
4. 在组件里发起请求并验证结果
4.1 写一个调用组件
在src下新建components/AiPanel/index.js,用一个函数组件发起请求。React 18 之后推荐用函数组件加 Hook:
import React, { useState } from 'react'; export default function AiPanel() { const [input, setInput] = useState(''); const [reply, setReply] = useState(''); const [loading, setLoading] = useState(false); const ask = async () => { setLoading(true); try { const res = await fetch( `${process.env.REACT_APP_TAOTOKEN_BASE_URL}/v1/chat/completions`, { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${process.env.REACT_APP_TAOTOKEN_API_KEY}`, }, body: JSON.stringify({ model: 'claude-sonnet', messages: [{ role: 'user', content: input }], }), } ); const data = await res.json(); setReply(data.choices?.[0]?.message?.content || '无返回内容'); } catch (err) { setReply(`请求失败:${err.message}`); } finally { setLoading(false); } }; return ( <div> <input value={input} onChange={(e) => setInput(e.target.value)} /> <button onClick={ask} disabled={loading}> {loading ? '请求中' : '提问'} </button> <p>{reply}</p> </div> ); }然后在App.js里引入它:
import React from 'react'; import AiPanel from './components/AiPanel'; export default function App() { return ( <div> <h1>React AI Demo</h1> <AiPanel /> </div> ); }4.2 启动验证
保存后浏览器会自动刷新。在输入框里打一句「用一句话解释什么是组件」,点提问。如果一切正常,几秒内会看到模型返回的文字。打开浏览器开发者工具的 Network 面板,能看到一条发往https://taotoken.net/api/v1/chat/completions的请求,状态码 200,响应体里有choices数组。
这一步验证通过,说明你的脚手架项目已经具备可调用的 AI 接口了。如果想让项目长期跑编码任务或 Agent 流程,可以了解 Coding Plan,地址是 https://taotoken.net/coding-plan ,它更适合持续性的开发场景。
5. 本篇常见报错排查
5.1 Key 读不到,请求返回 401
最常见的原因是环境变量没生效。检查三点:变量名是否以REACT_APP_开头;改完.env.local后是否重启了npm start;代码里是否用process.env.REACT_APP_TAOTOKEN_API_KEY而不是别的名字。React 在构建时会把REACT_APP_开头的变量静态替换进代码,所以运行时改环境变量是没用的。
5.2 跨域报错 CORS
如果控制台出现Access to fetch has been blocked by CORS policy,先确认请求地址是https://taotoken.net/api而不是官网首页地址。API 地址和官网地址是两个不同的入口,写错会导致请求打到不支持跨域的页面上。另外检查Content-Type是否写成了application/json,拼写错误也会触发预检失败。
5.3 模型名写错返回 400
model字段必须和平台支持的名称一致。如果你不确定有哪些模型,到模型对话页面看一下可选列表,地址是 https://taotoken.net/models 。把claude-sonnet换成实际支持的名称即可。返回体里通常会有error.message,直接读它比猜要快。
5.4 请求一直 pending 或超时
本地网络波动或timeout_seconds设得太短都会导致。先在config.toml里把超时调到 60 秒以上,再确认base_url没有多余斜杠。如果用了公司网络,确认没有拦截对 API 域名的访问。这类问题排查完,建议回到接入文档核对一遍参数,地址是 https://taotoken.net/doc 。
5.5 组件不刷新
React 的状态更新是异步的,如果你在ask函数里直接读reply会发现拿到的是旧值。用useEffect监听reply变化,或者直接在setReply之后做后续逻辑。另外确认AiPanel已经被App引入并渲染,没引入的组件不会执行。
6. 把 Key 和通道固定下来
走到这里,你的 create-react-app 项目已经能通过统一 Key 调用 AI 接口了。我建议把 Key 管理这件事固定成习惯:本地用.env.local,团队协作时把变量名写进.env.example提交,真实值各自配置。这样换机器、换同事都不用改代码。
后续如果要扩展,可以在src下建一个services/ai.js,把 fetch 逻辑抽出来,组件只负责展示。这样多个组件复用同一个请求函数,改地址或换模型时只动一个文件。需要新建 Key 或查看用量,去控制台 https://taotoken.net/console/api-keys ;接入细节有疑问就翻文档 https://taotoken.net/doc 。把这几步跑顺,脚手架就不只是页面模板,而是一个能持续接 AI 能力的工程底座。