揭秘 VTJ.PRO 的 AI Agent 系统:40+内置工具如何实现自然语言驱动开发

1 阅读7分钟

当AI能够直接操作你的代码项目,开发体验会发生什么改变?

在现代前端开发中,AI辅助编程已经不是一个新鲜话题。但大多数AI编程助手仍然停留在“生成代码片段-手动复制粘贴”的模式。今天,让我们深入探讨VTJ.PRO中的AI代理系统,看看它是如何通过工具注册表40+内置工具,实现真正的AI驱动开发。

10.png

从聊天到代码执行:AI代理系统全景

VTJ.PRO的AI代理系统不仅仅是一个简单的代码生成器,而是一个完整的AI驱动开发框架。它允许AI模型通过自然语言理解你的意图,并通过一系列预定义的工具直接操作项目。

系统架构:四层协作模型

整个系统由四个核心层次组成,它们协同工作以实现无缝的AI辅助开发体验:

flowchart TD
    subgraph UI层["🎨 UI层 - AI Widget"]
        Chat["💬 文本输入"]
        Image["🖼️ 设计稿上传"]
        Json["📋 元数据导入"]
    end
    
    subgraph 编排层["⚙️ 编排层 - Hooks"]
        UseAI["useAI Hook"]
        UseOpenApi["useOpenApi Hook"]
        UseAgent["useAgent Hook"]
    end
    
    subgraph 工具层["🔧 工具层 - ToolRegistry"]
        Registry["ToolRegistry"]
        Tools["40+内置工具"]
    end
    
    subgraph 后端层["☁️ 后端服务"]
        API["/api/open/*"]
        LLM["GPT/Claude/Custom"]
        SSE["流式响应"]
    end
    
    UI层 --> 编排层
    编排层 --> 工具层
    编排层 --> 后端层

这种分层设计确保了关注点分离,每个层次都专注于特定的职责:

  • UI层:负责多模态输入采集
  • 编排层:协调数据流和业务逻辑
  • 工具层:提供可执行的操作能力
  • 后端层:处理AI模型交互和流式响应

工具注册表:AI的操作系统

如果说AI是大脑,那么ToolRegistry就是让大脑能够控制肢体的神经系统。这个集中式的工具注册系统,让LLM能够理解并调用各种开发操作。

核心数据结构

interface Tool {
  name: string;           // 工具名称,如 'createPage'
  description: string;    // 工具描述,供LLM理解用途
  parameters: ToolParameter[]; // 参数定义
  handler: Function;      // 实际执行函数
}

interface ToolParameter {
  name: string;
  type: 'string' | 'number' | 'boolean' | 'object' | 'array';
  description: string;
  required: boolean;
  properties?: Record<string, ToolParameter>; // 对象类型的属性定义
}

工具注册流程

sequenceDiagram
    participant Agent as useAgent Hook
    participant Registry as ToolRegistry
    participant Configs as TOOL_CONFIGS
    
    Agent->>Agent: 创建toolContext
    loop 遍历每个工具配置
        Agent->>Configs: 获取工具配置
        Configs-->>Agent: ToolConfig对象
        Agent->>Configs: 调用createHandler(context)
        Configs-->>Agent: 处理函数
        Agent->>Registry: register(tool)
    end
    Agent->>Registry: generateToolDescriptions()
    Registry-->>Agent: OpenAI兼容的工具描述

这个过程的关键在于toolContext,它包含了项目模型、引擎实例等运行时信息,使得工具能够真正操作实际项目。

40+内置工具:开发全流程覆盖

系统提供了丰富的内置工具,覆盖从页面管理到API配置的全流程。让我们看看这些工具是如何组织的:

工具分类全景

mindmap
  root((内置工具))
    页面管理
      createPage
      updatePage
      removePage
      clonePage
      getPages
      getMenus
    块管理
      createBlock
      updateBlock
      removeBlock
      cloneBlock
      getBlocks
    API管理
      setApi
      getApis
      removeApi
    状态管理
      setGlobalStore
      getGlobalStore
    路由配置
      setBeforeEach
      setAfterEach
      setHomepage
    HTTP配置
      setGlobalAxios
      setRequestInterceptor
      setResponseInterceptor
    样式管理
      setGlobalCss
      getGlobalCss

