mini增加云端智能-语音交互

This commit is contained in:
Irene-Maxine
2025-10-14 14:20:52 +08:00
parent e088cdcafb
commit 027a40d3a0
9 changed files with 319 additions and 3 deletions

View File

@@ -0,0 +1,108 @@
import * as Blockly from 'blockly/core';
import { Variables } from '../../python/export';
const AI_CLOUD_VOICE_HUE = '#88ada6';
export const init_xunfei_vi = {
init: function () {
this.setColour(AI_CLOUD_VOICE_HUE);
this.appendValueInput('VAR')
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_AS + Blockly.Msg.MIXLY_XUFEI + Blockly.Msg.MIXLY_AipSpeech_asr );
this.appendValueInput('APPID')
.setCheck(String)
.appendField('APPID');
this.appendValueInput('APISecret')
.setCheck(String)
.appendField('APISecret');
this.appendValueInput('APIKey')
.setCheck(String)
.appendField('APIKey');
this.setInputsInline(false);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const init_xunfei_Spark_Ultra = {
init: function () {
this.setColour(AI_CLOUD_VOICE_HUE);
this.appendValueInput('VAR')
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_MAKE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_SETUP + Blockly.Msg.MIXLY_AS + Blockly.Msg.MIXLY_XUFEI + 'Spark Ultra' +Blockly.Msg.MIXLY_LARGE_LANGUAGE_MODEL );
this.appendValueInput('APPID')
.setCheck(String)
.appendField('APPID');
this.appendValueInput('APISecret')
.setCheck(String)
.appendField('APISecret');
this.appendValueInput('APIKey')
.setCheck(String)
.appendField('APIKey');
this.setInputsInline(false);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const init_xunfei_vi_run = {
init: function () {
this.setColour(AI_CLOUD_VOICE_HUE);
this.appendValueInput('VAR')
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_RUN + Blockly.Msg.MIXLY_AipSpeech_asr);
this.appendValueInput('time')
.setCheck(Number);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXPY_AI_AUDIO_TIME);
this.setInputsInline(true);
this.setOutput(true);
this.setTooltip(Blockly.Msg.init_xunfei_vi_op_tooltip);
}
};
export const init_xunfei_Spark_Ultra_run = {
init: function () {
this.setColour(AI_CLOUD_VOICE_HUE);
this.appendValueInput('VAR')
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_RUN + Blockly.Msg.MIXLY_LARGE_LANGUAGE_MODEL);
this.appendValueInput('qus')
.setCheck(String)
.appendField(Blockly.Msg.MIXLY_MICROPYTHON_SOCKET_SEND);
this.setInputsInline(true);
this.setOutput(true);
this.setTooltip(Blockly.Msg.init_xunfei_vi_run_tooltip);
}
};
export const init_xunfei_Spark_Ultra_clr_his = {
init: function () {
this.setColour(AI_CLOUD_VOICE_HUE);
this.appendValueInput('VAR')
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_RUN + Blockly.Msg.MIXLY_LARGE_LANGUAGE_MODEL + Blockly.Msg.MIXLY_EMPTY_HISTORY);
this.setInputsInline(true);
this.setPreviousStatement(true);
this.setNextStatement(true);
}
};
export const llm_set_callback = {
init: function () {
this.setColour(AI_CLOUD_VOICE_HUE);
this.appendValueInput('VAR1')
.appendField(Blockly.Msg.MIXLY_LARGE_LANGUAGE_MODEL)
this.appendValueInput('callback')
.appendField(Blockly.Msg.MIXLY_PYTHON_CONTROLS_THREAD_USE)
this.appendValueInput('VAR')
.appendField(Blockly.Msg.MIXLY_PARAMS);
this.setPreviousStatement(true);
this.setNextStatement(true);
this.setInputsInline(true);
this.setTooltip(Blockly.Msg.llm_set_callback_tooltip);
}
};

View File

