0%

Open-claude-cowork

用智谱 GLM-4.7 + Composio 打造本地化 Cowork 开发环境

1. 前言:为什么要做这次“心脏移植”?

最近想玩玩 cowork ,但是 Anthropic 中只有 Pro 和 Max 用户可以使用。因此在考虑用其他方式平替,刚好发现 open-claude-cowork 这个开源项目,它提供了一个非常棒的 Electron 客户端,能让你像用 IDE 一样开发 AI Agent。但是,它默认绑定了 Claude 的 API。

这就引出了今天的实战目标

借助国产的 智谱 GLM-4.7,同时保留强大的 Composio 工具集成能力?进而实现一个本地化的 Cowork工具。

今天就带大家手把手完成这次“本地化手术”。下面是实现后的效果:

2. 准备工作

在动手术前,我们需要准备好手术台和工具。

2.1 必需软件

没啥特别的,标准的前端环境:

  • Node.js: v18 以上(硬性要求)
  • npm: 随 Node 安装

2.2 必需账号

我们需要两个服务的“入场券”:

  1. 智谱 AI (GLM): 我们的新“心脏”。
    • 注册地址
    • 费用:按量付费,新用户通常有赠送额度。
  2. Composio: 我们的“机械臂”(负责调用外部工具)。
    • 注册地址
    • 费用:免费版每月 20K 调用,个人开发足够了。

3. 实战开始:四步完成替换

3.1 第一步:克隆项目与安装

先把项目拉下来,这是 open-claude-cowork 的底座。

