OpenTiny NEXT全链路实战:WebMCP+GenUI+AI-Extension一站式开发

摘要:随着前端智能化技术的快速发展,AI Agent与Web应用的连接、智能交互界面开发、浏览器AI插件落地成为前端开发者的核心需求。本文基于OpenTiny NEXT前端智能化系列直播1-4期内容,结合WebMCP、GenUI、AI-Extension三大核心技术,打造一站式实战教程,从环境搭建、核心功能开发到最终部署,提供完整可运行代码与踩坑指南,助力开发者快速掌握前端智能化落地技巧,同时贴合OpenTiny开源生态,实现技术与实践的深度融合。

一、背景与痛点:前端智能化的落地困境

当前前端开发正从“传统交互”向“智能交互”转型,AI Agent与Web应用的连接效率低、智能UI开发成本高、浏览器操作无法实现AI自动化等问题,成为制约前端智能化落地的核心痛点。传统开发模式中,AI能力与Web应用的耦合度低,需要大量自定义代码实现连接;智能对话界面开发需从零搭建组件,耗时费力;浏览器插件开发门槛高,且难以与AI能力深度融合。

OpenTiny NEXT作为前端智能化开源解决方案,提供了WebMCP(Web智能体连接协议)、GenUI(生成式UI)、AI-Extension(浏览器AI扩展)等核心能力,完美解决上述痛点,让开发者无需从零搭建,即可快速实现前端智能化功能落地。本文基于OpenTiny NEXT SDK,打造全链路实战案例,覆盖“连接-交互-自动化”三大核心场景,助力开发者快速上手。

二、环境搭建:OpenTiny NEXT开发环境准备

2.1 基础环境要求

本次实战需准备以下开发环境,确保代码可正常运行:

  • Node.js:v16.18.0 及以上(推荐v18.x)

  • 包管理工具:pnpm v8.0.0 及以上(或npm、yarn)
    在这里插入图片描述

  • 浏览器:Chrome 110.0 及以上(用于AI-Extension开发与测试)

  • 开发工具:VS Code(推荐安装TypeScript、ESLint插件)
    VS Code(推荐安装TypeScript、ESLint插件)
    在这里插入图片描述

2.2 环境搭建步骤

  1. 安装Node.js与pnpm,验证环境是否正常:
# 验证Node.js版本
node -v
# 验证pnpm版本
pnpm -v
# 若未安装pnpm,执行以下命令
npm install -g pnpm
  1. 初始化项目,安装OpenTiny NEXT核心依赖:
# 初始化TypeScript项目
pnpm create vite@latest opentiny-fullstack-demo --template vue-ts
cd opentiny-fullstack-demo
# 安装OpenTiny NEXT核心依赖
pnpm install @opentiny/next-sdk @opentiny/gen-ui @opentiny/ai-extension
  1. 配置项目,确保依赖正常引入:修改vite.config.ts,添加OpenTiny相关配置(可选,用于优化打包体验):
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src'),
      '@opentiny': path.resolve(__dirname, './node_modules/@opentiny')
    }
  }
})
  1. 启动项目,验证环境搭建成功:
pnpm run dev

若浏览器能正常打开项目页面(默认localhost:5173),则环境搭建完成。

三、WebMCP原理与服务搭建:实现AI Agent与Web应用的连接

3.1 WebMCP核心原理

WebMCP(Web Agent Connection Protocol)是OpenTiny NEXT推出的Web智能体连接协议,核心作用是打通AI Agent与Web应用的通信壁垒,实现AI Agent对Web应用的“感知-操作-反馈”全流程控制。其核心架构分为三层:

  • 协议层:定义AI Agent与Web应用的通信规范,支持JSON-RPC 2.0协议,确保数据传输的稳定性与一致性;

  • 服务层:提供WebMCP Server,负责接收AI Agent的请求,转发至Web应用,并将执行结果反馈给AI Agent;

  • 应用层:Web应用通过WebMCP Client接入服务,注册可被AI Agent调用的功能(如页面元素操作、接口请求等)。

通过WebMCP,开发者无需自定义通信逻辑,即可快速实现AI Agent与Web应用的联动,大幅降低前端智能化的开发成本。

3.2 WebMCP Server搭建

基于OpenTiny NEXT SDK,快速搭建WebMCP Server,实现AI Agent与Web应用的连接:

// src/server/webmcp-server.ts
import { createWebMCPServer } from '@opentiny/next-sdk'

