1. 项目概述从“聊天”到“做事”的范式跃迁最近在AI圈里一个叫OpenClaw的项目热度不低。如果你还在跟大模型玩“你问我答”的文字游戏那OpenClaw带来的概念可能会让你眼前一亮。简单来说它不再满足于当一个被动的、困在对话框里的“百科全书”或“聊天伙伴”而是试图成为一个能主动感知环境、规划任务、调用工具并执行具体操作的“智能体”。这背后的驱动力很直接我们真正需要的AI不应该只是一个知识库而应该是一个能帮我们“干活”的助手。比如你告诉它“帮我查一下明天北京的天气如果下雨就取消下午三点的会议并给所有参会者发一封邮件”传统的聊天AI可能只会告诉你天气或者生成一封邮件草稿。但一个真正的智能体应该能自动执行“查询天气API - 判断条件 - 调用日历接口取消会议 - 从通讯录获取参会人邮箱 - 调用邮件服务发送通知”这一整条链路。OpenClaw瞄准的正是这个“从说到做”的缺口。从技术脉络上看OpenClaw是当前“AI智能体”浪潮中的一个具体实现。这股浪潮的核心思想是赋予大模型“行动力”通过一套框架让模型能够理解复杂指令、拆解任务、选择并调用合适的工具可以是代码函数、API、甚至操作图形界面最终达成用户目标。它开源、可自部署的特性对于开发者、研究者以及任何想深入探索智能体技术边界的人来说具有很高的实践价值。接下来我们就深入拆解一下OpenClaw的架构、如何让它跑起来以及在实际操作中会遇到哪些“坑”。2. 核心架构与设计哲学拆解要理解OpenClaw不能只看它做了什么更要看它为什么这么设计。一个能自主行动的智能体其核心挑战在于如何将大语言模型强大的推理和规划能力与外部世界的具体执行能力安全、可靠地连接起来。2.1 智能体的核心组件大脑、规划器与工具箱OpenClaw的架构通常围绕几个核心模块构建我们可以类比为一个高效的项目团队1. 智能中枢LLM Core这是团队的大脑通常由一个大语言模型担任比如Llama 3、Qwen等开源模型或通过API接入的云端模型。它的核心职责是“理解”与“推理”。它接收用户的自然语言指令理解其深层意图并根据当前的环境状态和历史记录进行任务分解和步骤规划。例如用户说“我想听周杰伦的《七里香》”大脑需要解析出“播放音乐”这个核心意图并关联到“歌手周杰伦 歌曲名《七里香》”这些关键参数。2. 任务规划与调度器Planner Scheduler这是团队的项目经理。大脑可能规划出一个宏大的任务流比如“先搜索再下载最后播放”。规划器的职责是将这个抽象流程转化为可执行的动作序列并管理它们的执行顺序和状态。它需要处理条件分支如果搜索不到怎么办、循环重试机制以及子任务之间的依赖关系。OpenClaw的设计亮点之一就是提供了灵活可配置的规划逻辑允许开发者定义复杂的任务流模板。3. 技能与工具集Skills/Tools这是团队中各个领域的专家是智能体“动手”能力的直接体现。每个技能都对应一个或多个可执行的操作。例如网络搜索技能调用搜索引擎API获取实时信息。文件操作技能读写本地或云存储的文件。代码执行技能在沙箱环境中运行一段Python代码来计算结果。应用程序控制技能通过RPC或UI自动化工具操作其他软件。API调用技能与第三方服务如天气、邮件、日历交互。OpenClaw通常会提供一个基础的技能库并开放接口让开发者能够非常方便地注册自定义技能。这是其扩展性的关键。4. 记忆与状态管理Memory State这是团队的会议纪要和项目看板。智能体需要有短期记忆来记住多轮对话的上下文也需要有长期记忆来存储用户偏好、历史操作结果等。状态管理则跟踪当前任务执行到了哪一步各个变量的值是什么。良好的记忆设计是智能体表现出“连贯性”和“个性化”的基础。5. 安全与执行沙箱Safety Sandbox这是公司的法务和风控部门至关重要。允许AI执行任意操作是极其危险的。因此OpenClaw必须包含严格的权限控制和沙箱机制。例如文件操作技能可能被限制在某个特定目录代码执行技能必须在资源受限的容器内运行网络访问可能需要经过代理或白名单过滤。没有这个模块智能体就是一个“脱缰的野马”。2.2 OpenClaw的设计权衡集中式 vs 模块化在智能体框架的设计上存在两种主要思路。一种是高度集成的“重量级”框架将所有功能模型服务、规划引擎、技能实现打包在一起开箱即用但灵活性较差。另一种是松耦合的“模块化”框架就像OpenClaw所倾向的它更像一个“智能体操作系统”或“中间件”。OpenClaw的核心可能更侧重于提供一套标准的通信协议、技能定义规范和生命周期管理。它定义智能体各个部分应该如何交互而具体的“大脑”LLM服务、“手”技能实现可以由用户自行选择和接入。这种设计的好处显而易见技术栈自由你可以用任何你熟悉或性能最优的模型来驱动它无论是本地部署的Llama 3还是云端的GPT-4。技能生态开放社区可以贡献各种各样的技能插件像搭积木一样增强智能体的能力。便于集成可以更容易地将智能体能力嵌入到现有的应用系统中。当然这种模块化也带来了部署和调试的复杂性需要用户对整体架构有更深的理解。这也就是为什么一个清晰的部署指南和问题排查手册如此重要。3. 从零开始部署与配置实战理论讲得再多不如亲手跑起来。下面我将以一个典型的基于Docker的OpenClaw部署流程为例带你走一遍。请注意具体命令和路径可能因版本更新而略有不同但核心逻辑是相通的。3.1 基础环境准备首先确保你的宿主机环境就绪。推荐使用Linux服务器如Ubuntu 22.04或具备WSL2的Windows系统。安装Docker与Docker Compose这是容器化部署的基石。# 更新软件包索引 sudo apt-get update # 安装Docker依赖 sudo apt-get install ca-certificates curl gnupg # 添加Docker官方GPG密钥 sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod ar /etc/apt/keyrings/docker.gpg # 设置Docker仓库 echo deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release echo $VERSION_CODENAME) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装Docker引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 验证安装 sudo docker run hello-world获取OpenClaw部署文件通常项目会提供docker-compose.yml和相关的环境配置文件。git clone OpenClaw的Git仓库地址 cd openclaw-deploy如果没有官方仓库你可能需要手动创建这些文件。一个简化的docker-compose.yml可能长这样version: 3.8 services: openclaw-core: image: openclaw/core:latest container_name: openclaw-core restart: unless-stopped ports: - 8000:8000 # API服务端口 environment: - LLM_API_BASEhttp://llm-provider:11434 # 指向LLM服务 - OPENCLAW_DATA_PATH/data volumes: - ./data:/data - ./skills:/app/skills # 挂载自定义技能目录 depends_on: - llm-provider llm-provider: image: ollama/ollama:latest container_name: ollama restart: unless-stopped ports: - 11434:11434 volumes: - ./ollama:/root/.ollama # 持久化模型数据 command: serve这个配置定义了两个服务openclaw-core智能体核心和llm-provider用Ollama服务提供本地LLM。volumes部分将宿主机的目录挂载到容器内用于持久化数据和技能。准备大语言模型智能体需要“大脑”。这里我们使用Ollama在本地运行一个轻量级模型如llama3.1:8b。# 进入项目目录先启动Ollama服务如果docker-compose还未启动 # 或者直接使用Ollama CLI拉取模型 docker exec -it ollama ollama pull llama3.1:8b注意模型首次下载需要较长时间和足够的磁盘空间约5GB。请确保你的服务器有足够的资源。对于生产环境你可能需要考虑性能更强的模型或使用GPU加速。3.2 核心服务启动与初始化环境就绪后启动服务并完成初始化配置。启动所有服务docker-compose up -d使用-d参数让服务在后台运行。用docker-compose logs -f openclaw-core可以实时查看核心服务的日志确保没有报错。验证服务状态curl http://localhost:8000/health如果返回{status:ok}之类的JSON说明核心API服务运行正常。基础配置通常OpenClaw会提供一个Web管理界面或配置API。你需要通过它完成初始设置连接LLM在管理界面中配置LLM连接地址为http://llm-provider:11434容器内网络或http://主机IP:11434从宿主机访问并指定模型名称llama3.1:8b。加载基础技能检查并启用内置的基础技能如filesystem文件操作、calculator计算器、web_search需额外配置API密钥等。设置安全策略这是关键一步务必根据你的需求在管理界面或配置文件中严格限制技能的访问权限。例如将文件系统的根目录限制在/data下禁止执行危险Shell命令等。3.3 开发你的第一个自定义技能OpenClaw的魅力在于扩展。我们来创建一个简单的“天气查询”技能。技能定义在挂载的./skills目录下创建一个Python文件weather_skill.py。# ./skills/weather_skill.py import requests from typing import Dict, Any class WeatherSkill: 一个简单的天气查询技能 name get_weather description 根据城市名称查询当前天气情况 def __init__(self, api_key: str None): # 这里可以使用配置注入的API Key为了安全不要硬编码 self.api_key api_key # 假设使用一个免费的天气API self.base_url https://api.weatherapi.com/v1/current.json def execute(self, city: str) - Dict[str, Any]: 执行技能的主方法 if not self.api_key: return {error: Weather API key not configured.} try: params {key: self.api_key, q: city, aqi: no} response requests.get(self.base_url, paramsparams, timeout10) response.raise_for_status() data response.json() location data[location][name] temp_c data[current][temp_c] condition data[current][condition][text] result { location: location, temperature_c: temp_c, condition: condition, full_data: data # 原始数据可用于更复杂的处理 } return {success: True, data: result} except requests.exceptions.RequestException as e: return {success: False, error: fNetwork error: {str(e)}} except KeyError as e: return {success: False, error: fUnexpected API response format: {str(e)}} # 技能工厂函数OpenClaw框架会调用这个函数来实例化技能 def create_skill(config: Dict[str, Any]): api_key config.get(WEATHER_API_KEY, ) return WeatherSkill(api_keyapi_key)注册技能你需要告诉OpenClaw这个新技能的存在。通常通过一个配置文件如skills_registry.yaml或直接在管理界面添加。# 在配置目录下添加或修改配置文件 skills: - name: get_weather module_path: skills.weather_skill # Python模块路径 class_name: WeatherSkill factory_function: create_skill config: WEATHER_API_KEY: ${WEATHER_API_KEY} # 从环境变量读取更安全 enabled: true测试技能重启OpenClaw服务使新技能生效然后通过API或Web界面测试。curl -X POST http://localhost:8000/api/skill/execute \ -H Content-Type: application/json \ -d { skill_name: get_weather, parameters: {city: Beijing} }如果配置正确你会收到包含北京天气信息的JSON响应。实操心得在开发自定义技能时异常处理和输入验证至关重要。AI给出的参数可能是不规范或错误的你的技能代码必须足够健壮能够处理各种边界情况并返回清晰、结构化的错误信息以便智能体进行后续决策例如提示用户重新输入城市名。4. 核心工作流与任务编排解析部署好之后OpenClaw是如何工作的我们通过一个复杂点的任务来透视其内部工作流“请总结今天关于AI智能体的最新新闻并保存到一个Markdown文件中。”4.1 任务解析与规划阶段指令接收与意图理解用户指令发送给OpenClaw API。核心服务将指令连同对话历史如果有一起发送给配置的LLM大脑。任务分解LLM分析指令将其分解为一系列原子操作。它可能会生成如下规划1. 使用web_search技能搜索关键词“AI智能体 最新新闻 今天”。 2. 从搜索结果中提取主要的新闻标题和链接。 3. 对每条新闻使用fetch_webpage技能或直接根据摘要获取更详细的内容。 4. 使用summarize_text技能或LLM自身能力对每条新闻内容进行摘要。 5. 将所有摘要整理成Markdown格式。 6. 使用filesystem.write_file技能将内容保存为./data/ai_agent_news_YYYYMMDD.md。这个规划结果是一个结构化的任务列表可能以JSON格式包含了步骤顺序、每个步骤需要调用的技能名称、以及所需的输入参数。4.2 技能调度与执行阶段OpenClaw的规划器/执行引擎拿到这个任务列表后开始逐步执行技能匹配与加载引擎根据第一步的skill_name: web_search在已注册的技能库中找到对应的WebSearchSkill类并实例化如果尚未实例化。参数绑定与执行引擎将规划中指定的参数query: AI智能体 最新新闻 今天传递给该技能的execute方法。技能执行具体的网络请求获取搜索结果。结果处理与传递web_search技能返回结构化的搜索结果一个包含标题、链接、摘要的列表。引擎将这个结果作为上下文传递给下一个步骤。同时它也会更新整个任务的状态。迭代与条件判断引擎继续执行第2、3步...。这里可能涉及循环例如对每条新闻进行摘要和条件判断例如如果fetch_webpage失败是跳过这条新闻还是重试。这些逻辑可能预先定义在任务规划模板中也可能由LLM在每一步执行后动态决定下一步。4.3 记忆与状态管理在此过程中的作用在整个流程中记忆模块扮演了“工作区”的角色短期记忆/对话上下文存储了原始的用户指令和整个执行过程中的中间结果。当执行到“整理成Markdown格式”这一步时LLM需要能看到前面所有步骤产出的新闻摘要列表。长期记忆可能存储了用户偏好比如“喜欢将文件保存在./data/reports/目录下”。在这个例子中规划器在生成“保存文件”这一步时可能会参考这个偏好来生成路径参数。状态管理跟踪当前任务执行到了第几步哪些步骤成功了哪些失败了失败的原因是什么。这对于错误恢复和用户反馈至关重要。注意事项这个工作流高度依赖LLM的规划能力。如果LLM的规划不够合理例如遗漏了关键步骤或参数错误整个任务就会失败。因此在实践中往往需要结合“提示词工程”来引导LLM做出更好的规划或者采用“ReAct”推理行动等模式让LLM在每一步执行后根据结果再决定下一步形成“思考-行动-观察”的循环。5. 深入技能开发设计模式与最佳实践掌握了基础技能开发后我们来探讨一些更高级的模式和实践中总结出的“坑”。5.1 技能设计的三种模式根据技能与智能体核心的交互方式常见有三种设计模式同步函数调用最简单直接如上文的WeatherSkill。智能体核心同步调用技能的execute方法并等待结果。适用于快速、轻量的操作。异步任务队列对于耗时的操作如训练模型、处理大型文件技能接收到请求后立即返回一个task_id然后将实际任务提交到后台队列如Celery、Redis Queue中执行。智能体核心可以后续通过task_id来轮询结果。这能避免HTTP请求超时提升系统响应能力。class LongRunningSkill: def execute(self, param): task_id str(uuid.uuid4()) # 将任务参数和task_id放入消息队列 message_queue.push({task_id: task_id, param: param}) return {status: accepted, task_id: task_id, message: Task is processing in background.} def get_result(self, task_id): # 从结果存储中查询任务结果 return result_store.get(task_id)事件驱动/流式响应对于生成内容或实时监控类任务技能可以支持流式输出。例如一个“代码生成”技能可以边生成边返回Token让用户实时看到进度。这通常通过WebSocket或Server-Sent Events (SSE)来实现。5.2 技能间的通信与组合一个强大的智能体其技能不是孤立的而是可以组合的。OpenClaw的框架需要支持这种组合。参数传递链前一个技能的输出可以作为后一个技能的输入。这要求技能返回结构化的、标准化的数据。框架需要提供一种方式如使用Jinja2模板或JSONPath来从上游结果中提取特定字段并绑定到下游技能的参数上。技能调用技能一个复杂的技能内部是否可以调用其他已注册的基础技能这需要框架提供技能发现和内部调用机制。例如你的DataAnalysisSkill内部可能需要先调用ReadFileSkill读取数据再调用PythonCodeSkill执行分析。框架需要处理好这种嵌套调用的上下文和权限隔离。5.3 安全性与错误处理加固这是技能开发中最容易出问题的地方。输入净化Sanitization永远不要相信来自LLM或用户的输入。所有传入技能的参数都必须进行严格的验证和净化。类型检查确保城市名是字符串数量是整数。范围/格式校验检查文件路径是否在允许的目录内URL格式是否正确。内容过滤防止SQL注入、命令注入、路径遍历攻击。例如如果技能接收文件名必须确保它不包含../这样的序列。资源隔离与限制超时控制为每个技能执行设置超时防止恶意或错误技能无限运行。内存/CPU限制特别是对于代码执行类技能必须使用Docker容器或resource模块进行严格的资源限制。网络隔离限制技能可以访问的网络地址范围白名单。细粒度权限模型不要用一个“超级管理员”账号运行所有技能。应该为不同的技能分配不同的权限等级。例如只读权限只能读取特定目录的文件。受限写权限只能写入临时目录。网络访问权限只能访问特定的几个API端点。 这可以通过在技能配置中声明所需权限并由框架在调用前进行校验来实现。全面的错误处理与日志技能的execute方法必须捕获所有可能的异常并返回统一的错误格式。同时记录详细的日志包括输入参数、执行开始结束时间、错误堆栈等便于后期审计和问题排查。def execute(self, **kwargs): start_time time.time() logger.info(fSkill {self.name} started with args: {kwargs}) try: # ... 业务逻辑 ... result {success: True, data: processed_data} except ValidationError as e: logger.warning(fInput validation failed: {e}) result {success: False, error: fInvalid input: {str(e)}, type: validation} except ExternalServiceError as e: logger.error(fExternal service call failed: {e}, exc_infoTrue) result {success: False, error: Service temporarily unavailable., type: external} except Exception as e: logger.critical(fUnexpected error in skill {self.name}: {e}, exc_infoTrue) result {success: False, error: An internal error occurred., type: internal} finally: elapsed time.time() - start_time logger.info(fSkill {self.name} finished in {elapsed:.2f}s. Result: {result[success]}) return result6. 性能调优与生产环境部署考量当你的OpenClaw智能体从Demo走向实际应用性能和稳定性就成为首要问题。6.1 LLM调用优化LLM的响应速度是智能体性能的主要瓶颈。模型选型在效果和速度间权衡。对于需要快速响应的任务链可以考虑更小、更快的模型如Llama 3.1 8B的量化版。对于复杂规划再用大模型。提示词优化精心设计的提示词Prompt能显著减少LLM的“思考”时间Token数量并提高规划准确性。使用思维链Chain-of-Thought提示、提供清晰的示例Few-shot和严格的输出格式要求。缓存策略对频繁出现的、结果固定的查询进行缓存。例如相同的天气查询、固定的知识问答。可以在技能层或框架层实现一个基于请求参数哈希的缓存机制。异步与非阻塞调用不要让智能体核心同步等待LLM的完整响应。可以采用流式响应或者将LLM调用也放入任务队列实现全链路的异步化。6.2 技能执行优化连接池与资源复用对于需要连接数据库、外部API的技能务必使用连接池避免为每次调用都建立和断开连接。技能预热对于初始化耗时的技能如加载大型模型可以在服务启动时进行预热加载而不是第一次调用时才加载。并行执行如果任务规划中的多个步骤没有依赖关系执行引擎应该能够并行运行它们。这需要框架支持有向无环图DAG式的任务编排。6.3 高可用与监控无状态设计尽量将OpenClaw核心设计为无状态的。会话状态、任务状态等应存储在外部数据库如Redis、PostgreSQL中。这样便于水平扩展通过增加实例数量来提升并发处理能力。健康检查与熔断为OpenClaw服务本身及其依赖的LLM服务、数据库等设置健康检查端点。当某个技能依赖的外部服务连续失败时应触发熔断机制暂时跳过该技能或返回降级结果避免连锁故障。全面的监控需要监控以下指标业务指标任务成功率、平均任务耗时、各技能调用频率与耗时。系统指标CPU/内存使用率、API响应延迟、错误率。LLM相关指标Token消耗量、请求速率、各模型响应时间。 使用PrometheusGrafana或类似的监控栈来收集和可视化这些数据。6.4 配置管理与密钥安全永远不要将API密钥、数据库密码等敏感信息硬编码在代码或明文的配置文件中。使用环境变量如前面docker-compose.yml示例所示通过环境变量注入配置。密钥管理服务在生产环境中使用专门的密钥管理服务如HashiCorp Vault、AWS Secrets Manager来动态获取密钥。配置分离将环境相关的配置数据库地址、API端点与代码分离使用不同的配置文件如config_prod.yaml,config_dev.yaml或配置中心。7. 典型问题排查与调试技巧实录在实际操作中你一定会遇到各种问题。下面是一些常见问题的排查思路和技巧。7.1 智能体“听不懂话”或规划错误这是最常见的问题表现为LLM无法正确分解任务或调用错误的技能。检查点1提示词Prompt。这是问题的根源90%所在。打开日志查看发送给LLM的完整提示词是什么。检查是否包含了清晰的技能描述、输出格式要求。尝试在提示词中加入更具体的约束例如“你必须且只能使用以下技能[技能列表]。你的输出必须是严格的JSON格式{steps: [{skill: ..., input: {...}}]}”。检查点2技能描述。注册技能时提供的name和description至关重要。LLM依靠这些描述来决定使用哪个技能。确保描述准确、无歧义并包含关键参数信息。例如description: “根据城市名查询天气参数: city (字符串 例如 ‘北京’)”。检查点3LLM自身能力。如果换了不同的提示词依然不行可能是当前使用的模型能力不足。尝试换一个更强大的模型如从7B换到70B或换用GPT-4来验证是否是模型瓶颈。调试技巧开启OpenClaw的详细调试日志观察LLM的原始输入和输出。可以先将任务规划逻辑单独剥离出来用一个简单的脚本进行测试和迭代优化提示词待稳定后再集成回框架。7.2 技能执行失败技能被正确调用但执行过程中报错。检查点1参数传递。查看日志中技能接收到的具体参数值。经常出现的问题是LLM生成的参数类型不对例如需要数字却给了字符串或者参数名不匹配技能期望city_name但LLM传了city。检查点2网络与依赖。对于需要访问外部API或网络的技能检查网络连通性、防火墙设置、API密钥是否有效且未过期。对于Python技能检查容器内是否安装了所有必要的依赖包requests,pandas等。检查点3权限与路径。文件操作失败通常是因为容器内的用户权限不足或指定的文件路径在容器内不存在注意Docker挂载卷的路径映射。仔细检查docker-compose.yml中的volumes配置和技能代码中的路径处理。调试技巧在技能代码内部加入更详细的日志打印出关键步骤的中间状态。对于复杂的技能可以编写独立的单元测试脚本在框架外先验证其功能是否正确。7.3 服务启动失败或运行不稳定经典错误端口冲突。日志中可能出现Address already in use。用lsof -i:端口号或netstat -tulpn | grep 端口号命令检查端口被哪个进程占用并修改docker-compose.yml中的端口映射。经典错误数据库连接失败。如果OpenClaw使用了外部数据库检查数据库服务是否已启动、连接字符串主机名、端口、用户名、密码是否正确、以及Docker网络是否允许容器间通信使用Docker Compose时通常可以用服务名作为主机名。经典错误llm-provider连接超时。在docker-compose.yml中depends_on只保证容器启动顺序不保证服务就绪。可能OpenClaw核心启动时Ollama内的模型还在加载。需要在OpenClaw的配置中增加重试机制或者在启动脚本中等待LLM服务就绪。# 在docker-compose.yml的openclaw-core命令中可以添加一个等待脚本 command: [./wait-for-it.sh, llm-provider:11434, --, python, app.py]性能问题响应缓慢。首先通过监控区分瓶颈在哪。如果是LLM响应慢考虑模型量化、使用更快的API。如果是技能执行慢优化技能代码或引入异步。如果是任务步骤太多考虑优化规划逻辑或将一些步骤合并。7.4 安全漏洞排查定期审计技能代码特别是社区贡献的第三方技能务必进行代码审查防止恶意代码。模拟攻击测试尝试让智能体执行一些边界或恶意指令如“删除系统根目录”、“访问内部管理页面”观察系统的拦截和响应是否符合预期。检查日志中的敏感信息确保日志中没有记录完整的API密钥、用户密码等敏感信息。对日志进行脱敏处理。开发一个像OpenClaw这样的AI智能体就像在组装一个功能强大的机器人。框架提供了骨架和神经系统而一个个技能就是它的肌肉和工具。最大的挑战和乐趣不在于框架本身的使用而在于如何设计出鲁棒、安全、高效的技能并让它们在大模型的“思考”下协同工作真正解决实际问题。从简单的自动回复到复杂的业务流程自动化这其中的可能性正等着你去探索和实现。