2026-01-09 15:00:00
做一个有温度和有干货的技术分享作者 —— Qborfy
CodeBuddy 是腾讯面向开发者的基于 AI 大模型,提供代码生成补全、技术问答、智能代码评审、单测生成等能力,结合 Spec Kit(规范套件) 与 AI 能力,旨在通过“规范驱动+智能辅助”的模式,帮助团队统一代码风格、规避常见错误、提升开发效率。本指南将详细介绍从环境准备到日常开发的全流程操作,涵盖规范定义、AI 辅助编码、自动化检查与修复等核心场景。
传统开发 vs Spec-Driven 开发
很多开发者开始一个项目时是这样的流程:
💭 “嗯,我想要一个标签管理工具…”
💻 “开始写代码吧,边写边想”
🤖 “AI,帮我生成一个 React 组件…”
🐛 “等等,这个需求没想清楚啊”
🔄 “改需求、改代码、来回折腾…”
😫 “代码越来越乱,难以维护”
Spec-Driven 开发 的思路则完全不同:
💭 “我的问题是什么?我想要的真实需求是什么?”
📝 “写一份清晰的 Spec(规格书),定义问题的边界”
🤖 “基于 Spec,让 AI 精准理解需求并生成代码”
✅ “代码与 Spec 完全对齐,清晰可维护”
Spec(规格) 简单来说,就是在开始编码前,用结构化的文档明确定义:
一个好的 Spec 应该包含:
| 步骤 | 作用 | 例子 |
|---|---|---|
| User Story | 定义用户需求 | “用户点击图标,能看到所有打开的标签页” |
| Acceptance Criteria | 清晰的验收条件 | “Given 打开 10 个标签,When 点击图标,Then 显示完整列表” |
| Data Model | 定义数据结构 | Tab、TabGroup、Summary 三个核心实体 |
| Functional Requirements | 功能需求列表 | FR-001: 系统必须检测所有打开的标签页 |
| Edge Cases | 边界情况处理 | “如果没有标签页,显示友好提示” |
| Success Criteria | 可测量的成功指标 | “渲染时间 <200ms,支持 100+ 标签” |
参考例子说明
❌ 没有 Spec,你可能这样 Prompt
1 |
"给我写个 Chrome 扩展,能管理标签页,要好看" |
✅ 有 Spec,你可以这样 Prompt:
Nodejs 版本 nvm 安装操作命令:
1 |
Mac | Linux安装命令 |
Python 版本管理器 uv 安装操作命令
1 |
On macOS and Linux. |
官方文档:https://www.codebuddy.ai/cli codebuddy 外网版(内网版有点问题,推荐使用外网版)
通过 npm 全局安装(推荐):
1 |
npm install -g @tencent-ai/codebuddy-code |
spec 官方 github: https://github.com/github/spec-kit
1 |
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git |

CODEBUDDY.md 放在长期记忆的开头,项目特有的在后边追加(项目/CODEBUDDY.md)
如果同时在用 Codebuddy IDE 则 CODEBUDDY.md 可以放在自己的项目 rules 中,共享 CodebuddyCode 的长期记忆(.codebuddy/.rules)。
具体内容如下:
1 |
# 指令集(Instructions) |
进入你的项目根目录,运行初始化命令:
1 |
cd /path/to/your-project |
第一次运行可能会出现错误:

解决方案就是前往 Github 申请令牌:
https://github.com/settings/personal-access-tokens
1 |
Mac | Linux进行导入配置变量,其中/root/.bashrc 为 Linux 系统本机的变量位置,如在 Mac 安装,默认地址为 ~/\.zshrc 或 ~/\.bashrc |
1 |
specify init . --ai codebuddy --github-token=<KEY> |
完成初始化后,会在项目根目录生成 .specify和.codebuddy目录,具体如下:
1 |
.codebuddy/ |

| 阶段 | 命令 | 目的 |
|---|---|---|
| 1 | /speckit.constitution |
定义项目的开发宪章(指导原则) |
| 2 | /speckit.specify |
编写初始功能规格文档 |
| 3 | /speckit.checklist |
验证规格质量是否达到“可交付”标准 |
| 4 | /speckit.clarify |
根据 checklist 结果进行需求澄清 |
| 5 | /speckit.plan |
进入实现规划,写技术方案 |
| 6 | /speckit.tasks |
基于 Spec 拆解技术方案为一个个可实现的任务点,方便 AI 执行 |
| 7 | /speckit.analyze |
确认任务的可实现和检查风险点 |
| 8 | /speckit.implement |
根据 constitution + spec + tasks 去实现代码输出 |
以上步骤可以多次执行,如:
/speckit.constitution 可以针对项目,多次调整定义开发规范。/speckit.specify 针对需求我们可以多次调整,直到生成的 spec.md 符合我们需求。/speckit.plan 可以查看生成 plan.md 调整生成技术实现方案。
宪章是项目的架构原则和约束的集合。它在整个开发过程中起到”守门员”的作用,确保所有设计决策都符合核心原则。
操作步骤
启动 codebuddy ,输入/speckit.constitution 这是一个xxx项目,主要使用技术栈为xxx ,具体如下图:

不同技术栈生成项目宪章是不一样,但主要包含以下内容:
需求设计与澄清解决最大的问题:在开发设计前消除歧义与认知偏差,避免“带猜测”进入
/plan导致返工。
需求设计工作过程:
/speckit.specify 需要实现一个xxx内容 , 需求内容越仔细,AI 对此的疑问就越少。参考例子:
下面实际操作,具体如下图:

这里需求澄清 ≈ 需求评审,如果没有需求澄清那么开发流程如下:
1 |
❌ 开发者猜测 → 实现 A 版本 |
1 |
1 ❌ 开发者猜测 → 实现 A 版本 |
如果有需求澄清,那么就会这样子:
1 |
1 ✅ 结构化提问 → 明确所有歧义点 |
举例子说明:
输入模糊需求:”我需要新增一个页面去展示 tko 特有的域名列表”

Speckit 自动识别模糊点,并生成结构化的澄清问题。你逐一回答这些问题。

经过需求设计与澄清,我们就得到了一个清晰的需求文档,大概如下:
1 |
# Feature Specification: TKO域名列表展示页面 |
这里会把需求澄清中所有内容都记录起来,如果你需要需求澄清过程越短,那么你在描述需求的时候,需求内容越清晰越好。
这一步主要把需求澄清好的内容拆分一个完整可以实现的技术方案,类似:从产品思维向工程思维的转换。
这一步会生成多个文件,具体说明如下:
1 |
specs/001-tko-domain-list-page/ |
具体可以看其产出内容specs/001-tko-domain-list-page/plan.md:
1 |
# Implementation Plan: TKO域名列表展示页面 |
这一步会根据前面的设计和规划,生成详细的开发任务清单,帮助团队高效地推进项目实施。
这一步其实也是开发中必不可少的部分,就是把技术方案拆成一个个可以真正实现的子任务。
因为从一个几百甚至上千行行的技术方案,如果没有一个可以真正实现的任务列表,AI 大模型陷入实现混乱。
具体可以看其产出内容tasks/001-tko-domain-list-page/tasks.md:
1 |
...... |
!!!注意: 这一步请仔细查看每个生成的步骤内容是否符合要求,如果不符合,请重新调整规划和技术方案。
这一步是验证任务清单是否符合预期,是否可以实现。是可选步骤,如果不是必须的,可以跳过。
如果没有指定生成检查案例方向,会提出相关问答确定测试案例方向,最终会按照你的要求去生成测试案例。
最终会生成一个检查清单,具体可以看其产出内容tasks/001-tko-domain-list-page/checklist/implementation-readiness.md
1 |
# 实施准备度检查清单: TKO域名列表展示页面 |
在开始编码前,需要对整个方案进行全面的合规性检查:
✅ 所有用户故事都有对应的任务吗?
✅ 数据模型覆盖了所有需求吗?
✅ 宪章的所有原则都被满足了吗?
✅ 有遗漏的边界情况处理吗?
✅ 技术方案有风险点吗?
这个步骤主要让 AI 大模型去分析 上述生成 task 任务是否真正可以实现,有没有什么风险点?如下图所示:

在真正执行之前,需要保证项目是可运行的,如:
前端项目:npm run dev 没有问题
后端项目:运行没有问题。
然后开始执行,等待 AI 自动编写代码,具体如下图所示:

