低码项目接入AI的奇妙之旅:让数据展示更智能
本文介绍了如何为低码平台接入AI能力,实现自然语言驱动的智能数据展示。核心方案包括:1)基于Pinia的对话状态管理;2)智能数据解析,支持多种格式提取;3)流式处理实现实时反馈;4)多模态数据展示(图表/Markdown/URL等);5)智能布局计算。技术亮点在于灵活的JSON提取机制、实时交互体验和自适应布局。应用场景涵盖销售分析、库存管理等业务场景,用户可通过自然语言指令获取智能数据展示。未
在一个阳光明媚的早晨,我们团队接到了一个新需求:为公司的低码平台接入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会分析用户行为数据,生成图表,并给出改进建议。
未来展望
-
更智能的自然语言理解:进一步提升AI对用户意图的理解能力,支持更复杂的查询和指令。
-
更丰富的数据可视化:增加更多图表类型和交互方式,让数据展示更加生动和直观。
-
个性化推荐:根据用户的历史查询和使用习惯,智能推荐相关的数据和分析。
-
多语言支持:支持多种语言的自然语言交互,满足国际化需求。
-
集成更多数据源:与更多数据源集成,提供更全面的数据分析能力。
结语
通过接入AI能力,我们的低码平台实现了从传统的手动配置到智能数据展示的跨越。用户现在可以通过自然语言与数据进行交互,大大提升了工作效率和用户体验。
这只是AI在低码平台应用的开始,我们相信随着技术的不断发展,AI将在更多方面为低码平台赋能,创造出更加智能、高效的开发和使用体验。
作者注:本文中的代码片段均为示例代码,实际项目中可能会有不同的实现细节。
更多推荐


所有评论(0)