新闻详情

新闻详情

首页 / 资讯中心 / 详情

Jev:给AI编程助手装一个决策层,让Claude Code和Codex先想再做

发布时间:2026/9/26 16:56:15来源:尧图网络
Jev:给AI编程助手装一个决策层,让Claude Code和Codex先想再做
最近调 AI Coding Agent 调得比较多Claude Code 和 Codex 这两个命令行工具给我的感觉是下限很高但上限全靠“你能不能把任务说清楚”。你跟它说“帮我重构一下登录模块”它真可能把整个文件给你重写一遍你跟它说“看一下这个接口兼容性”它可能扫一个文件就告诉你没问题。不是模型不行是缺一个拿主意的人。我后来给这两个工具加了一层叫 Jev 的决策层专管“先想清楚再动手”这一步。这篇文章我把完整的安装思路、配置过程和踩过的坑整理出来10 分钟跟着走一遍你也能让 Coding Agent 学会自己拿主意。在动手之前先聊聊我为什么要装 Jev以及它解决的到底是什么问题。这样后面配置的时候你才知道那些参数是干嘛的遇到报错也知道往哪个方向查。1. Coding Agent 为什么需要“拿主意”先搞懂 Jev 解决的真问题1.1 现在的 Agent 不是笨是“不会取舍”Claude Code 和 Codex 这类工具本质上是把大模型的代码生成能力包装成交互式的命令行 Agent。模型本身很强写单文件、补单测、跑命令都很利索。但任务一复杂问题就来了你不知道它下一步想干什么它也不告诉你为什么这么选。我举个例子。你让 Claude Code“给后端加个缓存”它大概率直接开始写 Redis 封装或者加装饰器但它不会先问你这个缓存是针对读多写少还是写多写少的场景数据一致性要求多高要缓存的是查询接口还是整个业务链路这些信息不明确写出来的代码就是“看起来在干活实际上可能跑偏”。还有一个更典型的场景你让它“重构一下订单模块”它可能把模块里所有文件都翻出来改一遍包括那些跟本次需求毫无关系的旧代码。你问它为什么动那个文件它说不出个所以然。本质上模型只知道“生成最可能的下一段 token”它不知道如何把一个模糊目标收敛成几条候选方案再从中选一条性价比最高的。这不是智力问题是结构问题缺了一个决策前置层。打个比方你就明白了。以前的 Agent 像个特别勤快的实习生你给一句话它马上动手但方向对不对它不管。装 Jev 之后相当于给这个实习生配了个项目负责人接手任务先不着急写码先把目标、约束、候选方案、风险列清楚再决定让实习生按哪条路线干。这中间多出来的“想清楚”环节就是 Jev 存在的意义。1.2 Jev 在技术栈里到底处于什么位置Jev 是什么严格说它是一个面向 Coding Agent 的决策/规划层。它跑在 Claude Code、Codex 这类“执行型 Agent”和底层大模型之间负责做意图识别、任务拆解、方案排序和风险标注然后把结构化结果交给 Agent 去执行。很重要的一点Jev 不是用来替代 Claude Code 或 Codex 的也不是传统的代码补全模型。它更像是一个“参谋部”。主模型负责“打仗”Jev 负责“定作战方案”。你甚至可以把 Jev 理解为一条独立的推理链路输入是原始任务描述输出是一份带目标、约束、候选方案、推荐方案、风险点的结构化计划而不是代码。为什么要把决策逻辑单独拆出来因为主模型的上下文窗口是有限的。你让一个模型同时干“理解意图”“拆解任务”“写实现代码”三件事Token 消耗会暴涨而且这三件事会互相干扰。模型在写代码的时候很容易忘记最开始拆解出来的约束条件。Jev 把“想”和“做”分开等于给 Agent 装了一条缓存的思维链决策结果独立存放随时可查不占主模型上下文。关于 Jev 是否开源这个问题我直接用到的社区版是开源的可以自己托管也可以直接用官方 API。商业版多了团队策略模板、权限审批流一类功能适合多人协作的团队用。我下面所有配置都是基于社区版做的自己一个人用完全够。1.3 装 Jev 之前和之后光说概念你可能没感觉我放一个对比。假设现在有一个任务“给支付回调接口加上幂等重试机制”。阶段处理方式结果装 Jev 之前Claude Code 直接写一个 retry 装饰器套在回调函数上只处理了“重试”没处理“幂等”重试了不幂等的接口反而可能重复扣款装 Jev 之后Jev 先整理约束哪些异常可重试、哪些不可重试、幂等键取什么再列出 3 种方案装饰器、中间件、消息队列各附成本和风险最后推荐一种并给出理由Agent 按推荐方案实现重试和幂等一起处理且知道为什么这么选这个对比很直观。Jev 不是让 Agent“更聪明”而是让 Agent“更稳”。它像一个强制 checklist把人类工程师平时踩坑后才总结出来的经验前置到了任务开始之前。2. 10 分钟安装 Jev 到 Claude Code完整实操下面进入正题。我自己用的是 macOS Node.js 环境Windows 和 Linux 操作基本一致只有路径和包管理器有差别。整个过程分四步确认环境、安装 Jev、挂到 Claude Code、验证生效。2.1 安装前要确认的几件事装之前别急着敲命令先确认三件事第一Node.js 版本不低于 18最好 20 以上。Jev 的 CLI 是 Node 写的版本太老会有兼容问题。检查命令是node -v。如果你更习惯 Python 生态Jev 也有 Python 版但下面的命令示例我统一用 Node 版演示。第二Claude Code 已经装好并且能正常对话。检查命令是claude --version能输出版本号就算就绪。第三准备一个独立的 API Key。Jev 官方服务的 key 可以单独申请如果你不想用它官方服务也可以在配置里把 provider 指向自己的模型网关。我强烈建议给 Jev 单独配一个 key别跟 Claude Code 的主 key 混用。混用的问题在于排查问题的时候你分不清日志里某一条调用是 Jev 发起的还是主模型发起的。分开以后决策调用和代码生成调用的用量、延迟、错误都能分开看省很多事。2.2 安装与初始化 Jev确认完环境安装其实就一条命令npm install -g jev/cli装完以后执行初始化jev init初始化会做几件事创建~/.jev/目录生成config.json和profiles/目录并自动检测当前机器上装了哪些 Agent。它会问你要不要自动识别 Claude Code 和 Codex 的配置路径这里选 yes 就行。初始化生成的config.json长这样{ provider: jev-official, model: jev-prod, apiKey: sk-xxx, logLevel: debug, timeout: 30, cache: true }我解释一下这几个字段provider决策模型的提供方。默认是 Jev 官方如果你想用自定义的 OpenAI 兼容接口改成你自己的服务地址。model决策模型名称。官方模型区分不同档位社区版默认用jev-prod本地部署的话可以改成qwen3-coder之类。apiKey独立 key放这里。logLevel调试阶段建议开debug跑稳以后改成info。cacheJev 会把相同任务的规划结果缓存起来。相同任务描述再次请求时直接命中缓存省 Token 也降延迟。初始化完成以后先跑一下自检jev doctor它会检查 CLI 版本、config 文件格式、API Key 连通性、以及是否检测到 Claude Code / Codex 的可执行文件。看到all checks passed就可以继续了。2.3 把 Jev 挂到 Claude Code 上Claude Code 的集成方式很灵活但我实测下来最稳的是用 slash command。Claude Code 支持在~/.claude/commands/目录下放自定义命令每个命令就是一个 Markdown 文件。我创建一个jev.mdmkdir -p ~/.claude/commands cat ~/.claude/commands/jev.md EOF --- description: 让 Jev 做决策规划Claude Code 严格按计划执行 argument-hint: 任务描述 --- 先运行 jev plan --input $1 --json仔细阅读输出 JSON 中的以下字段 - objective本次任务的最终目标 - constraints必须遵守的约束条件 - candidate_plans候选方案列表 - recommended_plan推荐方案包含具体文件、改动步骤、风险和测试策略 严格按照 recommended_plan 执行。如果 recommended_plan 中标记了 risk_level 为 high 的项必须先停下来说明风险不可直接执行。 EOF这里每个字段都是有用的。objective和constraints是给 Agent 的行为定边界防止它自由发挥recommended_plan里给出了涉及文件和步骤Agent 后续的每一步都应该能对应到计划中的某一项。配置完以后重启 Claude Code 或者在新会话里输入/jev 给 command_handler.py 加上超时重试注意只能重试网络类异常Claude Code 会先调用 JevJev 返回一份 JSON 计划然后 Claude Code 再按照推荐计划去改代码。这时候你会看到终端里多了一段结构化的计划输出再往后 Clauaude Code 的每一步都能跟计划对得上。如果你想让它对每个任务自动先跑 Jev而不手动敲/jev可以在CLAUDE.md里加一条强规则## 决策规则 当你收到复杂度超过 5 分钟的任务时必须先执行 jev plan --input 任务描述 --json拿到 recommended_plan 后才能开始写代码。禁止跳过规划直接实现。注意这里的用词是“必须先”“禁止跳过”要足够硬。你写“建议先跑 Jev”Agent 大概率不会每次照做。2.4 验证是否生效配置完别急着上大任务先拿一个小任务验证链路通不通。我用的测试任务是/jev 给 utils.py 加一个带指数退避的重试函数只处理 ConnectionError 和 TimeoutError其他异常直接抛出正常情况你会看到三步Jev 先输出 planClaude Code 回显“我将按照推荐计划执行”然后才开始动文件。如果第一步就报错说明 Jev 调用有问题先去查~/.jev/logs/下的日志如果第二步就没有计划直接写代码说明 slash command 没加载成功检查命令文件有没有放在正确的目录。还可以用jev logs查看最近的决策记录。这条命令会列出所有过去任务的输入、输出候选方案、最终推荐方案和耗时。我习惯在刚配完的时候跑一下确认 Jev 真的参与了决策而不是 Agent 在自说自话。3. 把 Jev 装到 Codex 上的另一种姿势Claude Code 装完Codex 那边就简单多了。但 Codex 的配置方式和 Claude Code 不一样最大的差异在于配置文件格式Claude Code 用 JSONCodex 用 TOML。别小看这个差异填错一个字段就够你折腾半小时。3.1 Codex 的配置方式差异Codex 的全局配置在~/.codex/config.toml。默认情况下它走 OpenAI 的模型服务要接入 Jev有两种思路。第一种思路是把 Jev 当作一个独立的决策工具让 Codex 在收到复杂任务时先调用一个本地脚本。这种做法的好处是不动 Codex 本身的模型配置风险最低。第二种思路是把 Jev 的本地服务注册成 Codex 的一个 model provider让 Codex 在处理某些任务时直接把规划请求发给 Jev。这种做法更彻底但需要 Jev 以服务模式运行并且要处理协议兼容问题。我推荐先走第一种跑通以后再去折腾第二种。原因很简单第一种改动面小出问题容易回滚第二种万一配错可能导致 Codex 完全无法启动。3.2 Jev 接入 Codex 的步骤先写一个最小的调用脚本。Jev 提供本地服务模式启动后暴露一个 OpenAI 兼容的/v1/chat/completions接口。先启动服务jev serve --port 8477启动以后写一个jev_codex.py#!/usr/bin/env python3 import json import subprocess import sys task .join(sys.argv[1:]) result subprocess.run( [jev, plan, --input, task, --json], capture_outputTrue, textTrue, checkTrue, ) plan json.loads(result.stdout) print(json.dumps(plan, ensure_asciiFalse, indent2))这个脚本本质上是把jev plan的输出透传给 Codex。然后在AGENTS.md里加规则## 复杂任务处理流程 当任务涉及多个文件、多个步骤或存在多种实现方案时先执行 python /path/to/jev_codex.py 任务描述 阅读输出中的 recommended_plan然后严格按照计划实施。Codex 会自动读取AGENTS.md规则优先级很高。实测下来加这段规则后 Codex 在遇到重构类任务时会先调用脚本拿计划再动手。如果你要试第二种思路config.toml 里大致这样配model jev-planner model_provider jev [model_providers.jev] name Jev Planner base_url http://127.0.0.1:8477/v1 wire_api chat env_key JEV_API_KEY注意base_url结尾的/v1不能漏。Codex 会在后面拼具体的路径漏了会导致 404。另外env_key要指向一个真实存在于环境变量里的 key比如启动 Codex 之前先export JEV_API_KEYxxx。3.3 同时管理 Claude Code 和 Codex 的 Jev 配置如果你两个工具都在用最怕的就是配置漂移Claude Code 里的 Jev 是一个 profileCodex 里是另一个两边规则还不一样。Jev 本身支持统一配置在~/.jev/config.json里设默认 profile{ default_profile: coding-agent, profiles: { coding-agent: { provider: jev-official, model: jev-prod, strategy: conservative, output_schema: plan-v2 } } }strategy字段我解释一下。它控制 Jev 的决策风格conservative偏向改动最小、风险最低的方案balanced会在改动量和长期维护性之间取折中aggressive倾向于做更彻底的重构。团队项目我建议统一用conservative个人项目可以按心情换。两端共用一套配置后Claude Code 用/jevCodex 用jev_codex.py底层走的都是同一个 profile决策风格、输出格式完全一致。排查问题的时候也方便直接看 Jev 的日志就行。4. 让 Coding Agent “拿主意”的三个核心机制配置都做完了你可能会好奇 Jev 内部到底怎么“拿主意”的。我拆开讲一下核心机制方便你后续调整参数。4.1 意图识别把“要我做什么”翻译成“我要做什么”第一步是意图识别。人类说话的省略程度非常高你说“给接口加个鉴权”Agent 如果不追问它根本不知道是加 Token 校验、加签名、加白名单还是加 OAuth。Jev 做的事情是把这种模糊表述转成结构化意图。举个例子。任务“给订单查询接口加缓存”。Jev 会先识别出几个关键维度场景是读多写少写入后缓存要失效。查询接口的响应数据量不大适合用本地缓存。一致性要求下单后必须能看到最新数据所以不能只用 TTL还要主动失效。范围只缓存订单查询接口不碰订单创建接口。这些信息会被 Jev 写进constraints字段Agent 拿到以后就不会写出“整个订单模块全缓存”的跑偏代码。4.2 任务拆解与方案排序不再一根筋识别完意图Jev 会生成候选方案并排序。同样是“订单查询接口加缓存”它会列出至少三套方案方案实现方式成本风险A方法级本地缓存 注解低侵入业务代码但见效快BRedis 缓存 手动失效中需要维护缓存键和失效逻辑C接入统一缓存中间件高适用大规模团队短期改动大排序的依据不是“哪个代码写得快”而是综合了改动范围、风险等级、未来可维护性。Jev 会在recommended_plan里给出推荐方案并写明理由。这个理由很重要Agent 后面如果遇到问题可以回溯到决策层重新选择而不是自己硬着头皮改。4.3 风险判断与回退拿主意也要能收得住“拿主意”不等于“什么都敢干”。Jev 会把任务里的高风险操作标记出来比如删除文件、迁移数据库、改动公共接口、修改鉴权逻辑。凡是风险等级为 high 的操作recommended_plan里都会有一个requires_confirmation字段。Agent 执行到这一步会停下来把风险输出给用户确认。我遇到过最典型的情况是让 Agent“优化一下数据库查询”它直接把一个公共的 DAO 方法签名改了结果所有调用方全部编译失败。装上 Jev 之后这类操作会被识别为高风险Agent 在动手前会问一句“改这个公共接口会影响 12 个调用方是否继续”这就把失控概率降下来了。4.4 与主模型的分工边界最后要强调分工。Jev 永远不直接写实现代码它只输出计划。写代码这件事严格交给 Claude Code 或 Codex 的主模型。这样分有几个好处。第一主模型的上下文窗口不被“该怎么做”的讨论占用全部留给“具体怎么实现”。第二Jev 的计划是独立存储的随时可以复盘出了问题能查到是哪一步决策导致的。第三主模型可以专注于自己最擅长的事情而不是一边规划一边写码结果两边都做不好。我自己试过把规划功能直接写进 Claude Code 的系统提示词里让它“先思考再回答”效果远不如独立跑 Jev。原因就是主模型没有专门针对规划做过优化你塞给它一种新的思维模式它反而会乱了节奏。5. 常见问题与排查技巧实录配置过程中一定会遇到问题。我把实际操作中踩过的坑整理成速查表按出现频率从高到低排。5.1 Jev 生效了但 Agent 不听这是最让人崩溃的情况Jev 已经输出了计划计划写得也没问题但 Agent 看完以后还是按自己的思路写代码。根本原因通常是规则文件里的指令力度不够。Claude Code 看到“建议参考”这种词默认当成可选项看到“必须”“禁止”“严格”这种词才会当成硬约束。解决方法是把规则改成不可协商的语气。在 Claude Code 的CLAUDE.md里可以写当收到任务时如果 Jev 计划存在你的所有文件修改必须落在 recommended_plan.affected_files 列表内。列表之外的文件一律禁止修改。如果还不管用再加一道保险用PreToolUse钩子拦截修改操作比对目标文件是否在计划列表里。不在列表里就让命令直接失败。这样就把规则从“建议”升级到了“物理强制”。5.2 Codex 报 endpoint 错误怎么办如果你在 Codex 里配了 Jev 的 model provider可能会看到类似cc switch local proxy failed while handling codex endpoint /responses的报错。这个报错看起来像是网络问题实际上很多时候是协议不匹配。Codex 新版默认走/responses端点而 Jev 本地服务默认暴露的是/v1/chat/completions。两边各说各话自然握手失败。解决办法是在 Jev 启动服务时指定 wire 格式jev serve --port 8477 --wire-format responses如果你用的 Jev 版本不支持这个参数更稳妥的做法是让 Codex 走本地脚本方式也就是上面写的jev_codex.py绕开 model provider 配置。5.3 响应太慢、Token 消耗翻倍装了 Jev 以后每次任务多一次模型调用Token 消耗上升是正常的。但如果你发现涨得离谱先查这几个地方第一确认~/.jev/config.json里cache是true。不开缓存的情况下每次一模一样的任务 Jev 都会重新规划纯属浪费。第二检查jev plan是不是带了--deep之类的深度规划参数。深度模式会生成更多候选方案只在复杂重构时开。第三看max_candidates设置。默认是 3如果你调成了 5每次多出两个方案的 Token 成本会很快累积。5.4 多模型切换后 Jev 失效Claude Code 支持切换不同的底层模型比如从 Sonnet 切到 Opus。每次切换以后你会发现 Jev 的输出没以前那么“听话”了。原因不是 Jev 出了问题而是不同主模型对于规则文件的理解力度不一样。解决方法是把 Jev 的规则文件独立出来在主配置里引用而不是每个模型各写一份。Claude Code 可以import公共规则文件Codex 的AGENTS.md也可以拆出子文件。总之别让规则跟模型绑定切换模型以后重新验证一次/jev流程即可。下面是几个典型问题的速查现象可能原因排查切入处理建议Agent 忽略 Jev 计划规则文件语气不够强查看 CLAUDE.md/AGENTS.md 措辞改成“必须”“禁止”句式Codex 报 /responses 错误Jev 服务协议不匹配查看 jev serve 启动参数加--wire-format responsesJev 经常超时决策模型响应慢查看~/.jev/logs/请求耗时调大 timeout或切换轻量模型同一个任务多次重复规划缓存未开启查看 config.json 中 cache 字段改为true切模型后 Jev 不生效规则文件绑定旧模型检查主配置引用路径独立公共规则文件6. 我自己用下来的几点体会调试 Jev 的那个晚上我反复遇到一个诡异的状况Jev 明明已经给出了正确决策Claude Code 却还是执行了第二套方案。后来查了半天才发现是 slash command 的规则只对交互式会话生效一旦任务被工具链里的其他 hook 接管规则就失效了。最后我把校验逻辑做成了一个独立脚本挂在PreToolUse钩子里强制比对本次要修改的文件是否在计划列表内问题才算根治。这件事给我的体会是Jev 这类决策层最大的价值不是让 Agent 变聪明而是让 Agent 不乱来。它把“做之前先想清楚”这个过程从依赖模型的随机涌现变成了可配置、可审计、可复用的规则。你会发现 Coding Agent 从“能写代码”变成了“知道为什么写这段代码”这个转变比多写几百行代码有价值得多。Jev 的决策层思路还能继续扩展比如把团队代码规范写成策略模板让 Agent 在规划阶段就自动避开团队禁止的写法或者把 Jev 接入 CI 机器人让它在代码评审阶段输出风险点。我自己目前比较推荐的做法是先在一个小项目里让 Jev 只做“方案选择”别放开执行权跑通机制以后再逐步把它接进 Claude Code 和 Codex 的主流程。别指望第一版就完美决策 profile 需要跟着你项目的实际规范反复调这才是它真正发挥价值的地方。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

