Openclaw 是一个开源的 AI 助手项目,旨在为用户提供可私有化部署的智能对话解决方案。通过将 Openclaw 与字节跳动旗下的 豆包(Doubao)模型 API 相结合,我们可以在本地环境中搭建一个功能强大、数据私有的 AI 助手,适用于个人学习、企业知识库问答等多种场景。
本文将详细介绍如何通过一键部署脚本,在本地环境中快速搭建 Openclaw 并接入豆包模型。
在开始部署之前,请确保您的系统满足以下基本要求:
首先,从 Openclaw 的官方仓库克隆项目并进入部署目录:
|
1 2 3 4 5 6 |
# 克隆项目 git clone https://github.com/openclaw/openclaw.git cd openclaw
# 进入部署脚本目录 cd scripts/deploy |
在运行部署脚本前,您需要准备好豆包模型的 API 密钥。如果您还没有,请前往 豆包开放平台 申请。
创建配置文件:
|
1 2 |
# 复制示例配置文件 cp config.example.yaml config.yaml |
编辑 config.yaml 文件,填入您的豆包 API 信息:
|
1 2 3 4 5 6 7 8 9 |
# config.yaml 配置示例 doubao: api_key: "your-doubao-api-key-here" # 替换为您的真实 API Key model: "doubao-pro-256k" # 选择豆包模型版本 base_url: "https://ark.cn-beijing.volces.com/api/v3" # API 端点 server: host: "0.0.0.0" port: 7860 debug: false |
运行部署脚本,系统将自动完成所有依赖安装和环境配置:
|
1 2 3 4 5 |
# 赋予脚本执行权限 chmod +x deploy.sh
# 执行部署(根据提示操作) ./deploy.sh |
部署过程包括:
部署完成后,脚本会输出服务访问地址。通常为 http://localhost:7860。
打开浏览器访问该地址,您应该能看到 Openclaw 的 Web 界面。在设置中确认豆包模型已正确连接,并尝试进行简单的对话测试。
部署成功后,您可以通过以下方式使用 Openclaw:
API 调用示例
以下是一个完整的 Python 脚本示例,包含错误处理和流式响应处理:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
import requests import json def chat_with_openclaw(use_stream=False): """ 与 Openclaw 服务进行对话的完整示例 参数: use_stream (bool): 是否使用流式响应,默认为 False """ # 1. 配置 API 端点 url = "http://localhost:7860/api/v1/chat/completions" # 2. 设置请求头 headers = { "Content-Type": "application/json", "Accept": "application/json" } # 3. 构建请求数据 data = { "model": "doubao-pro-256k", # 使用的模型名称 "messages": [ {"role": "system", "content": "你是一个专业的 AI 助手。"}, # 系统提示词 {"role": "user", "content": "请用中文简要介绍一下 Openclaw 项目。"} # 用户消息 ], "temperature": 0.7, # 控制回答的随机性 (0.0-1.0) "max_tokens": 500, # 限制生成的最大 token 数 "stream": use_stream # 是否启用流式响应 } try: # 4. 发送 POST 请求 print(f"正在发送请求到 {url}...") print(f"使用流式响应: {use_stream}") if use_stream: # 流式响应处理 print("开始接收流式响应:") print("-" * 40) response = requests.post( url, headers=headers, data=json.dumps(data), stream=True # 启用流式传输 ) # 检查响应状态 if response.status_code != 200: print(f"请求失败,状态码: {response.status_code}") print(f"错误信息: {response.text}") return None # 逐行处理流式响应 full_response = "" for line in response.iter_lines(): if line: line_str = line.decode('utf-8') # 跳过 SSE 格式中的 "data: " 前缀 if line_str.startswith("data: "): line_str = line_str[6:] # 检查是否为结束标记 if line_str == "[DONE]": print("\n流式响应结束") break # 解析 JSON 数据 try: chunk_data = json.loads(line_str) if "choices" in chunk_data and len(chunk_data["choices"]) > 0: delta = chunk_data["choices"][0].get("delta", {}) content = delta.get("content", "") if content: print(content, end="", flush=True) full_response += content except json.JSONDecodeError: # 忽略非 JSON 数据行 continue print(f"\n{'='*40}") print(f"完整响应内容:\n{full_response}") return full_response else: # 非流式响应处理 response = requests.post( url, headers=headers, data=json.dumps(data), timeout=30 # 设置超时时间(秒) ) # 5. 检查响应状态 response.raise_for_status() # 如果状态码不是 200,抛出异常 # 6. 解析响应数据 result = response.json() print("请求成功!") print(f"状态码: {response.status_code}") print(f"响应时间: {response.elapsed.total_seconds():.2f}秒") # 7. 提取并显示回答内容 if "choices" in result and len(result["choices"]) > 0: message = result["choices"][0].get("message", {}) content = message.get("content", "无内容") print(f"\nAI 回答:") print("-" * 40) print(content) print("-" * 40) # 显示使用统计(如果存在) if "usage" in result: usage = result["usage"] print(f"\n使用统计:") print(f" 提示词 tokens: {usage.get('prompt_tokens', 'N/A')}") print(f" 完成 tokens: {usage.get('completion_tokens', 'N/A')}") print(f" 总 tokens: {usage.get('total_tokens', 'N/A')}") return result except requests.exceptions.Timeout: print("错误: 请求超时,请检查网络连接或服务状态") except requests.exceptions.ConnectionError: print("错误: 连接失败,请确保 Openclaw 服务正在运行") except requests.exceptions.HTTPError as e: print(f"HTTP 错误: {e}") if response is not None: print(f"错误详情: {response.text}") except json.JSONDecodeError: print("错误: 响应不是有效的 JSON 格式") if response is not None: print(f"原始响应: {response.text}") except Exception as e: print(f"未知错误: {type(e).__name__}: {e}") return None if __name__ == "__main__": print("=== Openclaw API 调用示例 ===") print("\n1. 非流式调用示例:") result1 = chat_with_openclaw(use_stream=False) print("\n\n2. 流式调用示例:") result2 = chat_with_openclaw(use_stream=True) print("\n=== 示例执行完成 ===") |
代码说明
1.错误处理机制:
2.流式响应处理:
3.完整功能:
4.使用建议:
要运行此脚本,请确保:
Openclaw 支持多种高级功能,您可以在 config.yaml 中进一步配置:
如果部署过程中因网络问题下载失败,可以尝试:
|
1 2 3 |
# 使用国内镜像源 export PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple ./deploy.sh |
如果豆包 API 连接失败,请检查:
查看日志定位问题:
|
1 2 3 4 5 |
# 查看服务日志 journalctl -u openclaw.service -f
# 或直接查看输出日志 tail -f /var/log/openclaw.log |
通过本文的一键部署方案,您可以在 10-30 分钟内完成 Openclaw 的本地部署并接入豆包模型。这种组合为您提供了一个:
无论是用于个人学习助手、企业知识库还是开发测试,Openclaw + 豆包的组合都是一个强大而灵活的选择。
下一步建议: