三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

基于开源LLM与自动化脚本构建个人AI助手:OpenClaw实战指南

基于开源LLM与自动化脚本构建个人AI助手:OpenClaw实战指南

1. 项目概述:当AI成为你的“数字员工”

最近,一个名为“OpenClaw”的概念在技术圈和效率爱好者中悄然流行起来。它不是一个具体的软件或产品,而是一种构建思路和愿景:打造一个能够7x24小时不间断工作、自主处理特定任务的“AI员工”。这听起来像是科幻电影里的情节,但得益于开源大语言模型(LLM)和自动化工具的成熟,我们普通人现在完全有能力在个人电脑上,用极低的成本,搭建起这样一个“永不下班”的助手。

想象一下,你有一个永不疲倦、从不抱怨、且完全忠诚的“数字分身”。它可以在你睡觉时,自动整理你邮箱里的订阅邮件,提取关键信息生成简报;可以在你开会时,监控社交媒体上关于你项目的讨论,并礼貌地回复常见问题;甚至可以在电商大促期间,帮你比价、设置库存提醒。OpenClaw的核心思想,就是利用开源AI模型作为“大脑”,结合自动化脚本(如Python)作为“手脚”,通过清晰的指令和规则,让AI自主、持续地完成一系列重复性、规则性强的任务,从而将你从繁琐的日常操作中解放出来。

这个项目适合谁?首先是广大开发者、运维工程师和数据分析师,你们可以将繁琐的日志监控、数据抓取、报告生成工作交给它。其次是内容创作者、自媒体运营者,它可以辅助进行素材搜集、初稿撰写、多平台内容同步。即便是普通上班族,也能用它来管理日程、汇总信息、处理简单的客服问答。本质上,任何被重复性电脑操作困扰的人,都是OpenClaw的潜在用户。它的魅力在于高度定制化——你不是在用一个现成的、功能固定的软件,而是在亲手创造一个完全贴合你个人工作流需求的专属助手。

2. 核心架构设计:大脑、手脚与神经系统的协同

要构建一个可靠的“AI员工”,我们不能只靠一个模型漫无目的地运行。一个健壮的OpenClaw系统,其架构通常包含三个核心层:决策大脑、执行单元和任务调度中枢。这三者协同工作,才能确保任务的准确、稳定与高效。

2.1 “大脑”选型:开源LLM的权衡与部署

“大脑”负责理解任务指令、分析输入信息、做出决策并生成下一步的行动命令。这里我们主要使用开源的大语言模型。选择哪个模型,是第一个关键决策。

目前主流的选择有几类:第一类是Meta的Llama系列(如Llama 3),其开源协议友好,性能强大,社区支持完善,是构建复杂AI应用的基石。第二类是专注于代码和推理的模型,如DeepSeek-Coder,它在处理自动化脚本生成、逻辑判断方面有独特优势。第三类是一些轻量级模型,如Qwen1.5-7B-Chat,它们在消费级显卡(甚至高端CPU)上就能流畅运行,适合作为入门尝试或对响应速度要求不高的后台任务。

