从零构建AI助手:Codex平台环境配置、记忆系统与MCP协议实战指南 最近在尝试构建自己的 AI 助手时发现 Codex 这个平台在整合开发环境、代码管理和智能记忆方面提供了非常独特的思路。然而相关的资料比较零散特别是如何将环境配置、代码管理、记忆系统以及 Skills/MCP 协议串联起来形成一个可用的工作流对于新手来说门槛不低。本文将为你拆解一套从零开始的完整实操方案涵盖环境搭建、代码管理、记忆系统配置以及 Skills/MCP 扩展开发无论你是想快速体验 AI 助手开发还是希望构建更复杂的智能体应用都能从中找到清晰的路径。1. Codex 是什么它能解决什么问题在深入动手之前我们有必要先理解 Codex 的核心定位。简单来说Codex 是一个为 AI 智能体Agent和开发者设计的集成开发与运行平台。它不是一个单一的库或框架而是一个试图将 AI 开发中常见的环境依赖、代码版本管理、上下文记忆以及功能扩展Skills/MCP等环节标准化的工具集或协议集合。它主要解决以下几个痛点环境碎片化AI 项目往往依赖复杂的 Python 环境、模型服务、数据库等配置过程繁琐且不易复现。代码与上下文脱节传统的代码管理工具如 Git不擅长管理 AI 智能体运行过程中产生的对话历史、学习到的知识记忆等非代码资产。功能扩展困难如何让 AI 智能体安全、可控地调用外部工具如查询数据库、调用 API、操作文件系统是一个挑战。开发体验割裂开发者需要在 IDE、命令行、模型服务界面等多个工具间切换流程不连贯。Codex 通过提供一套约定和工具试图将上述环节整合到一个相对统一的体验中。其中MCPModel Context Protocol是 Codex 生态中一个非常重要的协议它定义了 AI 模型如 Claude、GPT与外部工具、数据源即 Skills之间进行安全、结构化通信的标准方式。你可以把 MCP 看作是 AI 智能体的“插件系统”或“驱动协议”。常见应用场景包括个人知识库助手连接你的笔记、文档、代码库构建一个能理解你所有资料的智能助手。自动化开发助手帮助完成代码生成、代码审查、运行测试、部署等开发任务。业务流程自动化集成公司内部的 CRM、ERP 等系统让 AI 协助处理审批、查询、报告生成等流程。对于开发者而言掌握 Codex 及相关概念意味着你能更高效地构建和维护功能强大、上下文感知的 AI 应用。2. 环境准备与基础工具安装开始 Codex 之旅前我们需要一个干净、可控的开发环境。本节将指导你完成基础编程环境、版本管理工具以及 Codex CLI 的安装。2.1 操作系统与编程语言环境本文示例以macOS/Linux系统为主Windows 用户建议使用 WSL2 以获得最佳体验。Python 环境Codex 及其相关工具大多基于 Python。推荐使用pyenv或conda管理多版本 Python避免污染系统环境。安装 pyenv(macOS/Linux):# 使用 Homebrew 安装 (macOS) brew install pyenv # 或使用安装脚本 curl https://pyenv.run | bash安装并配置 Python我们使用 Python 3.10 或 3.11较新的版本兼容性更好。# 查看可安装版本 pyenv install --list | grep 3.1 # 安装 Python 3.11.8 pyenv install 3.11.8 # 在当前目录使用该版本 pyenv local 3.11.8 # 验证 python --versionNode.js 环境部分前端工具或 MCP Server 可能需要 Node.js。建议使用nvm管理。安装 nvm:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash # 重启终端或执行 source ~/.bashrc (或 ~/.zshrc)安装 Node.js:nvm install 18 # 安装 LTS 版本 nvm use 18 node --version2.2 代码版本管理工具 (Git)代码管理是协同开发和项目追踪的基石。我们将使用 Git并推荐图形化工具 Sourcetree 辅助初学者。安装 Git:# macOS brew install git # Ubuntu/Debian sudo apt-get install git # 验证 git --version配置 Git 用户信息(首次使用必需):git config --global user.name Your Name git config --global user.email your.emailexample.com安装 Sourcetree (可选但推荐)一个免费的 Git 图形客户端。前往 Sourcetree 官网 下载安装。安装后通常不需要额外工具。它会自动使用系统已安装的 Git。首次启动时它可能会提示你安装开发者命令行工具主要是为了支持 SSH 等按照提示操作即可。2.3 Codex CLI 工具安装与验证Codex 提供了命令行工具来初始化项目、管理依赖和运行服务。安装 Codex CLI: 目前常见的安装方式是通过 Python 的 pip 包管理器。建议在虚拟环境中进行。# 创建并进入一个专用于 Codex 的虚拟环境 python -m venv venv_codex # 激活虚拟环境 # macOS/Linux: source venv_codex/bin/activate # Windows (cmd): # venv_codex\Scripts\activate.bat # Windows (PowerShell): # venv_codex\Scripts\Activate.ps1 # 升级 pip pip install --upgrade pip # 安装 codex-cli (注意包名可能根据官方更新而变化请以最新文档为准) # 这里假设包名为 codex-cli如果搜索不到可能是 codex 或 codex-sdk pip install codex-cli重要提示如果遇到codex could not start the extension couldn‘t load its resources.这类错误通常发生在 VS Code 插件场景可能与网络或插件本身问题有关。CLI 安装失败则可能是包名错误或 pip 源问题可以尝试pip install codex或查阅官方仓库。验证安装:codex --version # 或 codex --help如果成功显示版本号或帮助信息说明 CLI 工具安装成功。3. 初始化你的第一个 Codex 项目环境就绪后我们来创建一个标准的 Codex 项目结构。3.1 创建项目目录与初始化创建项目文件夹并初始化 Git:mkdir my-first-codex-agent cd my-first-codex-agent git init使用 Codex CLI 初始化项目:# 假设 codex-cli 提供了 init 命令 codex init . # 或者如果官方模板在 GitHub 上你也可以直接克隆 # git clone official-codex-template-repo-url .执行后CLI 可能会交互式地询问项目名称、描述、AI 模型选择如 Claude、GPT等按提示填写即可。完成后你会看到一个类似如下的项目结构my-first-codex-agent/ ├── .codex/ # Codex 配置文件目录 │ ├── config.yaml # 主配置文件模型、记忆等设置 │ └── skills/ # 自定义 Skills 存放目录 ├── .gitignore # Git 忽略文件 ├── README.md ├── requirements.txt # Python 依赖列表 ├── src/ # 项目源代码 │ └── agent.py # 智能体主程序入口 └── tests/ # 测试目录安装项目依赖:pip install -r requirements.txt3.2 理解核心配置文件.codex/config.yaml这个文件是 Codex 项目的核心它定义了智能体的行为、记忆方式和可用工具。# .codex/config.yaml 示例 version: 1 agent: name: MyCodexAssistant model: claude-3-sonnet-20240229 # 使用的 AI 模型需在对应平台配置 API KEY system_prompt: | 你是一个乐于助人的编程助手擅长 Python 和 JavaScript。 请用清晰、简洁的语言回答用户的问题。 memory: type: vector # 记忆存储类型如 vector向量数据库、file文件 config: path: ./.codex/memory # 记忆数据存储路径 embedding_model: text-embedding-3-small # 用于生成记忆向量的模型 skills: # 预加载的技能可以是内置的或自定义的 - name: filesystem config: allowed_paths: [./workspace] - name: web_search config: api_key: ${ENV:WEB_SEARCH_API_KEY} # 从环境变量读取敏感信息 servers: # 定义 MCP 服务器为智能体提供扩展能力 - name: my_tools type: mcp config: command: python args: [-m, my_tools_server]关键配置项说明agent.model: 指定使用的 AI 模型你需要在 OpenAI、Anthropic 等平台获取 API Key 并设置为环境变量如ANTHROPIC_API_KEY。memory: 定义了如何存储和检索对话历史与知识。vector类型使用向量数据库实现语义搜索能更智能地找回相关记忆。skills: 定义了智能体可以直接调用的基础能力如读写文件、搜索网络。servers: 这是连接 MCP 协议的关键。这里定义了一个名为my_tools的 MCP 服务器它通过运行一个 Python 模块来提供自定义工具。4. 代码管理实战用 Git 与 Sourcetree 协同工作一个健康的 Codex 项目也需要规范的代码管理。我们将.codex/config.yaml、src/下的源代码以及requirements.txt等纳入版本控制而将.codex/memory/记忆数据和workspace/智能体生成的文件等加入.gitignore。4.1 配置.gitignore文件在项目根目录创建或编辑.gitignore文件# Python __pycache__/ *.py[cod] *$py.class *.so .Python venv/ env/ *.venv # Codex specific .codex/memory/ # 向量记忆数据库通常很大且个人化 workspace/ # 智能体运行时生成的工作文件 *.log # 日志文件 # IDE .vscode/ .idea/ *.swp *.swo4.2 基础 Git 工作流与 Sourcetree 可视化首次提交:# 查看当前文件状态 git status # 添加所有文件到暂存区除了 .gitignore 里忽略的 git add . # 提交到本地仓库 git commit -m feat: initialize codex project with basic config使用 Sourcetree 可视化操作打开 Sourcetree点击-Add Local Repository选择你的my-first-codex-agent文件夹。在主界面你可以看到所有文件的变更状态未暂存、已暂存。勾选你想要提交的文件填写提交信息点击“提交”按钮。这等同于命令行git add和git commit。Sourcetree 的图形化分支视图让你能轻松创建、切换、合并分支非常适合管理功能开发如feat/memory-optimization和修复 Bug如fix/config-bug。连接远程仓库如 GitHub:# 在 GitHub 上创建新仓库获取其 URL git remote add origin https://github.com/yourname/my-first-codex-agent.git git branch -M main git push -u origin main在 Sourcetree 中你可以通过仓库-仓库设置-远程来添加远程仓库然后直接点击“推送”按钮上传代码。5. 构建记忆系统让智能体拥有“长期记忆”记忆系统是 AI 智能体区别于单次对话的关键。Codex 的记忆系统旨在让智能体记住跨会话的对话内容、学到的知识和你提供的文档。5.1 记忆类型与配置在config.yaml中我们已将memory.type设为vector。现在我们来深入理解并激活它。原理vector记忆会将每段文本如对话回合、上传的文档通过嵌入模型embedding_model转换为一个高维向量并存储到本地的向量数据库如 SQLite 向量扩展或 Chroma。当用户提出新问题时系统会将问题也转换为向量并搜索出最相关的历史记忆片段作为上下文提供给 AI 模型。检查与安装向量数据库后端Codex 可能默认使用chromadb或sqlite-vss。确保它被安装。# 检查 requirements.txt 或手动安装 pip install chromadb # 一个流行的轻量级向量数据库 # 或者如果 config.yaml 指定了其他后端则安装对应的包5.2 实践向记忆库添加知识并查询我们通过编写一个简单的脚本或直接运行智能体并与之对话来体验记忆功能。编写一个测试脚本src/test_memory.py:# src/test_memory.py import asyncio from codex import CodexClient # 假设的客户端具体导入方式请参考官方 SDK async def main(): # 初始化客户端读取 .codex/config.yaml 配置 client CodexClient.from_config() # 1. 向记忆库添加一些知识 print(Adding knowledge to memory...) await client.memory.add( content我的项目‘my-first-codex-agent’是一个用于学习AI助手开发的示例项目。, metadata{source: user_input, topic: project} ) await client.memory.add( contentPython 虚拟环境可以使用 python -m venv venv_name 创建。, metadata{source: documentation, topic: python} ) # 2. 查询相关记忆 print(\nQuerying memory for 如何创建Python环境...) results await client.memory.search(如何创建Python环境, limit3) for i, mem in enumerate(results): print(f[{i1}] {mem.content} (Score: {mem.score:.3f})) # 3. 与智能体对话它会自动利用记忆 print(\nStarting a conversation with the agent...) response await client.agent.chat(我之前告诉过你我的项目是什么吗) print(fAgent: {response}) if __name__ __main__: asyncio.run(main())运行测试:cd my-first-codex-agent source venv_codex/bin/activate # 激活虚拟环境 python src/test_memory.py你应该能看到添加的知识被成功存储并且智能体在回答关于项目的问题时能够检索并引用之前添加的记忆。记忆优化小贴士分块存储添加长文档时最好将其分割成有意义的段落如按标题、按段落再分别存入记忆这样检索精度更高。丰富元数据metadata字段非常有用可以添加source、author、created_at、typeconversation/document等信息便于后期过滤和分类检索。定期维护对于向量记忆可以定期清理低分或过时的记忆条目。6. 扩展智能体能力Skills 与 MCP 协议详解Skills 和 MCP 是 Codex 生态中为智能体添加“手脚”和“感官”的核心机制。6.1 Skills vs. MCP概念辨析Skills通常指智能体内置的、直接可调用的基础功能。例如在config.yaml的skills部分定义的filesystem文件系统读写、web_search网络搜索。它们实现简单配置即用。MCP (Model Context Protocol)是一个开放协议用于标准化 AI 模型与任何外部工具、数据源之间的通信。一个遵循 MCP 的服务端称为MCP Server。MCP Server 可以提供的功能远比内置 Skills 丰富和复杂例如连接公司数据库、调用内部 API、操作云资源等。关系你可以认为内置 Skills 是 Codex 官方实现的一些“标准 MCP Server”。而servers配置项允许你连接任何第三方或自建的 MCP Server。6.2 创建你的第一个 MCP Server让我们创建一个简单的 MCP Server为智能体提供一个“计算器”工具和一个“获取天气”工具。创建 MCP Server 项目结构:mkdir mcp-server-calculator cd mcp-server-calculator python -m venv venv source venv/bin/activate pip install mcp # 安装 MCP SDK编写 MCP Server 代码server.py:# server.py import asyncio from mcp import Server, types import httpx # 创建 MCP 服务器实例 server Server(calculator-weather-tools) # 1. 定义工具Tools server.list_tools() async def handle_list_tools() - list[types.Tool]: 列出服务器提供的所有工具 return [ types.Tool( nameadd_numbers, descriptionAdd two numbers together., inputSchema{ type: object, properties: { a: {type: number, description: First number}, b: {type: number, description: Second number}, }, required: [a, b], }, ), types.Tool( nameget_weather, descriptionGet current weather for a city., inputSchema{ type: object, properties: { city: {type: string, description: City name, e.g., Beijing}, }, required: [city], }, ), ] # 2. 实现工具调用Call Tools server.call_tool() async def handle_call_tool(name: str, arguments: dict) - list[types.TextContent]: 执行具体的工具 if name add_numbers: result arguments[a] arguments[b] return [types.TextContent(typetext, textfThe sum is {result})] elif name get_weather: # 注意这里使用模拟数据真实情况应调用天气API city arguments[city] # 模拟API调用 async with httpx.AsyncClient() as client: # 假设的API调用实际需要替换为真实的URL和API Key # response await client.get(fhttps://api.weather.com/v1/...?city{city}) # weather_data response.json() weather_data {temperature: 22, condition: Sunny} return [types.TextContent(typetext, textfWeather in {city}: {weather_data[temperature]}°C, {weather_data[condition]})] else: raise ValueError(fUnknown tool: {name}) # 3. 运行服务器使用stdio传输这是Codex等客户端常用的方式 async def main(): async with server.run_stdio() as (read_stream, write_stream): await server._run(read_stream, write_stream) if __name__ __main__: asyncio.run(main())在 Codex 项目中配置并使用这个 MCP Server:回到my-first-codex-agent项目。编辑.codex/config.yaml在servers部分添加servers: - name: my_custom_tools type: mcp config: command: python args: [/absolute/path/to/your/mcp-server-calculator/server.py] # 或者如果它在虚拟环境中可能需要指定完整python路径 # command: /path/to/venv/bin/python启动你的 Codex 智能体具体启动命令取决于 Codex CLI例如codex run或codex start。现在当你问智能体“请计算 15 加 27 等于多少”时它应该能自动调用add_numbers工具并返回正确结果。7. 常见问题与排查思路在搭建和使用 Codex 过程中你可能会遇到一些典型问题。下表汇总了常见问题及其解决方法问题现象可能原因排查步骤与解决方案codex could not start the extension couldn‘t load its resources.1. VS Code 插件网络问题。2. 插件版本与 VS Code 不兼容。3. 插件本身有 Bug。1. 检查网络尝试重启 VS Code。2. 更新 VS Code 到最新稳定版重新安装插件。3. 查看 VS Code 开发者工具控制台Help - Toggle Developer Tools获取详细错误。ModuleNotFoundError: No module named ‘codex‘1. 未安装codex-cli或包名错误。2. 未在正确的虚拟环境中操作。3. PYTHONPATH 问题。1. 确认安装命令pip install codex-cli或查阅官方文档确认正确包名。2. 使用which python和pip list确认当前环境。3. 在项目根目录下操作确保虚拟环境已激活。智能体无法调用 MCP Server 工具1.config.yaml中 servers 配置错误。2. MCP Server 脚本本身有错误或未启动。3. 智能体没有正确的权限或提示词未引导其使用工具。1. 检查command和args路径是否正确特别是使用绝对路径。2. 单独运行 MCP Server 脚本 (python server.py)看是否有报错。3. 检查智能体的system_prompt是否鼓励它使用可用工具。查看运行日志。记忆搜索返回无关内容1. 嵌入模型不适合当前语言或领域。2. 记忆文本分块不合理太长或太碎。3. 搜索参数如limit,score_threshold设置不当。1. 尝试在config.yaml中更换embedding_model如果支持。2. 优化添加记忆时的文本分块策略使其语义更完整。3. 调整搜索的limit返回数量或在代码中过滤低score的结果。Git 提交时包含了大文件或记忆文件.gitignore文件配置不完整或未生效。1. 检查.gitignore文件是否在项目根目录语法是否正确。2. 使用git check-ignore -v file_path检查特定文件为何未被忽略。3. 如果文件已提交需要使用git rm --cached file将其从版本控制中移除再提交.gitignore。8. 最佳实践与工程建议将 Codex 用于实际项目时遵循以下最佳实践可以提升稳定性、安全性和可维护性。环境隔离与依赖管理强制使用虚拟环境每个 Codex 项目都应拥有独立的venv或conda环境并通过requirements.txt或pyproject.toml精确记录依赖版本。锁定依赖版本使用pip freeze requirements.txt生成依赖列表时确保版本固定避免因上游更新导致项目崩溃。配置管理与敏感信息分离配置将config.yaml中可能变化的部分如 API 端点、模型名称提取为环境变量。使用${ENV:VAR_NAME}语法引用。保护密钥绝对不要将 API Key、数据库密码等硬编码在配置文件或代码中。使用环境变量或专业的密钥管理服务。示例安全配置agent: model: ${ENV:LLM_MODEL:-claude-3-haiku} # 默认值 api_key: ${ENV:ANTHROPIC_API_KEY} # 必须从环境变量读取代码与资产管理严格的.gitignore确保memory/、workspace/、*.log、venv/等目录和文件被忽略。可以考虑将config.yaml模板化如config.yaml.example实际配置由 CI/CD 或部署脚本生成。记忆数据的备份虽然记忆库不纳入 Git但定期备份.codex/memory/目录到安全的存储位置如云存储是重要的特别是当记忆包含重要知识时。MCP Server 开发规范输入验证与错误处理在 MCP Server 的handle_call_tool函数中必须对传入的arguments进行严格的类型和范围验证并返回清晰的错误信息。权限控制在 Server 配置中通过allowed_paths、allowed_domains等参数限制智能体的操作范围遵循最小权限原则。资源清理如果工具调用涉及网络连接、文件句柄等确保使用async with或try...finally进行妥善的清理。测试与监控为 MCP Server 编写单元测试使用pytest等框架测试你的工具函数确保其逻辑正确。为智能体对话编写集成测试模拟用户输入验证智能体是否能正确调用工具并返回预期结果。添加日志在 Codex 项目和 MCP Server 中合理添加日志记录便于追踪智能体的决策过程和工具调用情况。