HiClaw项目验证记录(接上一篇)
第一周 + 第二周任务(每人一段话,含交接)
成员1(系统架构 + Agent 编排)
第一周:在 HiClaw 框架中注册 GitHubCollectorWorker、ArxivCollectorWorker、DailyReportWorker 三个基础 Worker,配置 Manager 调度规则。步骤:① 基于 HiClaw Worker 基类编写 Worker 注册代码;② 在 Docker Compose 中声明新 Worker 服务;③ 配置 Manager 的 Worker 路由规则;④ 验证 Worker 间可通过 Matrix 消息通信。
第二周:调整 Agent 结构,为开发者场景新增 GitHubSummaryWorker 和 PaperSummaryWorker,并配置百炼 AI 作为摘要能力后端。步骤:① 扩展现有 Worker 类,支持调用百炼 qwen 模型;② 设计摘要 Prompt(仓库→一句话功能,论文→核心创新点);③ 配置 Manager 的调度优先级;④ 联调验证多 Worker 协同。
交接:第一周向成员2、3、4提供 Worker 注册配置和通信协议文档;第二周向成员3提供 AI 调用接口说明和 Agent 结构调整文档。
成员2(数据采集 Worker 开发)
第一周:在 HiClaw 框架下开发 GitHubCollectorWorker 和 ArxivCollectorWorker,采集数据并通过 Matrix 发送给 Manager。步骤:① 继承 HiClaw BaseWorker;② 在 run() 中调用 GitHub/arXiv API;③ 将采集结果封装为 HiClaw 标准消息格式;④ 发送到 Manager 指定的 Room。
第二周:升级两个 Collector Worker,支持开发者关键词配置(LLM、Agent、RAG),并按成员1的接口要求输出结构化数据。步骤:① 在 Worker 启动参数中增加关键词列表;② 采集后增加去重和热度排序逻辑;③ 输出消息中增加 worker_type: "developer" 标签;④ 编写 Worker 配置示例文档。
交接:第一周向成员3提供采集消息的格式样例和 Room 地址;第二周向成员3提供开发者专用数据集的消息样例。
成员3(日报与摘要 Worker 开发)
第一周:在 HiClaw 框架下开发 DailyReportWorker,订阅 Collector Worker 的消息并生成日报。步骤:① 监听 Manager 转发的采集消息;② 按时间窗口聚合 GitHub/arXiv 数据;③ 调用百炼 AI 生成每日总结(可选);④ 输出日报消息到指定 Room。
第二周:开发 GitHubSummaryWorker 和 PaperSummaryWorker,调用百炼 qwen 对每条数据生成摘要。步骤:① 订阅 Collector Worker 的单条数据消息;② 构造 Prompt 调用百炼 API;③ 将摘要结果附加到原消息中;④ 发送给 DailyReportWorker 用于最终报告。
交接:第一周向成员4提供日报消息样例和 Room 地址;第二周向成员4提供带摘要的 Worker 输出消息样例。
成员4(输出格式与前端展示)
第一周:基于 Element Web 设计日报展示格式,配置 HiClaw 的消息渲染规则。步骤:① 在 Element Web 中测试不同 Markdown 格式的渲染效果;② 定义 HiClaw 消息体的 formatted_body 规范;③ 与成员3联调,确保日报消息美观展示;④ 输出格式规范文档。
第二周:设计技术报告结构,将多个 Worker 的输出整合为结构化报告。步骤:① 设计报告 JSON 结构(包含 GitHub 解读 + 论文趋势分析);② 开发 ReportFormatterWorker,聚合 Summary Worker 的输出;③ 调用百炼 AI 生成趋势总结段落;④ 将最终报告推送到 Element Web 并截图。
交接:第一周向成员3提供格式规范文档;第二周向成员1、3反馈 Element 展示效果和报告模板建议。
第一周达成效果
到第一周末,HiClaw 项目完成了 基于 Agent 框架的基础日报系统:三个核心 Worker(GitHubCollector、ArxivCollector、DailyReport)成功注册并运行在 HiClaw 容器集群中,Worker 之间通过 Matrix 消息完成数据流转,最终在 Element Web 上输出一份由 HiClaw 自动生成的技术日报。四人协作实现了“采集 Worker → Manager 路由 → 日报 Worker → Element 展示”的完整 HiClaw 链路。
第二周达成效果
到第二周末,HiClaw 项目演进为 面向开发者的智能技术观察系统:新增摘要 Worker 集群,调用百炼 AI 对 GitHub 仓库和 arXiv 论文生成一句话摘要;Manager 实现了多 Worker 协同调度;最终输出结构化技术报告,包含热门项目解读和论文趋势分析。所有能力均以 HiClaw Worker 形式存在,验证了 HiClaw 框架在多 Agent 协作场景下的实用性。
我是成员一我将记录我的步骤
第一周:在 HiClaw 框架中注册 GitHubCollectorWorker、ArxivCollectorWorker、DailyReportWorker 三个基础 Worker,配置 Manager 调度规则。步骤:① 基于 HiClaw Worker 基类编写 Worker 注册代码;② 在 Docker Compose 中声明新 Worker 服务;③ 配置 Manager 的 Worker 路由规则;④ 验证 Worker 间可通过 Matrix 消息通信。
第二周:调整 Agent 结构,为开发者场景新增 GitHubSummaryWorker 和 PaperSummaryWorker,并配置百炼 AI 作为摘要能力后端。步骤:① 扩展现有 Worker 类,支持调用百炼 qwen 模型;② 设计摘要 Prompt(仓库→一句话功能,论文→核心创新点);③ 配置 Manager 的调度优先级;④ 联调验证多 Worker 协同。
交接:第一周向成员2、3、4提供 Worker 注册配置和通信协议文档;第二周向成员3提供 AI 调用接口说明和 Agent 结构调整文档。
1启动docker
就是打开软件
C:\Users\35148>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc24af8fcbdf higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/hiclaw-manager:latest "supervisord -c /etc…" 3 weeks ago Up 5 minutes 8001/tcp, 8443/tcp, 9001/tcp, 18888/tcp, 0.0.0.0:8080->8080/tcp hiclaw-manager
c1728fc218cd ghcr.nju.edu.cn/open-webui/open-webui:main "bash start.sh" 13 months ago Up 5 minutes (healthy) 0.0.0.0:3000->8080/tcp open-webui
确认了,你只有两个容器:
-
hiclaw-manager(HiClaw 管理器) -
open-webui(Web UI)
Higress 网关容器确实不存在。
现在立即安装 Higress 网关
C:\Users\35148>docker run -d ^
More? --name higress-gateway ^
More? --restart unless-stopped ^
More? -p 8001:8001 ^
More? -p 18001:18001 ^
More? -p 19981:19981 ^
More? higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/gateway:latest
dee3f6faa96e423c35cb70bb3f91fc10b1b57480aa1131976f516db2ef181ff2
访问 Higress 控制台
浏览器打开:http://localhost:18001
打不开
既然 Higress 有问题,我们先用 HiClaw 的原生功能。HiClaw Manager 已经运行了,可以直接使用。
验证 Manager 是否正常:
cmd
docker logs hiclaw-manager --tail 30
检查 Manager 的 API 端口:
cmd
curl http://localhost:8080/health
访问 http://localhost:8080 返回的是 Higress Console 的 HTML 页面!
这意味着:
-
hiclaw-manager容器实际上既是 Manager 又是 Higress Console -
你的 Higress 控制台已经在运行了,只是我之前理解错了
立即验证
浏览器打开:http://localhost:8080
你应该能看到 Higress 控制台登录页面!