DeepSeek+Cursor 配 TaoToken:AI 代码 CP 的 config.toml 骨架与验证动作 2026/9/26 20:06:53

DeepSeek+Cursor 配 TaoToken:AI 代码 CP 的 config.toml 骨架与验证动作

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

阅读更多 →
systemctl 服务管理完全指南:从 Unit 配置到 TaoToken 统一 Key 接入 2026/9/26 20:06:47

systemctl 服务管理完全指南:从 Unit 配置到 TaoToken 统一 Key 接入

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

阅读更多 →
自研CRM系统实战:从需求拆解到技术落地的完整指南 2026/9/26 20:06:47

自研CRM系统实战:从需求拆解到技术落地的完整指南

1. 项目从哪来:不养眼不实用的CRM,不如自己造一个先说说我为什么动手做 DeskcommCRM 这个东西。之前在好几家做企业服务的团队待过,销售团队每天的日常工作里,客户信息散落得令人抓狂——企业微信里聊过一轮的客户没有记录&#x…

阅读更多 →
昇腾Atlas 300V 24G推理加速卡部署YOLO全流程:从环境搭建到模型转换实战 2026/9/26 20:06:40

昇腾Atlas 300V 24G推理加速卡部署YOLO全流程:从环境搭建到模型转换实战

1. Atlas到底是个啥?300V 24G算不算运算加速卡1.1 从热度聊起:为什么突然这么多人搜Atlas最近手里接了个边缘侧的目标检测项目,要把YOLO模型从显卡上迁到一个功耗更低、价格更可控的硬件平台上。查了一圈资料,却发现相关教程质量参…

阅读更多 →
springboot甘肃特产服务平台50301-计算机课程设计、毕业设计 2026/9/26 20:06:34

springboot甘肃特产服务平台50301-计算机课程设计、毕业设计

前言 ✨ 博主介绍:一线全栈工程师,毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发,擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码,帮…

阅读更多 →
在 Android 应用中使用数据库:SQLite 配置与 TaoToken 接入实践 2026/9/26 20:06:21

在 Android 应用中使用数据库:SQLite 配置与 TaoToken 接入实践

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