智眸:基于 Rokid Glasses的房产经纪人带看辅助应用

简介: 智眸是贝壳找房为房产经纪人打造的AI眼镜应用,基于Rokid Glasses实现“镜在眼前,智慧搭伴”。通过双端协同,实时投送小区信息、智能提词、全场拾音录制,解放双手、提升专业形象与带看效率,助力经纪人专注服务、沉淀数据。

智眸:基于 Rokid Glasses的房产经纪人带看辅助应用

Slogan:镜在眼前,智慧搭伴


一、应用介绍

1.1 经纪人工作场景与痛点

房产经纪人的日常工作核心是"带看"——带领客户实地查看房源。在这个过程中,经纪人需要:

  • 实时介绍小区信息:建筑年代、容积率、绿化率、物业费、燃气费等核心数据
  • 解答客户疑问:周边配套、学区政策、交通状况等
  • 记录客户需求:客户反馈、关注点、意向程度等

传统作业模式下,经纪人面临以下痛点 (尤其是新手经纪人和跨区带看经纪人):

  1. 信息查阅不便:需要掏出手机查看信息,打断带看节奏
  2. 专业形象受损:低头看手机给客户留下不专业的印象
  3. 信息记忆负担:大量小区数据难以完全记忆,临时查询影响体验
  4. 带看记录缺失:带看过程中的对话和客户需求难以完整记录

1.2 智能眼镜的优势

Rokid Glasses 为经纪人作业场景带来了创新性的解决方案:

  • 设备轻量化:眼镜形态,佩戴自然,解放双手
  • 智能屏显技术:信息实时呈现在眼前,无需低头查看
  • 音频采集能力:实时录制带看对话,为后续分析提供数据

1.3 智眸应用概述

智眸 是贝壳找房专为经纪人打造的 AI 眼镜端应用,运行于 Rokid Glasses 眼镜设备和普通 Android 手机设备。

本项目基于 Rokid CXR-M SDK(手机端)CXR-S SDK(眼镜端)开发,旨在通过 AI 技术和智能眼镜赋能经纪人,提供:

  • 实时小区信息提醒:眼镜端实时展示当前小区的核心数据
  • 智能总结提词:结合 AI 能力进行智能总结提词
  • 社区信息采集:利用Rokid Glasses设备的便携性拍摄能力,在采集过程中边走边录
  • 便捷的视听辅助:解放双手,提升带看体验与作业效率

二、功能需求:信息宝典

2.1 功能名称

信息宝典

2.2 功能描述

基于 Rokid Glasses 智能眼镜的屏显技术,为经纪人提供带看中的小区楼盘信息提示功能。通过手机与眼镜的双端协同,实现:

  • 小区列表展示与选择
  • 实时音频采集与传输
  • 服务端语音识别与信息匹配
  • 眼镜端信息实时提示

2.3 功能目标

  • 提升经纪人带看体验:无需频繁查看手机,信息自然呈现在眼前
  • 打造专业的服务体验:解放双手,与客户保持流畅交流
  • 积累带看数据资产:录制完整带看音频,为后续数据分析、AI 训练提供素材

2.4 使用场景与流程

1. 启动功能
   └─> 两端建立连接
   └─> 唤起"信息宝典"功能

2. 选择小区
   └─> 基于定位获取附近小区列表
   └─> 眼镜端展示小区列表
   └─> 经纪人通过眼镜按或者手机选择目标小区,或者搜索其他小区

3. 带看过程
   └─> 眼镜端开始实时录音
   └─> 音频流通过 SDK 传输到手机端
   └─> 手机端转发到服务端进行语音识别
   └─> 服务端匹配楼盘字典信息
   └─> 推送信息到手机端
   └─> 手机端通过 SDK 推送到眼镜端
   └─> 眼镜端实时展示信息

4. 结束带看
   └─> 停止录音
   └─> 上报带看统计数据
   └─> 音频文件保存用于后续分析

三、技术方案

3.1 技术选型

为什么选择 CXR-M + CXR-S SDK 组合?

CXR-M SDK(手机端)核心能力:

  • 与 Rokid Glasses 建立连接
  • 获取眼镜端的音频流
  • 与 CXR-S SDK 构建自定义通信协议
  • 操作眼镜端的亮度、音量,获取眼镜基本信息等

CXR-S SDK(眼镜端)核心能力:

  • 构建自定义页面
  • 监听眼镜按键信息
  • 与 CXR-M SDK 构建自定义通信协议

选型理由

  1. 双端协同需求:信息宝典功能需要手机端和眼镜端实时双向数据同步
  2. 复杂交互需求:眼镜端需要使用CXR-S SDK实时监听手机端推送的数据,进行复杂的界面展示和交互
  3. 音频采集需求:CXR-M SDK 可直接获取眼镜端音频流,无需眼镜端额外处理
  4. 通信灵活性:支持自定义命令和数据传输协议,构建双端数据通信的桥梁

3.2 整体方案设计

信息宝典数据流.png

3.3 音频采集方案:基于 CXR-M SDK 的音频流能力

3.3.1 音频流监听核心实现

CXR-M SDK 通过 DataInteractionHelper 提供了完整的音频流采集能力。SDK 内部实现了音频流监听器,负责接收眼镜端传输的音频数据并分发给业务层:

// DataInteractionHelper.kt - SDK 音频流监听核心实现
object DataInteractionHelper {

    // 音频流监听实现(SDK 内部)
    private val audioStreamListener by lazy {
        object : AudioStreamListener {
            override fun onStartAudioStream(codecType: Int, streamType: String?) {
                // 分发到所有注册的回调
                audioStreamCallbacks.notifyListeners { callback ->
                    callback.onAudioStreamStarted(codecType, streamType)
                }
            }

            override fun onAudioStream(data: ByteArray?, offset: Int, length: Int) {
                audioStreamCallbacks.notifyListeners(cleanupInvalidReferences = false) { callback ->
                    callback.onAudioStreamReceived(data, offset, length)
                }
            }
        }
    }

    // 开启/关闭音频流监听(全局开关)
    fun switchGlobalAudioStreamListenerEnable(enable: Boolean) {
        CxrApi.getInstance().setAudioStreamListener(
            if (enable) audioStreamListener else null
        )
    }

    // 注册音频流回调
    fun registerAudioStreamCallback(callback: CXRAudioStreamCallback) {
        switchGlobalAudioStreamListenerEnable(true)
        audioStreamCallbacks.addListener(callback)
    }

    // 注销音频流回调
    fun unregisterAudioStreamCallback(callback: CXRAudioStreamCallback) {
        audioStreamCallbacks.removeListener(callback)
    }

    // 通知眼镜开始音频采集
    fun openAudioRecord(codecType: Int, streamType: String): ValueUtil.CxrStatus? {
        return CxrApi.getInstance().openAudioRecord(codecType, streamType)
    }

    // 通知眼镜结束音频采集
    fun closeAudioRecord(streamType: String): ValueUtil.CxrStatus? {
        return CxrApi.getInstance().closeAudioRecord(streamType)
    }
}

核心逻辑说明

  1. 音频流监听器audioStreamListener 是监听实现,负责接收眼镜端传输的音频数据
  2. 回调分发机制:通过 audioStreamCallbacks.notifyListeners 将音频数据分发给所有注册的业务回调
  3. 全局开关switchGlobalAudioStreamListenerEnable 控制音频流监听的开启和关闭
  4. 回调管理:支持多个业务方注册和注销音频流回调

3.3.2 拾音场景切换功能

CXR-M SDK 支持近场、远场、全场三种拾音场景切换,通过 changeAudioSceneId 方法实现:

// DataInteractionHelper.kt
fun changeAudioSceneId(sceneId: Int): ValueUtil.CxrStatus? {
    return CxrApi.getInstance().changeAudioSceneId(sceneId)
}

三种拾音场景说明

场景 说明 适用场景
近场 只能收录佩戴者的声音 AI 语音交互(Rokid 默认模式)
远场 只能收录正前方一定范围内的声音 面对面交流场景
全场 全局拾音 音视频录制、多人对话场景

信息宝典场景的特殊处理

在信息宝典功能中,需要同时识别经纪人和客户的声音,因此需要将拾音模式从默认的近场切换为全场

// 进入信息宝典功能时切换为全场拾音
fun enterInfoTreasure() {
    // 切换到全场拾音模式
    DataInteractionHelper.changeAudioSceneId(AUDIO_SCENE_FULL)
}

// 退出信息宝典功能时恢复近场拾音
fun exitInfoTreasure() {
    // 恢复到近场拾音模式(重要!否则会影响"乐奇!"语音唤醒)
    DataInteractionHelper.changeAudioSceneId(AUDIO_SCENE_NEAR)
}

⚠️ 重要提示:使用完毕后务必切换回近场模式,否则会影响 Rokid 眼镜的"乐奇!"语音唤醒功能!


四、代码实现

4.1 通信封装:RokidCommunicationHelperM/G

4.1.1 眼镜端通信助手

// RokidCommunicationHelperG.kt
object RokidCommunicationHelperG {

    private val cxrServiceBridge by lazy {
        CXRServiceBridge()
    }

    // 消息订阅机制
    private fun setupMessageSubscriptions() {
        val msgCallback = CXRServiceBridge.MsgCallback { name, args, value ->
            handleIncomingMessage(name, args)
        }

        // 订阅所有相关消息类型
        cxrServiceBridge.apply {
            messageTypeClassMap.keys.forEach {
                subscribe(it, msgCallback)
            }
        }
    }

    // 发送小区选择消息到手机端
    fun sendCommunitySelected(
        community: ResblockInfo,
        source: String = MessageConstants.SELECT_SOURCE_GLASSES
    ): Boolean {
        val selectedMessage = CommunitySelectedMessage(community, source)
        return sendMessage(MessageConstants.MSG_COMMUNITY_SELECTED, selectedMessage)
    }

    // 通用消息发送方法
    private fun sendMessage(cmd: String, message: BaseMessageModel): Boolean {
        val jsonString = gson.toJson(message)
        val args = Caps().apply {
            write(jsonString)
        }
        val result = cxrServiceBridge.sendMessage(cmd, args)
        return true
    }
}

4.1.2 手机端通信助手

// RokidCommunicationHelperM.kt
class RokidCommunicationHelperM {

    companion object {
        fun getInstance(): RokidCommunicationHelperM {
            return INSTANCE ?: synchronized(this) {
                INSTANCE ?: RokidCommunicationHelperM().also {
                    DataInteractionHelper.registerCustomCmdCallback(it)
                    it.initializeMessageHandlers()
                    INSTANCE = it
                }
            }
        }
    }

    // 发送小区列表到眼镜端
    fun sendCommunityList(
        communities: List<ResblockInfo>,
        title: String = "这是你附近的小区",
        description: String = "你想查看第几个小区的信息"
    ): Boolean {
        val listMessage = CommunityListMessage(communities, title, description)
        return sendMessage(MessageConstants.MSG_COMMUNITY_LIST, listMessage)
    }

    // 发送提示信息到眼镜端
    fun sendPromptInfo(prompt: CBPromptInfo): Boolean {
        val promptMessage = PromptInfoMessage(prompt)
        return sendMessage(MessageConstants.MSG_PROMPT_INFO, promptMessage)
    }

    // 通用消息发送方法
    private fun sendMessage(cmd: String, message: BaseMessageModel): Boolean {
        val jsonString = gson.toJson(message)
        val args = Caps().apply {
            if (cmd in ByteMessageCmd) {
                write(jsonString.toByteArray())
            } else {
                write(jsonString)
            }
        }
        val status = DataInteractionHelper.sendCustomCmd(cmd, args)
        return status == ValueUtil.CxrStatus.REQUEST_SUCCEED
    }
}

4.2 音频流处理:业务层实现

4.2.1 音频流接收与缓冲区管理

// CommunityPromptService.kt
class CommunityPromptService : Service(), CXRAudioStreamCallback {

    private val audioBuffer = mutableListOf<Byte>()
    private val audioBufferLock = Any()
    private val audioBufferSize = 8 * 1024 // 8KB 阈值

    override fun onAudioStreamReceived(data: ByteArray?, offset: Int, length: Int) {
        data?.let {
            val audioData = it.sliceArray(offset until offset + length)

            // 缓冲区累积
            val shouldFlush = synchronized(audioBufferLock) {
                audioBuffer.addAll(audioData.toList())
                audioBuffer.size >= audioBufferSize
            }

            // 达到阈值后异步发送
            if (shouldFlush) {
                serviceScope.launch {
                    flushAudioBuffer()
                }
            }
        }
    }

    private suspend fun flushAudioBuffer() {
        val audioDataToSend = synchronized(audioBufferLock) {
            if (audioBuffer.isNotEmpty()) {
                val audioData = audioBuffer.toByteArray()
                audioBuffer.clear()
                audioData
            } else {
                null
            }
        }

        audioDataToSend?.let { audioData ->
            // 发送到 WebSocket
            audioWebSocketManager.sendAudioData(audioData)
            // 本地存储
            audioStreamSaveManager.addAudioData(audioData)
        }
    }
}

4.3 双向通信实现

4.3.1 消息订阅与分发(眼镜端)

// RokidCommunicationHelperG.kt
private fun handleIncomingMessage(cmd: String?, args: Caps?) {
    if (cmd == null || args == null) return

    var jsonStr: String? = null
    var messageByte: ByteArray? = null

    // 解析 Caps 数据
    for (i in 0 until args.size()) {
        args.at(i)?.let {
            when (it.type()) {
                Caps.Value.TYPE_STRING -> jsonStr = it.string
                Caps.Value.TYPE_BINARY -> messageByte = it.binary.data
            }
        }
    }

    // JSON 反序列化
    val messageBean = gson.fromJson(jsonStr, messageTypeClassMap[cmd])
    messageBean?.let {
        it.setBinaryData(messageByte)
        MessageTypeDispatcherRegistry.dispatchMessage(it)
    }
}

4.3.2 消息发送机制(手机端)

// RokidCommunicationHelperM.kt
private fun sendMessage(cmd: String, message: BaseMessageModel): Boolean {
    return try {
        val jsonString = gson.toJson(message)

        val args = Caps().apply {
            if (cmd in ByteMessageCmd) {
                write(jsonString.toByteArray())
            } else {
                write(jsonString)
            }
        }

        val status = DataInteractionHelper.sendCustomCmd(cmd, args)
        val success = status == ValueUtil.CxrStatus.REQUEST_SUCCEED

        success
    } catch (e: Exception) {
        false
    }
}

4.4 眼镜端 UI 渲染

4.4.1 StateFlow 响应式状态管理

// CommunityBookViewModel.kt
class CommunityBookViewModel : ViewModel() {

    // 状态管理
    private val _currentState = MutableStateFlow(MessageConstants.STATE_LOADING)
    val currentState: StateFlow<Int> = _currentState.asStateFlow()

    private val _communities = MutableStateFlow<List<ResblockInfo>>(emptyList())
    val communities: StateFlow<List<ResblockInfo>> = _communities.asStateFlow()

    private val _answerContent = MutableStateFlow("我正在听...")
    val answerContent: StateFlow<String> = _answerContent.asStateFlow()

    // 小区选择处理
    fun handleCommunityListReceived(message: CommunityListMessage) {
        viewModelScope.launch {
            _currentState.value = MessageConstants.STATE_COMMUNITY_SELECT
            if (message.communities.isNotEmpty()) {
                _communities.value = message.communities
                _currentFocusIndex.value = 0
            }
        }
    }

    // 信息推送处理
    fun handlePromptInfoReceived(message: PromptInfoMessage) {
        viewModelScope.launch {
            _currentState.value = MessageConstants.STATE_PROMPT_INFO
            _answerContent.value = message.prompt.answer

            // 增量更新逻辑
            if (isNewIndex) {
                _multiAnswerItems.value = listOf(answerList)
            } else {
                val currentItems = _multiAnswerItems.value.toMutableList()
                currentItems.add(answerList)
                _multiAnswerItems.value = currentItems
            }
        }
    }
}

4.4.2 Activity 状态观察

// CommunityBookActivity.kt
class CommunityBookActivity : BaseActivity() {

    private val viewModel: CommunityBookViewModel by viewModels()

    private fun observeViewModel() {
        // 状态观察
        lifecycleScope.launch {
            viewModel.currentState.collect { state ->
                binding.tvLoadingView.visible(state == MessageConstants.STATE_LOADING)
                binding.llSelectContainer.visible(state == MessageConstants.STATE_COMMUNITY_SELECT)
                binding.llAnswerContainer.visible(state == MessageConstants.STATE_PROMPT_INFO)
            }
        }

        // 小区列表更新
        lifecycleScope.launch {
            viewModel.communities.collect { communities ->
                updateCommunityList(communities)
            }
        }

        // 答案内容更新
        lifecycleScope.launch {
            viewModel.answerContent.collect { content ->
                binding.tvAnswerContent.text = content
            }
        }
    }
}

五、应用效果

5.1 界面展示

眼镜端界面

  1. 加载状态:显示"正在通过定位获取小区信息"
  2. 小区选择:展示附近小区列表,支持按键上下选择
  3. 信息提示:实时展示楼盘字典信息,支持多答案项增量展示
企业微信截图_e186f071-744e-4820-820a-6f6fe9115757.png 企业微信截图_df6faab2-348c-4aec-8848-4e2057ff7c99.png 企业微信截图_17621199-dec2-431f-8d2c-a29177d648cf.png