整体架构
你们的场景:Worker 是自己写的 Python 程序,直接运行在容器里,不需要包装成 MCP。
-
✅ 只需要 Docker Compose 拉起 Worker 容器
-
✅ Worker 之间通过 Manager 转发消息通信
创建文件目录
这里真的搞了超久
一直让我用 Docker 配置镜像加速器或者修改 docker-compose.yml,使用国内镜像
但是都说网络无法直接访问 Docker Hub(registry-1.docker.io)或者配置了国内的镜像加速器但拉取命令还是报错指向官方仓库(registry-1.docker.io)
显式指定镜像加速地址
这是最稳定、成功率最高的方法。它的原理是不依赖 Docker 的回退机制,直接将请求发送给你指定的国内镜像源。
docker pull docker.1ms.run/library/python:3.11-slim
C:\hiclaw-project>docker pull docker.1ms.run/library/python:3.11-slim
3.11-slim: Pulling from library/python
3531af2bc2a9: Pull complete
91ff8760033c: Pull complete
f3ba2250c524: Pull complete
7ccd73948dde: Pull complete
Digest: sha256:92c262cbb2e99cdc16218338d74fbe518055c13d224d942708f70f8042ff6d18
Status: Downloaded newer image for docker.1ms.run/library/python:3.11-slim
docker.1ms.run/library/python:3.11-slim
镜像已经成功拉取下来了
C:\hiclaw-project>docker-compose -f docker-compose-core.yml up -d
[+] Running 4/4
✔ Container hiclaw-manager Started 2.5s
✔ Container worker-daily-report Started 3.4s
✔ Container worker-github-collector Started 3.4s
✔ Container worker-arxiv-collector Started 3.1s
完美!所有容器都成功启动了!
中途暂停一下
继续先验证 Docker 是否正常,进入项目目录并启动
C:\Users\35148>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1728fc218cd ghcr.nju.edu.cn/open-webui/open-webui:main "bash start.sh" 13 months ago Up 14 minutes (healthy) 0.0.0.0:3000->8080/tcp open-webui
C:\Users\35148>cd C:\hiclaw-project
C:\hiclaw-project>docker-compose -f docker-compose-core.yml up -d
[+] Running 5/5
✔ Network hiclaw-project_hiclaw-net Created 0.6s
✔ Container hiclaw-manager Started 3.4s
✔ Container worker-arxiv-collector Started 4.4s
✔ Container worker-github-collector Started 4.1s
✔ Container worker-daily-report Started
查看容器状态
C:\hiclaw-project>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
134c97afbd10 hiclaw-project-arxiv-collector "python arxiv_collec…" 55 seconds ago Restarting (1) 8 seconds ago worker-arxiv-collector
d5fed5753b5b hiclaw-project-daily-report "python daily_report…" 55 seconds ago Restarting (1) 10 seconds ago worker-daily-report
722cb41b16e0 hiclaw-project-github-collector "python github_colle…" 55 seconds ago Restarting (1) 11 seconds ago worker-github-collector
2cc2f907ff35 higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/hiclaw-manager:latest "supervisord -c /etc…" 56 seconds ago Up 53 seconds 0.0.0.0:8008->8008/tcp, 8001/tcp, 8443/tcp, 9001/tcp, 18888/tcp, 0.0.0.0:8080->8080/tcp hiclaw-manager
c1728fc218cd ghcr.nju.edu.cn/open-webui/open-webui:main "bash start.sh" 13 months ago Up 15 minutes (healthy) 0.0.0.0:3000->8080/tcp open-webui
Manager 启动成功,8008 端口已开放(看到 0.0.0.0:8008->8008/tcp)。
问题是三个 Worker 容器在不断重启(Restarting 状态)。这是因为它们启动时无法连接到 Matrix 服务
停止所有容器(在cmd和PowerShell都行)
PS C:\hiclaw-project> cd C:\hiclaw-project
PS C:\hiclaw-project> docker-compose -f docker-compose-core.yml down
[+] Running 5/5
✔ Container worker-github-collector Removed 0.3s
✔ Container worker-daily-report Removed 0.3s
✔ Container worker-arxiv-collector Removed 0.3s
✔ Container hiclaw-manager Removed 8.3s
✔ Network hiclaw-project_hiclaw-net Removed 0.9s
(注意,停止时候就不能打开那个higress页面了这是正常的)
接下来我可以直接把代码交付让他们自己测试,但是为了方便他人,我决定修改代码和配置,,让 Worker 常驻运行不重启对后面同学会更方便。他们不需要每次手动触发,Worker 会自动等待 Manager 下发任务。
改代码
你之前拉取 docker.1ms.run/library/python:3.11-slim 能成功,是因为用了国内镜像加速器(docker.1ms.run 是加速地址)。
而 vectorim/element-web:latest 失败,是因为 Docker Compose 默认还是从 docker.io(Docker Hub 官方源)拉取,没有自动走加速器。

