Codex CLI 实战:从安装到接入 DeepSeek 实现合同自动提取

📅 2026/8/27 9:39:48
Codex CLI 实战:从安装到接入 DeepSeek 实现合同自动提取
最近不少技术群里在讨论一组很有冲击力的数据a16z 分享的观察中提到律师在使用 OpenAI Codex 之后部分工作流的效率提升非常夸张甚至出现了 108 倍的增速提升。第一次看到这个数字很多人会觉得是标题党但如果你把 Codex 理解成一个“能听懂自然语言、并且可以直接操作代码和文件的 AI 工程师”就会意识到对于律师这种非程序员群体很多重复的文本处理工作被自动化之后效率产生数量级变化是完全可能的。这篇文章不打算讨论 a16z 报告本身的口径是否严谨而是想借这个热点完整拆解 Codex 到底是什么、怎么安装、怎么配置、怎么接入第三方模型、怎么用代码解决实际工作以及你自己上手时最容易踩的坑。无论你是后端开发者、运维还是被“律师 108 倍效率提升”吸引来的非技术读者这篇教程都可以直接照着操作。1. 背景与核心概念1.1 a16z 数据背后为什么律师也要用代码工具传统观念里律师的工作是看卷宗、写文书、审合同和写代码几乎没有关系。但仔细观察会发现大量律师的工作本质上是“信息处理”从 PDF、Word、邮件里找关键条款按模板生成文书把散布在多份材料里的字段汇总到表格里。这些工作恰恰是 Python 脚本和 AI 编程工具最擅长的。a16z 提到的 108 倍增速并不是指律师写业务系统更快而是指律师通过 Codex 这类工具把一个原本需要手工完成的任务比如从几十份合同里提取甲方、乙方、金额、期限变成了一段自然语言指令。Codex 生成脚本脚本自动完成重复劳动。这类任务的提速往往是几十倍甚至上百倍因为机器的批量处理速度和人工阅读速度完全不在一个量级。这个案例对开发者的启发同样很大Codex 不只是“自动补全代码”的插件它更像是一个能理解项目上下文、能独立写文件和跑命令的 AI 编程助手。我们关心的重点不应该是“律师怎么能用”而应该是“这种工作流模式能不能迁移到我们自己的开发和运维场景中”。1.2 Codex、Codex CLI、Codex Harness 分别是什么先理清几个容易混淆的概念。CodexOpenAI 推出的 AI 编程解决方案底层基于 GPT 系列模型面向“完成编程任务”设计。官方把它定位成“AI software engineer”。Codex CLI命令行版本你可以在终端里输入自然语言任务Codex 会自动分析项目、生成代码、执行命令、检查结果。这是本文实操的主体。Codex Harness可以理解为一个受控的执行环境让 Codex 在不影响宿主系统的前提下运行代码适合批量任务和 CI 场景。实际使用中你会看到 Codex 在执行命令前后进行沙箱隔离和反馈循环。从 API 的角度看Codex 使用 OpenAI 的 Responses API 作为默认协议同时保留了对 OpenAI Chat Completions 兼容接口的支持。正因为这种兼容性Codex CLI 也可以接入 DeepSeek 等第三方模型只需要在配置里修改模型提供商和接口地址。这也解释了很多热搜词里的“codex接入deepseek”。1.3 学习 Codex 需要什么基础如果你本身是程序员那上手非常快只要会终端操作、理解 JSON 和 TOML 配置即可。如果你是非技术岗最低门槛是要能看懂“文件路径”“环境变量”“命令行”这三个概念然后按照本文步骤操作。Codex 的价值在于“把人类意图变成代码”但这不代表你完全不需要思考。你仍然需要把复杂任务拆成清晰步骤需要检查生成结果的正确性还需要对敏感数据有足够的风险意识。这一点在律师场景里尤为重要因为合同和案卷都属于高敏感信息。2. 环境准备与版本说明2.1 安装 Codex CLICodex CLI 目前以 Node.js 包的形式发布安装前提是你本机已经安装了 Node.js 18 以上版本。我们以最常见的 npm 安装方式为例npm install -g openai/codex安装完成后先确认版本codex --version如果命令输出版本号说明安装成功。不同版本的 Codex 在参数和配置项上会有细微差别但核心流程是一致的。如果你的网络环境比较特殊无法直接访问 npm 官方源可以使用国内镜像安装。这里需要特别说明只建议使用正规的 npm 镜像源不要使用来路不明的第三方安装包以免引入恶意代码。2.2 登录与认证Codex CLI 需要登录 OpenAI 账号后才能调用模型。执行codex login命令会启动浏览器授权流程登录成功后凭证会保存在本机配置目录。如果你是在服务器或远程终端上使用浏览器弹不出来可以使用 API Key 方式配置认证。在环境变量中设置export OPENAI_API_KEY你的_API_Key然后把默认模型配置为某个支持当前认证方式的模型。具体模型名称建议以 OpenAI 官方文档为准因为模型列表更新很快写死版本号反而容易过期。2.3 查看默认配置文件Codex CLI 的配置文件默认位于用户目录下Linux/macOS~/.codex/config.tomlWindows%USERPROFILE%\.codex\config.toml如果文件不存在可以先创建一个空目录然后在里面新建config.toml。后续所有自定义 provider、模型切换、沙箱行为都在这个文件里配置。以下是本文示例使用的环境供参考操作系统Linux / macOSNode.js18Codex CLI以 npm 最新稳定版为准Python3.10用于运行自动生成的脚本模型提供方OpenAI 官方 / DeepSeek 第三方接口版本需要根据你的项目实际情况调整本文重点演示配置思路而不是绑定某个具体版本。3. 核心配置与使用原理3.1 两种使用方式交互模式与执行模式Codex CLI 最常用的两种模式是交互模式和执行模式。交互模式下你在终端里启动 Codex进入一个类似聊天的界面codex然后可以连续输入任务比如请阅读当前目录下的 README.md并总结项目的技术栈Codex 会读取文件内容返回分析和后续操作建议。执行模式适合脚本和自动化codex exec 把 data/raw 下的所有 CSV 文件合并并输出到 data/merged.csvexec模式会一次执行完毕然后退出方便嵌入到 Shell 脚本或 CI 流水线中。3.2 项目上下文与 AGENTS.mdCodex 之所以能写出符合项目风格的代码一个重要原因是它会读取项目根目录下的AGENTS.md文件。这个文件相当于给 AI 的“项目说明书”。例如在一个法律文档处理项目里可以这样写# 项目说明 - 本项目使用 Python 3.10所有脚本必须支持命令行参数运行。 - 所有涉及合同数据的输出必须先脱敏禁止打印客户全名、身份证号、银行账号。 - 新增代码必须放在 scripts/ 目录下。 - 运行测试前请先执行 python -m pytest tests/。写清楚项目规则后Codex 生成的代码会明显更符合你的工程要求。这一点非常重要尤其是律师场景下数据脱敏和输出格式必须被强约束。3.3 配置文件里的核心字段来看一个最简配置model gpt-5.2-codex model_provider openai字段含义model指定 Codex 使用的模型名。model_provider指定模型来源默认是 OpenAI。如果你是 OpenAI 官方用户这些配置通常不用改。一旦你想接入 DeepSeek 或公司内部的中转地址就需要增加model_providers区块。3.4 接入 DeepSeek 或自定义 OpenAI 兼容接口很多团队使用 Codex CLI 时不想直接调用 OpenAI 官方接口而是希望接 DeepSeek、国产模型或公司内部网关。Codex CLI 支持通过model_providers配置自定义模型提供商。在config.toml中添加如下内容model deepseek-chat model_provider deepseek [model_providers.deepseek] name DeepSeek base_url https://api.deepseek.com env_key DEEPSEEK_API_KEY wire_api chat字段说明model使用 DeepSeek 时通常是deepseek-chat或deepseek-reasoner。base_urlDeepSeek API 的地址注意不同服务商的地址可能不一样。env_keyCodex 会从该环境变量读取 API Key。wire_apichat表示走 Chat Completions 协议如果服务商支持也可以填responses。然后设置环境变量export DEEPSEEK_API_KEY你的_DeepSeek_API_Key再执行codex exec 用 Python 写一个脚本读取 contract.txt 并提取合同金额此时请求会发往 DeepSeek 接口。这里需要提醒第三方模型的接口兼容程度会随版本变化建议先跑一个最小任务验证连通性再投入真实项目。另外涉及公司敏感数据时要确认服务商的数据处理条款不要默认所有数据都可以外发。3.5 Codex Harness沙箱与自动化Codex 在执行代码时会借助 Harness 机制在一个受限环境中运行命令。它的作用是即使 AI 生成的代码有问题也不会直接破坏你的操作系统。在实际使用中你可以通过执行模式将 Codex 接入自动化流程。例如codex exec --json 运行项目中的测试并汇总失败用例--json参数让 Codex 输出结构化结果便于下游程序解析。对于 CI 场景可以把它封装成一个脚本定时执行代码审查或自动化修复任务。有一点需要注意Harness 不是万能安全网。如果代码里涉及删除文件、连接数据库、修改线上配置等高风险操作必须在提示词里明确约束并在人工确认后再运行。4. 完整实战用 Codex 自动提取合同关键条款接下来我们做一个小而完整的实战。场景模拟律师工作中的常见任务从一份合同文本中提取甲方、乙方、合同金额、有效期等关键信息。我们让 Codex 自动生成脚本而不是自己手工写正则。4.1 创建测试目录和样例文件首先建一个项目目录并准备一份合同样例mkdir -p codex-contract-demo cd codex-contract-demo创建contract.txt合同编号HT-2024-001 甲方北京某某科技有限公司 乙方上海某某律师事务所 签订地点北京 签订日期2024年5月20日 甲乙双方本着平等自愿的原则达成如下协议 第一条 合同金额 本合同总金额为人民币 120000 元大写壹拾贰万元整。 第二条 合同期限 本合同有效期自 2024 年 6 月 1 日至 2025 年 5 月 31 日。 第三条 付款方式 甲方应于合同签订后 10 个工作日内支付首期款项。4.2 让 Codex 生成提取脚本在项目目录下执行codex exec 读取 contract.txt提取合同编号、甲方、乙方、合同金额、有效期并输出到控制台Codex 会自动创建脚本并运行。生成的脚本效果类似下面这个文件文件路径放在scripts/extract_contract.pyimport re import sys from pathlib import Path def extract_contract(text: str) - dict: fields {} patterns { 合同编号: r合同编号[:]\s*([^\n。]), 甲方: r甲方[:]\s*([^\n。]), 乙方: r乙方[:]\s*([^\n。]), 合同金额: r合同金额[:]\s*([^\n。]), 有效期: r有效期[:]\s*([^\n。]), } for field, pattern in patterns.items(): match re.search(pattern, text) if match: fields[field] match.group(1).strip() return fields if __name__ __main__: input_file sys.argv[1] if len(sys.argv) 1 else contract.txt content Path(input_file).read_text(encodingutf-8) result extract_contract(content) for key, value in result.items(): print(f{key}: {value})这是一个核心片段实际由 Codex 生成的版本可能略有差异但思路完全相同。4.3 运行脚本如果你使用 Codex 自动生成并运行直接看输出即可。如果你想手工运行脚本python scripts/extract_contract.py contract.txt预期输出合同编号: HT-2024-001 甲方: 北京某某科技有限公司 乙方: 上海某某律师事务所 合同金额: 人民币 120000 元 有效期: 自 2024 年 6 月 1 日至 2025 年 5 月 31 日4.4 扩展成批量处理律师真正常接触的场景是几十份合同。我们可以进一步让 Codex 把脚本改成批量模式codex exec 扫描 contracts 目录下所有 .txt 文件提取关键字段汇总生成 result.csvCodex 会生成一个批量遍历目录的 Python 脚本。核心逻辑通常是这样import csv import re from pathlib import Path def extract_contract(text: str) - dict: fields {} patterns { 合同编号: r合同编号[:]\s*([^\n。]), 甲方: r甲方[:]\s*([^\n。]), 乙方: r乙方[:]\s*([^\n。]), 合同金额: r合同金额[:]\s*([^\n。]), 有效期: r有效期[:]\s*([^\n。]), } for field, pattern in patterns.items(): match re.search(pattern, text) if match: fields[field] match.group(1).strip() return fields def main(): source_dir Path(contracts) if not source_dir.exists(): print(contracts 目录不存在) return rows [] for file_path in sorted(source_dir.glob(*.txt)): text file_path.read_text(encodingutf-8) row extract_contract(text) row[文件名] file_path.name rows.append(row) if rows: fieldnames [文件名, 合同编号, 甲方, 乙方, 合同金额, 有效期] with open(result.csv, w, encodingutf-8-sig, newline) as f: writer csv.DictWriter(f, fieldnamesfieldnames) writer.writeheader() writer.writerows(rows) print(已生成 result.csv) if __name__ __main__: main()这段脚本将每个合同文件转成一行 CSV使用utf-8-sig编码是为了让 Excel 直接打开时中文不乱码。运行之前把样例文件复制到contracts/目录mkdir contracts cp contract.txt contracts/ python scripts/batch_extract.py运行后打开result.csv可以看到结构化表格。4.5 这个实战说明了什么这个案例虽然简单但它完整展示了 Codex 的工作流用自然语言描述任务目标。Codex 根据项目上下文生成脚本。在 Harness 沙箱环境中执行并校验。人类检查输出结果。批量扩展时只需要修改提示词Codex 会调整代码。这种模式一旦跑通迁移到简历筛选、发票整理、日志分析等场景非常快。律师能因此提速本质上是把“读懂规则并批量应用规则”的工作交给了 AI。5. 常见问题与排查思路5.1 高频报错速查表问题现象常见原因解决思路cc switch local proxy failed while handling codex endpoint /responses. provi使用了本地代理或自定义网关但代理服务未启动、地址不对或无法处理/responses接口检查本地代理进程、base_url路径、日志和网络连通性the gpt-5.6-sol model is not supported when using codex with a...配置了不存在的模型名或第三方模型实际名称与配置不一致核对模型名使用 provider 支持的模型标识登录成功但调用时报 401API Key 无效、账号权限不足或环境变量读取错误重新生成 Key确认env_key对应的环境变量已设置Codex 生成代码后运行报缺少模块Harness 沙箱内没有安装运行依赖在项目中使用venv并将依赖声明到requirements.txt输出中文乱码编码格式不匹配写入 CSV 使用utf-8-sig读取文件显式指定encodingutf-85.2 重点排查local proxy failed这个报错在配置第三方 provider 时非常典型。Codex 收到任务后会把请求发送到配置的base_url。如果你使用了本地代理http://127.0.0.1:8080而代理进程没有启动就会出现cc switch local proxy failed while handling codex endpoint /responses排查顺序确认本地代理进程是否在运行。确认base_url是否配置正确很多服务商的完整路径是https://api.xxx.com/v1。在终端里用 curl 手动请求一次接口看返回值是否正常。查看 Codex 调试日志开启方式是在命令前加环境变量RUST_LOGdebug codex exec 测试请求注意这里说的本地代理是开发调试中的 API 网关不要和网络访问工具混淆。如果问题不在代理而是模型不支持优先检查模型名。5.3 模型不支持的排查Codex 对模型名比较敏感。如果你配置了gpt-5.6-sol这种名字而官方模型列表里没有就会直接拒绝调用。解决方式很简单使用官方模型时从 OpenAI 官方文档的模型列表里复制名称。使用第三方模型时确认服务商提供的模型标识例如 DeepSeek 通常是deepseek-chat。不要在配置里凭印象写模型名。6. 最佳实践与工程建议6.1 安全与数据隐私优先律师场景中合同和案卷属于敏感数据。使用 Codex 或任何外部 AI 服务时必须做到以下几点未经客户授权不把案卷原文发送给外部模型。优先使用脱敏数据测试例如把“张三”替换成“客户A”。如果条件允许部署私有化模型或使用支持数据不落地的企业版服务。所有生成的脚本都要经过人工审查特别是涉及文件删除、数据库操作、网络请求的代码。Codex 是效率工具不是安全边界。6.2 把任务拆细减少上下文污染Codex 的效果和任务的清晰度强相关。不要指望一句“帮我处理所有合同”就能得到完美结果。更好的做法是拆成几个小步骤读取目录结构。解析单个文件确认字段。写成脚本。批量运行。生成汇总报告。每个步骤独立验证出错时更容易定位。6.3 使用 AGENTS.md 建立长期工程约束团队项目建议在仓库根目录维护AGENTS.md让 Codex 在不同任务中保持一致的代码风格和输出规范。这个文件不一定要很长但应该包含代码结构、测试命令、边界条件和禁止事项。例如# 代码生成约束 - 禁止使用 print 输出敏感字段。 - 所有 Python 脚本必须包含 if __name__ __main__: 入口。 - 修改文件前先输出将要修改的文件路径。 - 数据库操作必须使用参数化查询。有了这些约束Codex 生成结果的可控性会提升很多。6.4 控制成本与运行时间Codex 每次调用都会消耗模型额度复杂任务会多次调用。成本控制建议尽量在明确的目录范围里执行避免扫描整个磁盘。使用codex exec执行单次任务而不是一直保持交互模式。对模型和 provider 设置统一配置文件避免误用高价模型。在 CI 中限制任务超时时间防止异常循环。6.5 人机协同而不是完全交给 AI最终还是要强调Codex 擅长生成和修改代码但它不擅长理解业务意图和法律责任。律师用 Codex 提速 108 倍但最终签署意见的仍然是律师本人。开发者用 Codex 提高产出但线上 bug 的责任人仍然是团队自己。把 Codex 当成“会写代码的实习生”你负责验收和兜底配合起来最安全。7. 总结与下一步这篇文章从 a16z 的律师效率数据切入完整展示了 Codex CLI 的安装、登录、配置、第三方模型接入和实际项目案例。你可以把 Codex 接入 DeepSeek用自然语言生成合同提取脚本也可以把它用到日常开发中自动处理重复任务。下一步建议从一个小任务开始找一个只有几个文件的目录让 Codex 完成一次“生成脚本并运行”的闭环。跑通之后再逐步增加复杂度比如接入 CI、使用 Harness 做沙箱执行、建立团队级的 AGENTS.md 规范。如果你上手时遇到模型不支持、本地代理失败或登录异常回到第 5 节的表格逐条排查。Codex 的迭代速度很快保持关注官方文档和版本更新比收藏任何教程都重要。