在一个阳光明媚的早晨,我们团队接到了一个新需求:为公司的低码平台接入AI能力,实现AI对数据展示的智能控制。作为前端团队的一员,我和同事们兴奋不已,这意味着我们可以让用户通过自然语言与数据进行交互,大大提升用户体验。

我们的低码平台已经具备了拖拽式构建页面的能力,但在数据展示方面,用户仍然需要手动配置图表类型、数据来源等。接入AI后,用户可以直接告诉AI:“帮我展示最近一个月的销售数据,用折线图表示”,AI就会自动完成数据查询、图表配置和展示。

核心实现方案

1. 对话管理与状态控制

我们使用Pinia创建了一个专门的AI对话状态管理模块,负责处理对话流、管理推理状态和处理各种事件。

// 核心状态管理
const useAIConversationStore = defineStore('aiConversation', {
  state: () => ({
    // 对话历史
    conversations: [],
    // 当前对话ID(用于多轮对话)
    conversationId: '',
    // 推理状态
    reasoning: {
      active: false,
      steps: [],
      progress: 0
    },
    // 浮窗状态
    dialogWindow: {
      visible: false,
      components: [],
      layout: { columns: 2, gap: 16 },
      textMessage: '',
      fullAnswer: '',
      markdownMsg: '',
      urlMsg: null
    },
    // TTS 播报文本
    speechText: '',
    // 分阶段展示
    stagedDisplayPending: null
  }),
  
  actions: {
    // 发起对话
    async startConversation(input) {
      // 中断旧的请求
      // 重置状态
      // 发起流式请求
      // 处理流式响应
    },
    
    // 其他核心方法...
  }
});

2. 智能数据解析

AI返回的内容格式多样,我们需要从中提取出有用的信息。为此,我们实现了一系列解析函数,能够从AI的回复中提取出不同类型的数据:

// 提取单图表数据
function extractEchartJSON(answer) {
  // 使用括号计数法提取完整 JSON
  // 解析并验证数据格式
  // 返回标准化的图表数据
}

// 提取多图表数据
function extractMultiEchartJSON(answer) {
  // 类似单图表提取,但处理数组格式
}

// 提取Markdown数据
function extractMarkdownJSON(answer) {
  // 提取并返回Markdown内容
}

// 提取URL数据
function extractUrlJSON(answer) {
  // 提取并返回URL配置
}

// 提取请求配置
function extractRequestConfJSON(answer) {
  // 提取并标准化请求配置
}

3. 流式处理与实时反馈

为了提升用户体验,我们采用了流式处理技术,让用户能够实时看到AI的回复,而不是等待整个回复完成。

// 流式处理AI回复
for await (const event of stream) {
  // 保存对话ID
  if (event.conversation_id && !this.conversationId) {
    this.conversationId = event.conversation_id;
  }

  // 处理不同类型的事件
  const eventType = event.event || event.eventType;
  switch (eventType) {
    case 'workflow_started':
      this.addReasoningStep('开始处理...');
      break;
    case 'node_started':
      // 展示推理步骤
      break;
    case 'message':
      // 处理流式消息
      // 实时提取并展示数据
      break;
    case 'workflow_finished':
      // 处理最终结果
      break;
  }
}

4. 多模态数据展示

我们支持多种数据展示方式,包括图表、Markdown、URL嵌入等,让AI能够根据用户需求选择最合适的展示方式。

// 处理工作流返回的最终答案
async processWorkflowAnswer(finalAnswer, ctx = {}) {
  // 处理不同类型的数据
  const displayOtherAIData = extractDisplayOtherAIJSON(finalAnswer, true);
  if (displayOtherAIData) {
    this._applyDisplayOtherAI(displayOtherAIData);
    return;
  }

  const echartData = extractEchartJSON(finalAnswer);
  if (echartData) {
    this.dialogWindow.components = [{
      id: `echart_${Date.now()}`, 
      type: 'VEcharts', 
      propValue: { option: echartData.echartMsg }, 
      span: 2 
    }];
    return;
  }

  const markdownData = extractMarkdownJSON(finalAnswer);
  if (markdownData) {
    this.dialogWindow.markdownMsg = markdownData.mdMsg;
    return;
  }

  // 处理其他类型...
}

5. 智能布局计算

为了让数据展示更加美观,我们实现了智能布局计算功能,根据窗口大小自动调整组件布局。

// 计算布局
calculateLayout() {
  const windowWidth = window.innerWidth * 0.6; // 假设浮窗占60%宽度
  let columns = 2;
  if (windowWidth >= 1400) columns = 3;
  else if (windowWidth < 900) columns = 1;

  this.dialogWindow.layout = { columns, gap: 16 };

  // 为每个组件计算span
  this.dialogWindow.components = this.dialogWindow.components.map(comp => {
    const defaultSpans = {
      VBar: 1,
      VLine: 1,
      VPie: 1,
      VTable: 2,
      VMap: columns,
      VEcharts: 2
    };
    const span = defaultSpans[comp.type] || 1;
    return {
      ...comp,
      span: Math.min(span, columns)
    };
  });
}

技术亮点

1. 灵活的JSON提取机制

我们实现了一套灵活的JSON提取机制,能够从AI返回的文本中准确提取出各种格式的JSON数据,支持嵌套结构和多种数据类型。

2. 流式处理与实时反馈

通过流式处理技术,我们实现了AI回复的实时展示,让用户能够看到AI的思考过程,提升了用户体验。

3. 多模态数据展示

支持多种数据展示方式,包括图表、Markdown、URL嵌入等,让AI能够根据用户需求选择最合适的展示方式。

4. 智能布局计算

根据窗口大小自动调整组件布局,确保数据展示的美观性和可读性。

5. 场景切换能力

支持场景切换功能,AI可以根据用户需求切换到不同的场景,展示不同的数据和视图。

实际应用场景

场景一:销售数据分析

用户可以直接对AI说:“帮我分析最近一个季度的销售数据,找出销售额最高的产品和地区”,AI会自动查询数据,生成图表,并给出分析结论。

场景二:库存管理

用户可以问:“当前库存不足的产品有哪些?”,AI会查询库存数据,生成列表,并提供补货建议。

场景三:用户行为分析

用户可以说:“分析最近一个月的用户行为,找出最受欢迎的功能”,AI会分析用户行为数据,生成图表,并给出改进建议。

未来展望

  1. 更智能的自然语言理解:进一步提升AI对用户意图的理解能力,支持更复杂的查询和指令。

  2. 更丰富的数据可视化:增加更多图表类型和交互方式,让数据展示更加生动和直观。

  3. 个性化推荐:根据用户的历史查询和使用习惯,智能推荐相关的数据和分析。

  4. 多语言支持:支持多种语言的自然语言交互,满足国际化需求。

  5. 集成更多数据源:与更多数据源集成,提供更全面的数据分析能力。

结语

通过接入AI能力,我们的低码平台实现了从传统的手动配置到智能数据展示的跨越。用户现在可以通过自然语言与数据进行交互,大大提升了工作效率和用户体验。

这只是AI在低码平台应用的开始,我们相信随着技术的不断发展,AI将在更多方面为低码平台赋能,创造出更加智能、高效的开发和使用体验。


作者注:本文中的代码片段均为示例代码,实际项目中可能会有不同的实现细节。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