背景

参考前面一篇博客,

Vibe Coding方案兜底准备1

主要是过了一遍如何安装claude code(windows+linux客户端),然后用CC-switch部署了一下,接入了两个方案,

一个是我内部的阉割model方案(原本是用于养龙虾的),另外一个就是正常的大家国内购买模型方案的coding plan,演示均正常pass,这篇博客就是对前面内容的一点补充。

Claude code补充

1,模型映射补充

之前用的是字节的coding plan,稍微选了几个模型设置一下

2,coding+agent 实战例子测试

碰巧我的copilot有限额了,所以我就用1个小项目测试了一下效果

code编辑(版本控制效果)挺不错的,当然我如果一次性修改多个文件我还是在viewer中打开比较好。

Agent模式也差不多,体验其实和copilot基本上无缝衔接

然后细节部分可以ctrl+o展开查看训练日志

当然,改小部分代码查看改动部分还是直接在终端中可视化效果比较好,

模拟数据的训练结果:


效果上glm4.7的agent+coding体验,基本上和我用国外模型还是差不了多少的。

然后就是复杂文本生成、整理任务,查看一下这方面的能力

因为终端输出的内容太多了,所以我直接copy在下面,可以看到基本上总结能力是够用的了


❯ 好,请对本次改动进行详细的总结,做了什么改动,并输出对话内容                                                                                                              
                                                              