部署方式上,我强烈推荐使用Ollama。它相当于一个本地化的模型管理器和运行环境,通过简单的命令行就能拉取、运行和管理各种开源模型。例如,运行ollama run llama3:8b即可启动一个8B参数的Llama 3模型服务。Ollama提供了标准的API接口(通常在http://localhost:11434),我们的其他程序可以像调用OpenAI API一样调用它,这极大地简化了集成复杂度。对于资源更受限的环境,可以考虑LM Studio,它提供了图形化界面,对新手更友好。

注意:模型选择并非越大越好。一个70B参数的模型虽然能力更强,但对硬件要求极高,且推理速度慢。对于一个专注于特定领域(如邮件分类、数据提取)的“员工”,一个7B或13B的模型,在经过适当提示词工程调优后,完全能够胜任,且成本和响应速度更优。

2.2 “手脚”实现:自动化脚本与工具链

“大脑”做出了决策(例如:“从这封邮件中提取会议时间和主题,并添加到日历”),就需要“手脚”去执行。这部分通常由Python脚本来承担,利用丰富的库来实现各种操作。

  • 网络交互:使用requestsselenium(模拟浏览器)或playwright来抓取网页数据、填写表单、点击按钮。
  • 桌面自动化:使用pyautoguikeyboardpynput来控制鼠标键盘,操作本地GUI软件。但这种方式不够健壮,应作为最后手段。
  • API调用:这是最推荐的方式。几乎所有现代云服务(如Gmail、Notion、Slack、钉钉、企业微信)都提供了完善的API。使用对应的SDK(如google-api-python-clientfor Gmail)可以稳定、安全地进行数据读写和操作。
  • 文件与系统操作:使用Python内置的osshutiljsoncsv等库来处理文件、解析数据。
  • 数据处理与分析pandasnumpy用于处理结构化数据,openpyxl处理Excel文件。

一个典型的“手脚”脚本,应该被设计成接收结构化参数、执行特定动作、并返回明确成功/失败状态及结果的函数。例如,一个add_event_to_calendar(title, start_time, end_time)函数。

2.3 “神经系统”串联:任务调度与状态管理

这是OpenClaw的“中枢神经”,负责协调一切。它需要解决几个问题:何时触发任务?如何将任务和上下文传递给大脑?如何将大脑的决策分发给对应的手脚?如何记录任务日志和处理异常?

对于简单任务,你可以直接用操作系统的定时任务(Linux的cron, Windows的Task Scheduler)来定期运行一个主控Python脚本。但这个脚本内部需要有一套逻辑。

更优雅的方案是使用像Apache AirflowPrefect这样的工作流调度平台。它们可以可视化地编排任务依赖关系,设置复杂的触发规则(如“每天上午9点运行”、“当某个文件到达后运行”),并提供强大的日志、监控和错误重试机制。对于轻量级应用,Celery配合Redis作为消息队列,也是一个经典的选择,适合异步任务处理。

在实际架构中,工作流大致如下:

  1. 触发器:定时器、文件监听、Webhook等触发主控程序。
  2. 上下文收集:主控程序收集任务所需信息(如新收到的邮件原文、待处理的文件路径)。
  3. 调用大脑:将信息和预设的“角色指令”通过API发送给Ollama运行的LLM。
  4. 解析决策:LLM返回一段结构化文本(通常是JSON格式),如{"action": "classify_email", "category": "meeting", "extracted_data": {...}}
  5. 分派执行:主控程序解析这个JSON,调用对应的“手脚”函数(如process_meeting_email(extracted_data))。
  6. 记录与反馈:将执行结果记录到日志文件或数据库,并可选择将结果摘要再次反馈给LLM,用于生成报告或下一步判断。

3. 实战构建:一个邮件自动分类与处理助手

让我们通过一个具体例子,亲手搭建一个OpenClaw的初级形态:一个能自动分类邮箱中的邮件,并对会议邀约类邮件自动提取信息并添加到日历的助手。

3.1 环境准备与基础搭建

首先,确保你的开发环境就绪。我假设你使用Python 3.8+和一台至少拥有8GB内存的电脑(运行7B模型的基本要求)。

# 1. 安装Ollama (以macOS/Linux为例) curl -fsSL https://ollama.com/install.sh | sh # 2. 拉取并运行一个轻量级模型,例如Qwen 7B ollama pull qwen2:7b ollama run qwen2:7b & # 后台运行,API服务在11434端口 # 3. 创建项目目录并安装必要的Python库 mkdir openclaw-email-assistant && cd openclaw-email-assistant python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install requests python-dotenv google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client

接下来,我们需要设置Gmail API。这是整个项目中最需要耐心的一步,但一劳永逸。

  1. 访问 Google Cloud Console,创建一个新项目。
  2. 启用“Gmail API”。
  3. 在“凭据”页面,创建“OAuth 2.0 客户端ID”,应用类型选择“桌面应用”。
  4. 下载生成的JSON凭据文件,重命名为credentials.json,放入项目根目录。
  5. 首次运行授权脚本,在浏览器中完成授权,会生成一个token.json文件存储访问令牌。

3.2 核心模块开发:大脑指令与邮件处理

我们创建几个核心的Python文件。

llm_brain.py- 负责与Ollama API通信

import requests import json class OpenClawBrain: def __init__(self, base_url="http://localhost:11434/api"): self.base_url = base_url self.model = "qwen2:7b" # 指定使用的模型 def generate(self, prompt, system_prompt=None): """发送提示词给LLM并获取回复""" messages = [] if system_prompt: messages.append({"role": "system", "content": system_prompt}) messages.append({"role": "user", "content": prompt}) payload = { "model": self.model, "messages": messages, "stream": False, "options": {"temperature": 0.1} # 低温度保证输出稳定、可预测 } try: response = requests.post(f"{self.base_url}/chat", json=payload, timeout=60) response.raise_for_status() return response.json()["message"]["content"] except requests.exceptions.RequestException as e: print(f"调用LLM API失败: {e}") return None # 系统指令,定义AI员工的角色和能力边界 EMAIL_CLASSIFIER_SYSTEM_PROMPT = """你是一个专业的邮件分类与信息提取助手。你的任务是以JSON格式输出结果。 请严格按以下规则分类邮件: 1. "meeting_invitation": 包含明确会议时间、地点(或链接)、参与人的邮件。 2. "newsletter_subscription": 新闻简报、营销推广类邮件。 3. "personal_communication": 来自已知联系人的个人或工作交流。 4. "notification": 系统通知、账单、账户提醒等。 5. "other": 无法归入以上类别的邮件。 如果是"meeting_invitation",请额外提取以下字段: - meeting_topic: 会议主题 - start_time: 会议开始时间 (格式: YYYY-MM-DD HH:MM) - end_time: 会议结束时间 (格式: YYYY-MM-DD HH:MM,如无法推断可留空) - location_or_link: 线下地点或线上会议链接 - organizer: 组织者姓名/邮箱 输出格式必须是纯JSON,例如: {"category": "meeting_invitation", "extracted": {"meeting_topic": "...", ...}} 或 {"category": "newsletter_subscription", "extracted": {}} 不要输出任何其他解释性文字。"""

gmail_client.py- 负责与Gmail交互

import os.path from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build import base64 from email.mime.text import MIMEText SCOPES = ['https://www.googleapis.com/auth/gmail.readonly', 'https://www.googleapis.com/auth/gmail.modify'] def get_gmail_service(): """获取授权的Gmail服务对象""" creds = None if os.path.exists('token.json'): creds = Credentials.from_authorized_user_file('token.json', SCOPES) if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES) creds = flow.run_local_server(port=0) with open('token.json', 'w') as token: token.write(creds.to_json()) return build('gmail', 'v1', credentials=creds) def fetch_unread_emails(service, max_results=10): """获取未读邮件列表""" results = service.users().messages().list(userId='me', labelIds=['UNREAD'], maxResults=max_results).execute() messages = results.get('messages', []) email_details = [] for msg in messages: msg_id = msg['id'] msg_detail = service.users().messages().get(userId='me', id=msg_id, format='full').execute() headers = msg_detail['payload']['headers'] subject = next((h['value'] for h in headers if h['name'] == 'Subject'), 'No Subject') sender = next((h['value'] for h in headers if h['name'] == 'From'), 'Unknown Sender') # 提取邮件正文 (简化处理,优先取plain text部分) body = "" if 'parts' in msg_detail['payload']: for part in msg_detail['payload']['parts']: if part['mimeType'] == 'text/plain': data = part['body'].get('data') if data: body = base64.urlsafe_b64decode(data).decode('utf-8', errors='ignore') break else: data = msg_detail['payload']['body'].get('data') if data: body = base64.urlsafe_b64decode(data).decode('utf-8', errors='ignore') email_details.append({ 'id': msg_id, 'subject': subject, 'sender': sender, 'snippet': msg_detail.get('snippet', ''), 'body_preview': body[:500] # 取前500字符给AI分析 }) return email_details def mark_as_read(service, msg_id): """将邮件标记为已读""" service.users().messages().modify(userId='me', id=msg_id, body={'removeLabelIds': ['UNREAD']}).execute()