Element Web 拉取成功了!
但 hiclaw-manager 健康检查失败,导致容器无法启动。改代码
因为 Docker 构建时只复制当前目录的文件,所以 base_worker.py 需要放在每个 Worker 目录下!!!
成功了! Worker 容器已经常驻运行,不再重启!
Manager 容器内部的 8008 端口没有监听。这意味着 Matrix 服务根本没有启动。
部署独立的 Matrix 服务
改yml代码
初始化 Matrix Synapse
# 创建数据目录
mkdir matrix-data 2>nul
# 生成配置
docker run -it --rm ^
-v %cd%/matrix-data:/data ^
-e SYNAPSE_SERVER_NAME=localhost ^
-e SYNAPSE_REPORT_STATS=no ^
matrixdotorg/synapse:latest generate
启用注册(编辑配置文件)C:\hiclaw-project\matrix-data\homeserver.yaml
前面每个worker一个base太麻烦,把 docker-compose.yml 中的 build 路径指向 workers 目录,而不是子目录
这样不会产生代码冗余,后续维护也更方便

Docker 镜像构建时使用的是构建那一刻的文件。虽然你更新了本地的 base_worker.py,但 Docker 镜像还是旧的,需要强制重新构建。
为了这个日志输出,我不知道重新构建了多少次。。。
他一直说我是Worker 的 print 输出没有被 Docker 捕获
我们换一个思路:不依赖日志,直接验证 Worker 是否正常工作。
C:\hiclaw-project>docker exec -it worker-github-collector python -u /app/github_collector_worker.py
上述命令没输出,说明代码根本没有执行到 print,命令卡住了,说明 Worker 在运行但可能在等待什么东西,用简化版测试来定位问题,立即发送消息到 Matrix 房间。查看输出
成功了!Worker 可以发送消息到 Matrix 了!
只是 HTTP 方法用错了:PUT 应该改成 POST。但这是小问题,说明连接是正常的。
找到 base_worker.py 中的 send_message 方法,把 requests.put 改成 requests.post。
可是原本代码就是post啊??服了啊
创建一个最简单的测试脚本:先进入容器
C:\hiclaw-project>docker exec -it worker-github-collector sh
# echo 'import time, os, requests' > /app/test.py
echo 'print("1. Worker starting...")' >> /app/test.py
echo 'time.sleep(1)' >> /app/test.py
echo 'print("2. Import done")' >> /app/test.py
echo 'matrix_url = os.environ.get("MATRIX_HOMESERVER", "http://synapse:8008")' >> /app/test.py
echo 'room = os.environ.get("MANAGER_ROOM", "!manager:localhost")' >> /app/test.py
echo 'token = os.environ.get("MATRIX_ACCESS_TOKEN", "dummy-token")' >> /app/test.py
echo 'url = f"{matrix_url}/_matrix/client/v3/rooms/{room}/send/m.room.message"' >> /app/test.py
echo 'headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}' >> /app/test.py
echo 'data = {"msgtype": "m.text", "body": "Test"}' >> /app/test.py
echo 'print("3. Sending...")' >> /app/test.py
echo 'r = requests.post(url, headers=headers, json=data, timeout=5)' >> /app/test.py
echo 'print(f"4. Status: {r.status_code}")' >> /app/test.py# # # # # # # # # # # #
# python -u /app/test.py
1. Worker starting...
2. Import done
3. Sending...
4. Status: 401
# ^C
#
成功了!Worker 可以发送 HTTP 请求了!
状态码 401 是正常的,因为用的是 dummy-token,Matrix 服务器拒绝了认证。但关键是 代码可以正常运行,没有卡住!
原来的 base_worker.py 中的 listen() 方法可能因为某些原因没有输出。现在我们知道 Worker 本身是正常的。
解决方案:修复认证问题
需要创建真实的 Matrix 用户和 Token。
第 1 步:注册 Matrix 用户第 2 步:获取 Token第 3 步:更新 docker-compose.yml
用真实的 Token 替换 dummy-token:
C:\hiclaw-project>curl -X POST "http://localhost:8008/_matrix/client/v3/register" -H "Content-Type: application/json" -d "{\"username\":\"github-collector\",\"password\":\"pass123\",\"auth\":{\"type\":\"m.login.dummy\"}}"
{"user_id":"@github-collector:localhost","home_server":"localhost","access_token":"syt_Z2l0aHViLWNvbGxlY3Rvcg_TPSfiwdbwxvaxQmKGkpr_4ftSgJ","device_id":"VQONUMCFDL"}
C:\hiclaw-project>curl -X POST "http://localhost:8008/_matrix/client/v3/login" -H "Content-Type: application/json" -d "{\"type\":\"m.login.password\",\"user\":\"github-collector\",\"password\":\"pass123\"}"
{"user_id":"@github-collector:localhost","access_token":"syt_Z2l0aHViLWNvbGxlY3Rvcg_ReQpOczggEYZgtKozuWo_25zxQs","home_server":"localhost","device_id":"ULGCMSCVUO"}
太好了,还是不行
太好了!Worker 日志终于出来了!(谁知道这句话出来的救赎感,欣慰的泪水瞬间流出)
但有个问题:Send failed: 403 表示认证失败。可能原因:
-
Token 不正确
-
Worker 没有权限发送消息到房间
!manager:localhost
C:\hiclaw-project>curl -X GET "http://localhost:8008/_matrix/client/v3/account/whoami" -H "Authorization: Bearer syt_Z2l0aHViLWNvbGxlY3Rvcg_ReQpOczggEYZgtKozuWo_25zxQs"
{"user_id":"@github-collector:localhost","is_guest":false,"device_id":"ULGCMSCVUO"}
Token 有效!github-collector 用户认证成功。
需要先创建房间。
注册一个普通用户(用于在 Element Web 中操作):
curl -X POST "http://localhost:8008/_matrix/client/v3/register" -H "Content-Type: application/json" -d "{\"username\":\"testuser\",\"password\":\"pass123\",\"auth\":{\"type\":\"m.login.dummy\"}}"
-
打开浏览器 http://localhost
-
修改服务器地址:
-
点击右上角菜单(或登录页面下方的 "Edit")
-
将 Homeserver URL 改为:
http://localhost:8008 -
点击 "Save" 或 "Continue"
-
-
使用账号密码登录:
-
用户名:
testuser -
密码:
pass123
-