● 本次改动总结                                                                                                                                                              
                                                                                                                                                                            
  一、项目结构探索                                                                                                                                                          
                                                                                                                                                                            
  探索的文件和目录:                                                                                                                                                        
  - src/model/ - 模型脚本目录                                                                                                                                               
    - train.py - 训练入口脚本                                                                                                                                               
    - configs/ - 配置文件目录
        - train.yaml - 顶层配置                                                                                                                                             
      - data/xxxxxxxx_event.yaml - 数据配置                                                                                                                                 
      - model/hybrid_multichain.yaml - 模型配置                                                                                                                             
      - task/contact_task.yaml - 任务配置                                                                                                                                   
      - trainer/default.yaml - 训练器配置                                                                                                                                   
    - tasks/contact_task.py - Contact 任务模块                                                                                                                              
    - models/ - 模型实现                                                                                                                                                    
    - data/event_datamodule.py - 数据加载模块                                                                                                                               
  - src/dataset/ - 数据集构建脚本                                                                                                                                           
    - 2_xxx.py                                                                                                                                                
    - 3_xxx.py                                                                                                                                                  
    - 4_xxx.py                                                                                                                                                  
  - data/processed/ - 处理后的数据                                                                                                                                          
    - 发现实际数据在 dryrun_graph_cpucheck2/script_4_event/ 下                                                                                                              
                                                                                                                                                                            
  二、核心修改                                                                                                                                                              
                                                                                                                                                                            
  修改 1:更新数据配置路径                                                                                                                                                  
                                                                                                                                                                            
  文件: /data2/xxx/src/model/configs/data/xxx_event.yaml                                                                                                         
                  
  修改前:                                                                                                                                                                  
  train_csv: /data2/xxx/data/processed/script_4/train.csv
  val_csv: /data2/xxx/data/processed/script_4/val.csv                                                                                                                  
  test_csv: /data2/xxx/data/processed/script_4/test.csv                                                                                                                
                                                                                                                                                                            
  修改后:                                                                                                                                                                  
  train_csv: /data2/xxx/data/processed/dryrun_graph_cpucheck2/script_4_event/train.csv                                                                                 
  val_csv: /data2/xxx/data/processed/dryrun_graph_cpucheck2/script_4_event/val.csv                                                                                     
  test_csv: /data2/xxx/data/processed/dryrun_graph_cpucheck2/script_4_event/test.csv                                                                                   
                                                                                                                                                                            
  修改 2:修复 PyTorch 2.6 weights_only 兼容性问题                                                                                                                          
                                                                                                                                                                            
  文件: /data2/xxx/src/model/train.py                                                                                                                                 
                                                                                                                                                                            
  函数: _resolve_test_ckpt_path                                                                                                                                            
                  
  修改前:                                                                                                                                                                  
  def _resolve_test_ckpt_path(cfg: DictConfig, trainer: Any) -> Any:
      """中文说明: 解析 test 阶段 checkpoint 策略,优先 best,不可用则回退当前权重。"""                                                                                     
                                                                                                                                                                            
      train_cfg = cfg.get("train")                                                                                                                                          
      if train_cfg is None or not bool(train_cfg.get("test_after_training", True)):                                                                                         
          return None                                                                                                                                                       
                                                                                                                                                                            
      ckpt_callback = getattr(trainer, "checkpoint_callback", None)
      best_model_path = getattr(ckpt_callback, "best_model_path", "") if ckpt_callback is not None else ""                                                                  
      if best_model_path:                                                                                 
          return "best"                                                                                                                                                     
                                                                                                                                                                            
      # 若指定了 fit ckpt,则允许 test 复用该 ckpt;否则使用当前权重。                                                                                                      
      explicit_ckpt = train_cfg.get("ckpt_path")                                                                                                                            
      if explicit_ckpt:                         
          return explicit_ckpt                                                                                                                                              
                                                                                                                                                                            
      return None                                                                                                                                                           
                                                                                                                                                                            
  修改后:        
  def _resolve_test_ckpt_path(cfg: DictConfig, trainer: Any) -> Any:                                                                                                        
      """中文说明: 解析 test 阶段 checkpoint 策略,优先 best,不可用则回退当前权重。                                                                                        
                                                                                                                                                                            
      注意:PyTorch 2.6 默认 weights_only=True,导致无法加载包含 partial 的 checkpoint。                                                                                    
      为避免此问题,目前策略为:                                                                                                                                            
      - 若显式指定 fit 阶段的 ckpt_path,则允许 test 复用                                                                                                                   
      - 否则直接返回 None,使用当前权重                                                                                                                                     
      """                                                                                                                                                                   
                                                                                                                                                                            
      train_cfg = cfg.get("train")                                                                                                                                          
      if train_cfg is None or not bool(train_cfg.get("test_after_training", True)):                                                                                         
          return None                                                              
                                                                                                                                                                            
      # 若指定了 fit ckpt,则允许 test 复用该 ckpt(用户已知风险)                                                                                                          
      explicit_ckpt = train_cfg.get("ckpt_path")                                                                                                                            
      if explicit_ckpt:                                                                                                                                                     
          return explicit_ckpt                                                                                                                                              
                                                                                                                                                                            
      # PyTorch 2.6 weights_only=True 导致无法加载包含 partial 的 checkpoint                                                                                                
      # 为安全起见,默认返回 None,使用当前权重执行测试                                                                                                                     
      print("[train] 为避免 PyTorch 2.6 weights_only 兼容问题,使用当前权重执行 test。")
      return None                                                                                                                                                           
                                                                                                                                                                            
  三、依赖安装                                                                                                                                                              
                                                                                                                                                                            
  安装命令:                                                                                                                                                                
  pip install fair-esm                                                                                                                                                      
                      
  原因: 模型配置中使用了 esm2_t12_35M_UR50D 预训练模型,需要 fair-esm 包                                                                                                   
                                                                                                                                                                            
  四、验证测试                                                                                                                                                              
                                                                                                                                                                            
  验证命令:                                                                                                                                                                
  python src/model/train.py trainer.accelerator=cpu trainer.devices=1 trainer.max_epochs=1 trainer.num_sanity_val_steps=0 data.batch_size=1 model.plm_trainable=false
                                                                                                                                                                            
  验证结果:                                                                                                                                                                
  模型参数:39.2M (5.7M 可训练)
                                                                                                                                                                            
  训练阶段 (trainer.fit):                                                                                                                                                   
  - val/loss: 0.380, val/inter_f1: 0.028, val/self_f1: 0.319                                                                                                                
  - train/loss: 0.364, train/inter_f1: 0.001, train/self_f1: 0.636                                                                                                          
                                                                                                                                                                            
  测试阶段:                                                                                                                                                                 
  - test/loss: 0.383                                                                                                                                                        
  - test/inter_f1: 0.002                                                                                                                                                    
  - test/self_f1: 0.086                                                                                                                                                     
                                                                                                                                                                            
  五、关键问题解决                                                                                                                                                          
                                                                                                                                                                            
  问题 1:数据路径不存在                                                                                                                                                    
  - 原配置指向 /data2/xxx/data/processed/script_4/                                                                                                                     
  - 实际数据在 /data2/xxx/data/processed/dryrun_graph_cpucheck2/script_4_event/                                                                                        
  - 修改配置文件路径解决                                                            
                                                                                                                                                                            
  问题 2:缺少 fair-esm 包                                                                                                                                                  
  - 训练时报错:ImportError: 未安装 fair-esm                                                                                                                                
  - 安装 fair-esm 包解决                                                                                                                                                    
                                                                                                                                                                            
  问题 3:PyTorch 2.6 weights_only 兼容性                                                                                                                                   
  - PyTorch 2.6 默认 weights_only=True                                                                                                                                      
  - checkpoint 包含 functools.partial 无法加载                                                                                                                              
  - 修改 _resolve_test_ckpt_path 函数,默认使用当前权重而非加载 checkpoint                                                                                                  
                                                                                                                                                                            
✻ Worked for 54s                                                                                                                                                            
                                               

然后1个好习惯就是每次对话完都export输出聊天内容

3,CC 常见操作命令补充

1,切换对话

/resume	恢复之前的会话	多任务并行时切换

不同对话窗口执行不同任务session,我们需要频繁切换到我们上一次、或某次我们展开的对话。

一个好习惯就是每次对话退出的时候,给当前会话起一个好名字,或者进入对话的时候就起个好名字,这样等之后回来的时候就可以接着这个session继续进行会话,