calendar_manager.py- 负责日历操作(示例骨架)

# 此处以本地日历文件(如ICS)或调用第三方日历API为例,实际需根据你的日历服务调整 def add_event_to_calendar(event_details): """将事件添加到日历""" # event_details 是一个字典,包含 topic, start_time, end_time, location 等 print(f"[模拟] 将事件添加到日历: {event_details}") # 实际实现可能涉及: # 1. 使用 google-api-python-client 调用 Google Calendar API # 2. 使用 outlookcalendarsdk 调用 Outlook API # 3. 生成一个 .ics 文件并导入 # 这里为了简化,仅打印日志 return True

3.3 主控流程与集成

最后,我们创建一个主程序main.py来串联所有模块。

import json from llm_brain import OpenClawBrain, EMAIL_CLASSIFIER_SYSTEM_PROMPT from gmail_client import get_gmail_service, fetch_unread_emails, mark_as_read from calendar_manager import add_event_to_calendar import time def parse_llm_json_response(response_text): """尝试从LLM回复中解析JSON""" # LLM有时会在JSON外包裹markdown代码块或额外文字 start_idx = response_text.find('{') end_idx = response_text.rfind('}') + 1 if start_idx != -1 and end_idx != 0: json_str = response_text[start_idx:end_idx] try: return json.loads(json_str) except json.JSONDecodeError: print(f"JSON解析失败,原始文本: {json_str}") return None def main(): print("OpenClaw邮件助手启动...") # 初始化大脑和Gmail服务 brain = OpenClawBrain() gmail_service = get_gmail_service() # 获取未读邮件 print("正在检查未读邮件...") unread_emails = fetch_unread_emails(gmail_service, max_results=5) for email in unread_emails: print(f"\n处理邮件: {email['subject']} (来自: {email['sender']})") # 构建给AI的提示词 user_prompt = f""" 请分类以下邮件,并按指令输出JSON。 发件人: {email['sender']} 主题: {email['subject']} 邮件正文预览: {email['body_preview']} """ # 调用大脑进行分析 llm_response = brain.generate(user_prompt, system_prompt=EMAIL_CLASSIFIER_SYSTEM_PROMPT) if not llm_response: print(" -> AI分析失败,跳过此邮件。") continue # 解析AI返回的JSON result = parse_llm_json_response(llm_response) if not result: print(f" -> 无法解析AI响应: {llm_response[:200]}...") continue category = result.get('category', 'other') extracted = result.get('extracted', {}) print(f" -> 分类结果: {category}") # 根据分类结果执行动作 if category == 'meeting_invitation' and extracted: print(f" -> 检测到会议邀约,主题: {extracted.get('meeting_topic')}") # 这里可以添加确认逻辑,例如只添加特定发件人或包含关键词的会议 add_event_to_calendar(extracted) print(" -> 已尝试添加到日历。") elif category == 'newsletter_subscription': print(" -> 检测到订阅邮件,可自动归档或标记。") # 可以在这里调用Gmail API添加标签,如 `service.users().messages().modify(...)` 添加“Newsletter”标签 # 其他分类可以类似处理 # 无论何种分类,处理完后标记为已读 mark_as_read(gmail_service, email['id']) print(f" -> 邮件已标记为已读。") time.sleep(1) # 避免请求过于频繁 print("\n本轮邮件处理完成。") if __name__ == '__main__': main()

