积木块函数定义文档
运动控制模块:
- 模块类:RobotControl
- 使用方法:
from kuavo_humanoid_sdk import RobotControlBlockly
robot_control = RobotControlBlockly()
以下为运动控制模块的各个积木块函数说明:
启动机器人运动
- 函数:
robot_control.start() - 参数类型:无
- 描述:令机器人原地踏步
- 函数:
以 X 速度,Y 速度,yaw 旋转速度移动
- 函数:
robot_control.walk(x, y, yaw) - 参数类型:float
- 描述:令机器人以 X,Y,YAW 的速度进行移动
- 参数范围:x: [-0.4, 0.4]米/秒,y: [-0.2, 0.2]米/秒,yaw: [-0.4, 0.4]弧度/秒
- 函数:
以 X 速度,Y 速度,yaw 旋转速度移动
- 函数:
robot_control.walk_angle(x, y, yaw) - 参数类型:float
- 描述:令机器人以 X,Y,YAW 的速度进行移动
- 参数范围:x: [-0.4, 0.4]米/秒,y: [-0.2, 0.2]米/秒,yaw: [-22.92, 22.92]度/秒
- 函数:
停止机器人运动
- 函数:
robot_control.stop() - 参数类型:无
- 描述:令机器人停止移动
- 函数:
执行机器人动作
- 函数:
robot_control.excute_action_file("roban2") - 参数类型:string
- 描述:机器人执行默认目录下的目标 .tact 动作
- 备注:需将目标 .tact 文件下载到 /home/lab/.config/lejuconfig/action_files 目录下
- 函数:
执行机器人目标目录下的动作
- 函数:
robot_control.excute_action_file("roban2", proj_name="proj_name") - 参数类型:string, string
- 描述:机器人执行 proj_name/action_files 目录下的目标 .tact 动作
- 备注:需将目标 .tact 文件下载到 upload_files/proj_name/action_files 目录下
- 函数:
执行机器人动作并同步播放音频
- 函数:
robot_control.excute_action_file("roban2", music_file="music_name.wav") - 参数类型:string, string
- 描述:机器人执行默认目录下的目标 .tact 动作并且播放 music_name.wav 音频
- 备注:需将目标 .tact 文件下载到 /home/lab/.config/lejuconfig/action_files 目录下,音频文件下载到 * */home/lab/.config/lejuconfig/music** 目录下
- 函数:
执行机器人目标目录下动作并同步播放音频
- 函数:
robot_control.excute_action_file("roban2", proj_name="roban2", music_file="music_name.wav") - 参数类型:string, string, string
- 描述:机器人执行目标目录下的目标 .tact 动作并且播放 music_name.wav 音频
- 备注:需将目标 .tact 文件下载到 upload_files/proj_name/action_files 目录下,音频文件下载到 * */home/lab/.config/lejuconfig/music** 目录下
- 函数:
设置机器人手臂模式
- 函数:
robot_control.set_arm_control_mode(mode) - 参数类型:int
- 描述:设定机器人的手臂模式
- 参数说明:mode: 0-固定模式,1-自动摆动模式,2-外部控制模式
- 函数:
机器人恢复初始站立姿态
- 函数:
robot_control.to_stance() - 参数类型:无
- 描述:恢复机器人的站立姿态到初始状态
- 函数:
机器人躯干上升/下降
- 函数:
robot_control.control_robot_height(is_up, height) - 参数类型:string, float
- 描述:令机器人的质心在竖直方向上移动
- 参数说明:is_up: "down" 表示质心下降,"up" 表示质心上升;height: [-0.3, 0.0]米
- 函数:
移动机器人头部到偏航角和俯仰角
- 函数:
robot_control.control_robot_head(yaw, pitch) - 参数类型:float
- 描述:控制机器人的头同时在 yaw 和 pitch 上进行移动
- 参数范围:yaw: [-80, 80]度;Roban2 pitch: [0, 25]度;Kuavo pitch: [-25, 25]度
- 函数:
仅移动机器人头部到偏航角
- 函数:
robot_control.control_robot_head_only_yaw(yaw) - 参数类型:float
- 描述:仅控制机器人的头在 yaw 方向上移动
- 参数范围:yaw: [-80, 80]度
- 函数:
仅移动机器人头部到俯仰角
- 函数:
robot_control.control_robot_head_only_pitch(pitch) - 参数类型:float
- 描述:仅控制机器人的头在 pitch 方向上移动
- 参数范围:Roban2 pitch: [0, 25]度;Kuavo pitch: [-25, 25]度
- 函数:
移动机器手臂到目标姿态
- 函数:
robot_control.control_arm_target_pose(x1, y1, z1, yaw1, pitch1, roll1, x2, y2, z2, yaw2, pitch2, roll2) - 参数类型:float
- 描述:控制机器人的手臂移动到目标姿态
- 参数说明:(x1, y1, z1, yaw1, pitch1, roll1) 为左臂目标姿态,(x2, y2, z2, yaw2, pitch2, roll2) 为右臂目标姿态
- 函数:
移动机器人单臂到目标姿态
- 函数:
robot_control.control_arm_target_pose_by_single(hand_type, x, y, z, yaw, pitch, roll) - 参数类型:string, float
- 描述:仅控制机器人的单臂进行运动
- 参数说明:hand_type: "L" 表示左臂运动,"R" 表示右臂运动;(x, y, z, yaw, pitch, roll) 为目标姿态
- 函数:
播放音乐
- 函数:
robot_control.play_music("music_name.wav") - 参数类型:string
- 描述:控制机器人播放指定音频
- 备注:需将目标音频文件下载到 /home/lab/.config/lejuconfig/music 目录下
- 函数:
腰部控制
- 函数:
robot_control.control_waist_rotation(degree) - 参数类型:float
- 描述:控制机器人的腰部在 yaw 方向上转动
- 参数范围:[-120.0, 120.0]度
- 函数:
停止播放音乐
- 函数:
robot_control.stop_music() - 参数类型:string
- 描述:控制机器人播放指定音频
- 备注:需将目标音频文件下载到 /home/lab/.config/lejuconfig/music 目录下
- 函数:
机器人对准目标
- 函数:
robot_control.alignment_target(class_name, confidence, x, y, z) - 参数类型:string, float, float, float, float
- 描述:使机器人对准指定类别到对象,并移动到目标前
- 参数说明:(以图像中心建立二维坐标,向右为 x 的正方向,向下为 y 的正方向)
- class_id 为 yolo 检测中需要检测的对象名称,和训练模型中的类别名称一致;
- confidence 为 yolo 检测中需要检测的概率阈值
- x 为图像 x 方向的偏移值,物体中心的 x 小于该参数 -x 时,机器人左移,大于该参数 x 时,机器人右移
- y 为图像 y 方向的偏移值,物体中心的 y 小于该参数 y 时,机器人前进,否则停止移动
- z 为机器人上下蹲的高度控制
- 参数范围:x:[0,320]像素点;y:[-240,240]像素点;z:[-0.3,0.3]米
- 返回值:无
- 函数:
导航类模块定义
from kuavo_humanoid_sdk import RobotNavigationBlockly
robot_navigation = RobotNavigationBlockly
导航到目标点
- 函数:
robot_navigation.navigate_to_goal(x, y, z, yaw, pitch, roll) - 参数类型: float
- 描述:令机器人导航到目标 pose.
- 参数说明:(x, y, z, yaw, pitch, roll) 为目标姿态
- 函数:
导航到任务点
- 函数:
robot_navigation.navigate_to_task_point("task1") - 参数类型: string
- 描述:令机器人导航到 "task1" 任务点
- 参数说明:task1 为目标任务点的名字
- 函数:
停止所有导航任务
- 函数:
robot_navigation.stop_navigation() - 参数类型: 无
- 描述:取消机器人的导航任务
- 参数说明:无
- 函数:
获取当前导航状态
- 函数:
robot_navigation.get_current_status() - 参数类型: 无
- 描述:获取当前机器人的导航状态
- 参数说明:无
- 返回说明:
PENDING = 0 #等待中
ACTIVE = 1 #导航中
PREEMPTED = 2 #导航被取消(成功取消)
SUCCEEDED = 3 #导航成功
ABORTED = 4 #导航失败
REJECTED = 5 #导航被拒绝- 函数:
通过目标位姿校准初始化
- 函数:
robot_navigation.init_localization_by_pose(x, y, z, roll, pitch, yaw) - 参数类型: float
- 描述:令机器人按照所给的姿态进行初始化
- 参数说明:(x, y, z, yaw, pitch, roll) 为目标姿态
- 函数:
前往指定坐标点并设置朝向
- 函数:
robot_navigation.navigate_to_point_with_heading(x, y, heading) - 参数类型:float, float, float
- 描述:令机器人导航到指定的坐标点并设置朝向
- 参数说明:x为目标x坐标(米),y为目标y坐标(米),heading为目标朝向角度(度),0度为正东方向,90度为正北方向
- 返回值:bool,导航成功返回True,失败返回False
- 函数:
通过任务点校准初始化
- 函数:
robot_navigation.init_localization_by_task_point(task_name) - 参数类型: string
- 描述:令机器人按照所给的任务点的姿态进行初始化
- 参数说明:task_name 为目标任务点,机器人应当处于该点且朝向一致.
- 函数:
加载地图
- 函数:
robot_navigation.load_map(map_name) - 参数类型: string
- 描述:令机器人加载所给的地图
- 参数说明:map_name 为目标地图,机器人重新加载地图后,需要重新进行校准初始化.
- 函数:
获取所有地图
- 函数:
robot_navigation.get_all_maps() - 参数类型: 无
- 描述:获取机器人所拥有的地图
- 参数说明:无
- 返回说明:返回一个列表 maps[],包含所有的地图名.
- 函数:
获取当前地图
- 函数:
robot_navigation.get_current_map() - 参数类型: 无
- 描述:获取机器人当前所用的地图
- 参数说明:无
- 返回说明:返回一个字符串,是当前所用的地图.
- 函数:
爬楼梯类模块定义
模块类:RobotControlBlockly(爬楼梯功能集成在运动控制模块中)
使用方法:
from kuavo_humanoid_sdk import RobotControlBlockly
robot_control = RobotControlBlockly()
以下为爬楼梯模块的各个积木块函数说明:
设置爬楼梯参数
- 函数:
robot_control.set_stair_parameters(step_height=0.08, step_length=0.28, foot_width=0.108535, stand_height=0.0, dt=1.0, ss_time=0.6) - 参数类型:float
- 描述:设置爬楼梯的基本参数,包括台阶高度、长度、脚宽等
- 参数说明:
- step_height: 台阶高度(米),默认0.08
- step_length: 台阶长度(米),默认0.28
- foot_width: 脚宽(米),默认0.108535
- stand_height: 站立高度偏移(米),默认0.0
- dt: 步态周期时间(秒),默认1.0
- ss_time: 单支撑时间比例,默认0.6
- 返回值:bool,成功返回True,失败返回False
- 函数:
爬上楼梯
- 函数:
robot_control.climb_up_stairs(num_steps=4, stair_offset=0.03) - 参数类型:int, float
- 描述:规划并添加上楼梯轨迹到累积轨迹中
- 参数说明:
- num_steps: 要爬升的台阶数,默认4
- stair_offset: 台阶偏移量(米),默认0.03
- 返回值:bool,成功返回True,失败返回False
- 函数:
爬下楼梯
- 函数:
robot_control.climb_down_stairs(num_steps=5) - 参数类型:int
- 描述:规划并添加下楼梯轨迹到累积轨迹中(当前功能已禁用)
- 参数说明:num_steps: 要下降的台阶数,默认5
- 返回值:bool,当前固定返回False(功能开发中)
- 备注:⚠ 下楼梯功能当前已禁用(开发中)
- 函数:
爬楼梯模式移动到指定位置
- 函数:
robot_control.stair_move_to_position(dx=0.2, dy=0.0, dyaw=0.0, max_step_x=0.28, max_step_y=0.15, max_step_yaw=30.0) - 参数类型:float
- 描述:规划爬楼梯移动到位置轨迹并添加到累积轨迹中
- 参数说明:
- dx: X方向位移(米),默认0.2
- dy: Y方向位移(米),默认0.0
- dyaw: 偏航角位移(度),默认0.0
- max_step_x: X方向最大步长,默认0.28
- max_step_y: Y方向最大步长,默认0.15
- max_step_yaw: 偏航角最大步长(度),默认30.0
- 返回值:bool,成功返回True,失败返回False
- 函数:
执行爬楼梯轨迹
- 函数:
robot_control.execute_stair_trajectory() - 参数类型:无
- 描述:执行完整的累积爬楼梯轨迹
- 返回值:bool,成功返回True,失败返回False
- 函数:
运动并对齐楼梯朝向
- 函数:
robot_control.align_stair() - 参数类型:无
- 描述:基于视觉 tag 识别控制机器人单步运动到楼梯前方固定的点和朝向(具体坐标可事先标定,否则使用默认值: offset_x:0.80,offset_y: 0.30,offset_yaw:0.00)
- 返回值:bool,成功返回 True,失败返回 False
- 函数:
一键上楼梯
- 函数:
robot_control.simple_up_stair(stair_height = 0.08,stair_length = 0.25,stair_num = 4) - 参数类型:float,float,int,float
- 描述:采取新的规划方式进行爬楼梯,经过测试较为稳定
- 参数说明:
- stair_height:楼梯的高度(米),默认 0.08
- stair_length:单阶楼梯的长度(米),默认 0.25
- stair_num:上楼梯的阶数,默认 4 阶
- 返回值:bool,成功返回 True,失败返回False
- 函数:
爬楼梯功能使用示例(old):
# 设置爬楼梯参数
robot_control.set_stair_parameters(step_height=0.15, step_length=0.30)
# 规划上楼梯轨迹
robot_control.climb_up_stairs(num_steps=3)
# 规划移动轨迹
robot_control.stair_move_to_position(dx=0.5, dy=0.0, dyaw=0.0)
# 执行完整轨迹
robot_control.execute_stair_trajectory()
详细参数说明:
爬楼梯功能的成功率非常依赖于轨迹的调控,以下是关键参数的详细说明:
dt = 0.6:腾空步态周期(秒)ss_time = 0.5:支撑相时间比例foot_width = 0.10:足宽(米)step_height = 0.13:台阶高度(米)step_length = 0.28:台阶长度(米)
使用要求:
- 将机器人放于楼梯前固定距离(大概2cm)
- 机器人必须处于站立状态,面向楼梯方向
- 执行前确保楼梯参数设置正确
注意事项:
- 所有爬楼梯相关函数需要先调用规划函数添加轨迹,最后调用
execute_stair_trajectory()执行 - 爬楼梯功能需要机器人处于站立状态
- 下楼梯功能当前仍在开发中,暂时无法使用
- 建议在执行前先用
set_stair_parameters()设置合适的参数 - 如果出现碰撞或不稳定,可能需要调整腾空相轨迹参数
- 直接修改参数能够适合大部分情况,具体参数需要根据实际楼梯尺寸调整
爬楼梯功能使用示例(new):
# 根据本地配置进行楼梯对齐
robot_control.align_stair()
# 对齐成功后一键上楼梯
robot_control.simple_up_stair(stair_height = 0.08,stair_length = 0.25,stair_num = 4)
使用要求
需要上位机的对齐节点以及 aplirtag 相机识别节点启动。
roslaunch dynamic_biped sensor_apriltag_only_enable.launch
roslaunch stair_alignment stair_alignment.launch需要提前对机器人对齐的位置进行标定,否则将使用默认的参数,自动寻找 tag 进行对齐。
对齐成功后机器人将自动根据参数上楼梯。
注意事项
- 建议在运行前先对机器人在楼梯前的位置进行标定,以确保上楼梯正常。
- 爬楼梯功能需要机器人处于站立状态。
- 如果出现爬楼梯不稳定的情况,请及时调整相关参数,或者联系开发人员进行调试。
语音类模块定义
模块类:RobotMicrophone
使用方法:
from kuavo_humanoid_sdk import RobotMicrophone
robot_microphone = RobotMicrophone()
以下为语音模块的各个积木块函数说明:
等待唤醒词
函数:
microphone.wait_for_wake_word(timeout_sec)参数类型:int
描述:机器人等待语音唤醒,唤醒词为 “Roban Roban”。
返回值:True: 接收到唤醒词,False: 超过指定时间未收到唤醒词
参数范围:timeout_sec 默认为 60s
对话类模块定义
- 模块类:RobotSpeech
- 使用方法:
from kuavo_humanoid_sdk import RobotSpeech
robot_speech = RobotSpeech()
以下为对话模块的各个积木块函数说明:
建立豆包实时语音对话连接
- 函数:
establish_doubao_speech_connection(app_id, access_key) - 参数类型:app_id : str, access_key : str
- 参数描述:机器人语音对话功能采用豆包端到端实时语音大模型 API,使用火山引擎控制台获取 APP ID 和 Access Token.
- 返回值:True: 鉴权成功,False: 鉴权失败.
- 函数:
开始对话
- 函数:
robot_speech.start_speech() - 描述:开始机器人语音对话.
- 函数:
结束对话
- 函数:
robot_speech.stop_speech() - 描述:结束机器人语音对话.
- 函数:
灵巧手类模块定义
- 模块类:DexterousHand
- 使用方法:
from kuavo_humanoid_sdk import DexterousHand
robot_hand = DexterousHand()
以下为灵巧手模块的各个积木块函数说明:
灵巧手关节对应:
单手掌关节列表顺序:['大拇指关节,拇指外展肌,食指关节, 中指关节,无名指关节,小指关节']
控制左手灵巧手
- 函数:
control_left(target_positions) - 参数类型:target_positions : list
- 参数描述:令机器人的左手 6 个关节运动到 target_position 的位置,关节范围:[0,100]
- 返回值:True: 控制成功,False: 控制失败.
- 函数:
控制右手灵巧手
- 函数:
control_right(target_positions) - 参数类型:target_positions : list
- 参数描述:令机器人的右手 6 个关节运动到 target_position 的位置。关节范围:[0,100]
- 返回值:True: 控制成功,False: 控制失败.
- 函数:
控制双手灵巧手
- 函数:
control(target_positions) - 参数类型:target_positions : list
- 参数描述:令机器人的双手共 12 个关节运动到 target_position 的位置。关节范围:[0,100]
- 返回值:True: 控制成功,False: 控制失败.
- 函数:
灵巧手手势列表:
empty → 初始手势
two-finger-spread-unopposed → 两指张开(无拇指配合)
two-finger-spread-opposed → 两指张开(拇指配合)
tripod-pinch-opposed → 三指捏握(拇指相对)
thumbs-up → 竖大拇指
inward-thumb → 拇指向内
five-finger-pinch → 五指捏握
rock-and-roll → “摇滚”手势(大拇指与小拇指举起)
pen-grip2 → 笔握 2
finger-pointing-unopposed → 单指指向(无拇指配合)
flick-index-finger → 弹食指
cylindrical-grip → 圆柱握持
pen-grip3 → 笔握 3
tripod-pinch-unpposed → 三指捏握(无拇指配合)
finger-pointing-opposed → 单指指向(拇指配合)
palm-open → 手掌张开
flick-middle-finger → 弹中指
fist → 拳头
four-finger-straight → 四指伸直
mouse-control → 鼠标控制手势
pen-grip1 → 笔握 1
precision-pinch-opposed → 精细捏握(拇指相对)
precision-pinch-unopposed → 精细捏握(无拇指配合)
shaka-sign → “Shaka” 手势(夏威夷致意,拇指和小指伸出)
side-pinch → 侧捏握持
控制左手灵巧手执行手势
- 函数:
make_gesture_sync(gesture_name,None) - 参数类型:gesture_name : str
- 参数描述:令机器人的左手执行手势 gesture_name。
- 返回值:True: 控制成功并完成,False: 控制失败或超时.
- 函数:
控制右手灵巧手执行手势
- 函数:
make_gesture_sync(None,gesture_name) - 参数类型:gesture_name : str
- 参数描述:令机器人的右手执行手势 gesture_name。
- 返回值:True: 控制成功并完成,False: 控制失败或超时.
- 函数:
控制双手灵巧手执行手势
- 函数:
make_gesture_sync(l_gesture_name,r_gesture_name) - 参数类型:l_gesture_name : str, r_gesture_name : str
- 参数描述:令机器人的左手执行 l_gesture_name 手势,右手执行 r_gesture_name 手势。
- 返回值:True: 控制成功并完成,False: 控制失败或超时.
- 函数:
豆包相关工具类:
如果使用此类下的函数,需要在生成的python代码中,main函数之前加入以下引入代码:
from kuavo_humanoid_sdk import KuavoRobotLLM
kuavo_llm = KuavoRobotLLM()
1. 导入动作到llm
需求:将所有预制动作和编辑区内的自定义动作全部包含
所有预制动作需要传入lejuconfig中,所有自定义动作按之前的逻辑传入项目中
- 函数:
kuavo_llm.import_action_from_files(project_name:str) - 作用:将action_files中所有动作注册到llm类中,使用文件名作为动作名称
- args:
- project_name: str: 项目名称,用于指定知识库文件夹路径,由前端直接拼入
- return: None
2. 导入自定义函数到llm
需求:将自定义函数注册到llm的prompt中
- 函数:
kuavo_llm.register_function(function_comment: str, function: str) - 作用: 将自定义函数注册到llm中
- args:
- function_comment: str: 函数的注释,需要拼接到prompt中供大模型理解函数作用
- function: str: 自定义函数的名称,将函数积木块拖入后使用引号进行包裹
- return: None
例:
kuavo_llm.register_function(
function_comment="自定义函数1,用于执行某些操作",
function='custom_func_1("abc",123)'
)
注意:'action'参数的引号为单引号
3. 增加实例样本:当用户说xxx时,llm应该yyy,并做zzz动作
需求: 将函数实例注册给llm,使llm在返回时能正确执行zzz动作(返回做动作的要求)
- 函数: `kuavo_llm.register_case(user_input: str, robot_response: str, action: str)
- 作用: 将函数实例注册给llm,使llm在返回时能正确执行zzz动作(返回做动作的要求)
- args:
- user_input: str: 用户输入的文本,作为触发条件
- robot_response: str: 机器人返回的文本,作为给llm的示例输出
- action: str: 自定义函数的名称,将函数积木块拖入后使用引号进行包裹,或传入包含动作名称的动作执行函数
- return: None
示例1:
kuavo_llm.register_case(
user_input="你好",
robot_response="你好,我是机器人",
action='custom_func_1("123")'
)
示例2:
kuavo_llm.register_case(
user_input="和我打个招呼",
robot_response="你好呀",
action='robot_control.execute_action_file("1.前伸双手")'
)
示例3:
kuavo_llm.register_case(
user_input="和我跳个舞",
robot_response="好的",
action='robot_control.execute_action_file("跳个舞","demo_project")'
)
注意:'action'参数的引号为单引号
4. 添加上传到知识库的接口
需求:从知识库中读取对应文件,将文件内容拼接到prompt中
知识库文件夹路径: (与.py文件同级):knowledge_base/
- 函数:
kuavo_llm.add_file_to_prompt(file_name:str,project_name:str) - 作用: 将知识库中文件内容拼接到prompt中
- args:
- file_name: str: 文件名,需要包含文件扩展名(目前只接受.txt文件) 单个文件大小限制:300KB
- project_name: str: 项目名称,用于指定知识库文件夹路径,由前端直接拼入
- return: None
注:如果拼接后超限,会报错到日志
5. 触发asr(从麦克风接收输入后转为文本)
- 函数:
kuavo_llm.trigger_asr() - 作用: 触发asr,从麦克风接收输入后转为文本
- args:无
- return:
- str: 转换后的文本
6. 与大模型展开会话
需求:接收文字输入/接收语音输入后进行asr,将结果文本输出到大模型中,经过prompt组装,上下文拼接后传给大模型,大模型返回文本与函数调用信息(如果有)
- 函数:
kuavo_llm.chat_with_llm(user_input: str) - 作用: 与大模型展开会话
- args:
- user_input: str: 用户输入的文本
- return:
dict{
"success": 0, # 0:成功,1:失败
"text": "大模型返回的文本", # 大模型返回的文本
"intent": "意图", # 大模型返回的意图
"slot": ""|"动作函数名称"|"自定义动作名称"|"函数调用字符串",
}
7. 大模型返回并只播报语音
需求: 大模型返回文本后,将文本转换为语音,并播放出来
- 函数:
kuavo_llm.response_with_voice(llm_output: dict) - 作用: 将文本转换为语音,并播放出来
- args:
- llm_output: dict: 大模型返回的文本与函数调用信息
- return:
- None
8. 大模型返回播报语音并执行函数
需求: 大模型返回文本后,将文本转换为语音,并播放出来,如果有函数调用,则执行函数
- 函数:
response_with_voice_and_action(llm_output: dict) - 作用: 将文本转换为语音,并播放出来,如果有函数调用,则执行函数
- args:
- llm_output: dict: 大模型返回的文本与函数调用信息
- return:
- None
注: 该功能需要在生成的python代码中通过字符串运行函数,所以需要类似aelos那样在生成的python代码中加入函数定义 形如(在生成的python文件中):
...
def response_with_voice_and_action(llm_output: dict):
if not llm_output.get("success", 1) == 0:
return
kuavo_llm.response_with_voice(llm_output)
if llm_output.get("intent", "") == "function_call":
try:
eval(llm_output.get("slot"))
except:
print(f"【函数调用】执行失败:{llm_output.get('slot','')}")
if llm_output.get("intent", "") == "action":
robot_control.excute_action_file(llm_output["slot"][:-5])
if llm_output.get("intent", "") == "action_custom":
robot_control.excute_action_file(llm_output['slot'][:-5],"demo_project") # 拼接项目信息
...
def main():
...
response_with_voice_and_action(kuavo_llm.chat_with_llm())