news 2026/10/8 12:26:13

使用 Codex CLI 和 VS Code 开发嵌入式:把 settings 改到 TaoToken 的实操大纲

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 Codex CLI 和 VS Code 开发嵌入式:把 settings 改到 TaoToken 的实操大纲

1. 嵌入式工程里 Codex CLI 与 VS Code 的配置链路到底卡在哪

如果你正在用 STM32 + CMake 做嵌入式开发,同时希望把 VS Code 当作主力编辑器、把 Codex CLI 当作终端里的结对助手,那么你大概率会遇到一个很具体的问题:Codex CLI 默认走的是官方通道,而团队或个人往往希望把模型请求统一收敛到一个可控的入口,方便做用量统计、密钥管理和多模型切换。这个“把 settings 里的模型接入项改到统一通道”的动作,就是本篇要拆解的核心。

先说清楚 Codex CLI 是什么、能做什么、适合谁。Codex CLI 是一个跑在终端里的编码代理,它可以读取你的工程目录、理解 CMakeLists.txt、执行构建命令、根据编译错误自动修复代码,还能做代码审查。它适合已经能用命令行完成cmake --build build的嵌入式工程,尤其是 STM32CubeMX 生成的 CMake 工程、Zephyr、ESP-IDF、PlatformIO 这类有明确构建入口的项目。不适合只有 Keil.uvprojx且无法命令行编译的工程——因为 Codex CLI 的很多能力依赖“能跑构建、能看报错”这个闭环。

VS Code 在这里的角色是“看代码、看 diff、调试、烧录”的界面层。你可以在 VS Code 里装 C/C++、CMake Tools、Cortex-Debug,用launch.json断点调试;同时在集成终端里跑 Codex CLI 做较大范围的修改。两者配合的关键,是让 Codex CLI 的模型请求走一个你指定的 Base URL,而不是默认通道。这个 Base URL 就是 TaoToken 的统一通道。

我试过的典型卡点有三个:第一,Codex CLI 的配置项分散在环境变量和配置文件里,改错地方不生效;第二,VS Code 的 settings.json 和 Codex CLI 的配置是两套东西,很多人以为改 VS Code 的 settings 就能影响终端里的 Codex,其实不是;第三,改完 Base URL 后没有做一次真实的编译验证,导致“看起来配好了,实际请求还是走旧通道”。下面按可跟做的顺序,把这条链路完整走一遍。

本篇以 STM32F103 + CMake + Ninja + OpenOCD 为例,操作系统默认 Linux、macOS 或 Windows WSL2。Windows 原生环境下 Codex CLI 的支持仍偏实验,建议在 WSL2 的 Linux 文件系统里操作,工程放在/home/你的用户名/embedded/下,不要放在/mnt/c/...,否则跨文件系统会拖慢构建,权限和路径也容易出问题。

2. 把 Codex CLI 的模型接入项指向 TaoToken 的前置准备

在改配置之前,先把“钥匙”和“地址”准备好。TaoToken 的官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 基址是 https://taotoken.net/api 。注意 API 地址不带 UTM 参数,配置里填的就是这个干净的https://taotoken.net/api。

你需要准备三样东西,我把它叫做“三件套”:Base URL、API Key、Model ID。这三件套在 Codex CLI、Cline MCP、CC Switch、Codex 的auth.json里都是通用的,任何一处出现,都要把这三个值写全,缺一个都会导致请求失败。

第一步,拿到 API Key。进入控制台页面 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,在 API Keys 管理页创建一个新的 Key。创建后立刻复制保存,页面通常只显示一次。如果你需要看接入文档,入口在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有各客户端的字段对照。

第二步,确认 Model ID。不同客户端对模型名的写法略有差异,但核心是“用你在 TaoToken 控制台里看到的模型标识”。如果你不确定该用哪个,可以先去模型对话页面 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 发一条消息,确认通道可用,再回到 CLI 配置。

第三步,确认 Codex CLI 已安装。官方安装方式之一是:

npm i -g @openai/codex

如果没有 npm:

sudo apt update sudo apt install -y nodejs npm sudo npm i -g @openai/codex

安装后运行codex --version确认。升级用npm i -g @openai/codex@latest。

这里要强调一个容易混淆的点:VS Code 里的 GitHub Copilot、Copilot Chat、Codex IDE 扩展,和终端里的 Codex CLI 不是同一个东西。Copilot 负责编辑器内补全和局部解释,Codex IDE 扩展在 IDE 内使用 Codex,而 Codex CLI 是在终端里读写工程、运行命令、自动修复。你要改的“settings 里的模型接入项”,指的是 Codex CLI 的配置,不是 VS Code 的settings.json。VS Code 的settings.json管的是编辑器行为,比如 IntelliSense、格式化、任务;Codex CLI 的配置管的是模型请求走哪个 Base URL。两者不要混。

如果你还打算用 Coding Plan 做长期编码或 Agent 任务,入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,它更适合持续性的编码场景,而不是一次性问答。

前置准备做完,你应该手上有:一个可用的 API Key、确认过的 Model ID、已安装的 Codex CLI、一个能命令行构建的 STM32 CMake 工程。接下来进入真正改配置的环节。

3. 可复制的 settings 片段:Codex CLI 配置与环境变量写法

这一节是全文最需要照着做的地方。Codex CLI 读取配置的方式主要有两种:环境变量和配置文件。环境变量优先级高,适合临时切换;配置文件适合长期固定。两种我都会给,你可以按需选。

先看环境变量写法。在~/.bashrc或~/.zshrc里加入:

export OPENAI_BASE_URL="https://taotoken.net/api" export OPENAI_API_KEY="sk-你的TaoToken密钥" export OPENAI_MODEL="你的ModelID"

改完执行source ~/.bashrc让配置生效。这里OPENAI_BASE_URL指向 TaoToken 的 API 基址,OPENAI_API_KEY填你在控制台创建的 Key,OPENAI_MODEL填模型标识。三件套齐全,缺一不可。

如果你不想污染全局环境变量,可以用 Codex CLI 的配置文件。Codex CLI 的配置目录通常在~/.codex/,配置文件是~/.codex/config.toml。用 TOML 写:

# ~/.codex/config.toml model = "你的ModelID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY"

然后在环境变量里只放 Key:

export TAOTOKEN_API_KEY="sk-你的TaoToken密钥"

这种写法的好处是 Base URL 和 Model ID 固定在配置文件里,Key 通过环境变量注入,不会把密钥写进版本库。注意env_key的值要和你在 shell 里导出的变量名一致,写错会导致读取不到 Key。

如果你用的是 Codex 的auth.json方式(部分版本支持),路径通常在~/.codex/auth.json,内容结构类似:

{ "OPENAI_API_KEY": "sk-你的TaoToken密钥", "OPENAI_BASE_URL": "https://taotoken.net/api" }

同样,Base URL、Key、Model ID 三件套要写全。auth.json里如果只写了 Key 没写 Base URL,请求还是会走默认通道,这是最常见的“配了但没生效”的原因。

再补充一个 CC Switch 场景。如果你用 CC Switch 管理多个通道,切换配置时同样要确认三件套:Base URL 填https://taotoken.net/api,Key 填 TaoToken 的 Key,Model ID 填对应模型。CC Switch 只是切换器,它不会帮你补全缺失字段,缺哪个就报哪个的错。

关于 VS Code 的settings.json,这里要澄清:它不直接控制 Codex CLI 的模型请求。但你可以用它配置集成终端的默认环境,让终端启动时自动带上环境变量。在.vscode/settings.json里:

{ "terminal.integrated.env.linux": { "OPENAI_BASE_URL": "https://taotoken.net/api", "OPENAI_MODEL": "你的ModelID" } }

