与 AI 共舞 · 享 AI 时代
Model Context Protocol — 由 Anthropic 提出的开放协议
类比:AI 的"USB 接口"——插上什么工具,AI 就会用什么
✖ 传统模式
用户: 帮我编译项目
AI: 请打开命令行运行:
msbuild Project.dproj
用户: 报错了
AI: 错误是 X,建议你 Y
—— 只给建议,不执行
✔ MCP 模式
用户: 帮我编译项目
AI: 正在编译...
[调用 compile_project]
✅ 编译成功 (0 errors, 0 warnings)
用户: 修复这个错误
AI: 搜索 KB → 分析根因 →
修改代码 → 重编译 → ✅ 通过
—— 你提需求,它落地实现
用户只需一句话:
AI 自动完成:
全程在 AI 对话中完成,无需打开终端或编辑 JSON
install.ps1 自动检测,无需手动配置
| 方式 | 用法 | 示例 |
|---|---|---|
| 🎯 精确搜索 | 已知类名 / 函数名 | TStringList / Split |
| 🔍 语义搜索 | 自然语言描述需求 | "JSON 深度比较" |
| 🔗 引用查询 | 查谁引用了某单元 | Vcl.Forms 被谁 uses |
搜索策略:先精确猜名 → 再语义兜底
你不知道 API 叫什么?自然语言描述即可
⚠️ 需提前构建 embedding 索引:delphi_kb(action="build_embedding")
用户: Delphi 有没有可以比较两个 JSON 对象
是否结构相同的功能?
不是字符串 == 比较,要忽略键顺序。
AI 语义搜索 30 万函数 →
📌 TJSONObject — 继承链 TJSONAncestor > TJSONValue
📌 TJSONObject 未重写 Equals,默认引用比较
AI 分析: 标准库没有直接的深层比较函数,
但可以与你一同生成递归比较工具代码。
| 能力 | 说明 |
|---|---|
| 项目编译 | .dproj / .dpr → exe / dll,支持 MSBuild |
| 语法检查 | 单个 .pas 文件快速检查 |
| 批量编译 | .groupproj → 按 BuildOrder 自动排序 |
| 多平台 | Win32 / Win64 / OSX / iOS / Android / Linux |
| 多配置 | Debug / Release + 自定义条件编译 |
// E2511 — Type parameter must have a comparer
TDictionary<TCustomKey, string>.Create;
// ^^^^^^^^^^
// 错误: record 类型做 TKey 需要 IEqualityComparer
AI 不是只看错误行——它搜索 KB 理解根因:
一句话编译整个解决方案:
用户: Release Win64 编译全部
AI:
① LibUtils.dproj → ✅
② MainApp.dproj → ✅
全部编译成功!
自动解析 BuildOrder,按依赖顺序编译
📁 delphi_file 文件操作
delphi_file(action="read") — 读(类/函数导航)
delphi_file(action="write", — 写(edits 格式)
edits=[{start_line:1, content:"..."}])
delphi_file(action="format") — pasfmt 格式化
delphi_file(action="backup") — 备份管理(列表/恢复)
delphi_file(action="uses") — uses 子句增删
✅ 写入即自动备份到 __history
✅ DFM 二进制自动转文本
📦 manage_component 组件管理
manage_component(action="add",
new_component_class="TButton",
properties={"Caption":"OK"})
➡ DFM 新增组件
➡ PAS 自动声明字段+事件
manage_component(action="modify",
component_name="Button1",
properties={"Caption":"确定"})
manage_component(action="remove",
component_name="Button1")
delphi_file 写操作默认 backup=True,自动创建 __history 版本备份。edits=[...],不要分多次 write
同一需求,不同编码规则 → 风格截然不同的代码
📖 现代规范
type
TStringUtils = class
public
class function Join(
const AStrings: TArray<string>;
const ASeparator: string): string;
end;
📘 旧项目规范
type
StringUtils = class
public
class function join(
const arrStrings: array of string;
const separator: string): string;
end;
| 维度 | 现代规范 | 旧项目规范 |
|---|---|---|
| 类型命名 | TStringUtils | StringUtils |
| 方法命名 | Join, Split | join, split |
| 参数命名 | AStrings (A+大驼峰) | arrStrings (匈牙利) |
| 缩进 | 2 空格 | 4 空格 |
| begin 位置 | 另起一行 | 行尾 |
| 异常处理 | 具体异常类型 | except Exception 兜底 |
| 文件头 | XML Doc 注释 | 无强制要求 |
规则不仅是被查询的——它是被执行、被遵守的
📋 审计维度
| 🔴 严重 | 无 try/finally 保护 |
| 🔴 严重 | 循环内 Delete 跳项 |
| 🟡 警告 | 魔法数值未定义常量 |
| 🟡 警告 | finally 后取值的脆弱逻辑 |
| 🔵 建议 | 未使用变量 / 函数过长 |
📦 审计 → Issue 自动流转 (MCP 内置 Gitea 工具)
# Issue: LegacyData.pas 代码质量
## 🔴 严重
1. 资源泄漏 — ExportData:26
TStringList 无 try/finally
2. 循环删除跳项 — ProcessItems:82
## 🟡 警告
3. 魔法数值 — CalculateTotal:62,64,66,68
✅ 已创建: github.com/.../issues/42
AI 自动完成从规范到报告的完整审计链路
审计报告 → 工单,一键直达代码托管平台
📦 调用方式
code_hosting(
platform="gitea",
action="create_issue",
repo="owner/project",
title="审计: LegacyData.pas",
body="## 严重问题\n...",
label_names=["bug"]
)
🔄 完整闭环
需求:FireDAC + SQLite 数据库管理单元
场景:TStringList ➡ TArray<String>
构建 16 万页 CHM 索引后,自然语言即搜即得:
用户: TCanvas.Draw 的参数说明,
特别是 DrawOpacity 的作用
Result:
procedure Draw(X, Y: Integer;
const Graphic: TGraphic;
DrawOpacity: Byte = 255);
// DrawOpacity: 绘制不透明度
// 0 = 完全透明
// 255 = 完全不透明 (默认)
比翻 CHM 帮助文件快两个数量级
故事线:JSON 配置文件管理单元
共执笔,同成章
基于 Named Pipe 的 Delphi 原生自动化单元 DaofyAutomation
automate_delphi(action="gui", app_path="App.exe",
script=[{"cmd":"goto","target":"TMainForm"},
{"cmd":"click","target":"btnOK"},
{"cmd":"capture","target":"result.png"}])
协议:JSON 请求/响应
| 命令 | 说明 |
|---|---|
| goto / click / dblclick | 定位/点击/双击组件 |
| type / key | 输入文本 / 按键 |
| capture / listwnd / dumpstate | 截图 / 窗口列表 / 控件树 |
| wait / waitfor | 等待超时 / 等待窗口出现 |
| rcall / rget / rset | 调用/读取/设置组件属性 |
编译时通过 DCC_UnitSearchPath= 自动链接 DaofyAutomation 单元,无需手动配置
基于 subprocess stdin/stdout 的控制台程序交互,无需 Delphi 端改造
automate_delphi(action="console", app_path="Tool.exe",
input="Y\n", expect="Continue?")
automate_delphi(action="auto", app_path="Deploy.exe",
input="\n", expect="success", args=["--silent"])
| 参数 | 说明 |
|---|---|
| input | 发送到 stdin 的文本(支持 \n 换行) |
| expect | 期待的输出模式(匹配到才返回) |
| timeout | 超时秒数(默认 30s) |
| args | 命令行参数列表 |
Windows PE 自动检测: action="auto" 读取 EXE 头 Subsystem 字段区分 GUI/Console,无需手动指定
通过 Enhanced RTTI 发现和调用 Delphi 应用程序的 published + public 方法 — 无需源码
delphi_rtti(action="discover", app_path="App.exe")
→ 返回所有类的 published + public 方法 + JSON Schema 参数定义
delphi_rtti(action="call",
app_path="App.exe",
class_name="TMainForm",
method="LoadCustomer",
params={"customerName": "张三"})
→ 调用方法,返回结果
支持 15 类 Delphi 类型 → JSON Schema 映射:Integer · Float · Boolean · 字符串 · 枚举 · 集合 · DynamicArray · TDateTime · Variant · Pointer 等
Agent 经验自动积累,问题越用越少
💾 自动保存
experience(action="save",
problem="编译后 output_file 冗余",
solution="清理临时 .dcu 文件...")
➡ 自动去重(相似度 > 0.85 合并)
➡ 后续任务自动搜索匹配
🔍 语义搜索
experience(action="search",
query="编译临时文件清理")
➡ 语义匹配已有经验
➡ 避免重复踩坑
满足中国软件著作权登记需求的自动化工具
generate_copyright(action="generate") → 生成全部文档
generate_copyright(action="validate") → 检查配置完整性
generate_copyright(action="status") → 查看环境状态
浏览器 PDF 渲染,所见即所得 · 自动校验文档完整性
daofy_update(action="check") 在每次 MCP 启动时后台静默检查
| 能力 | 一句话 |
|---|---|
| ⚙ 编译 | 项目 + 语法 + 批量 + 多平台 + run_verify,一句话完成 |
| 📚 知识库 | 17 万类 / 33 万函数 / 16 万文档,三模式搜索 |
| 🎨 文件操作 | 读/写/格式化/备份/uses 管理 + DFM 自动转换 |
| 📦 组件管理 | DFM 增删改 + .dpk 编译安装,PAS 自动同步 |
| 📋 编码规范 | 驱动代码生成 + 审计,真实控制 AI 行为 |
| 🐛 诊断 | KB 驱动的复杂错误分析,从根因修复 |
| 🧰 RTTI 桥接 | 运行时发现/调用 Delphi published+public 方法 |
| 🤖 自动化 | 审计报告 → 工单 + GUI/Console 自动化测试 |
| 🧠 经验记忆 | AI 自动积累经验,去重 + 语义搜索 |
| 📄 软著生成 | 源码 + 手册 + 汇总表,PDF 一键出稿 |
GitHub
github.com/chinawsb/daofy
MIT 许可证 Python 3.10+ Delphi 2005-13
交流方式:GitHub Issues
⭐ 如果觉得有用,请给项目点个 Star!
不止于此——这些能力让 AI 如虎添翼
感谢观看!
完整演示脚本见 docs/tutorial/tutorial_script.md