现在,你可以通过设置系统的定时任务(cron或Task Scheduler),让这个脚本每隔15分钟或1小时自动运行一次。你的第一个“永不下班”的AI邮件助手就开始工作了。

4. 进阶优化与扩展思路

一个基础的OpenClaw搭建完成后,可以从以下几个方面进行深化和扩展,使其变得更强大、更智能、更可靠。

4.1 提示词工程:让AI更懂你

LLM的表现极度依赖提示词(Prompt)。基础的指令能让AI工作,但精细化的提示词能让它成为专家。

  • 提供范例(Few-Shot Learning):在系统指令中,直接给出几个正确分类和提取的示例。这能极大地提升模型在特定格式和任务上的准确性。
    ENHANCED_SYSTEM_PROMPT = EMAIL_CLASSIFIER_SYSTEM_PROMPT + """ 示例: 邮件1: 发件人: 同事张三 <zhangsan@company.com> 主题: 项目周会邀请 正文: 大家好,请于本周五下午3点至4点,在301会议室参加项目周会。议题是Q2复盘。 -> 输出: {"category": "meeting_invitation", "extracted": {"meeting_topic": "项目周会", "start_time": "2023-10-27 15:00", "end_time": "2023-10-27 16:00", "location_or_link": "301会议室", "organizer": "同事张三"}} 邮件2: 发件人: TechNews Daily <news@technews.com> 主题: 今日AI前沿速递 正文: 本期内容:GPT-5最新传闻... -> 输出: {"category": "newsletter_subscription", "extracted": {}} """
  • 输出格式强制:明确要求输出JSON,并指定JSON Schema,甚至可以要求模型先“思考”(Chain-of-Thought)再输出,提高逻辑性。
  • 领域知识注入:如果你的邮件涉及非常专业的领域(如法律、医疗),可以在提示词中提供相关术语和判断规则。

