基于Claude Code的团队级AI Agent开发实录——01 CC开发框架
最近接到一个团队效能工具/AI Agent开发任务,主要功能是解析DBC后自动生成协议栈配置代码+通信信号解析代码……不要在意这个具体业务,只要知道它的即可。坦白地说,这个业务场景并非LLM应用的典型/最佳场景(因为这个业务本身通过简单的解析+计算+填空就能解决大半),但是领导想要体验一下AI,对我自己而言也会是一个尝试最近学习的新技能的机会,于是就有了这次实践。对于我们学习AI辅助开发/AI A
最近接到一个团队效能工具/AI Agent开发任务,主要功能是解析DBC后自动生成协议栈配置代码+通信信号解析代码……不要在意这个具体业务,只要知道它的最终输出是代码即可。坦白地说,这个业务场景并非LLM应用的典型/最佳场景(因为这个业务本身通过简单的解析+计算+填空就能解决大半),但是领导想要体验一下AI,对我自己而言也会是一个尝试最近学习的新技能的机会,于是就有了这次实践。对于我们学习AI辅助开发/AI Agent的朋友来说,可以忽略功能本身,更重要的是关注基于Claude Code的Agent搭建过程。
在本文撰写的时间点,项目尚未开始,也没有具体的业务需求,但这不妨碍我们先开始开发框架的搭建。本项目决定直接使用Claude Code作为base agent,不打算再自己使用LangGraph开发,所以不适合想要学习LangChain/LangGraph等应用开发框架的朋友。本文同样会在项目进程中顺便介绍一些Claude Code的基础知识,所以也适合Claude Code新手上路。
本项目可能还会涉及一些SDD(Spec-Driven-Development)的思想,对此感兴趣的朋友也可以参考GitHub官方项目Spec-kit (https://github.com/github/spec-kit)。
1 为何选择Claude Code
首先考虑的是,这个项目的根本目标就是“生成代码”。说实话,如果我自己使用LangGraph开发,在代码生成环节也是一样会调用Claude Code做Coding Agent。更重要的是,Claude Code本身具备Sub-Agent功能,所以想要通过Claude Code直接做一个multi-Agents system。
2 Claude Code接入智谱GLM模型
事实上想接入什么模型都可以,只不过GLM对国内玩家来说是性价比不错的选择。按照智谱官方提供的教程(https://docs.bigmodel.cn/cn/coding-plan/tool/claude)一步步操作即可。
操作完成后可以发现计算机本地的用户文件夹/.claude/settings.json(这也是Claude Code的用户配置文件)中有如下内容:
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "an_example_token_key",
"ANTHROPIC_BASE_URL": "https://open.bigmodel.cn/api/anthropic",
"API_TIMEOUT_MS": "3000000",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": 1
}
}
3 CC Agent应用开发框架配置
我为Claude Code开发框架配置了如下文件结构:
dbc2code/
├── .claude/ # 本项目的Claude Code配置
│ ├── agents/ # sub-Agents
│ ├── commands/ # 指令
│ ├── hooks/ # hooks
│ ├── skills/ # skills
│ └── settings.json # 本项目的Claude Code配置文件
├── specs/ # 功能规格说明
├── .gitignore/ # gitignore文件
├── CLAUDE.md/ # 项目操作手册
└── constitution.md/ # 项目宪法
以上文件是项目配置,这些配置只适用于此项目,是会被团队成员共享、是会上传到git上的。同样,如果在本地的用户文件夹/.cloude中配置的文件,则称为个人配置,适用于在此计算机账户上使用的所有项目,相当于全局配置。
加载顺序
当Claude Code启动后,首先会加载本地用户文件夹/.claude/settings.json(你的个人配置。还记得吗,我们之前配置Claude Code接入GLM模型,就是在这个文件中添加了内容),然后加载./.claude/settings.json(项目配置),后者会覆盖前者中的同名设置。然后它会加载本地用户文件夹/.claude/CLAUDE.md(你的个人操作手册,适用于所有项目),再加载项目操作手册./CLAUDE.md。
也就是说,你在使用Claude Code的时候以上内容已经被作为默认上下文加载,你无须再提及这些文件中的内容,相当于已经有了一个懂项目、团队规则的助手。
在此阶段我完成配置的是./CLAUDE.md, ./constitution.md, 和./.claude/settings.json三个文件,先大概写一个,等有了更详细的需求再更新。其它的后面遇到了再详细说。
3.1 项目操作手册:./CLAUDE.md
这个文件应该包含所有具体的指令,是./.claude/中的各种能力(我们尚未提及)的指挥者和“API文档”。
以下是这个项目的./CLAUDE.md文件(现在先随便写一个,后面会根据项目的进展持续更新):
# ==================================
# dbc2code 项目上下文总入口
# ==================================
# --- 核心原则导入 (最高优先级) ---
# 明确导入项目宪法,确保AI在思考任何问题前,都已加载核心原则。
@./constitution.md
# --- 核心使命与角色设定 ---
你是一个资深的嵌入式软件工程师,精通汽车CAN总线协议和代码生成技术。
你正在协助我开发一个名为 "dbc2code" 的AI Agent工具。
你的所有行动都必须严格遵守上面导入的项目宪法。
---
## 1. 项目概述
**dbc2code** 是一个AI Agent(或Multi-Agent系统),用于:
1. 解析DBC文件(CAN数据库文件)
2. 自动生成协议栈配置代码
3. 自动生成通信信号解析/打包代码
4. 输出符合嵌入式规范的C语言代码
---
## 2. 技术栈与环境
- **Agent开发语言**: Python (版本 >= 3.10)
- **生成目标语言**: C语言 (符合MISRA-C或AUTOSAR规范)
- **DBC解析**: 使用 `cantools` 或自研解析器
- **代码生成**: 使用 Jinja2 模板引擎
- **构建与测试**:
- 使用 `Makefile` 或 `pyproject.toml` 进行标准化操作
- 运行所有测试: `pytest` 或 `make test`
- 代码格式化: `ruff format` / `black`
- 代码检查: `ruff check` / `mypy`
---
## 3. Git与版本控制
- **Commit Message规范**: 严格遵循 Conventional Commits 规范。
- 格式: `<type>(<scope>): <subject>`
- 示例: `feat(parser): add support for multiplexed signals`
- 当被要求生成commit message时,必须遵循此格式。
---
## 4. AI协作指令
- **当被要求添加新功能时**: 先阅读`specs/`下的相关规格文档和`src/`下的相关模块,对照项目宪法,再提出计划。
- **当被要求编写测试时**: 优先使用 `pytest` 编写参数化测试(Parameterized Tests)。
- **当被要求生成C代码模板时**: 必须考虑嵌入式环境的内存限制和MISRA-C规范。
- **当处理DBC相关问题时**: 需理解CAN协议基础知识(信号、消息、节点、位布局等)。
3.2 项目宪法:./constitution.md
这个文件定义了所有在开发中需要遵守的“铁律”。值得注意的是,./constitution.md并不会被Claude Code直接加载,在需要它的时候需要使用@符号提及。@符号是Claude Code中约定用来提及文件作为上下文的符号,既可在如./CLAUDE.md的文档中使用,也可直接在提示词中使用,是非常常用的内置指令。例如,在./CLAUDE.md中的第7行就明确写了@./constitution.md,也可以在提示词中直接写“请按照@./constitution.md中约定的规则为我开发XX功能”。
以下是我这个项目的./constitution.md文档,可以着重注意它与./CLAUDE.md内容的区别(没看到案例前可能对二者区别感到困惑,看到案例后一目了然):
# dbc2code 项目开发宪法
# Version: 1.0
本文件定义了本项目不可动摇的核心开发原则。所有AI Agent在进行技术规划和代码实现时,必须无条件遵循。
---
## 第一条:简单性原则 (Simplicity First)
**核心:** 遵循Python的"明确优于隐晦"哲学。绝不进行不必要的抽象,绝不引入非必需的依赖。
- **1.1 (YAGNI):** 只实现`specs/`中明确要求的功能。
- **1.2 (标准库优先):** 必须优先使用Python标准库,仅在必要时引入第三方库。
- **1.3 (反过度工程):** 简单的函数和数据类优于复杂的类继承体系。
---
## 第二条:测试先行铁律 (Test-First Imperative) - 不可协商
**核心:** 所有新功能或Bug修复,都必须从编写一个(或多个)失败的测试开始。
- **2.1 (TDD循环):** 严格遵循"Red-Green-Refactor"循环。
- **2.2 (参数化测试):** 单元测试必须优先采用 `pytest.mark.parametrize` 的参数化测试风格。
- **2.3 (真实数据优先):** 优先使用真实的DBC文件片段作为测试数据,而非过度Mock。
---
## 第三条:生成代码质量原则 (Generated Code Quality)
**核心:** 生成的C代码是最终交付物,必须符合嵌入式软件的高标准。
- **3.1 (可读性):** 生成的C代码必须格式规范、注释清晰,便于人工审查。
- **3.2 (安全性):** 生成的代码必须考虑边界检查、类型安全,避免缓冲区溢出等问题。
- **3.3 (可配置性):** 代码模板应支持不同MCU平台和编译器的配置选项。
---
## 第四条:明确性原则 (Clarity and Explicitness)
**核心:** 代码的首要目的是让人类易于理解。
- **4.1 (类型标注):** Python代码必须使用类型标注(Type Hints),便于静态分析。
- **4.2 (异常处理):** 所有异常都必须被显式捕获和处理,提供有意义的错误信息。
- **4.3 (无全局状态):** 绝不允许使用全局变量传递状态,所有依赖必须通过参数显式注入。
---
## 第五条:领域知识原则 (Domain Knowledge)
**核心:** 正确理解汽车通信协议是本项目成功的基础。
- **5.1 (DBC规范):** 必须正确理解DBC文件格式、信号编码(Intel/Motorola字节序)、缩放因子等概念。
- **5.2 (CAN协议):** 生成的代码必须符合CAN 2.0/CAN FD协议规范。
- **5.3 (嵌入式约束):** 时刻考虑目标平台的资源限制(RAM、ROM、CPU周期)。
---
## 治理 (Governance)
本宪法具有最高优先级,其效力高于任何`CLAUDE.md`或单次会话中的指令。
3.3 项目配置文件:./.claude/settings.json
目前我只在配置文件中添加了权限配置(permissions)。Claude Code的权限规则是这样的:
当要执行一个动作指令(比如读写文件),先看deny的内容,如果属于deny,则无权限,拒绝执行;剩下的再看allow中的内容,如果指令存在于allow中,则经用户批准后就可以执行;如果不存在于allow中,则再看ask的内容,如果存在于ask中,则询问用户是否执行,经批准后执行,如果不存在,则按照当前权限模式的默认行为处理。
具体配置方法如下(包你一看就懂):
{
"permissions": {
"defaultMode": "plan",
"allow": [
"Read(*.py)",
"Read(*.c)",
"Read(*.h)",
"Read(*.dbc)",
"Read(*.j2)",
"Read(*.jinja2)",
"Read(pyproject.toml)",
"Read(requirements.txt)",
"Read(Makefile)",
"Read(README.md)",
"Read(constitution.md)",
"Read(specs/**)",
"Read(examples/**)",
"Grep",
"Glob",
"LS",
"Bash(python:--version)",
"Bash(python:-m:pytest:*)",
"Bash(pytest:*)",
"Bash(ruff:check:*)",
"Bash(ruff:format:*)",
"Bash(mypy:*)",
"Bash(black:--check:*)"
],
"ask": [
"Write",
"Edit",
"MultiEdit",
"Bash(pip:install:*)",
"Bash(uv:add:*)",
"Bash(git:add:*)",
"Bash(git:commit:*)"
],
"deny": [
"Read(./.env*)",
"Read(*.pem)",
"Read(*.key)",
"Bash(rm:*)",
"Bash(git:push:*)",
"WebFetch"
]
}
}
3.4 检查配置
在终端中导航到项目目录下,输入指令claude启动Claude Code,输入指令(slash command)/memory就可以看到我们上面配置过的这些上下文文件了。
下一章将会开始Agent具体功能和架构的规划。
(最近用多了AI生成文档,好久没有独立写内容了。还是自己打字输出的这种感觉畅爽!)
更多推荐


所有评论(0)