@@ -4,6 +4,7 @@ import * as MicroPythonActuatorBlocks from './blocks/actuator';
import * as MicroPythonAISensorBlocks from './blocks/ai_sensor';
import * as MicroPythonAIBlocks from './blocks/ai';
import * as MicroPythonAILocalBlocks from './blocks/ai_local';
import * as MicroPythonAICloudBlocks from './blocks/ai_cloud';
import * as MicroPythonBlynkBlocks from './blocks/blynk';
import * as MicroPythonCCG1Blocks from './blocks/cc_g1';
import * as MicroPythonCEGOBlocks from './blocks/ce_go';
@@ -32,6 +33,7 @@ import * as MicroPythonActuatorGenerators from './generators/actuator';
import * as MicroPythonAISensorGenerators from './generators/ai_sensor';
import * as MicroPythonAILocalGenerators from './generators/ai_local';
import * as MicroPythonAIGenerators from './generators/ai';
import * as MicroPythonAICloudGenerators from './generators/ai_cloud';
import * as MicroPythonBlynkGenerators from './generators/blynk';
import * as MicroPythonCCG1Generators from './generators/cc_g1';
import * as MicroPythonCEGOGenerators from './generators/ce_go';
@@ -67,6 +69,7 @@ export {
MicroPythonAISensorBlocks,
MicroPythonAIBlocks,
MicroPythonAILocalBlocks,
MicroPythonAICloudBlocks,
MicroPythonBlynkBlocks,
MicroPythonCCG1Blocks,
MicroPythonCEGOBlocks,
@@ -94,6 +97,7 @@ export {
MicroPythonAISensorGenerators,
MicroPythonAIGenerators,
MicroPythonAILocalGenerators,
MicroPythonAICloudGenerators,
MicroPythonBlynkGenerators,
MicroPythonCCG1Generators,
MicroPythonCEGOGenerators,

View File

@@ -0,0 +1,48 @@
import { Boards } from 'mixly';
export const init_xunfei_vi = function (_, generator) {
generator.definitions_['import_mini_xunfei'] = "import mini_xunfei";
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var id = generator.valueToCode(this, 'APPID', generator.ORDER_ATOMIC);
var s = generator.valueToCode(this, 'APISecret', generator.ORDER_ATOMIC);
var key = generator.valueToCode(this, 'APIKey', generator.ORDER_ATOMIC);
var code = v + ' = mini_xunfei.ASR_WebSocket(' + id + ',' + key + ',' + s +')\n';
return code;
}
export const init_xunfei_Spark_Ultra = function (_, generator) {
generator.definitions_['import_mini_xunfei'] = "import mini_xunfei";
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var id = generator.valueToCode(this, 'APPID', generator.ORDER_ATOMIC);
var s = generator.valueToCode(this, 'APISecret', generator.ORDER_ATOMIC);
var key = generator.valueToCode(this, 'APIKey', generator.ORDER_ATOMIC);
var code = v + ' = mini_xunfei.LLM_WebSocket(' + id + ',' + key + ',' + s +')\n';
return code;
}
export const init_xunfei_vi_run = function (_, generator) {
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var t = generator.valueToCode(this, 'time', generator.ORDER_ATOMIC);
var code = v + '.run(' + t +')';
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var q = generator.valueToCode(this, 'qus', generator.ORDER_ATOMIC);
var code = v + '.run(' + q +')';
return [code,generator.ORDER_ATOMIC];
}
export const init_xunfei_Spark_Ultra_clr_his = function (_, generator) {
var v = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = v + '.empty_history()\n';
return code;
}
export const llm_set_callback = function (_, generator) {
var v1 = generator.valueToCode(this, "VAR1", generator.ORDER_NONE) || "None";
var v = generator.valueToCode(this, "VAR", generator.ORDER_NONE) || "None";
var callback = generator.variableDB_.getName(
generator.valueToCode(this, "callback", generator.ORDER_NONE) || "None",
Blockly.Procedures.NAME_TYPE
);
var code = v1 +".function_call(" + callback + ", " + v + ")\n";
return code;
}

View File

@@ -485,4 +485,14 @@ div.blocklyToolboxDiv>div.blocklyToolboxContents>div:nth-child(12)>div.blocklyTr
#catBLEKM.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/comuni2.png') no-repeat;
background-size: 100% auto;
}
#catVI.blocklyTreeRow>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/AIvoice.png') no-repeat;
background-size: 100% auto;
}
#catVI.blocklyTreeRow.blocklyTreeSelected>div.blocklyTreeRowContentContainer>span.blocklyTreeIcon {
background: url('../../../../common/media/mark/AIvoice2.png') no-repeat;
background-size: 100% auto;
}

View File