4.2 记忆与上下文:让AI拥有“工作经验”

基础的OpenClaw是无状态的,每次处理都是独立的。要让它更智能,需要赋予它记忆。

  • 向量数据库:使用ChromaDBQdrantWeaviate等轻量级向量数据库。将处理过的邮件摘要、你手动做出的纠正决定、重要的项目信息等,转换成向量存储起来。当处理新邮件时,可以先进行向量相似度搜索,找到相关的历史记录,并将其作为上下文提供给LLM。这样AI就能记住“上次关于这个项目的会议决议是什么”,从而做出更连贯的决策。
  • 简易数据库:对于更结构化的记忆,如“客户A偏好电话沟通”、“任务B的截止日期是每周五”,可以使用SQLite数据库来存储和查询。LLM可以生成SQL查询语句(需谨慎验证),或由主控程序根据AI的指令来操作数据库。

4.3 工具调用(Function Calling):从“说”到“做”的关键跨越

前面的例子中,AI输出JSON,然后由主控程序解析并调用函数。更先进的模式是让AI直接“知道”它能调用哪些工具(函数)。这需要让LLM支持“函数调用”(Function Calling)能力。一些开源模型和框架正在支持此特性。

基本思路是:在调用LLM的API时,不仅发送消息,还发送一个“工具列表”,描述每个函数的名称、作用和参数格式。LLM在分析用户请求后,可能会返回一个“要求调用某函数并传入某参数”的指令。主控程序收到后,执行对应函数,再将执行结果返回给LLM,由LLM生成最终给用户的回复。这实现了更自然、更强大的交互。例如,AI可以直接说“我来帮你查一下明天的天气”,然后内部调用get_weather(location="北京")函数。

对于Ollama,虽然其原生API不完全支持OpenAI格式的函数调用,但你可以通过精心设计的提示词和输出格式约束来模拟这一行为,或者使用像LangChainLlamaIndex这样的框架,它们对工具调用有更好的封装和支持。

4.4 安全、隐私与稳定性考量

让AI自动操作你的账户,安全是第一位的。

  • 最小权限原则:在创建API令牌(如Gmail、Calendar)时,只授予它完成工作所必需的最小权限(如只读邮件、创建日历事件)。
  • 敏感信息脱敏:切勿将API密钥、密码等硬编码在脚本中。使用环境变量(python-dotenv)或安全的密钥管理服务。
  • 操作确认机制:对于高风险操作(如删除邮件、发送消息、转账),不要完全自动化。可以设置为AI先提出建议,通过另一个渠道(如Telegram Bot)发送给你确认,你回复“批准”后再执行。
  • 设置防护栏(Guardrails):在AI做出决策后、执行动作前,加入规则校验。例如,对于“添加日历事件”,检查开始时间是否在合理范围内(如不是1970年),检查地点是否包含明显错误字符。
  • 完善的日志与监控:记录下AI收到的每一条指令、做出的每一个决策、执行的每一个动作及其结果。这不仅是排查错误的依据,也是审计AI行为的必须。考虑将日志结构化并存入数据库,便于查询和分析。
  • 错误处理与重试:网络可能中断,API可能限流。你的代码必须有健壮的错误处理(try-except),对于暂时性错误应有指数退避的重试机制。

5. 常见问题与实战排坑指南

在实际搭建和运行OpenClaw的过程中,你几乎一定会遇到下面这些问题。这里记录了我的踩坑实录和解决方案。