// 初始化WebMCP Server
const webMCPServer = createWebMCPServer({
  port: 8080, // 服务端口
  auth: false, // 开发环境关闭权限验证,生产环境建议开启
  handlers: {
    // 注册可被AI Agent调用的自定义方法
    async getPageInfo() {
      // 模拟获取当前Web应用页面信息
      return {
        title: 'OpenTiny全链路实战Demo',
        url: 'http://localhost:5173',
        elements: ['button', 'input', 'dialog']
      }
    },
    async clickElement(params: { elementId: string }) {
      // 模拟点击页面元素
      console.log(`点击元素:${params.elementId}`)
      return { success: true, message: `元素${params.elementId}点击成功` }
    }
  }
})

// 启动WebMCP Server
webMCPServer.start().then(() => {
  console.log('WebMCP Server启动成功,地址:http://localhost:8080')
})

启动WebMCP Server:

# 在项目根目录创建server文件夹,将上述代码保存为webmcp-server.ts
# 安装ts-node,用于运行TypeScript文件
pnpm install ts-node -D
# 启动服务
npx ts-node src/server/webmcp-server.ts

若控制台输出“WebMCP Server启动成功”,则服务搭建完成,AI Agent可通过http://localhost:8080与Web应用通信。

3.3 WebMCP Client接入Web应用

在Vue项目中接入WebMCP Client,实现与WebMCP Server的通信:

// src/utils/webmcp-client.ts
import { createWebMCPClient } from '@opentiny/next-sdk'

// 初始化WebMCP Client
export const webMCPClient = createWebMCPClient({
  serverUrl: 'http://localhost:8080', // WebMCP Server地址
  timeout: 5000 // 超时时间
})

// 封装调用AI Agent方法的工具函数
export const callAgentMethod = async (method: string, params?: any) => {
  try {
    const response = await webMCPClient.call(method, params)
    return { success: true, data: response }
  } catch (error) {
    console.error(`调用AI Agent方法${method}失败:`, error)
    return { success: false, error: (error as Error).message }
  }
}

在Vue组件中使用Client调用服务端方法:

WebMCP 通信测试<button @="getPageInfo">获取页面信息<button @">点击测试元素{{ result }}<script setup 
import { ref } from 'vue'
import { callAgentMethod } from '@/utils/webmcp-client'

const result = ref('')

// 调用获取页面信息方法
const getPageInfo = async () => {
  const res = await callAgentMethod('getPageInfo')
  result.value = res.success ? JSON.stringify(res.data) : res.error
}

// 调用点击元素方法
const clickElement = async (elementId: string) => {
  const res = await callAgentMethod('clickElement', { elementId })
  result.value = res.success ? res.data.message : res.error
}

运行项目后,点击按钮即可实现与WebMCP Server的通信,验证AI Agent与Web应用的连接功能。

四、GenUI智能对话界面实战:快速搭建AI交互界面

4.1 GenUI核心优势

GenUI是OpenTiny NEXT推出的生成式UI组件库,专为AI对话交互场景设计,具备“快速生成、灵活定制、自适应布局”三大优势。开发者无需手动编写大量UI代码,只需通过简单配置,即可生成符合需求的AI对话界面,支持消息发送、接收、加载状态、历史记录等核心功能,同时可与AI Agent深度联动,实现智能对话交互。

4.2 GenUI对话界面开发

基于OpenTiny GenUI组件,快速搭建AI对话界面,实现与AI Agent的智能交互:

GenUI 智能对话界面<tiny-genui-chat
      :messages="messages"
      :loading="loading"
      @send="handleSendMessage"
      placeholder="请输入消息..."
      avatar="https://atomgit.com/opentiny.png"
      bot-avatar="https://atomgit.com/opentiny/next-sdk/raw/develop/logo.png"
    />
  <script setup ="ts">
import { ref } from 'vue'
import { TinyGenuiChat } from '@opentiny/gen-ui'
import { callAgentMethod } from '@/utils/webmcp-client'

// 对话消息列表
const messages = ref([
  {
    type: 'bot',
    content: '你好!我是基于OpenTiny GenUI的AI助手,请问有什么可以帮你?'
  }
])
// 加载状态
const loading = ref(false)