改了之后就变成

不是在上面的地址里面改

诶我没招了,我一直在创建新账户那里卡。。我应该登录已有账户的
获取房间 ID
房间创建后,浏览器地址栏会显示类似:
text
http://localhost/#/room/!jKxGxQRZvRqoHmBhQZ:localhost
复制 !jKxGxQRZvRqoHmBhQZ:localhost 这部分(这就是房间 ID)。
邀请 Worker 进入房间
-
在房间中,点击右上角的 People 图标(或 "i" 图标)
-
点击 Invite 或 Add people
-
输入
@github-collector:localhost -
点击 Invite
邀请另外两个的时候要先注册,笑死我了我之前三个都用的一样的token
C:\hiclaw-project>curl -X POST "http://localhost:8008/_matrix/client/v3/register" -H "Content-Type: application/json" -d "{\"username\":\"arxiv-collector\",\"password\":\"pass123\",\"auth\":{\"type\":\"m.login.dummy\"}}"
{"user_id":"@arxiv-collector:localhost","home_server":"localhost","access_token":"syt_YXJ4aXYtY29sbGVjdG9y_TtqVErhqJtYpnOHTLnkH_2uBrx7","device_id":"YBXGQYBNAF"}
C:\hiclaw-project>curl -X POST "http://localhost:8008/_matrix/client/v3/register" -H "Content-Type: application/json" -d "{\"username\":\"daily-report\",\"password\":\"pass123\",\"auth\":{\"type\":\"m.login.dummy\"}}"
{"user_id":"@daily-report:localhost","home_server":"localhost","access_token":"syt_ZGFpbHktcmVwb3J0_xByzppvcLGdkneHKNwqj_0cj3sx","device_id":"OROCSMFKPA"}
更新 docker-compose.yml
用你复制的房间 ID 替换:
yaml
github-collector:
environment:
- MANAGER_ROOM=!jKxGxQRZvRqoHmBhQZ:localhost
重启 Worker
cmd
cd C:\hiclaw-project docker-compose restart github-collector timeout /t 5 docker logs worker-github-collector --tail 20
在yml里面改好了,在页面里面也邀请成功了,但是还是说没有进房间
C:\hiclaw-project>docker exec worker-arxiv-collector python -c "import requests; token='syt_YXJ4aXYtY29sbGVjdG9y_TtqVErhqJtYpnOHTLnkH_2uBrx7'; url='http://synapse:8008/_matrix/client/v3/rooms/!iAoqrRALVwEVrZBACB:localhost/join'; r=requests.post(url, headers={'Authorization': f'Bearer {token}'}); print(r.status_code, r.text)"
200 {"room_id":"!iAoqrRALVwEVrZBACB:localhost"}
C:\hiclaw-project>docker exec worker-daily-report python -c "import requests; token='syt_ZGFpbHktcmVwb3J0_xByzppvcLGdkneHKNwqj_0cj3sx'; url='http://synapse:8008/_matrix/client/v3/rooms/!iAoqrRALVwEVrZBACB:localhost/join'; r=requests.post(url, headers={'Authorization': f'Bearer {token}'}); print(r.status_code, r.text)"
200 {"room_id":"!iAoqrRALVwEVrZBACB:localhost"}
成功标志
Worker 日志应该显示:
text
[2026-04-24 xx:xx:xx] Message sent to !xxxxx:localhost
你在 Element Web 的房间中也会看到 Worker 发送的消息:
text
Worker github-collector ready

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)