5.1 模型响应慢或不稳定

  • 症状:Ollama API调用超时,或者响应时间长达数十秒。
  • 排查与解决
    1. 检查资源:运行ollama ps查看模型运行状态。使用htop或任务管理器查看CPU/内存/GPU占用。7B模型在纯CPU上推理确实会慢,考虑使用更小的模型(如3B)或启用GPU加速。在Ollama运行时添加环境变量OLLAMA_NUM_PARALLEL=1OLLAMA_GPU_LAYERS=20(具体层数取决于你的GPU显存)可能提升速度。
    2. 调整参数:在API调用中,降低max_tokens(生成的最大长度),提高temperature(但高于0.7可能使输出不稳定)有时能加快速度。但对于任务型AI,通常设置temperature=0.1以保证输出确定性。
    3. 网络问题:确保localhost:11434可访问。如果是远程服务器,检查防火墙设置。
    4. 模型文件损坏:尝试ollama rm <model-name>然后重新ollama pull

5.2 AI输出格式不符合预期

  • 症状:LLM没有返回纯净的JSON,而是夹杂了额外解释,导致json.loads()失败。
  • 排查与解决
    1. 强化提示词:这是最主要的原因。在系统指令的开头和结尾都强调“只输出JSON,不要有任何其他文字”。使用“示例”方法效果极佳。
    2. 后处理清洗:像我们parse_llm_json_response函数做的那样,尝试从回复文本中提取{...}之间的内容。可以结合正则表达式r'\{.*\}'并用re.DOTALL模式匹配多行。
    3. 使用JSON Mode:部分较新的模型和API(如OpenAI API、某些Llama 3的API变体)支持“JSON Mode”,可以强制模型输出合法JSON。关注Ollama的更新,看是否支持此特性。
    4. 降级方案:如果始终无法获得稳定JSON,可以退而求其次,让AI用固定分隔符输出关键字段,如主题|时间|地点,然后用split('|')解析。

5.3 自动化操作被反爬或触发安全验证

  • 症状:使用seleniumplaywright模拟浏览器时,网站弹出验证码,或者账号被临时封禁。
  • 排查与解决
    1. 优先使用官方API:这是最稳定、最合法的方式。绝大多数服务都提供API。
    2. 降低请求频率:在操作间增加随机延迟(如time.sleep(random.uniform(1, 3))),模拟人类行为。
    3. 使用真实浏览器环境:配置playwright使用已登录状态的用户数据目录,避免每次从头登录。但请注意密码安全。
    4. 设置超时和重试:对于网络请求,必须设置合理的超时时间,并实现重试逻辑。
    5. 识别验证码:如果必须面对验证码,考虑接入第三方打码平台(商业方案),但这会引入复杂性和成本。对于个人项目,遇到验证码时最好让流程暂停并通知你手动处理。

5.4 任务调度混乱或重复执行

  • 症状:同一个邮件被处理了多次,或者定时任务没有按预期执行。
  • 排查与解决
    1. 任务幂等性设计:确保你的脚本即使多次运行,也不会产生负面效果。例如,处理邮件前,先检查本地日志或数据库,看该邮件ID是否已被处理过。
    2. 使用文件锁或分布式锁:如果你的脚本可能被同时启动多个实例,使用fcntl(Linux)或portalocker(跨平台)对某个锁文件加锁,确保同一时间只有一个实例在运行。
    3. 检查系统定时任务:仔细检查cron表达式或Windows计划任务的设置是否正确,时区是否匹配。
    4. 引入任务队列:对于复杂任务,放弃简单的cron,改用Celery + Redis。每个任务有唯一ID,队列保证顺序和执行状态。

5.5 权限与认证问题

  • 症状:Gmail/Calendar等API报错,提示“invalid_grant”或“access denied”。
  • 排查与解决
    1. 令牌过期:OAuth 2.0的access_token通常有效期较短(1小时),而refresh_token长期有效。确保你的代码正确处理了令牌刷新逻辑(我们示例中使用google-auth库会自动处理)。
    2. 范围变更:如果你在Google Cloud Console中修改了API的授权范围(SCOPES),需要删除本地的token.json文件,重新运行授权流程。
    3. 测试环境与生产环境:确保credentials.json文件对应的是正确的Google Cloud项目(开发环境 vs 生产环境)。

构建OpenClaw的过程,是一个典型的“发现问题 -> 设计解决方案 -> 实现 -> 调试优化”的工程循环。每一个坑踩过去,你对整个系统的掌控力就增强一分。这个“数字员工”从最初笨手笨脚、时常犯错,到后来逐渐可靠、成为你工作流中不可或缺的一环,这种亲手培育的成就感,是使用任何现成SaaS产品都无法比拟的。

← 返回列表