手机端界面

  1. 连接状态:显示眼镜连接状态
  2. 服务运行:前台服务通知,显示"信息宝典运行中"
  3. 音频采集:实时显示录音状态
企业微信截图_f45bdd7a-32ff-4cf7-8804-480c6cd9c65c.png 企业微信截图_9107e8f7-54a5-4ca0-a424-227ee8ae45b3.png 企业微信截图_69655c36-04f5-473f-84bb-8bd9313a00ae.png

5.2 用户体验反馈

经纪人反馈

  • "带看过程中不用频繁看手机了,客户觉得我更专业了"
  • "眼镜上直接显示小区信息,很方便"
  • "录音功能很好,回去可以复盘带看过程"

效果提升

  • 带看专业度显著提升
  • 信息查阅时间大幅减少
  • 客户满意度提升

六、总结与展望

6.1 项目价值

对经纪人的价值

  • 提升专业形象:无需频繁查看手机,与客户保持眼神交流
  • 提高作业效率:信息实时呈现,减少查阅时间
  • 降低记忆负担:小区数据自动展示,专注客户服务

对平台的价值

  • 积累数据资产:录制完整带看音频,为 AI 训练提供素材
  • 优化服务流程:带看过程线上化,便于质量监控
  • 提升品牌形象:科技创新赋能经纪人,提升品牌竞争力

6.2 SDK 使用体会

  1. CXR-M SDK 音频流能力稳定可靠

    • 音频质量好,延迟低
    • 接口简单易用,集成成本低
    • 支持拾音场景切换,适应不同场景需求
  2. 自定义命令通信灵活高效

    • 支持 JSON 和二进制数据传输
    • 传输稳定,错误处理完善
    • 消息订阅机制清晰
  3. 双端协同能力强

    • CXR-M 和 CXR-S 配合默契
    • 通信协议自定义灵活
    • 文档和示例逐步完善

建议

  1. 增加更多实际场景示例

    • 双端通信完整示例
    • 音频流处理最佳实践
    • 拾音场景切换使用指南
  2. 优化调试工具

    • 提供日志查看工具
    • 增加消息抓包功能
  3. 加强社区支持

    • 建立开发者社区
    • 定期技术分享

6.3 未来规划

功能扩展

  • 更多 AI 能力集成:语音识别、语义理解、智能问答
  • 业务场景扩展:签约、过户、贷款等更多作业场景
  • 数据分析能力:带看质量分析、客户需求分析

技术优化

  • 性能优化:降低功耗,提升响应速度
  • 体验优化:更自然的交互方式,更智能的信息推送
  • 稳定性提升:异常处理、容错机制

结语

智眸应用是 Rokid AI 眼镜在房产经纪行业的创新应用实践。通过 CXR-M 和 CXR-S SDK 的双端协同,我们成功实现了眼镜端信息实时展示、音频流采集传输、服务端智能识别的完整闭环。

"镜在眼前,智慧搭伴"——这不仅是我们的 Slogan,更是我们对未来作业方式的愿景。我们相信,随着 AI 技术和智能硬件的发展,经纪人将迎来更高效、更专业、更智能的作业新时代。


技术栈

  • 眼镜端:Rokid CXR-S SDK + Kotlin
  • 手机端:Rokid CXR-M SDK + Kotlin
  • 服务端:语音识别 + 楼盘字典匹配

团队成员:贝壳找房 AI 眼镜项目组


本文App基于 Rokid CXR-M SDK 和 CXR-S SDK 开发,感谢 Rokid 团队提供的技术支持。

Rokid Glasses开发指南 https://ar.rokid.com/sprite?lang=zh

Rokid开发者论坛 https://forum.rokid.com/index