// 处理消息发送
const handleSendMessage = async (content: string) => {
  // 添加用户消息
  messages.value.push({ type: 'user', content })
  loading.value = true
  try {
    // 调用AI Agent方法,获取回复(模拟AI处理逻辑)
    const res = await callAgentMethod('getAIResponse', { content })
    if (res.success) {
      // 添加AI回复消息
      messages.value.push({ type: 'bot', content: res.data.response })
    } else {
      messages.value.push({ type: 'bot', content: '抱歉,获取回复失败,请重试!' })
    }
  } catch (error) {
    messages.value.push({ type: 'bot', content: '抱歉,系统异常,请重试!' })
  } finally {
    loading.value = false
  }
}

补充WebMCP Server的getAIResponse方法,模拟AI回复逻辑:

// 在src/server/webmcp-server.ts的handlers中添加
async getAIResponse(params: { content: string }) {
  const { content } = params
  // 模拟AI回复,实际场景可对接真实AI接口(如ChatGPT、通义千问等)
  let response = ''
  if (content.includes('WebMCP')) {
    response = 'WebMCP是OpenTiny NEXT的Web智能体连接协议,用于打通AI Agent与Web应用的通信壁垒,实现智能联动。'
  } else if (content.includes('GenUI')) {
    response = 'GenUI是OpenTiny NEXT的生成式UI组件库,专为AI对话交互设计,可快速搭建智能对话界面,降低开发成本。'
  } else {
    response = `你输入的内容是:${content},我已收到,后续将为你提供更精准的回复。`
  }
  return { response }
}

重启WebMCP Server和项目,即可看到完整的AI对话界面,输入消息后可获取AI回复,实现智能交互功能。GenUI组件支持自定义头像、占位符、消息样式等,开发者可根据需求灵活配置。

五、AI-Extension浏览器插件开发:实现浏览器AI自动化

5.1 AI-Extension核心功能

AI-Extension是OpenTiny NEXT推出的浏览器AI扩展工具,基于Chrome插件开发规范,结合AI能力,实现“页面元素识别、AI操作、自动填充”等核心功能。通过AI-Extension,开发者可快速开发浏览器插件,让AI能够“看得到”浏览器页面元素、“动得了”浏览器操作,实现浏览器自动化与AI智能化的深度融合。

5.2 AI-Extension插件开发步骤

5.2.1 创建插件目录结构

在项目根目录创建extension文件夹,目录结构如下:

extension/
├── manifest.json  # 插件配置文件
├── popup.html     # 插件弹窗页面
├── popup.js       # 弹窗页面逻辑
├── content.js     # 页面注入脚本(用于操作页面元素)
└── icon.png       # 插件图标(可选)
5.2.2 配置manifest.json

manifest.json是Chrome插件的核心配置文件,定义插件的基本信息、权限、注入脚本等:

{
  "manifest_version": 3,
  "name": "OpenTiny AI Extension",
  "version": "1.0.0",
  "description": "基于OpenTiny NEXT的浏览器AI扩展,实现页面元素识别与AI操作",
  "permissions": ["activeTab", "scripting"],
  "action": {
    "default_popup": "popup.html",
    "default_icon": "icon.png"
  },
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["content.js"]
    }
  ]
}
5.2.3 开发弹窗页面(popup.html + popup.js)

popup.html:插件弹窗页面,提供操作按钮与反馈信息:

<!DOCTYPE html>
OpenTiny AI ExtensionAI浏览器扩展

popup.js:弹窗页面逻辑,与content.js通信,实现页面操作:

// 获取页面元素
const identifyBtn = document.getElementById('identifyBtn')
const autoFillBtn = document.getElementById('autoFillBtn')
const result = document.getElementById('result')

// 识别页面元素
identifyBtn.addEventListener('click', async () => {
  try {
    // 获取当前激活的标签页
    const [tab] = await chrome.tabs.query({ active: true, currentWindow: true })
    // 向content.js发送消息,获取页面元素信息
    chrome.tabs.sendMessage(tab.id, { action: 'identifyElements' }, (response) => {
      if (response) {
        result.textContent = `识别到${response.length}个元素:${response.join(', ')}`
      } else {
        result.textContent = '识别失败'
      }
    })
  } catch (error) {
    result.textContent = `识别失败:${error.message}`
  }
})

// 自动填充表单
autoFillBtn.addEventListener('click', async () => {
  try {
    const [tab] = await chrome.tabs.query({ active: true, currentWindow: true })
    // 向content.js发送消息,执行自动填充
    chrome.tabs.sendMessage(tab.id, { action: 'autoFillForm' }, (response) => {
      result.textContent = response ? '填充成功' : '填充失败'
    })
  } catch (error) {
    result.textContent = `填充失败:${error.message}`
  }
})
5.2.4 开发页面注入脚本(content.js)