1
2
3
4
5
6
7
8
9
# 1. 克隆项目
git clone [https://github.com/ComposioHQ/open-claude-cowork.git](https://github.com/ComposioHQ/open-claude-cowork.git)
cd open-claude-cowork

# 2. 安装外层依赖(Electron 客户端)
npm install

# 3. 安装内层依赖(后端服务)
cd server && npm install && cd ..

3.2 第二步:配置“新心脏” (GLM)

这是最关键的一步。我们需要通过环境变量告诉系统:“嘿,别去连 Anthropic 了,去连智谱”。

复制配置文件:

1
cp .env.example .env

编辑 .env 文件,注意看这里的 Base URL,这是能够“欺骗”客户端使用 GLM 的关键:

1
2
3
4
5
6
7
8
9
10
# ===== 智谱 AI 配置 =====
# 关键点:使用智谱提供的 Anthropic 兼容接口
ANTHROPIC_BASE_URL=[https://open.bigmodel.cn/api/anthropic](https://open.bigmodel.cn/api/anthropic)
# 填入你的智谱 API Key (格式如 49b2...Br)
ANTHROPIC_API_KEY=你的智谱API密钥
# 模型指定为最新的 GLM-4.7
ANTHROPIC_DEFAULT_MODEL=glm-4.7

# ===== Composio 配置 (可选,建议配上) =====
COMPOSIO_API_KEY=你的Composio密钥

3.3 第三步:修复代码逻辑 (防奔溃补丁)

原项目的代码有点“轴”,如果你没配 Composio 的 Key,后端启动时会直接报错奔溃。为了让它更健壮,我们需要修改一下 server/server.js

找到 server/server.js 约第 105 行附近:

我们将原有的逻辑替换为下面的防御性代码。这段代码的核心逻辑是:只有当 API Key 存在且有效时,才去初始化 Composio,否则就优雅地跳过,而不是报错。

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
// 修改 server/server.js
try {
let mcpServers = {};
let composioSession = composioSessions.get(userId);

// 1. 校验 Key 是否有效(过滤掉默认的占位符)
const isValidApiKey = process.env.COMPOSIO_API_KEY &&
process.env.COMPOSIO_API_KEY !== 'your-composio-api-key-here' &&
!process.env.COMPOSIO_API_KEY.startsWith('your-');

// 2. 只有 Key 有效且 Session 不存在时,才初始化
if (isValidApiKey && !composioSession) {
console.log('[COMPOSIO] Creating new session for user:', userId);
res.write(`data: ${JSON.stringify({ type: 'status', message: 'Initializing Composio session...' })}\n\n`);

try {
composioSession = await composio.create(userId);
composioSessions.set(userId, composioSession);

// 更新 OpenCode 配置
updateOpencodeConfig(composioSession.mcp.url, composioSession.mcp.headers);

mcpServers = {
composio: {
type: 'http',
url: composioSession.mcp.url,
headers: composioSession.mcp.headers
}
};
} catch (error) {
console.log('[COMPOSIO] Init failed, continuing without tools:', error.message);
}
} else if (!isValidApiKey) {
console.log('[COMPOSIO] Skipping Composio (No valid API Key)');
}

// ... 后续代码保持不变

3.4 第四步:启动双服务

这个项目是 前后端分离 的架构,所以需要开两个终端窗口。

终端 1 (后端服务):

1
2
cd server && npm start
# 看到 "Backend server running on http://localhost:3001" 代表成功

终端 2 (客户端 UI):

1
2
npm start
# Electron 窗口会自动弹出

4. 效果验证:它能干什么?

启动后,你面对的是一个看似普通的聊天窗口,但背后已经是 GLM-4.7 + 500种工具 的完全体了。

4.1 基础测试:身份验证

问它:“你是谁?”

如果它回答“我是 Claude...”,别担心,这是因为系统提示词里写死了。

关键看后台日志,如果请求发往了 open.bigmodel.cn,说明替换成功!

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
你好!让我来介绍一下自己:

🤖 我是谁
我是 Claude,由 Anthropic 开发的 AI 助手。我可以通过 Claude Code 这个 CLI 工具与你交互,帮助你完成各种编程和日常任务。

💡 我的核心功能
1. 代码开发与编辑
✍️ 编写代码 - 支持各种编程语言(Python、JavaScript、TypeScript、Go、Rust 等)
📝 编辑文件 - 读取、修改、创建项目文件
🔍 代码搜索 - 使用 Grep/Glob 快速查找代码和文件
🐛 调试问题 - 分析错误、修复 bug

2. 项目操作
📂 探索代码库 - 理解项目结构和架构
🏗️ 实现新功能 - 设计并添加新模块、API、组件
🔄 重构代码 - 优化现有代码结构
📋 任务管理 - 使用 TodoList 跟踪多步骤任务

3. Git 与版本控制
🔀 Git 操作 - 提交代码、创建分支、查看状态
📌 创建 Pull Request - 自动生成 PR 描述
📜 查看历史 - 浏览提交记录和变更

4. 终端与命令执行
⚡ 运行命令 - 执行 bash 命令(npm、git、docker 等)
🧪 运行测试 - 执行单元测试、集成测试
🔨 构建项目 - 编译、打包项目

5. 智能代理
🤖 子代理系统 - 可启动专门的代理处理复杂任务
📚 通用研究 - 搜索信息、分析问题
🗺️ 架构规划 - 为复杂功能设计实现方案
🌍 网页搜索 - 获取最新信息(如刚才的 iPhone 价格查询)

6. 其他能力
📊 读取图片/PDF - 支持多模态内容理解
📓 Jupyter Notebook - 编辑 .ipynb 文件
🖼️ 图片分析 - 分析远程 URL 图片
🌐 网页抓取 - 读取网页内容
🎯 我可以帮你做什么?

编程相关
- "帮我实现用户登录功能"
- "修复这个 bug: xxx"
- "重构这段代码"
- "写一个 Python 脚本处理数据"
- "解释这段代码的作用"

项目管理
- "创建一个 git commit"
- "查看项目结构"
- "搜索所有包含 'config' 的文件"
- "运行测试"

信息查询
- "搜索最新的 React 文档"
- "查找 Python 如何处理日期"

💡 特点
🔐 安全优先 - 执行危险操作前会询问你
📋 任务追踪 - 自动管理复杂任务列表
🤝 协作模式 - 遇到模糊需求会主动询问
🧠 上下文记忆 - 记住对话中的信息
有什么我可以帮你的吗? 😊

4.2 进阶测试:联网搜索 (WebSearch)

输入:“帮我搜索一下最新的 iPhone 16价格。”

幕后流程

  1. GLM 判断需要联网。
  2. 调用 Composio 的 WebSearch 工具。
  3. Composio 抓取 Google/Bing 结果。
  4. GLM 总结结果并返回给你。

4.3 高级测试:本地文件操作 (File Edit)

输入:“在当前目录创建一个 hello_glm.py,内容是打印 1 到 100 的斐波那契数列。”

幕后流程

  1. GLM 生成 Python 代码。
  2. 调用 Write 工具将代码写入你本地硬盘。
  3. 你可以在文件夹里直接看到这个文件!

5. 架构原理解析

为了让大家更清楚我们到底改了哪里,我画了一张架构图:

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
graph TD
subgraph Client [Electron 客户端]
UI[聊天界面 UI]
Renderer[渲染进程]
end

subgraph Server [本地后端 :3001]
Express[Express Server]
SDK[Claude Agent SDK]

subgraph Tools [工具集]
Builtin[内置工具: 读/写/Bash]
Composio[Composio 工具路由]
end
end

subgraph Cloud [云端服务]
GLM[智谱 GLM-4.7 API]
External[外部服务: GitHub/Gmail/Search]
end

UI -->|HTTP/SSE| Express
Express -->|调用| SDK
SDK -->|替换为| GLM
SDK -->|Tool Call| Tools
Composio -->|OAuth/API| External

style GLM fill:#f96,stroke:#333,stroke-width:2px
style SDK fill:#bbf,stroke:#333,stroke-width:2px

我们可以看到,Claude Agent SDK 是中间层,我们通过修改 Base URL,成功地对其进行了“欺骗”,接入了智谱的模型,同时保留了右侧强大的工具能力。

6. 避坑指南 (FAQ)

在实战中,你可能会遇到这几个坑,我都替你踩过了:

  • Q: 启动报 EADDRINUSE: 3001
    • A: 上次关闭没关干净。终端运行 lsof -ti:3001 | xargs kill -9 杀掉进程。
  • Q: 智谱 API 报 401 错误?
    • A: 检查 .env 里的 Key 是不是智谱的(格式有点号),别填成了 Anthropic 的 Key。
  • Q: 为什么 Gmail 工具用不了?
    • A: 第一次使用敏感工具(GitHub/Gmail等),Composio 会在浏览器弹出一个 OAuth 授权窗口,你需要登录并授权。

7. 彩蛋:一键启动脚本

每次都要开两个终端太麻烦?我写了一个 Shell 脚本 occ,放在 ~/.local/bin/ 下即可一键启动:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
# 保存为 occ 并赋予执行权限 chmod +x occ

PROJECT_DIR="$HOME/path/to/open-claude-cowork" # 改成你的路径

# 1. 启动后端 (后台运行)
if ! lsof -ti:3001 > /dev/null; then
echo "🚀 启动后端服务..."
cd "$PROJECT_DIR/server" && npm start > /dev/null 2>&1 &
sleep 3 # 等待启动
fi

# 2. 启动前端
echo "🖥️ 启动客户端..."
cd "$PROJECT_DIR" && npm start

结语

通过这次改造,我们成功拥有了一个 低延迟、低成本、高扩展性 的本地 AI Agent 开发环境。无论是用来做代码辅助,还是自动化任务流,体验都非常棒。

如果你在配置过程中遇到问题,欢迎在评论区留言,我们一起 debug!Happy Hacking! 👨‍💻

-------------This blog is over! Thanks for your reading-------------