以上就是基于spec-kitSDD 编程开发的全流程,具体可以参考spec-kit。
| 场景类型 | 推荐流程 | 是否生成 spec.md | 是否生成 plan.md | 是否生成 tasks.md | 是否生成 checklist.md | 是否生成 analyze.md | 是否生成 implement.md |
|---|---|---|---|---|---|---|---|
| 常规需求 | Specify → Plan → Tasks → Analyze →Implement | 是 | 是 | 是 | 是 | 是 | 是 |
| 复杂 bug(跨模块) | Clarify → Plan → Tasks → Implement | 是 | 是 | 是 | 否(可引用旧 spec) | 否 | 是 |
| 小 bug(微逻辑、UI、配置) | Plan → Tasks → Implement | 否 | 否 | 否 | 否 | 否 | 是 |
| 配置错误 / 更新脚本 | Tasks → Implement | 否 | 否 | 否 | 否 | 否 | 是 |
经过上面的介绍,相信你已经对 SDD 有了一定的了解,下面我们来评估一下 Spec-Kit SDD 的优缺点。
2026-01-07 12:00:00
做一个有温度和有干货的技术分享作者 —— Qborfy
今天我们来学习 Agent Skill
Agent Skill 是一个可复用的知识包,它是 Anthropic 在 Claude 在内部使用的规范,由于其具备实用性,因此扩展成大部分 AI 代码 Agent 通用标准,它主要是基于文件系统的可重用资源,为 Claude 提供特定领域的专业知识:工作流程、上下文和最佳实践,可将通用代理转变为专家。与提示词(针对一次性任务的对话级指令)不同的地方是 Skill 按需加载模式,无需在多个对话中重复提供相同的指导。当 AI Agent 识别到你的任务与某个 Skill 描述相匹配时,它会自动按需加载并运用该 Skill 中的知识来帮助你,而无需你每次都重新解释整个工作流程。
通俗来讲,Skill 就像为 Agent 准备的一份份专门的“工作说明书”或“操作手册”。例如,你可以创建一个“代码审查”Skill,里面写明了团队审查代码的标准流程、注意事项和常用话术。之后,你只需对 AI Agent 说“请审查这段代码”,它就会自动调用这份说明书,像一位受过专门训练的专家一样为你服务。

核心价值:它将重复性的、复杂的工作流程(如代码审查、文档生成、数据清洗)标准化和自动化,让 AI Agent 从“通才”变成处理特定任务的“专家”,确保输出结果每次都高质量、一致。
1 |
my-skill/ |
SKILL.md: 基础描述,里面有包含:官方解析流程图
用一个“审查这段代码“的例子来解释 Skill 运行流程:

图解说明:
Claude 官方给出建议,好的 Skill 描述应简洁明了、结构清晰,并经过实际应用测试,主要由以下几点原则:
这是一个非常实用的场景,可以为团队建立统一的代码质量标准。
技能目标:当 AI Agent 接收到“请审查此代码”的指令时,自动激活并执行一套预设的审查清单。
Skill 实现要点:
SKILL.md的描述:1 |
|
1 |
#!/usr/bin/env python3 |
最终文件目录如下:
1 |
code-review-helper/ |
最终把文件放入对应 AI Agent 的 Skill 目录下即可。
把复杂的逻辑拆分一个个步骤工作流,参考如下:
1 |
## PDF表单填写流程 |
结合反馈循环从而提升输出质量:运行验证器 → 修复错误 → 重复,具体如下:
1 |
## 内容审查流程 |
SKILL.md文件顶部 YAML Frontmatter 中的description字段。描述必须清晰地说明“做什么”和“何时触发”。~/.claude/skills/):对所有项目有效,适合通用工具(如通用文件处理)。./.claude/skills/):仅针对当前项目,可纳入 Git 管理,适合团队规范(如项目特定的组件生成)。在 Anthropic 官方解释中,MCP 是连接大模型与世界的桥梁,而 Agent Skill 是大模型操作的世界的手。
2025-12-31 15:00:00
做一个有温度和有干货的技术分享作者 —— Qborfy
本文参考 roadmap.sh AI Engineer(AI应用开发工程师)RoadMap整理,如有侵权,请联系删除。
学习一门技能最重要的是目标和路线:






2025-12-18 17:45:08
做一个有温度和有干货的技术分享作者 —— Qborfy
今天我们来学习 Claude-Code 中的 Skill 技能
Claude Code 中的 Skill 是一个可复用的知识包,它将特定的操作指南、代码示例和最佳实践打包成一个模块。当 Claude 识别到你的任务与某个 Skill 描述相匹配时,它会自动按需加载并运用该 Skill 中的知识来帮助你,而无需你每次都重新解释整个工作流程。
通俗来讲,Skill 就像为 Claude Code 准备的一份份专门的“工作说明书”或“操作手册”。例如,你可以创建一个“代码审查”Skill,里面写明了团队审查代码的标准流程、注意事项和常用话术。之后,你只需对 Claude Code 说“请审查这段代码”,它就会自动调用这份说明书,像一位受过专门训练的专家一样为你服务。