@@ -39,6 +39,7 @@ import {
MicroPythonAISensorBlocks,
MicroPythonAIBlocks,
MicroPythonAILocalBlocks,
MicroPythonAICloudBlocks,
MicroPythonBlynkBlocks,
MicroPythonCCG1Blocks,
MicroPythonCEGOBlocks,
@@ -59,6 +60,7 @@ import {
MicroPythonAISensorGenerators,
MicroPythonAIGenerators,
MicroPythonAILocalGenerators,
MicroPythonAICloudGenerators,
MicroPythonBlynkGenerators,
MicroPythonCCG1Generators,
MicroPythonCEGOGenerators,
@@ -131,6 +133,7 @@ Object.assign(
MicroPythonWeatherBlocks,
MicroPythonAISensorBlocks,
MicroPythonAILocalBlocks,
MicroPythonAICloudBlocks,
MicroPythonSensorOnBoardBlocks,
MicroPythonSensorExternBlocks,
MicroPythonNetworkBlocks,
@@ -172,6 +175,7 @@ Object.assign(
MicroPythonWeatherGenerators,
MicroPythonAISensorGenerators,
MicroPythonAILocalGenerators,
MicroPythonAICloudGenerators,
MicroPythonSensorOnBoardGenerators,
MicroPythonSensorExternGenerators,
MicroPythonNetworkGenerators,

View File

@@ -2811,6 +2811,124 @@
</value>
</block>
</category>
</category>
<category id="catCloudAI" colour="#75878a">
<category id="catVI" colour="88ada6">
<block type="init_xunfei_vi">
<value name="VAR">
<shadow type="variables_get">
<field name="VAR">asr</field>
</shadow>
</value>
<value name="APPID">
<shadow type="text">
<field name="TEXT">ba3917dd</field>
</shadow>
</value>
<value name="APISecret">
<shadow type="text">
<field name="TEXT">Nzg4MWUyNGE1ZTcxOGZkNzM4NWQ4Yzdi</field>
</shadow>
</value>
<value name="APIKey">
<shadow type="text">
<field name="TEXT">b47549319a8324f5eab3dd5c37dfa1dd</field>
</shadow>
<value>
</block>
<block type="init_xunfei_Spark_Ultra">
<value name="VAR">
<shadow type="variables_get">
<field name="VAR">llm</field>
</shadow>
</value>
<value name="APPID">
<shadow type="text">
<field name="TEXT">ba3917dd</field>
</shadow>
</value>
<value name="APISecret">
<shadow type="text">
<field name="TEXT">Nzg4MWUyNGE1ZTcxOGZkNzM4NWQ4Yzdi</field>
</shadow>
</value>
<value name="APIKey">
<shadow type="text">
<field name="TEXT">b47549319a8324f5eab3dd5c37dfa1dd</field>
</shadow>
<value>
</block>
<block type="init_xunfei_vi_run">
<value name="VAR">
<shadow type="variables_get">
<field name="VAR">asr</field>
</shadow>
</value>
<value name="time">
<shadow type="math_number">
<field name="NUM">3</field>
</shadow>
</value>
</block>
<block type="init_xunfei_Spark_Ultra_run">
<value name="VAR">
<shadow type="variables_get">
<field name="VAR">llm</field>
</shadow>
</value>
<value name="qus">
<shadow type="text">
<field name="TEXT">question</field>
</shadow>
</value>
</block>
<block type="init_xunfei_Spark_Ultra_clr_his">
<value name="VAR">
<shadow type="variables_get">
<field name="VAR">llm</field>
</shadow>
</value>
</block>
<block type="llm_set_callback">
<value name="VAR1">
<shadow type="variables_get">
<field name="VAR">llm</field>
</shadow>
</value>
<value name="callback">
<shadow type="factory_block_return">
<field name="VALUE">cb_func</field>
</shadow>
</value>
<value name="VAR">
<block type="tuple_create_with_text_return">
<field name="TEXT">"参数名","类型","描述"</field>
</block>
</value>
</block>
<block type="procedures_defnoreturn">
<mutation>
<arg name="xx"></arg>
</mutation>
<field name="NAME">cb_func</field>
<statement name="STACK">
<block type="system_print_many">
<mutation items="2"></mutation>
<value name="ADD0">
<block type="text">
<field name="TEXT">cb------</field>
</block>
</value>
<value name="ADD1">
<block type="variables_get">
<field name="VAR">xx</field>
</block>
</value>
</block>
</statement>
</block>
</category>
</category>
<category id="catGroup" colour="140">
<category id="catBLE" colour="140">