实战:createPage工具剖析

让我们深入一个具体工具的实现,看看AI是如何创建页面的:

const createPage: ToolConfig = {
  name: 'createPage',
  description: '在当前项目新建页面',
  parameters: [
    {
      name: 'page',
      type: 'object',
      description: '页面对象',
      required: true,
      properties: {
        name: {
          type: 'string',
          description: '页面名称, 如:HomePage',
          required: true
        },
        title: {
          type: 'string',
          description: '页面标题',
          required: true
        },
        icon: {
          type: 'string',
          description: '图标名称',
          required: false
        }
      }
    }
  ],
  createHandler: ({ project, config }) => 
    async (page: PageFile, parentId?: string) => {
      // 实际创建页面
      const newPage = await project.createPage(page, parentId);
      
      // 自动激活新页面
      if (!newPage.dir) {
        project.active(newPage);
        await delay(config.activeDelayMs);
      }
      
      return { 
        name: page.name, 
        title: page.title, 
        id: newPage.id 
      };
    }
}

当AI需要创建页面时,它会生成类似这样的工具调用:

{
  "action": "createPage",
  "parameters": [
    {
      "name": "BlogPage",
      "title": "博客文章页",
      "icon": "Document"
    }
  ]
}

系统接收到这个调用后,会通过ToolRegistry找到对应的处理函数,并传入参数执行,最终在项目中创建真实的页面文件。

智能代理的工作流

输出格式检测与处理

AI的响应可能包含多种格式,代理系统通过智能检测来确定如何处理:

格式检测模式处理方式
Vue SFC /`vue`\n...直接替换页面内容
Diff Patch /`diff`\n...增量更新现有代码
Tool Call /`json`\n...解析并执行工具

工具执行序列

sequenceDiagram
    participant LLM as AI模型
    participant Agent as useAgent
    participant Registry as ToolRegistry
    participant Project as 项目模型
    
    LLM->>Agent: 返回JSON工具调用
    Agent->>Agent: 检测到工具调用格式
    Agent->>Registry: execute(action, params)
    Registry->>Registry: 查找对应的工具
    
    alt 工具存在
        Registry->>Project: 执行工具操作
        Project-->>Registry: 返回执行结果
        Registry-->>Agent: 返回成功结果
        Agent->>Agent: 格式化成功消息
        Agent-->>LLM: "O: 工具调用成功,结果:..."
    else 工具不存在或执行失败
        Registry-->>Agent: 返回错误
        Agent->>Agent: 格式化错误消息
        Agent-->>LLM: "O: 工具调用失败,错误:..."
    end
    
    LLM->>Agent: 根据结果继续后续操作

这种设计让AI能够通过多轮对话逐步完成复杂任务:创建页面、添加组件、配置API、设置路由,整个过程完全通过自然语言驱动。

多模态输入:不止于文本

VTJ.PRO的AI系统支持三种输入模式,每种都有专门的处理流程:

1. 文本输入

最直接的交互方式,用户可以输入自然语言指令:

  • “创建一个博客详情页,包含标题、作者和内容区域”
  • “帮我配置axios拦截器,添加认证token”

2. 设计稿上传

支持上传PNG、JPG等格式的设计稿,系统会:

  1. 读取图片文件
  2. 构建包含当前项目上下文的TopicDto
  3. 发送到后端进行图像识别
  4. AI理解设计意图并生成对应代码

3. JSON元数据

从Figma、Sketch等设计工具导出的JSON可以直接导入:

{
  "components": [
    {
      "type": "button",
      "text": "提交",
      "style": {
        "backgroundColor": "#1890ff"
      }
    }
  ]
}

统一的上下文构建

无论哪种输入类型,系统都会自动附加当前项目状态:

interface TopicDto {
  model: string;      // LLM模型标识
  project: string;    // 完整项目Schema
  dsl: string;        // 当前页面DSL
  source: string;     // 当前Vue源码
  tools: string;      // 可用工具描述
  // ... 其他字段
}