2025-12-17 12:00:00
做一个有温度和有干货的技术分享作者 —— Qborfy
今天我们来学习 模型上下文协议(MCP)
MCP(Model Context Protocol,模型上下文协议) 是由 Anthropic 公司推出的开源协议,旨在为大型语言模型与外部数据源、工具之间建立安全、标准化、双向的连接通道。
通俗地说,MCP 如同 AI 世界的“USB-C 接口”。它定义了一套通用标准,使得任何支持 MCP 的 AI 应用(如 Claude Desktop、Cursor IDE)都能通过统一的“插口”,即插即用地连接各种外部工具(如数据库、API、本地文件),而无需为每个工具单独开发适配器。其核心价值在于解决了 AI 应用与外部资源交互时的碎片化集成问题,实现了生态的标准化和去中心化。

MCP 遵循经典的客户端-服务器架构,其核心组件与协作流程如下图所示,清晰地展示了数据如何在不同部分间流转。

核心组件解析:
使用 Python 创建 MCP 服务器的简明示例,该服务器提供一个获取网页标题的工具。
1 |
from fastmcp import FastMCP |
使用 Python 创建 MCP 客户端的简明示例,调用上面创建的 MCP
服务器的 get_webpage_title 工具。
1 |
import asyncio |
使用 OpenAI Python SDK 创建 MCP 客户端的简明示例,调用 MCP 服务器的 greet 工具。
1 |
from openai import OpenAI |
我们在大模型中调用 MCP 服务正常步骤如下:
github.com/modelcontextprotocol/servers(官方示例)和 cursor.directory(社区目录),这里有从文件系统、数据库到各类云服务的丰富工具。2025-12-16 12:00:00
做一个有温度和有干货的技术分享作者 —— Qborfy
今天我们来学习 AI 函数调用 Function Calling
一句话核心: Function Calling(函数调用)是大模型在对话过程中,根据用户需求调用外部函数或工具的一种能力。
通俗地讲,它让大模型从“能说会道”的参谋,变成了“能动手做事”的助手。当模型遇到自己无法直接解决的问题时(比如查询实时信息、进行复杂计算),它不再说“我做不到”,而是会“告诉”你的程序:“嘿,你需要调用那个叫 get_weather 的函数,并把 location 参数设置为‘北京’。”
需要注意的是,模型本身并不直接执行函数,它只负责生成调用的“指令”。真正的执行工作由你的程序来完成。
它的核心价值在于将大模型的语言理解能力与外部工具的执行能力相结合,从而突破其固有局限(如知识截止日期、无法访问网络等),完成更复杂的任务。

通过一张图来理解 Function Calling 的工作原理:

这个流程的核心在于,大模型至少被调用了两次:第一次是分析意图并决定调用哪个函数,第二次是将函数的执行结果整合成对人类友好的自然语言回复。
下面我们通过几个案例来理解 Function Calling 的使用场景和实现方式。
这是最经典的案例,展示了如何弥补大模型知识时效性的不足。
1 |
# 1. 定义可供调用的工具(告诉模型你有什么函数) |
当用户的问题涉及多个独立查询时,可以开启并行调用功能,大幅提升效率。
用户提问:“同时查询北京和上海的天气。”
实现:设置parallel_tool_calls=True参数,模型可以同时生成两个函数调用请求,你的程序可以并行执行两个天气查询 API,然后一次性将结果返回给模型进行总结。
这个案例展示了如何将专业、实时的数据(如股价)接入对话系统。
1 |
# 工具定义示例 |
当用户询问“青岛啤酒的股价是多少?”,模型会调用此函数,你的程序可以连接真实的金融数据 API 获取信息,再由模型生成回复。
下面我们通过 openai sdk 来实现一个简单的天气查询功能:
1 |
from openai import OpenAI |
base_url 和 api_key,就可以用几乎相同的代码调用不同品牌的模型,大大降低了学习和开发成本。client.chat.completions.create 方法时,核心参数是 tools(用于定义可用函数列表)和 tool_choice(用于控制调用行为,如 auto 自动决定或强制调用某个函数)。description(描述)。描述必须清晰、准确,模型才能正确理解何时该调用它。tool_choice 参数精细控制模型的行为。比如,可以强制模型必须调用某个函数(tool_choice={"type": "function", "function": {"name": "get_weather"}}),或者禁止它调用任何函数(tool_choice="none"),让它完全靠自己知识库回答。