☰
Sealos Devbox 基础教程:用 Cursor 从零开发一个完整 Python 项目并接入 TaoToken
2026/9/25 23:16:45 网站建设 项目流程

1. 为什么要在 Sealos Devbox 里用 Cursor 写 Python 项目

Sealos Devbox 是一个云端开发环境,你在浏览器里点几下就能拿到一台带 Python、Go、Node.js 等运行时的容器,代码写完直接能通过外网地址访问,不用自己买服务器、配 Nginx、折腾 HTTPS 证书。Cursor 则是目前用起来最顺手的 AI 编辑器,能读你整个项目上下文,帮你补全、重构、写测试。把这两个东西拼在一起,再通过 TaoToken 的统一 Key 接入大模型能力,就是一套从「写代码」到「跑起来」再到「调模型」的完整链路。

这篇教程面向的是刚接触云端开发环境、想快速把一个 Python 小项目跑通并接入大模型接口的人。你不需要提前装 Python,不需要懂 Docker,只要有一个浏览器和本地装好的 Cursor 就能跟着做。我会把每一步的命令、配置文件、验证方式都写清楚,包括我实际踩过的坑,比如环境变量没生效、Cursor 连不上远程容器、请求返回 401 这些常见问题。

整篇内容围绕一个最小可运行的 Python 项目展开:在 Devbox 里创建项目,用 Cursor 打开并写一个调用大模型接口的脚本,通过 TaoToken 的 API 通道发一次请求,看到模型返回内容就算成功。过程中会给出config.toml和settings.json的配置骨架,以及环境变量的设置方法。

2. TaoToken 前置准备:拿到统一 Key 和 API 地址

TaoToken 做的事情是把多家模型的调用方式统一成一套 OpenAI 兼容的接口。你只需要一个 Key、一个 Base URL,就能在代码里切换不同模型,不用为每个厂商单独写一套 SDK。对于在 Devbox 里做快速验证来说,这能省掉大量配置时间。

2.1 注册并创建 API Key

打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,注册登录后进入控制台。在控制台左侧找到 API Keys 页面,点创建,复制生成的 Key。这个 Key 只显示一次,建议先粘到本地临时文件里。

API 的基础地址是 https://taotoken.net/api ,注意这个地址后面不加 UTM 参数,代码里直接用它作为base_url。

2.2 确认你要用的模型名

在控制台的模型列表里能看到当前可用的模型标识,比如常见的对话模型。记下你要调用的那个模型名,后面写进代码的model字段。不同模型的能力和计费不一样,做验证时选一个响应快的就行。

注意:Key 不要硬编码进提交到 Git 的代码里。后面我会用环境变量的方式管理,Devbox 的环境变量面板可以直接配。

2.3 在 Devbox 里配置环境变量

进入 Sealos Devbox 项目后,找到环境变量配置入口,添加两个变量:

变量名值
TAOTOKEN_API_KEY你复制的 Key
TAOTOKEN_BASE_URLhttps://taotoken.net/api

保存后重启一下 Devbox 容器,让变量生效。这一步很多人会忘,导致代码里读不到 Key 而报 401。

3. 在 Devbox 创建 Python 项目并用 Cursor 打开

3.1 创建 Devbox 项目

登录 Sealos 后进入 Devbox,点新建项目。运行时选 Python,版本选 3.11 或更高。项目名随便起,比如taotoken-demo。创建完成后,Devbox 会给你一个容器和默认的外网访问地址。

在项目操作列里找到 Cursor 图标,点击后选择 Open Cursor。本地 Cursor 会自动拉起,并提示安装 Devbox 推荐的插件。点 Install Extension and Open URI,等插件装完,按钮变成 Disable 或 Uninstall 就说明好了。

3.2 项目结构初始化

在 Cursor 里打开集成终端(左下角右键空白处选 Open in integrated Terminal),确认当前目录是项目根目录。创建几个基础文件:

mkdir -p app touch app/main.py touch requirements.txt touch entrypoint.sh touch .env

entrypoint.sh是 Devbox 启动时执行的脚本,负责装依赖和启动应用。requirements.txt放 Python 依赖。.env放本地开发用的环境变量,注意把它加进.gitignore。

3.3 写 requirements.txt

openai>=1.30.0 python-dotenv>=1.0.0

这里用官方的openai库,因为 TaoToken 的接口是 OpenAI 兼容的,直接用这个库最省事。python-dotenv用来在本地读取.env文件。

3.4 写 entrypoint.sh

#!/bin/bash set -e python3 -m venv venv source venv/bin/activate pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/ pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ python3 app/main.py

给脚本加执行权限:

chmod +x entrypoint.sh

set -e让脚本在任何一步失败时立即退出,方便排查。用阿里云镜像装依赖,在国内网络下会快很多。

4. 可复制配置:config.toml 与 settings.json 骨架

Cursor 支持通过配置文件定制行为,Devbox 项目里也可以放一份项目级配置,让团队里其他人打开时行为一致。

4.1 Cursor 的 settings.json 骨架

在项目根目录创建.cursor/settings.json:

{ "python.defaultInterpreterPath": "${workspaceFolder}/venv/bin/python", "python.terminal.activateEnvironment": true, "editor.formatOnSave": true, "editor.tabSize": 4, "files.exclude": { "**/__pycache__": true, "**/venv": true }, "terminal.integrated.env.linux": { "TAOTOKEN_BASE_URL": "https://taotoken.net/api" } }

python.defaultInterpreterPath指向虚拟环境里的解释器,这样 Cursor 的补全和跳转才能识别你装的包。files.exclude把venv和缓存目录藏起来,侧边栏会清爽很多。