注意这里没有放 Key,Key 建议放在系统环境变量或~/.codex/config.toml引用的环境变量里,避免把密钥写进工程目录被提交。terminal.integrated.env.linux只对 Linux 终端生效,WSL2 里同样适用;macOS 用terminal.integrated.env.osx,Windows 原生用terminal.integrated.env.windows。

配置改完后,不要急着让 Codex 改代码。先做一次“配置自检”:在终端里echo $OPENAI_BASE_URL,确认输出是https://taotoken.net/api;再codex启动,看它是否正常进入交互。如果启动时报 401,说明 Key 没读到;如果报连接失败,说明 Base URL 写错或网络不通。这两个报错在第五节会详细对照。

最后提醒一个路径问题:~/.codex/config.toml里的路径和原文一致,不要写成~/.config/codex/,不同版本目录名可能不同,以你本机codex首次运行生成的目录为准。如果不确定,运行codex后看它提示的配置路径。

4. 验证请求与一次真实编译:确认补全和问答都走通

配置写完,必须用一次真实请求验证,否则你无法确认请求到底走了哪个通道。验证分两层:先验证模型问答,再验证工程内的编译闭环。

第一层,模型问答验证。在终端里启动 Codex:

cd ~/embedded/my_stm32_project codex

进入交互后,输入一句简单的中文提问,比如“用一句话说明这个工程的主程序入口在哪”。如果 Codex 能正常返回中文回答,说明 Base URL、Key、Model ID 三件套都生效了。如果返回 401,回到第三节检查 Key;如果返回local proxy failed或连接超时,检查 Base URL 是否写成了带路径的完整地址(应该是https://taotoken.net/api,不要多加/v1之类,除非文档明确要求)。

第二层,编译闭环验证。这一步是嵌入式场景特有的,也是最能暴露配置问题的地方。先确认工程能独立构建:

cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug cmake --build build

如果这两条命令能跑通,说明工具链没问题。然后让 Codex 做一次“读取工程并解释”的动作,提示词可以这样写:

请先阅读这个嵌入式工程的目录结构、CMakeLists.txt、Core/Src/main.c 和 AGENTS.md。 不要修改代码。 请用中文告诉我: 1. 这个工程如何编译。 2. 主程序从哪里开始。 3. 哪些文件是生成的,哪些适合我写业务代码。 4. 如果我要加 LED 模块,应该改哪些文件。

如果 Codex 能准确说出构建命令、入口文件和可改文件范围,说明它已经正确读取了工程上下文,模型请求也走通了。这一步同时验证了“模型通道”和“工程可读性”。

第三层,让 Codex 做一次小改动并构建。提示词:

请添加一个按键消抖模块,适合 STM32 HAL 工程。 要求: 1. 新建 Core/Inc/app_key.h 和 Core/Src/app_key.c。 2. 提供 App_Key_Init 和 App_Key_Tick。 3. 不要使用动态内存。 4. 不要在中断里 HAL_Delay。 5. 修改 CMakeLists.txt 让新文件参与编译。 6. 运行构建并修复编译错误。

观察 Codex 是否真的执行了cmake --build build,以及它是否根据报错修复。如果它只是生成了文件但没有运行构建,说明你的提示词里“运行构建”没被识别,或者 Codex 的自动执行权限没开。可以在提示词里更明确地写“请运行 cmake --build build 并读取完整错误输出”。

成功的结果应该是:新文件被创建,CMakeLists.txt 被更新,构建通过,没有 Error。如果构建失败但 Codex 能定位到第一条真正的 C 编译错误并修复,也算走通。关键是“请求发出去了、模型响应了、工程被真实修改并验证了”。

这里给一个AGENTS.md的示例,放在工程根目录,能显著提升 Codex 的修改质量:

# Embedded Project Rules This is an embedded C project. Rules: - Answer in Chinese when the user writes Chinese. - Prefer small, reviewable changes. - Do not modify generated vendor driver files unless explicitly requested. - For STM32CubeMX files, keep user code inside USER CODE blocks. - After editing, run the configured build command when possible. - If hardware flashing is needed, explain the command but ask before changing device state. - Be careful with interrupt handlers, DMA buffers, volatile variables, and RTOS APIs.

有了这个文件,Codex 会更清楚哪些文件能改、哪些不要碰,减少“把生成代码改乱”的概率。

验证完成后,你可以在 VS Code 的 Source Control 里查看 diff,确认改动范围。然后 Run Build Task,再用 Cortex-Debug 下载调试。整个链路是:VS Code 看代码 → 终端 Codex 改代码 → VS Code 看 diff → 构建 → 调试 → 提交。

5. 本篇常见报错排查:401、local proxy failed、reading choices、OAuth

配置过程中最容易撞上的报错就那么几个,逐个对照排查,基本能覆盖九成问题。

401 Unauthorized。这是 Key 相关错误。可能原因:Key 没导出到当前 shell、Key 拼写错误、Key 已失效、env_key引用的变量名和实际导出的不一致。排查方法:echo $OPENAI_API_KEY或echo $TAOTOKEN_API_KEY,确认有值;再确认~/.codex/config.toml里env_key的值和变量名完全一致。如果用的是auth.json,确认OPENAI_API_KEY字段存在且没有多余空格。

local proxy failed / connection refused。这是 Base URL 或网络层错误。可能原因:Base URL 写成了https://taotoken.net/api/v1这类多余路径、写成了http而不是https、或者本机网络无法访问。排查方法:确认配置里是https://taotoken.net/api;用curl -I https://taotoken.net/api看是否能通。如果 curl 不通,说明是网络环境问题,不是配置问题。

reading choices / unexpected response shape。这类报错通常出现在响应解析阶段,说明请求发出去了但返回结构不符合客户端预期。可能原因:Model ID 写错,导致服务端返回了非预期格式;或者 Base URL 指向了错误的端点。排查方法:回到模型对话页面 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 用同一个 Model ID 发一条消息,确认模型本身可用;再检查 Base URL 是否精确匹配文档要求。

OAuth 相关报错。Codex CLI 首次运行可能提示登录,如果你选择 API Key 方式而不是账号登录,要确保配置里没有残留的 OAuth token 干扰。排查方法:检查~/.codex/下是否有旧的认证文件,必要时备份后清理,重新用 API Key 方式配置。注意不要同时启用账号登录和 API Key,两者可能冲突。

VS Code 红线但能编译。这不是 Codex 的问题,是 IntelliSense 配置不完整。检查.vscode/c_cpp_properties.json里的includePath和defines。STM32F1 示例:

{ "configurations": [ { "name": "STM32", "includePath": [ "${workspaceFolder}/Core/Inc", "${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc", "${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include", "${workspaceFolder}/Drivers/CMSIS/Include" ], "defines": ["USE_HAL_DRIVER", "STM32F103xB"], "compilerPath": "/usr/bin/arm-none-eabi-gcc", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "gcc-arm" } ], "version": 4 }

F4 芯片要把路径和宏改成STM32F4xx_HAL_Driver、STM32F407xx。

Cortex-Debug 找不到 elf。检查.vscode/launch.json里的executable路径是否指向真实输出文件。示例:

{ "version": "0.2.0", "configurations": [ { "name": "Debug STM32 with OpenOCD", "type": "cortex-debug", "request": "launch", "servertype": "openocd", "cwd": "${workspaceFolder}", "executable": "${workspaceFolder}/build/firmware.elf", "configFiles": ["interface/stlink.cfg", "target/stm32f1x.cfg"], "runToEntryPoint": "main", "showDevDebugOutput": "none" } ] }

firmware.elf要换成你的真实输出名,target/stm32f1x.cfg按芯片系列改,F4 用stm32f4x.cfg。

OpenOCD 连接失败。先命令行运行openocd -f interface/stlink.cfg -f target/stm32f1x.cfg测试,能连上再回到 VS Code。WSL2 里看不到 ST-LINK 是常见问题,需要 USB 转发,或者改在 Windows 侧烧录。

Codex 改了但编译失败。最常见原因是新文件没加入 CMakeLists.txt。让 Codex 检查 CMakeLists,或者手动确认add_executable里包含了新源文件。

排查顺序建议:先确认三件套齐全,再确认网络可达,再确认工程能独立构建,最后才怀疑 Codex 本身。大部分问题都在前三步。

6. 长期编码与 Agent 场景:把 TaoToken 通道固定下来

如果你只是偶尔用 Codex CLI 问几个问题,环境变量方式就够了。但如果你打算把 Codex CLI 当作日常嵌入式开发的固定助手,尤其是让它做多文件修改、自动修复、代码审查这类长任务,那么把通道配置固定下来会更省心。

固定的方式就是第三节的~/.codex/config.toml,把 Base URL 和 Model ID 写死,Key 通过环境变量注入。这样每次启动 Codex 都自动走 TaoToken 通道,不需要重复导出变量。如果你有多个项目需要不同模型,可以在项目根目录放一个.codex/config.toml做局部覆盖,但要注意 Codex CLI 是否支持项目级配置,以你本机版本为准。

对于长期编码和 Agent 任务,Coding Plan 入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,它更适合持续性的编码场景。如果你需要管理多个 Key 或查看用量,控制台在 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有各客户端的字段对照,遇到字段不确定时优先查文档。

嵌入式场景下,有几个地方新手要谨慎,不要让 Codex 自动改:启动文件startup_*.s、链接脚本.ld、中断向量表、时钟树初始化、Bootloader 跳转代码、Flash 擦写代码、DMA + Cache 相关代码、安全相关代码。这些地方可以先让 Codex 解释,不要直接修改。提示词可以写“请解释这个链接脚本,不要修改。请告诉我每个段的含义,尤其是 .isr_vector、.text、.data、.bss。”

学习路线建议按这个顺序推进:第一步,VS Code 能打开工程,红线尽量少;第二步,命令行能cmake --build build;第三步,OpenOCD 能连接芯片;第四步,Cortex-Debug 能断在 main;第五步,Codex 能解释工程;第六步,Codex 能添加一个小模块并构建成功;第七步,再开始学 FreeRTOS、DMA、低功耗等高级内容。每一步都验证通过再进下一步,比一次性配一堆东西然后到处报错要高效得多。

最后给一个实用技巧:每次让 Codex 改代码前,先git commit一次,改完在 VS Code 的 Source Control 里看 diff,确认没问题再提交。这样即使 Codex 改乱了,也能一键回退。嵌入式工程的生成代码和手写代码混在一起,diff 审查比盲目信任自动修改要可靠得多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 12:26:08

[慕课笔记] Node+MongoDB建站攻略:用TaoToken统一Key打通接口调试链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/8 12:25:00

Protocol Launcher 系列:用 CLI 与深度链接优雅唤起 Lingma 的配置实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/8 12:22:52

具二类医疗器械资质的家用中频治疗仪,康民人等多品牌选择维度

家用中频治疗仪选购指南:如何甄别二类医疗器械资质及品牌对比随着家庭健康管理意识的提升,物理康复辅助工具逐渐成为许多家庭的常备物品。在众多品类中,中频治疗仪因其适用范围较广而受到关注。然而,面对市场上琳琅满目的品牌和型…

作者头像 李华
网站建设 2026/10/8 12:22:36

OpenClaw添加多个Agent:TaoToken统一Key接入与多Agent配置验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/8 12:21:49

充电桩计量检定与产线预检体系

自 2023 年 1 月 1 日起,电动汽车充电桩列入国家强制管理计量器具目录并实施强制检定。KRASSATE 嘉仕新能(新能源测试设备厂商)在带载与老化工位方案上与桩企客户打交道,常被问:送检失败栽在哪一项——不是功率&#x…

作者头像 李华