content.js注入到当前浏览器页面,用于操作页面元素、与弹窗脚本通信:

// 监听弹窗脚本发送的消息
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  switch (request.action) {
    // 识别页面元素
    case 'identifyElements':
      const elements = Array.from(document.querySelectorAll('input, button, select'))
        .map(el => el.tagName.toLowerCase())
      // 去重并返回
      const uniqueElements = [...new Set(elements)]
      sendResponse(uniqueElements)
      break
    // 自动填充表单
    case 'autoFillForm':
      const inputElements = document.querySelectorAll('input[type="text"], input[type="email"]')
      inputElements.forEach((el, index) => {
        if (index === 0) el.value = 'opentiny@example.com' // 邮箱
        if (index === 1) el.value = 'opentiny123' // 密码
      })
      sendResponse(true)
      break
    default:
      sendResponse(false)
  }
})
5.2.5 加载插件到Chrome浏览器
  1. 打开Chrome浏览器,输入chrome://extensions/,进入扩展管理页面;

  2. 开启“开发者模式”(右上角);

  3. 点击“加载已解压的扩展程序”,选择项目根目录下的extension文件夹;

  4. 加载成功后,浏览器右上角会出现插件图标,点击即可打开弹窗,测试识别页面元素、自动填充表单功能。

六、效果演示与踩坑总结

6.1 效果演示

本次实战实现了三大核心功能,效果如下:

  1. WebMCP通信:启动WebMCP Server后,Web应用可通过Client与Server正常通信,调用自定义方法,实现AI Agent与Web应用的连接;

  2. GenUI对话界面:页面呈现完整的AI对话交互界面,输入消息后可获取AI回复,加载状态、消息样式正常;

  3. AI-Extension插件:加载插件后,点击弹窗按钮可识别当前页面元素、自动填充表单,实现浏览器AI自动化。

(实际投稿时可添加截图/动图,展示上述效果,提升稿件实用性与可读性,此处因格式限制省略)

6.2 踩坑总结

在实战过程中,遇到以下常见问题,整理解决方案供参考:

  • 问题1:WebMCP Server启动失败,提示“端口被占用”;
    解决方案:修改webmcp-server.ts中的port参数(如改为8081),确保端口未被其他服务占用,重启服务即可。

  • 问题2:GenUI组件引入后报错,提示“组件未注册”;
    解决方案:确保@opentiny/gen-ui依赖安装成功,在Vue组件中正确引入TinyGenuiChat组件,或在main.ts中全局注册组件。

  • 问题3:Chrome插件加载失败,提示“manifest.json格式错误”;
    解决方案:检查manifest.json的语法,确保JSON格式正确,manifest_version设置为3(Chrome插件最新规范),权限配置符合要求。

  • 问题4:content.js无法操作页面元素;
    解决方案:检查manifest.json中content_scripts的matches配置,确保覆盖当前页面URL,同时确保脚本注入成功(可通过浏览器开发者工具的Console面板查看日志)。

七、项目地址与参考文献

7.1 官方项目地址

  • OpenTiny NEXT SDK:https://atomgit.com/opentiny/next-sdk

  • OpenTiny GenUI:https://atomgit.com/opentiny/gen-ui

  • OpenTiny AI-Extension:https://atomgit.com/opentiny/ai-extension

7.2 参考文献

  • OpenTiny NEXT 官方文档:https://opentiny.design/docs/next/intro

  • Chrome插件开发文档:https://developer.chrome.com/docs/extensions/mv3

  • WebMCP 协议规范:https://atomgit.com/opentiny/next-sdk/blob/develop/docs/webmcp.md

结语:本文基于OpenTiny NEXT SDK,实现了WebMCP、GenUI、AI-Extension的全链路实战,覆盖了前端智能化的“连接-交互-自动化”三大核心场景,提供了完整可运行的代码与详细的步骤说明,助力开发者快速上手前端智能化技术。OpenTiny NEXT作为开源解决方案,为前端开发者提供了丰富的工具与组件,降低了前端智能化的开发门槛,未来可进一步探索AI与低代码、组件库的深度融合,推动前端智能化的普及与落地。

👍 如果本文对你有帮助,欢迎点赞、收藏、转发!
💬 有任何问题或建议,请在评论区留言交流~
✍️ 行文仓促,定有不足之处,欢迎各位朋友在评论区批评指正,不胜感激!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