4.2 项目级 config.toml 骨架

在项目根目录创建config.toml:

[app] name = "taotoken-demo" host = "0.0.0.0" port = 8080 [llm] base_url = "https://taotoken.net/api" model = "gpt-4o-mini" timeout = 30 max_tokens = 512 [log] level = "INFO"

这个文件用 Python 的tomllib(3.11 自带)读取。把模型名、超时、端口这些可变参数抽出来,改的时候不用动代码。

4.3 读取配置的代码

在app/main.py里写:

import os import tomllib from pathlib import Path from openai import OpenAI from dotenv import load_dotenv load_dotenv() def load_config(): with open(Path(__file__).parent.parent / "config.toml", "rb") as f: return tomllib.load(f) def build_client(cfg): api_key = os.environ.get("TAOTOKEN_API_KEY") if not api_key: raise RuntimeError("TAOTOKEN_API_KEY 未设置") return OpenAI( api_key=api_key, base_url=cfg["llm"]["base_url"], timeout=cfg["llm"]["timeout"], ) def chat(client, cfg, prompt): resp = client.chat.completions.create( model=cfg["llm"]["model"], messages=[ {"role": "system", "content": "你是一个简洁的助手。"}, {"role": "user", "content": prompt}, ], max_tokens=cfg["llm"]["max_tokens"], ) return resp.choices[0].message.content if __name__ == "__main__": cfg = load_config() client = build_client(cfg) answer = chat(client, cfg, "用一句话说明什么是环境变量") print("模型返回:", answer)

这段代码做了三件事:从config.toml读配置,从环境变量读 Key,构造 OpenAI 客户端并发一次请求。base_url指向 TaoToken 的 API 地址,Key 从环境变量拿,不写死在代码里。

5. 验证请求:跑通一次模型调用

5.1 本地启动

在 Cursor 终端里执行:

./entrypoint.sh

第一次运行会创建虚拟环境并装依赖,需要等一两分钟。装完后脚本会执行app/main.py,如果一切正常,终端会打印出模型返回的一句话。

如果看到类似下面的输出,说明接入生效了:

模型返回: 环境变量是操作系统或程序运行时用来存储配置信息的一组键值对。

5.2 在 Devbox 外网地址验证

Devbox 默认会把容器端口映射到外网。如果你想让这个脚本变成一个 HTTP 服务,可以加一个简单的 Flask 或 FastAPI 入口。这里给一个最小 FastAPI 版本,追加到app/main.py:

from fastapi import FastAPI from pydantic import BaseModel import uvicorn api = FastAPI() class AskBody(BaseModel): prompt: str @api.post("/ask") def ask(body: AskBody): cfg = load_config() client = build_client(cfg) return {"answer": chat(client, cfg, body.prompt)} if __name__ == "__main__": cfg = load_config() uvicorn.run(api, host=cfg["app"]["host"], port=cfg["app"]["port"])

记得在requirements.txt里加上fastapi和uvicorn。重启后,用 Devbox 给的外网地址加/ask路径测试:

curl -X POST http://你的devbox外网地址/ask \ -H "Content-Type: application/json" \ -d '{"prompt":"你好,介绍一下你自己"}'

返回 JSON 里带answer字段就说明整条链路通了:Devbox 跑服务,Cursor 写代码,TaoToken 提供模型能力。

5.3 用模型对话页面做交叉验证

如果你不想写代码验证,也可以直接打开模型对话页面 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite ,在网页里发一条消息,确认 Key 和模型都正常。网页能通、代码也能通,就排除了 Key 本身的问题。

6. 本篇常见错误排查

6.1 报 401 Unauthorized

最常见的原因是环境变量没生效。Devbox 里配了变量但没重启容器,或者本地.env文件没被load_dotenv()读到。检查方法:在代码里打印os.environ.get("TAOTOKEN_API_KEY")的前几位,确认不是None。另外注意 Key 前后不要有空格,复制时容易带上换行。

6.2 报 Connection refused 或超时

先确认base_url写的是https://taotoken.net/api,不要多加斜杠或路径。如果本地网络访问不了,检查 Devbox 容器的出网策略。超时时间在config.toml的timeout字段调大一点,比如 60。

6.3 Cursor 连不上 Devbox 容器

Open Cursor 后如果终端里命令执行报错,先看 Cursor 左下角是否显示已连接到远程。插件没装完会导致 URI 打不开,重新点一次 Install Extension and Open URI。如果还是不行,在 Devbox 页面重新生成一次连接信息。

6.4 模型名写错导致 404

config.toml里的model字段必须和控制台里看到的模型标识完全一致,大小写敏感。不确定的话,先用模型对话页面选一个模型,看它显示的标识是什么。

6.5 依赖装不上

entrypoint.sh里用了阿里云镜像,如果某个包在镜像里没有,会报找不到。可以临时去掉-i参数用默认源重试。另外确认requirements.txt里没有拼错的包名。

7. 接下来怎么走

跑通这次请求之后,你可以把chat函数换成流式输出,或者把 FastAPI 服务扩展成带前端页面的聊天工具。如果打算长期在这个项目上做编码和 Agent 开发,可以了解一下 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite ,它针对持续调用场景做了额度优化。需要管理多个 Key 或查看用量,去控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有各语言的调用示例。如果你用 Claude Code 或 Anthropic 风格的接口,参考 https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude_code&utm_campaign=rewrite 。

我自己的习惯是每接一个新模型,先写一个十行的脚本发一次请求,确认返回正常再往项目里集成。这样出问题时能快速定位是 Key、网络还是代码的问题。Devbox 的好处是环境随时能重建,搞坏了删掉重来就行,不用心疼本地配置。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询