这确保了AI始终了解项目的完整上下文,能够做出更准确的决策。

代码更新系统:智能合并

当AI生成代码变更时,CodeIncrementalUpdater负责将这些变更应用到现有文件中。它使用类似SEARCH/REPLACE的模式:

------- SEARCH
const oldCode = 'something';
=======
+++++++ REPLACE
const newCode = 'updated';

系统会:

  1. 解析每个SEARCH/REPLACE块
  2. 在源代码中查找匹配内容(支持模糊匹配)
  3. 用新内容替换旧内容
  4. 返回更新后的完整代码

这种方式的优势在于:

  • 精确性:只修改指定部分,不影响其他代码
  • 安全性:通过SEARCH块确保修改位置的正确性
  • 可恢复性:失败时可以回退或请求AI重新生成

错误处理与恢复机制

系统实现了完整的错误处理策略,确保在出现问题时能够优雅恢复:

常见错误场景及处理

错误类型检测时机恢复策略
无效Vue SFC解析阶段设置错误状态,显示错误信息
工具执行失败运行时格式化错误信息返回给AI
补丁应用失败更新阶段建议使用完整代码生成
网络中断流式传输显示网络错误,支持重试

智能重试机制

对于可恢复的错误,系统会自动发起后续对话:

flowchart LR
    A[初始请求] --> B[AI生成代码]
    B --> C{解析结果}
    C -->|成功| D[应用更改]
    C -->|失败| E[生成错误提示]
    E --> F[自动发起纠正请求]
    F --> G[AI修复代码]
    G --> D

流式通信协议

系统使用Server-Sent Events(SSE)实现AI响应的流式传输,提供实时的交互体验:

async function chatCompletions(params: ChatParams, callback: Callback) {
  const response = await fetch('/api/open/completions', {
    method: 'GET',
    headers: { 'Accept': 'text/event-stream' }
  });
  
  const reader = response.body?.getReader();
  let buffer = '';
  
  while (true) {
    const { done, value } = await reader.read();
    if (done) break;
    
    buffer += new TextDecoder().decode(value);
    const lines = buffer.split('\n');
    buffer = lines.pop() || '';
    
    for (const line of lines) {
      if (line.startsWith('data: ')) {
        const data = JSON.parse(line.slice(6));
        callback(data, false);
      }
    }
  }
  
  callback(null, true);
}

实际应用场景

场景一:快速原型开发

用户:创建一个电商商品列表页,包含搜索框和商品卡片
AI:理解需求 -> createPage -> 生成商品列表组件 -> 配置路由
结果:3分钟内生成完整可运行的页面

场景二:存量项目修改

用户:给所有API请求添加认证头
AI:分析现有代码 -> 使用setRequestInterceptor工具 -> 自动更新axios配置
结果:无需手动修改每个API调用,自动完成全局配置

场景三:设计稿转代码

用户:上传Figma设计稿
AI:解析设计稿 -> 识别组件结构 -> 生成对应Vue组件
结果:设计稿直接转化为可维护的代码

总结与展望

VTJ.PRO的AI代理系统展示了一个真正意义上AI驱动开发的可能性。通过精心设计的工具注册表和40+内置工具,它让AI从简单的代码生成器变成了能够直接操作项目的开发助手。

这种设计带来的核心价值:

  1. 降低认知负担:开发者用自然语言表达需求
  2. 提高开发效率:重复性工作由AI自动完成
  3. 保持代码质量:工具执行确保操作的一致性
  4. 无缝集成:与现有项目和工作流完美融合

未来,随着工具集的进一步丰富和AI能力的提升,我们可以期待更加智能的开发体验。想象一下,当AI不仅能理解你的代码,还能理解业务逻辑、设计意图时,它会成为多么强大的开发伙伴。


如果你对这种AI驱动开发的实现细节感兴趣,欢迎在评论区讨论。想了解更多VTJ.PRO的技术实现,可以查看我们的其他技术文章。