目录
相关文章
|
3月前
|
存储 人工智能 Shell
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(3)TodoWrite (待办写入)
本章详解 s03 版本 TodoWrite 机制:通过 `todo` 工具+`TodoManager` 实现显式任务状态管理(pending/in_progress/completed),强制单任务聚焦;并引入“nag 提醒”——连续3轮未更新待办时自动注入提醒,解决大模型长链路任务健忘问题。代码精简可运行。
934 3
|
3月前
|
人工智能 安全 API
保姆级图文教程!OpenClaw阿里云/本地MacOS/Windows部署+免费大模型API配置接入15000+Skill指南
当ClawHub的技能数量突破14946个,OpenClaw早已从“单一AI工具”进化为“模块化生产力生态”。技能(Skill)作为AI的“执行身份”,让OpenClaw能在设计总监、增长黑客、法律顾问等角色间无缝切换,一个人+一套技能组合即可搭建微型工作室。但繁华背后暗藏危机——2026年初爆发的ClawHavoc事件,335个恶意技能通过远程代码执行漏洞窃取API Key、注入恶意脚本,让无数用户遭遇“挖矿盗刷”的损失。
1779 16
|
3月前
|
人工智能 网络协议 API
从“聊天AI”到“全能员工”:OpenClaw阿里云部署+免费API配置+分场景100+Skills接入实战手册
OpenClaw的真正魅力,不在于基础的对话功能,而在于其开放的Skills生态——这是一个让AI快速“解锁职业技能”的插件市场。2026年,ClawHub已收录10大分类、100+高质量技能,从会议记录、PDF解读到代码审查、行程规划,覆盖工作、创作、学习全场景。只需一键安装,就能让OpenClaw从“能聊的AI”进化为“能干活的员工”,别人还在手动调试功能,你早已通过技能组合实现效率翻倍。
673 7
|
3月前
|
存储 应用服务中间件 nginx
Nginx设置只允许Cloudflare IP访问后获取真实访客IP
本方案通过Nginx `map`指令智能识别真实访客IP:优先取`X-Forwarded-For`首IP,回退至`CF-Connecting-IP`,配合Cloudflare IP白名单,精准记录源IP,日志格式可定制,安全性与准确性兼备。(239字)
287 4
|
3月前
|
人工智能 测试技术 微服务
AI 大型项目编程流程
本项目采用Claude与Codex协同开发模式:先由Claude定稿需求、竞品分析、生成技术文档;再由Codex分周期开发、自动生成/更新流程文档,并循环接受Claude评估优化;老项目则支持微服务级模块化改造与迭代测试,实现高效、可靠、可追溯的AI驱动开发闭环。(239字)
852 7
|
3月前
|
运维 关系型数据库 MySQL
告别SQL指令!OpenClaw(Clawdbot)阿里云部署集成MySQL专属Skill +免费API配置及避坑手册
在数据库运维场景中,复杂的SQL指令、频繁的状态巡检、突发的故障排查,往往占用技术人员大量时间。而OpenClaw(原Clawdbot)作为2026年爆火的开源AI助手框架,与火山引擎云数据库MySQL版的结合,彻底改变了这一现状——通过配置`volcengine-rds-mysql`专属Skill,即可用自然语言实现数据库实例管理、数据查询、性能监控、故障排查,甚至7×24小时智能管控,大幅降低运维门槛与成本。
987 2
|
3月前
|
人工智能 自然语言处理 安全
OpenClaw部署安装集成QQ:阿里云轻量服务器新手0基础,成功部署教程分享
本文为阿里云轻量服务器新手提供OpenClaw零基础部署教程,详解如何一键部署、配置百炼API Key(推荐Coding Plan套餐),并集成QQ机器人,实现自然语言交互。含计费说明(月付9.9元起+模型Token费用)与安全配置要点。(238字)
|
3月前
|
人工智能 前端开发 JavaScript
OpenClaw Skills 进阶实战:前端开发者的AI技能库搭建指南
从Skills安装到自定义开发,手把手教你为前端开发场景构建AI助手技能矩阵,包含React/Vue/UI设计/性能优化等实用Skills及来源地址
1476 2
|
3月前
|
安全 API 数据安全/隐私保护
保姆级图文教程!OpenClaw阿里云/本地部署+免费API配置+从3002个精选Skill中挑15个必装实用Skill
ClawHub上5705个OpenClaw技能让人眼花缭乱——垃圾内容鱼龙混杂、重复技能浪费时间、部分技能暗藏恶意代码,新手想找个靠谱的工具比找对象还难。直到GitHub上25K Star的《Awesome-openclaw-skills》合集出现,作者从海量技能中筛选出3002个高质量工具,按30+类别整理,彻底解决了“选技能难”的痛点。
2278 2
|
3月前
|
安全 小程序 机器人
只需3步,无影云电脑一键部署OpenClaw-接入钉钉,飞书,QQ
本文详解如何通过阿里云无影云电脑快速部署OpenClaw(Clawdbot),一键集成钉钉、QQ、飞书等主流IM平台。PC/移动端均可便捷购买套餐,含云电脑黄金版月卡及2000灵豆;支持7×24运行与低代码配置,仅需填入API Key及IM平台凭证即可启用智能机器人服务。
1274 12
只需3步,无影云电脑一键部署OpenClaw-接入钉钉,飞书,QQ

热门文章

最新文章