在这里插入图片描述
这其实就解决了我前面博客中提到过copilot的对话聊天历史不能够跨设备迁移的问题(因为插件的内容是存储在本地的),但是我claude code是安装在远程主机上,所以我可以轻松在任何远程ssh的设备上继续访问并接着我之前的对话,然后无缝衔接继续开发。

# 场景:对话已经持续了1小时,Claude开始遗忘前面的决策
/context          # 先看当前上下文用量,如果超过80%就压缩
/compact retain the authentication patterns and API design decisions
# 压缩后保留认证模式和API设计的关键信息,丢弃冗余对话

# 场景:完成一个功能后,要开始全新的任务
/clear           # 硬重置,从零开始

2,git操作

3,记忆与配置管理

比如说前面的对话,用了两个模型,前后1h内,

4,其他补充

下面这行命令,主要是开发的时候使用,不然点各种allow会点到你怀疑人生

claude --dangerously-skip-permissions

然后我们启动的时候,因为上下文设计,为了让他有约束,更加的专注,所以我们是需要对着一个文件夹进行启动的,而不是直接在根目录启动Claude Code。

简单来说就是cd进哪一个目录,然后再claude。

它默认就只在这个文件夹下工作,默认读取你这个文件夹下的所有文件。

这样其实上下文污染更小,也更专注,换句话说,就是更聪明。

另外还有1个CLAUDE.md的问题,

两层,就是全局CLAUDE.md和项目CLAUDE.md

全局CLAUDE.md,放在用户总目录的Claude Code根目录下面,~/.claude/CLAUDE.md

参考:https://mp.weixin.qq.com/s/AA2NHww4jUBuAfi10EYICw

下面是公众号“数字生命卡兹克”所有权的1个全局claude.md文件设置

## 关于我
[你的名字 / 身份 / 职业背景,非程序员的话一定要写出来]。
我用 Claude Code 做 [具体用途 1][具体用途 2]## 思维原则
所有决策从问题本质出发,不因「惯例如此」照搬。
回到问题本身:要解决什么?最直接的路径是什么?从零设计会怎么做?
不要谄媚。不要夸我的想法好、不要说「这是个很好的问题」、不要开头加「当然可以」。
给我真实判断,方案有问题直接指出来。发现更好的做法直接说,不用等我问。

## 约束先行
无论开发项目还是知识管理项目,第一步永远是建规则:新项目先写 CLAUDE.md,新目录先定结构约定(什么放哪、怎么命名、何时清理)。
没有规范的工作空间不动手。已有规范的项目,严格遵守其 CLAUDE.md 中的约定。需要调整规范时先改文档、再改实践,不要反过来。

## 沟通方式
- 默认中文,代码、命令、变量名用英文
- 结论先行,再给理由,不要先铺垫背景
- 遇到模糊需求,先给最合理的方案,再问要不要调整
- 不要问「你确定要这样吗」,除非命中下方红线

## 自主边界(红线,必须先问我)
以下操作即使在 auto-accept 模式下也必须停下来问我:
- 删除文件、目录或 git 历史
- 修改 .env、密钥、token、CI/CD 配置
- 数据库 schema 变更或数据迁移
- git push、git rebase、git reset --hard、强制推送
- 安装新的全局依赖或修改系统配置
- 公开发布(npm publish、部署到生产、发文章等)

## 通用工程纪律
- 改完主动跑验证(具体命令见各项目 CLAUDE.md),不要只改不验
- 不要为了让代码跑起来注释掉报错或加绕过标记,找根本原因
- 密钥、token、密码不进代码、不进 commit、不进日志
- 大改动前先在 Plan Mode 出方案,我确认后再动手

而这个文件其实也完全不用你自己写,你就直接打开那个文件夹,然后和Claude Code聊就行,
你直接把你的需求,和你在意的事情,和他探讨,让他给你写一份就OK了。

Copilot退潮之后,还剩下什么?

依旧是对上一篇博客的补充,

国外模型+中转站

国内模型+CLI tools

目前我用的是claude code+国内厂商的coding plan。

护城河?

目前主要使用形式就是 Vscode GUI + copilot插件(国外模型) + claude code终端(国内模型),

当然,有国内模型api,也可以接入vscode的一些AI插件中。

这里就暂列几个

至于剩下的,

  • 网页端的国外御三家:免费用户使用(gemini有谷歌账号,chatgpt同)
  • 网页端的国内模型:deepseek,kimi,glm等

参数比较小的模型可以自己部署,参考mnn chat

参考:https://github.com/alibaba/MNN/blob/master/apps/Android/MnnLlmChat/README_CN.md

下载参考:https://github.com/alibaba/MNN/blob/master/apps/Android/MnnLlmChat/README_CN.md#releases

可以做到在手机上就部署1个小模型,

总的来说,模型终归是哪里都能找到1个交替方案的

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