Compare commits
65 Commits
acf1b6d938
...
5b720be5f8
| Author | SHA1 | Date | |
|---|---|---|---|
| 5b720be5f8 | |||
| d2fa79a101 | |||
| f7a8e61637 | |||
| bd37c6174a | |||
| a3f10f96c3 | |||
| ffe714278b | |||
| b1d73c0787 | |||
| e013425cad | |||
| 0a7d298f77 | |||
| 11735456cc | |||
| 38c4922300 | |||
| 1cd94a985e | |||
| 7544ccf0c6 | |||
| 9bb21f8aa5 | |||
| 298c3edc3c | |||
| 019d32c3f6 | |||
| 05301e8d5f | |||
| 0179b49cf7 | |||
| 12c88fd407 | |||
| e5fcd4dbe5 | |||
| 20af8e1de2 | |||
| 9376e18fd1 | |||
| 9839bdbf71 | |||
| 247c63746d | |||
| e2b082647b | |||
| eb77df579d | |||
| 25f8caefb6 | |||
| 3ad8035b05 | |||
| fccfce31a1 | |||
| 50c2e44627 | |||
| 980846ae96 | |||
| b6a641a40b | |||
| 752bc6300e | |||
| 5142a5b2c7 | |||
| c4e0ebb01a | |||
| c62ec1bb9d | |||
| b39a0cb1b3 | |||
| d0ade0386d | |||
| 06595f9e0c | |||
| 9e6d2eccd3 | |||
| d8bb1cad08 | |||
| a201dcb237 | |||
| 0535ba6482 | |||
| 7dc1a2a0bc | |||
| 63b3b1b8cc | |||
| fd9576c9fa | |||
| 9127e31e2c | |||
| 23ab8d9748 | |||
| 209b18bb93 | |||
| 391c7aa76b | |||
| 2f6f77a852 | |||
| 463531679a | |||
| 9de3ee731f | |||
| 73ad79afd4 | |||
| ffb5245810 | |||
| b751c92fe7 | |||
| 01566fd7cf | |||
| 957de24f7d | |||
| 0d2fbbe512 | |||
| 15d7bca6c3 | |||
| 8905dc26a2 | |||
| 9a7a6c9a55 | |||
| 3817911ee2 | |||
| 9ce2d8d8ba | |||
| b64a757a68 |
2
.obsidian/app.json
vendored
2
.obsidian/app.json
vendored
@@ -4,7 +4,7 @@
|
|||||||
"promptDelete": false,
|
"promptDelete": false,
|
||||||
"pdfExportSettings": {
|
"pdfExportSettings": {
|
||||||
"includeName": true,
|
"includeName": true,
|
||||||
"pageSize": "A3",
|
"pageSize": "A4",
|
||||||
"landscape": false,
|
"landscape": false,
|
||||||
"margin": "0",
|
"margin": "0",
|
||||||
"downscalePercent": 87
|
"downscalePercent": 87
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"截帧并且返回结果。":{"截帧并且返回结果。":{"currentFile":{"count":1,"lastUpdated":1770709439590}}},"Maya CMake笔记":{"Maya CMake笔记":{"internalLink":{"count":1,"lastUpdated":1770716829521}}},"MCP商店":{"MCP商店":{"currentFile":{"count":1,"lastUpdated":1770718675186}}},"Simplegen":{"Simplegen":{"currentFile":{"count":1,"lastUpdated":1770720333062}}},"README":{"README":{"internalLink":{"count":1,"lastUpdated":1770818577089}}},"Notification":{"Notification":{"currentFile":{"count":1,"lastUpdated":1770818619712}}},"ServiceRequest":{"ServiceRequest":{"internalLink":{"count":1,"lastUpdated":1772077751440}}},"skills":{"skills":{"currentFile":{"count":1,"lastUpdated":1772100003535}}},"Bilibili":{"Bilibili":{"currentFile":{"count":1,"lastUpdated":1772112409334}}},"using-superpowers":{"using-superpowers":{"currentFile":{"count":1,"lastUpdated":1772348498708}}},"添加新的护城河:引擎相关MCP&Skill、AITA资产库":{"添加新的护城河:引擎相关MCP&Skill、AITA资产库":{"currentFile":{"count":1,"lastUpdated":1772891664291}}}}
|
{"using-superpowers":{"using-superpowers":{"currentFile":{"count":1,"lastUpdated":1772348498708}}},"Agent":{"Agent":{"internalLink":{"count":2,"lastUpdated":1773554273209}}},"要解决这个问题,得对记忆进行合理规划与维护:":{"要解决这个问题,得对记忆进行合理规划与维护:":{"currentFile":{"count":1,"lastUpdated":1774938677236}}},"Openclaw-workspace":{"Openclaw-workspace":{"currentFile":{"count":1,"lastUpdated":1774938879095}}},"workflow":{"workflow":{"currentFile":{"count":1,"lastUpdated":1775020352083}}}}
|
||||||
2
.obsidian/plugins/workspaces-plus/data.json
vendored
2
.obsidian/plugins/workspaces-plus/data.json
vendored
@@ -6,7 +6,7 @@
|
|||||||
"workspaceSettings": false,
|
"workspaceSettings": false,
|
||||||
"systemDarkMode": false,
|
"systemDarkMode": false,
|
||||||
"globalSettings": {},
|
"globalSettings": {},
|
||||||
"activeWorkspaceDesktop": "阅读模式",
|
"activeWorkspaceDesktop": "编辑模式",
|
||||||
"activeWorkspaceMobile": "",
|
"activeWorkspaceMobile": "",
|
||||||
"reloadLivePreview": false,
|
"reloadLivePreview": false,
|
||||||
"workspaceSwitcherRibbon": false,
|
"workspaceSwitcherRibbon": false,
|
||||||
|
|||||||
2
.obsidian/workspaces.json
vendored
2
.obsidian/workspaces.json
vendored
@@ -368,5 +368,5 @@
|
|||||||
"workspaces-plus:settings-v1": {}
|
"workspaces-plus:settings-v1": {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"active": "阅读模式"
|
"active": "编辑模式"
|
||||||
}
|
}
|
||||||
20
01-Diary/本周事务/未命名.md
Normal file
20
01-Diary/本周事务/未命名.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
title: 未命名
|
||||||
|
date: 2026-04-02 20:19:19
|
||||||
|
excerpt:
|
||||||
|
tags:
|
||||||
|
rating: ⭐
|
||||||
|
status: inprogress
|
||||||
|
destination:
|
||||||
|
share: false
|
||||||
|
obsidianUIMode: source
|
||||||
|
---
|
||||||
|
|
||||||
|
武林有2个方向:
|
||||||
|
1. 第一天(西湖 Or 运河)
|
||||||
|
1. 往北可以坐地铁到香积寺,参观香积寺以及边上的大兜路特色街区,之后可以到乐堤港综合体吃个饭啥;之后可以坐地铁到拱宸桥看一下运河公园以及边上的街区。
|
||||||
|
2. 往南可以坐地铁到凤起路,那边有一家抹茶店可以去体验一下(得早点去要排队),之后可以去往西湖边走,到西湖后继续往南,走到龙翔桥附近,可以考虑逛 银泰(吃饭啥)。之后继续往南
|
||||||
|
1. 可以考虑去柳浪闻莺公园 => 坐观光车 => 游西湖 => 太子湾公园 => 苏堤 => 断桥
|
||||||
|
2. 可以考虑去吴山广场 => 河坊街 => 胡雪岩故居 => 鼓楼附近吃饭啥的。去附近的候潮门 地铁站 (或者打车)=> 市民中心(附近有来福士、万象城综合体) => 走到城市阳台 看杭州的灯光秀(记得是18:30结束)。
|
||||||
|
2. 第二天(西溪湿地)
|
||||||
|
1. 做地铁到 天目里 => 西溪天堂 => 西溪湿地南部小路 => 高庄 => 福堤 => 西溪龙湖天街
|
||||||
70
02-Note/WY/MatrixAITA团队服务部署/OSS+图床.md
Normal file
70
02-Note/WY/MatrixAITA团队服务部署/OSS+图床.md
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
# 部署
|
||||||
|
```bash
|
||||||
|
mkdir -p /home/matriaita_docker/oss/minio
|
||||||
|
mkdir -p /home/matriaita_docker/oss/alist
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```yml
|
||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
minio:
|
||||||
|
image: pgsty/minio:latest
|
||||||
|
container_name: minio
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "9000:9000" # S3 API
|
||||||
|
- "9001:9001" # 管理后台
|
||||||
|
environment:
|
||||||
|
MINIO_ROOT_USER: admin
|
||||||
|
MINIO_ROOT_PASSWORD: mataita@666
|
||||||
|
# --- 新增以下配置 ---
|
||||||
|
# 1. 解决分享链接打不开的问题(设为你的 API 访问地址)
|
||||||
|
MINIO_SERVER_URL: "http://ta.netease.com:9000"
|
||||||
|
# 2. 解决管理后台登录跳转地址不对的问题
|
||||||
|
MINIO_BROWSER_REDIRECT_URL: "http://ta.netease.com:9001"
|
||||||
|
# 3. 解决跨域问题(允许来自 ta.netease.com 的请求,或者设为 * 允许所有)
|
||||||
|
MINIO_API_CORS_ALLOW_ORIGIN: "http://ta.netease.com,http://ta.netease.com:5244"
|
||||||
|
volumes:
|
||||||
|
- ./minio:/data
|
||||||
|
command: server /data --console-address ":9001"
|
||||||
|
|
||||||
|
alist:
|
||||||
|
image: xhofe/alist:latest
|
||||||
|
container_name: alist
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "5244:5244"
|
||||||
|
volumes:
|
||||||
|
- ./alist:/opt/alist/data
|
||||||
|
environment:
|
||||||
|
- PUID=1000
|
||||||
|
- PGID=1000
|
||||||
|
- UMASK=022
|
||||||
|
depends_on:
|
||||||
|
- minio
|
||||||
|
```
|
||||||
|
|
||||||
|
## 配置步骤
|
||||||
|
- 启动:`docker-compose up -d`
|
||||||
|
- 获取 AList 密码:`docker exec -it alist ./alist admin`
|
||||||
|
- **配置 MinIO**:
|
||||||
|
- 访问 `http://服务器IP:9001`。
|
||||||
|
- 创建一个 Bucket(如 `obsidian-assets`)。
|
||||||
|
- 在 Access Keys 中创建一个 Key,记下 `Access Key` 和 `Secret Key`。
|
||||||
|
- **配置 AList**:
|
||||||
|
- 访问 `http://服务器IP:5244`。
|
||||||
|
- 进入“管理” -> “存储” -> “添加”。驱动选 **MinIO**。
|
||||||
|
- **挂载路径**填 `/assets`。
|
||||||
|
- **Endpoint** 填 `http://minio:9000`(如果 AList 和 MinIO 在同一台服务器的 Docker 网络中)。
|
||||||
|
- 填入刚才 MinIO 的 Bucket 和 Key。
|
||||||
|
|
||||||
|
## 相关信息
|
||||||
|
1. MinIO
|
||||||
|
1. `Access Key`:r9uq0TP7ZbF5BA41Gb6E
|
||||||
|
2. `Secret Key`:DstYixNcDnumg5qZPRg4XxMfVZb2XFwH92ow0SbP
|
||||||
|
2. AList
|
||||||
|
1. admin
|
||||||
|
2. NEW_PASSWORD
|
||||||
187
03-UnrealEngine/逆向/魔改RenderDoc截帧PC端《鸣潮》.md
Normal file
187
03-UnrealEngine/逆向/魔改RenderDoc截帧PC端《鸣潮》.md
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
---
|
||||||
|
title: 未命名
|
||||||
|
date: 2026-03-25 21:43:14
|
||||||
|
excerpt:
|
||||||
|
tags:
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|

|
||||||
|
|
||||||
|
## 前言
|
||||||
|
|
||||||
|
之前写过一些截帧的文章,主要是通过模拟器来绕过加密系统,但是现在想想有可能两个游戏在移动端和PC端上用的Shader不一样,现在想用[RenderDoc](https://zhida.zhihu.com/search?content_id=271977473&content_type=Article&match_order=1&q=RenderDoc&zhida_source=entity)来截取PC环境下两个游戏的Shader
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 《鸣潮》是如何检测到RenderDoc的?
|
||||||
|
|
||||||
|
如果你是直接下载的打包好的RenderDoc,那么无论你是否从RenderDoc启动游戏还是是否有任何注入,都会显示启用了黑客工具
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
此外,《鸣潮》采用了[CrashSight](https://zhida.zhihu.com/search?content_id=271977473&content_type=Article&match_order=1&q=CrashSight&zhida_source=entity) 检测,所以在做的时候不但要修改RenderDoc的特征码,还需要修改注入方式
|
||||||
|
|
||||||
|
## 前期准备
|
||||||
|
|
||||||
|
RenderDoc的工具集是[VS2015](https://zhida.zhihu.com/search?content_id=271977473&content_type=Article&match_order=1&q=VS2015&zhida_source=entity)的[v140](https://zhida.zhihu.com/search?content_id=271977473&content_type=Article&match_order=1&q=v140&zhida_source=entity)版本,我用的是VS2022所以需要额外下载v140组件,或者是可以到源码里面手动更新平台工具集
|
||||||
|
|
||||||
|
[https://github.com/baldurk/renderdoc/tree/v1.xgithub.com/baldurk/renderdoc/tree/v1.x](https://link.zhihu.com/?target=https%3A//github.com/baldurk/renderdoc/tree/v1.x)
|
||||||
|
|
||||||
|
## 一,修改RenderDoc的特征来绕过第一步检测
|
||||||
|
|
||||||
|
### 核心 DLL — [Replay Marker](https://zhida.zhihu.com/search?content_id=271977473&content_type=Article&match_order=1&q=Replay+Marker&zhida_source=entity) 符号
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|文件路径|行号|修改类型|修改前|修改后|
|
||||||
|
|---|---|---|---|---|
|
||||||
|
|renderdoc/api/replay/renderdoc_replay.h|52|函数名修改|renderdoc__replay__marker()|rendertest__replay__marker()|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
> _说明:这是最核心的修改。`REPLAY_PROGRAM_MARKER()`_ _宏定义所有 RenderDoc 可执行文件导出的符号,DLL 通过动态查找该符号判断当前是 replay 环境还是目标游戏进程。若 DLL 期望_ _`rendertest__replay__marker`_ _但 EXE 导出的是_ _`renderdoc__replay__marker`,DLL 将误判为游戏进程并注入 GPU 钩子,导致 UI 崩溃。_
|
||||||
|
|
||||||
|
### 进程创建与注入 — 可执行文件路径硬编码
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|文件路径|行号|修改类型|修改前|修改后|
|
||||||
|
|---|---|---|---|---|
|
||||||
|
|renderdoc/os/win32/win32_process.cpp|933|字符串替换|L"\\Win32\\Development\\renderdoccmd.exe"|L"\\Win32\\Development\\rendertestcmd.exe"|
|
||||||
|
|renderdoc/os/win32/win32_process.cpp|946|字符串替换|L"\\Win32\\Release\\renderdoccmd.exe"|L"\\Win32\\Release\\rendertestcmd.exe"|
|
||||||
|
|renderdoc/os/win32/win32_process.cpp|961|字符串替换|L"\\x86\\renderdoccmd.exe"|L"\\x86\\rendertestcmd.exe"|
|
||||||
|
|renderdoc/os/win32/win32_process.cpp|973|字符串替换|L"\\x64\\Development\\renderdoccmd.exe"|L"\\x64\\Development\\rendertestcmd.exe"|
|
||||||
|
|renderdoc/os/win32/win32_process.cpp|986|字符串替换|L"\\x64\\Release\\renderdoccmd.exe"|L"\\x64\\Release\\rendertestcmd.exe"|
|
||||||
|
|renderdoc/os/win32/win32_process.cpp|1006|字符串替换|L"\\renderdoccmd.exe"|L"\\rendertestcmd.exe"|
|
||||||
|
|
||||||
|
|
||||||
|
## [Shim DLL](https://zhida.zhihu.com/search?content_id=271977473&content_type=Article&match_order=1&q=Shim+DLL&zhida_source=entity) 路径硬编码
|
||||||
|
|
||||||
|
### Shim DLL 路径硬编码
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|文件路径|行号|修改类型|修改前|修改后|
|
||||||
|
|---|---|---|---|---|
|
||||||
|
|renderdoc/os/win32/win32_process.cpp|1783|字符串拼接|"\\renderdocshim64.dll"|"\\rendertestshim64.dll"|
|
||||||
|
|renderdoc/os/win32/win32_process.cpp|1792|字符串拼接|"\\Win32\\Development\\renderdocshim32.dll"|"\\Win32\\Development\\rendertestshim32.dll"|
|
||||||
|
|renderdoc/os/win32/win32_process.cpp|1803|字符串拼接|"\\Win32\\Release\\renderdocshim32.dll"|"\\Win32\\Release\\rendertestshim32.dll"|
|
||||||
|
|renderdoc/os/win32/win32_process.cpp|1811|字符串拼接|"\\x86\\renderdocshim32.dll"|"\\x86\\rendertestshim32.dll"|
|
||||||
|
|renderdoc/os/win32/win32_process.cpp|1818|字符串拼接|"\\renderdocshim32.dll"|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### [进程白名单](https://zhida.zhihu.com/search?content_id=271977473&content_type=Article&match_order=1&q=%E8%BF%9B%E7%A8%8B%E7%99%BD%E5%90%8D%E5%8D%95&zhida_source=entity) — 避免注入到 RenderTest 自身
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|文件路径|行号|修改类型|修改前|修改后|
|
||||||
|
|---|---|---|---|---|
|
||||||
|
|renderdoc/os/win32/sys_win32_hooks.cpp|342|字符串替换|"renderdoccmd.exe" \| app.contains("qrenderdoc.exe")|"rendertestcmd.exe" \| app.contains("qrendertest.exe")|
|
||||||
|
|renderdoc/os/win32/sys_win32_hooks.cpp|351|字符串替换|"renderdoccmd.exe" \| cmd.contains("qrenderdoc.exe")|"rendertestcmd.exe" \| cmd.contains("qrendertest.exe")|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 崩溃处理 — 命名内核对象
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|文件路径|行号|修改类型|修改前|修改后|
|
||||||
|
|---|---|---|---|---|
|
||||||
|
|renderdoccmd/renderdoccmd_win32.cpp|603|字符串替换|"RENDERDOC_CRASHHANDLE"|"RENDERTEST_CRASHHANDLE"|
|
||||||
|
|renderdoccmd/renderdoccmd_win32.cpp|818|字符串替换|GetModuleHandleA("renderdoc.dll")|GetModuleHandleA("rendertest.dll")|
|
||||||
|
|core/crash_handler.h|62|字符串拼接|"RenderDoc\\dumps\\a"|"RenderTest\\dumps\\a"|
|
||||||
|
|core/crash_handler.h|168|字符串拼接|"RenderDocBreakpadServer%llu"|"RenderTestBreakpadServer%llu"|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 表格 6:文件路径与注册表
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|文件路径|行号|修改类型|修改前|修改后|
|
||||||
|
|---|---|---|---|---|
|
||||||
|
|renderdoc/os/win32/win32_stringio.cpp|289|字符串拼接|"/qrenderdoc.exe"|"/qrendertest.exe"|
|
||||||
|
|renderdoc/os/win32/win32_stringio.cpp|300|字符串拼接|"/../qrenderdoc.exe"|"/../qrendertest.exe"|
|
||||||
|
|renderdoc/os/win32/win32_stringio.cpp|316|注册表路径|L"RenderDoc.RDCCapture.1\\DefaultIcon"|L"RenderTest.RDCCapture.1\\DefaultIcon"|
|
||||||
|
|renderdoc/os/win32/win32_stringio.cpp|358|日志路径|L"RenderDoc\\%ls_..."|L"RenderTest\\%ls_..."|
|
||||||
|
|renderdoc/os/win32/win32_stringio.cpp|367|日志路径|L"RenderDoc\\%ls_..."|L"RenderTest\\%ls_..."|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### OpenGL 窗口类名
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|文件路径|行号|修改类型|修改前|修改后|
|
||||||
|
|---|---|---|---|---|
|
||||||
|
|driver/gl/wgl_platform.cpp|28|宏定义|L"renderdocGLclass"|L"rendertestGLclass"|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### [全局 Hook 共享内存名称](https://zhida.zhihu.com/search?content_id=271977473&content_type=Article&match_order=1&q=%E5%85%A8%E5%B1%80+Hook+%E5%85%B1%E4%BA%AB%E5%86%85%E5%AD%98%E5%90%8D%E7%A7%B0&zhida_source=entity)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|文件路径|行号|修改类型|修改前|修改后|
|
||||||
|
|---|---|---|---|---|
|
||||||
|
|renderdocshim/renderdocshim.h|36|宏定义|"RenderDocGlobalHookData64"|"RenderTestGlobalHookData64"|
|
||||||
|
|renderdocshim/renderdocshim.h|39|宏定义|"RenderDocGlobalHookData32"|"RenderTestGlobalHookData32"|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 资源文件
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|文件路径|行号|修改类型|修改前|修改后|
|
||||||
|
|---|---|---|---|---|
|
||||||
|
|data/renderdoc.rc|87|资源字符串|"Core DLL for RenderDoc"|"Core DLL for RenderTest"|
|
||||||
|
|data/renderdoc.rc|92|资源字符串|"ProductName", "RenderDoc"|"ProductName", "RenderTest"|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Qt UI 层
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|文件路径|行号|修改类型|修改前|修改后|
|
||||||
|
|---|---|---|---|---|
|
||||||
|
|qrenderdoc/renderdocui_stub.cpp|62|字符串拼接|L"qrenderdoc.exe"|L"qrendertest.exe"|
|
||||||
|
|qrenderdoc/Code/qrenderdoc.cpp|173|Qt 翻译上下文|"qrenderdoc"|"qrendertest"|
|
||||||
|
|qrenderdoc/Code/qrenderdoc.cpp|198|日志输出|"QRenderDoc initialising."|"QRenderTest initialising."|
|
||||||
|
|qrenderdoc/Code/qrenderdoc.cpp|267|会话名|"QRenderDoc"|"QRenderTest"|
|
||||||
|
|qrenderdoc/Code/qrenderdoc.cpp|330|描述文本|"Qt UI for RenderDoc"|"Qt UI for RenderTest"|
|
||||||
|
|qrenderdoc/Code/qrenderdoc.cpp|393|版本输出|"QRenderDoc v%s"|"QRenderTest v%s"|
|
||||||
|
|qrenderdoc/Windows/MainWindow.cpp|1217|窗口标题|"RenderDoc "|"RenderTest "|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### VS 项目文件(编译输出名 + UAC 提权)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|文件路径|属性|修改类型|修改前|修改后|
|
||||||
|
|---|---|---|---|---|
|
||||||
|
|qrenderdoc/renderdocui_stub.vcxproj|RootNamespace|修改|renderdocui_stub|rendertestui_stub|
|
||||||
|
|qrenderdoc/renderdocui_stub.vcxproj|ProjectName|修改|renderdocui_stub|rendertestui_stub|
|
||||||
|
|qrenderdoc/renderdocui_stub.vcxproj|PrimaryOutput|新增|(无)|rendertestui|
|
||||||
|
|qrenderdoc/renderdocui_stub.vcxproj|TargetName|新增|(无)|rendertestui|
|
||||||
|
|qrenderdoc/renderdocui_stub.vcxproj|UACExecutionLevel|新增|(无)|RequireAdmini|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## CrashSight检测
|
||||||
|
|
||||||
|
这里可以在Hook的时候采用SetThreadContext注入
|
||||||
|
|
||||||
|
修改文件:renderdoc/os/win32/win32_process.cpp
|
||||||
|
|
||||||
|
```text
|
||||||
|
uintptr_t loc = FindRemoteDLL(pi.dwProcessId, STRINGIZE(RDOC_BASE_NAME) ".dll");
|
||||||
|
CloseHandle(hProcess);
|
||||||
|
hProcess = NULL;
|
||||||
|
if(loc != 0)
|
||||||
|
```
|
||||||
|
|
||||||
|
编辑于 2026-03-25 11:37・重庆
|
||||||
2
07-Other/AI/AI Agent/Agent.md
Normal file
2
07-Other/AI/AI Agent/Agent.md
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# 前言
|
||||||
|
- [ ] https://www.bilibili.com/video/BV1VzfoBFE5w/?spm_id_from=333.1387.homepage.video_card.click&vd_source=a5a1507212662f8883c096200c37b6bd
|
||||||
@@ -405,3 +405,4 @@ remaining-fix (4 Agent) 剩余问题并行修复
|
|||||||
```
|
```
|
||||||
|
|
||||||
每支团队拥有独立的 TaskList 和成员列表,团队之间通过**共享文件系统**传递成果(上一支团队的代码产出是下一支团队的评审/修复输入)。Team Lead 的主会话贯穿全程,是唯一跨团队的持久上下文。
|
每支团队拥有独立的 TaskList 和成员列表,团队之间通过**共享文件系统**传递成果(上一支团队的代码产出是下一支团队的评审/修复输入)。Team Lead 的主会话贯穿全程,是唯一跨团队的持久上下文。
|
||||||
|
|
||||||
|
|||||||
@@ -4,21 +4,17 @@
|
|||||||
# MCP
|
# MCP
|
||||||
- WY MCP市场:https://modelspace.netease.com/mcphub
|
- WY MCP市场:https://modelspace.netease.com/mcphub
|
||||||
- DeepWiki MCP
|
- DeepWiki MCP
|
||||||
- POPO MCP
|
- ~~POPO MCP~~
|
||||||
- 易协作 MCP Server
|
- ~~易协作 MCP Server~~
|
||||||
- OpenClaw:https://clawhub.ai/
|
|
||||||
- 开发类
|
- 开发类
|
||||||
- Chrome DevTools MCP。
|
- [ ] **Chrome DevTools MCP**。
|
||||||
- BrowerMCP:Chrome浏览器专用前端视觉MCP。需要在Chrome安装对应插件。
|
- BrowerMCP:Chrome浏览器专用前端视觉MCP。需要在Chrome安装对应插件。
|
||||||
|
|
||||||
- 搜索类
|
- 搜索类
|
||||||
- **DuckDuckGo Search**:无需 API Key 的隐私保护搜索,支持网页和新闻检索。`claude mcp add duckduckgo-search -- npx -y duckduckgo-mcp-server`
|
- **DuckDuckGo Search**:无需 API Key 的隐私保护搜索,支持网页和新闻检索。`claude mcp add duckduckgo-search -- npx -y duckduckgo-mcp-server`
|
||||||
- Sacred Scriptures:宗教典籍(如大藏经)精准检索。 `claude mcp add sacred-scriptures -- npx -y @traves-theberge/sacred-scriptures-mcp`
|
- Sacred Scriptures:宗教典籍(如大藏经)精准检索。 `claude mcp add sacred-scriptures -- npx -y @traves-theberge/sacred-scriptures-mcp`
|
||||||
- **Open Library**:全球书籍元数据与原著检索。 `claude mcp add open-library -- npx -y @8ensmith/mcp-open-library`
|
- **Open Library**:全球书籍元数据与原著检索。 `claude mcp add open-library -- npx -y @8ensmith/mcp-open-library`
|
||||||
- **Paper Search**:现代哲学与认知科学论文检索。 `claude mcp add paper-search -- npx -y @openags/paper-search-mcp`
|
- **Paper Search**:现代哲学与认知科学论文检索。 `claude mcp add paper-search -- npx -y @openags/paper-search-mcp`
|
||||||
- OpenEnded Philosophy:非公理化逻辑推演与哲学思辨增强。 `claude mcp add openended-philosophy -- npx -y @openended/philosophy-mcp`
|
- OpenEnded Philosophy:非公理化逻辑推演与哲学思辨增强。 `claude mcp add openended-philosophy -- npx -y @openended/philosophy-mcp`
|
||||||
- 存储类
|
|
||||||
- **Mem0 (OpenMemory)**:用户观点长期记忆与思想进化追踪。 `claude mcp add mem0 -- npx -y @mem0/mcp-server`
|
|
||||||
- 笔记类
|
- 笔记类
|
||||||
- Obsidian MCP:本地哲学笔记库同步与知识图谱构建。 `claude mcp add obsidian -- npx -y @obsidian-mcp/server`
|
- Obsidian MCP:本地哲学笔记库同步与知识图谱构建。 `claude mcp add obsidian -- npx -y @obsidian-mcp/server`
|
||||||
## MCP案例代码
|
## MCP案例代码
|
||||||
@@ -371,13 +367,13 @@ app.use("/mcp", async (c, next) => {
|
|||||||
3. https://skills.sh/
|
3. https://skills.sh/
|
||||||
1. https://skills.sh/hairyf/skills/create-skill-from-repo
|
1. https://skills.sh/hairyf/skills/create-skill-from-repo
|
||||||
|
|
||||||
|
- MCP
|
||||||
|
- [x] **Chrome DevTools MCP**。
|
||||||
- 基础Skill
|
- 基础Skill
|
||||||
- [x] ***find-skills***:在20万+Skills里自动找到所需工具。 #导航员
|
- [x] ***find-skills***:在20万+Skills里自动找到所需工具。 #导航员
|
||||||
- [ ] skill-creator:把你的工作流打包成可复用能力。 #工厂
|
- [x] skill-creator:把你的工作流打包成可复用能力。 #工厂
|
||||||
- [ ] mcp-builder:搭建服务器,连接私人数据和外部工具。 #桥梁
|
- [ ] mcp-builder:搭建服务器,连接私人数据和外部工具。 #桥梁
|
||||||
- [x] using-superpowers:强制Agent真正发挥高级能力。 #优化器
|
- [ ] ~~agent-tools~~:数字瑞士军刀,处理日常事务。 #工具箱
|
||||||
- [ ] subagent-driven-dev:把子任务委派给其他AI并审核。 #管理者
|
|
||||||
- [ ] agent-tools:数字瑞士军刀,处理日常事务。 #工具箱
|
|
||||||
- 搜索相关
|
- 搜索相关
|
||||||
- [x] GitHub 官方 MCP:claude mcp add github -- npx -y @modelcontextprotocol/server-github
|
- [x] GitHub 官方 MCP:claude mcp add github -- npx -y @modelcontextprotocol/server-github
|
||||||
- [x] 搜索引擎类:输出的结果质量以及Token消耗量都不理想。
|
- [x] 搜索引擎类:输出的结果质量以及Token消耗量都不理想。
|
||||||
@@ -389,11 +385,16 @@ app.use("/mcp", async (c, next) => {
|
|||||||
- https://skills.sh/tavily-ai/skills/research: `npx skills add https://github.com/tavily-ai/skills --skill research`
|
- https://skills.sh/tavily-ai/skills/research: `npx skills add https://github.com/tavily-ai/skills --skill research`
|
||||||
- https://skills.sh/tavily-ai/skills/extract: `npx skills add https://github.com/tavily-ai/skills --skill extract`
|
- https://skills.sh/tavily-ai/skills/extract: `npx skills add https://github.com/tavily-ai/skills --skill extract`
|
||||||
- https://skills.sh/veithly/tavily-search/tavily-search: `npx skills add https://github.com/veithly/tavily-search --skill tavily-search`
|
- https://skills.sh/veithly/tavily-search/tavily-search: `npx skills add https://github.com/veithly/tavily-search --skill tavily-search`
|
||||||
|
- 编程类
|
||||||
|
- [x] ***using-superpowers***:强制Agent真正发挥高级能力。 #优化器
|
||||||
|
- [x] acpx:外部工具桥接器,可以用来控制ClaudeCode等编程工具,还需要额外配置。 #编程
|
||||||
|
- 沟通类
|
||||||
|
- [x] [openclaw-a2a-gateway](https://github.com/win4r/openclaw-a2a-gateway):多物理实例Agent沟通工具,**缺点:无有上一次对话的上下文**。
|
||||||
- 进阶工具
|
- 进阶工具
|
||||||
- [ ] brainstorming:一个关键词生成几十个独特角度和多种假设场景。 #创意生成器
|
- [ ] brainstorming:一个关键词生成几十个独特角度和多种假设场景。 #0创意生成器
|
||||||
- [ ] copywriting:优化表达、打磨语调,不依赖老掉牙的一键生成模板。 #文字工匠
|
- [ ] copywriting:优化表达、打磨语调,不依赖老掉牙的一键生成模板。 #文字工匠
|
||||||
- [ ] reflection:增加自我纠正循环,让Agent审核并在过程中修复错误。 #秘密武器
|
- [ ] reflection:增加自我纠正循环,让Agent审核并在过程中修复错误。 #秘密武器
|
||||||
- [ ] writing-plans:先构建结构大纲,确保长文不跑偏。 #架构师
|
- [ ] ~~writing-plans~~:先构建结构大纲,确保长文不跑偏。 #架构师
|
||||||
- [ ] social-content:为X、TikTok、小红书专属优化,止住下滑的手指。 #运营经理
|
- [ ] social-content:为X、TikTok、小红书专属优化,止住下滑的手指。 #运营经理
|
||||||
- [ ] marketing-ideas:生成病毒式噱头和活动概念,远超简单广告水平。 #创意总监
|
- [ ] marketing-ideas:生成病毒式噱头和活动概念,远超简单广告水平。 #创意总监
|
||||||
- [ ] copy-editing:打磨语调、收紧流程,保留你独特的人性声音。 #高级编辑
|
- [ ] copy-editing:打磨语调、收紧流程,保留你独特的人性声音。 #高级编辑
|
||||||
|
|||||||
51
07-Other/AI/AI Agent/NeoX/MatrixAITA-XEditor-Messiah.md
Normal file
51
07-Other/AI/AI Agent/NeoX/MatrixAITA-XEditor-Messiah.md
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
---
|
||||||
|
title: 未命名
|
||||||
|
date: 2026-04-02 17:18:06
|
||||||
|
excerpt:
|
||||||
|
tags:
|
||||||
|
rating: ⭐
|
||||||
|
status: inprogress
|
||||||
|
destination:
|
||||||
|
share: false
|
||||||
|
obsidianUIMode: source
|
||||||
|
---
|
||||||
|
|
||||||
|
NeoX与UnrealEngine(简称UE)是2个游戏引擎,XEditor是NeoX引擎的编辑器,我希望能编写一个Skill让Agent同时操作这2个引擎进行一些资产优化工作。
|
||||||
|
|
||||||
|
## 前置检查工作。
|
||||||
|
1. 用户输入NeoX目录与UnrealEngine目录。
|
||||||
|
2. Agent补充绝对目录并验证Mcp可用后提示用户Mcp已经可以工作了。
|
||||||
|
|
||||||
|
## 项目情况
|
||||||
|
1. NeoX目录美术表路径:./Doc/X_导入数据/超炫酷3D鹈鹕镇
|
||||||
|
1. 场景表.xlsx
|
||||||
|
2. 模型表.xlsx
|
||||||
|
1. 场景模型
|
||||||
|
2. 角色模型:无需关注
|
||||||
|
3. 3D面片:无需关注
|
||||||
|
4. 模型ID与分类:
|
||||||
|
3. 动作表.xlsx
|
||||||
|
4. 模型动画表.xlsx
|
||||||
|
5. 特效表.xlsx
|
||||||
|
2. NeoX目录策划表:./Doc/X_导入数据/精灵们今天非常开心!
|
||||||
|
1. 道具表.xlsx:每个子表中的模型标号对应模型表中模型的ID。
|
||||||
|
3. NeoX资产路径:
|
||||||
|
1. UE资产导入后的:res\ue_export_common
|
||||||
|
|
||||||
|
# 资产优化操作步骤说明
|
||||||
|
1. 控制XEditor Mcp
|
||||||
|
1. 检索模型表、场景表。
|
||||||
|
1. 模型表 查询 场景模型子表内的所有的模型。
|
||||||
|
2. 场景表 遍历所有表中场景所使用的模型。
|
||||||
|
2. 分别对这2个表引用的模型资产进行检查。
|
||||||
|
1. 模型信息:模型面数、模型LOD 数量 级别 ScreenSize 或 CameraDistance 信息、模型数量。
|
||||||
|
2. 模型所用材质的贴图信息:贴图分辨率。
|
||||||
|
3. 检查逻辑可以参考: D:\Project\H78_New\.claude\skills\item-resource-analyzer\SKILL.md
|
||||||
|
3. 在NeoX目录的./Outputs 先输入2个报告文件 日期戳-场景报告.xlsx、日期戳-模型表报告.xlsx,模型项需要去重。
|
||||||
|
1. 模型表报告需要根据道具表中对模型分类,将信息分到对应子表中(子表与道具表中的子表分类同名)
|
||||||
|
2. 控制UE Mcp 在UE中寻找对应的模型资产。
|
||||||
|
1. XEditor路径:ue_export_common/ProjectCoral/Art/Debris/Ores/SM_CopperOreVein.gim;UE路径:/Game/ProjectCoral/Art/Debris/Ores/SM_CopperOreVein.gim。
|
||||||
|
2. 提示用户哪些模型XEditor里有,但UE没有,需要用户手动导入到UE,再进行处理。
|
||||||
|
3. 新建一个带有基础光照的关卡,将这些模型都放到关卡中。
|
||||||
|
1. 模型按照BoundingBox大小进行排序。
|
||||||
|
2. 模型按照BoundingBox调整间隔,BoundingBox为1m的,间距1M,BoundingBox为10M的,间距10M。
|
||||||
23
07-Other/AI/AI Agent/NeoX/资产分析提示词.md
Normal file
23
07-Other/AI/AI Agent/NeoX/资产分析提示词.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
|
||||||
|
# 0
|
||||||
|
整理当前项目组所有贴图信息,信息包括贴图分辨率,体积,相对路径,贴图名字,按照体积从大到小,整理成一个excel 你直接在NXAI对话框里输入这个就能得到有信息的excel了。
|
||||||
|
|
||||||
|
|
||||||
|
# 1
|
||||||
|
请分析./scene/下所有场景文件,对每个场景分别进行分析,分析所引用的模型资产以及模型材质所引用的贴图,主要有模型面数、材质数目、所用材质引用贴图的分辨率。
|
||||||
|
|
||||||
|
要求:
|
||||||
|
1. 按照模型面数进行主排序。次级排序使用材质数目。
|
||||||
|
2. 贴图分辨率超过1024 将该单元格标注为黄色,超过2048标注为红色。
|
||||||
|
|
||||||
|
分别出一个excel格式的分析文件。
|
||||||
|
|
||||||
|
|
||||||
|
# 2
|
||||||
|
请帮我revert掉svn中./res/目录下所有针对贴图与材质的修改,只保留LOD相关的修改(带有_lod、_lod1、_lod2、_lod3后缀的gim以及这个gim的同名json与mesh文件)。
|
||||||
|
|
||||||
|
|
||||||
|
./Doc\X_导入数据\超炫酷3D鹈鹕镇\ 模型表.xlsx 以及 场景表.xlsx中所有场景引用的模型,
|
||||||
|
|
||||||
|
将LOD级别数目大于等于4的,将最后一级设置为隐藏。
|
||||||
|
LOD等于3的,添加一个级别设置为隐藏。
|
||||||
@@ -26,117 +26,164 @@
|
|||||||
# OpenClaw架构构思
|
# OpenClaw架构构思
|
||||||
https://clawhub.ai/ Skill推荐:
|
https://clawhub.ai/ Skill推荐:
|
||||||
- Common
|
- Common
|
||||||
- [x] ***find-skills***:在20万+Skills里自动找到所需工具。
|
- [x] ***find-skills***:在20万+Skills里自动找到所需工具。 #导航员
|
||||||
|
- [x] skill-creator:把你的工作流打包成可复用能力。 #工厂
|
||||||
- [x] ***self-improving-agent***: 记录经验教训、错误和纠正措施,以实现持续改进。
|
- [x] ***self-improving-agent***: 记录经验教训、错误和纠正措施,以实现持续改进。
|
||||||
- [x] Summarize:使用 summarize CLI 对 URL 或文件进行汇总(网页、PDF、图像、音频、YouTube)。
|
- [x] Summarize:使用 summarize CLI 对 URL 或文件进行汇总(网页、PDF、图像、音频、YouTube)。
|
||||||
|
- 文档类
|
||||||
|
- [x] pdf:合并、拆分、提取复杂PDF,无手动头疼。 #文档专家
|
||||||
|
- [x] pptx:生成完整专业幻灯片,再也不用移动文本框。 #演示专家
|
||||||
|
- [x] docx:创建结构化Word文档,直接用于官方用途。 #文书
|
||||||
|
- [x] xlsx:带复杂公式和图表的Excel文件。 #数据分析师
|
||||||
|
- 搜索相关
|
||||||
|
- [x] GitHub 官方 MCP:claude mcp add github -- npx -y @modelcontextprotocol/server-github
|
||||||
|
- [x] 搜索引擎类:输出的结果质量以及Token消耗量都不理想。
|
||||||
|
- jina-reader:
|
||||||
|
- https://clawhub.ai/ericsantos/jina-reader
|
||||||
|
- https://skills.sh/sundial-org/awesome-openclaw-skills/jina-reader
|
||||||
|
- Tavily
|
||||||
|
- https://skills.sh/tavily-ai/skills/search: `npx skills add https://github.com/tavily-ai/skills --skill search`
|
||||||
|
- https://skills.sh/tavily-ai/skills/research: `npx skills add https://github.com/tavily-ai/skills --skill research`
|
||||||
|
- https://skills.sh/tavily-ai/skills/extract: `npx skills add https://github.com/tavily-ai/skills --skill extract`
|
||||||
|
- https://skills.sh/veithly/tavily-search/tavily-search: `npx skills add https://github.com/veithly/tavily-search --skill tavily-search`
|
||||||
|
- 编程类
|
||||||
|
- [x] ***using-superpowers***:强制Agent真正发挥高级能力。 #优化器
|
||||||
|
- [x] **acpx**:外部工具桥接器,可以用来控制ClaudeCode等编程工具,还需要额外配置。 #编程
|
||||||
|
- 优化类
|
||||||
|
- [ ] [openclaw-workspace](https://github.com/win4r/openclaw-workspace):优化OpenClaw工作区。提示词:帮我用 openclaw-workspace 这个 skill 做一次 workspace审计/精简 AGENTS.md/ 优化 TOOLS.md"等。可以创建定时任务让他每周执行。
|
||||||
|
- 控制中心(都处于质量存疑阶段)
|
||||||
|
- [ ] https://github.com/TianyiDataScience/openclaw-control-center
|
||||||
|
- [ ] https://github.com/abhi1693/openclaw-mission-control
|
||||||
## Agent & Memory
|
## Agent & Memory
|
||||||
在默认工作区可以到以下文件,这些都是Agent提示词的主程部分:
|
在默认工作区可以到以下文件,这些都是Agent提示词的主程部分:
|
||||||
|
|
||||||
| **文件名** | **角色定位** | **详细作用描述** |
|
| 文件 | 用途 | 加载时机 | 子 Agent 可见? |
|
||||||
| ---------------- | ------------- | --------------------------------------------------------- |
|
| ---------------------- | ------------------------------------- | ----------------------- | ----------- |
|
||||||
| **Bootstrap.md** | **引导程序/总纲** | 整个系统的入口。它负责协调其他模块,定义系统初始化的逻辑,并告诉 LLM 如何“读取”这一系列文件。 |
|
| `AGENTS.md` | 启动序列、操作清单、行为规则 | 每次轮次(所有 Agent) | 是 |
|
||||||
| **SYSTEM.md** | **物理规则/底层协议** | 定义 AI 的基本运行准则。包含技术约束、输出格式要求(如必须使用 JSON)、安全边界和思考框架。 |
|
| `SOUL.md` | 人格、语气、价值观、连续性哲学 | 每次轮次(所有 Agent) | 是 |
|
||||||
| **IDENTITY.md** | **身份设定** | 定义“我是谁”。包含姓名、职业背景、专业领域和语气风格(Tone of Voice)。这是 AI 表层人格的来源。 |
|
| `TOOLS.md` | 环境特定信息(SSH、TTS、摄像头、设备) | 每次轮次(主 Agent + 子 Agent) | 是 |
|
||||||
| **SOUL.md** | **核心价值观/灵魂** | 定义“我的底层逻辑”。包含道德准则、动机、偏好、情绪反应模型以及对待冲突的态度。它比 Identity 更深层。 |
|
| `USER.md` | 用户画像、偏好、关系背景 | 每次轮次(仅主会话) | 否 |
|
||||||
| **USER.md** | **用户画像/上下文** | 记录“你是谁”。包含用户偏好、当前任务背景、历史互动关键点。确保 AI 的响应具有针对性。 |
|
| `IDENTITY.md` | 名称、Emoji、头像、自我描述 | 每次轮次 | 是 |
|
||||||
| **TOOLS.md** | **能力清单/技能树** | 定义 AI 可以调用的外部函数或工具(如搜索、绘图、计算)。明确调用参数和返回格式。 |
|
| `HEARTBEAT.md` | 周期性检查任务和健康例程 | 每次心跳轮次 | 视情况而定 |
|
||||||
| **AGENTS.md** | **协作协议** | 定义多智能体协作逻辑。如果 AI 需要召唤“副手”或与其他代理交互,这里规定了沟通协议。 |
|
| `BOOT.md` | 启动时执行的操作(需要 `hooks.internal.enabled`) | 网关启动时 | 否 |
|
||||||
|
| `BOOTSTRAP.md` | 首次初始化脚本——用完即删 | 仅新工作区 | 否 |
|
||||||
|
| `MEMORY.md` | 长期精华事实与铁律规则 | 仅主会话 | **永不** |
|
||||||
|
| `memory/YYYY-MM-DD.md` | 每日会话日志 | 按 AGENTS.md 启动序列加载 | 否 |
|
||||||
|
| `checklists/*.md` | 高风险操作的逐步指南 | 按需加载(从 AGENTS.md 引用) | 否 |
|
||||||
|
### 各文件详解
|
||||||
|
#### AGENTS.md — 操作手册
|
||||||
|
这是每次会话中最先塑造 Agent 行为的文件(基础系统提示词之后)。它包含:
|
||||||
|
- **启动序列**:有序列出需要在会话开始时读取的文件(SOUL → USER → MEMORY → 日志)
|
||||||
|
- **清单路由表**:高风险操作 → 对应清单文件路径的映射
|
||||||
|
- **安全规则**:哪些操作需要确认、哪些可以自主执行
|
||||||
|
- **群聊规则**:在群聊中不应分享什么
|
||||||
|
|
||||||
|
**注意**:AGENTS.md 是规程文件,不是身份文件。人格和价值观属于 SOUL.md。
|
||||||
|
|
||||||
|
#### SOUL.md — 灵魂
|
||||||
|
用第二人称书写("你不是一个聊天机器人,你正在成为某个人"),Agent 读取后将其内化为自我描述。
|
||||||
|
包含:核心价值观、边界与底线、语气风格、关于连续性的哲学(每次会话都是全新开始,工作区文件就是记忆)。
|
||||||
|
|
||||||
|
#### TOOLS.md — 本地环境备忘录
|
||||||
|
这是工作区中最容易被误用的文件。它应该是**当前机器的环境专属速查表**:SSH 主机、TTS 声音 ID、摄像头设备名称等。
|
||||||
|
子 Agent 也会收到此文件——这是它们唯一的环境知识来源。请保持简洁,50 行以内为佳。
|
||||||
|
|
||||||
|
#### USER.md — 用户画像
|
||||||
|
包含影响每次对话的人物相关事实:姓名、时区、语言偏好、沟通风格。
|
||||||
|
仅在主会话中加载——绝不在群聊或子 Agent 会话中加载。
|
||||||
|
|
||||||
|
#### MEMORY.md — 铁律规则
|
||||||
|
只保存"遗忘了就会出严重问题"的规则。每条规则要短且原子化,具有明确的行动指导意义。
|
||||||
|
定期精炼(每月一次)。已经几个月没有出过问题的规则,可以考虑迁移到技能的 `SKILL.md` 文件中(更合适的归宿)。
|
||||||
|
|
||||||
|
#### checklists / * .md — 操作清单
|
||||||
|
高风险操作(部署、网关重启、配置变更)的逐步指南。Agent 执行操作前主动读取对应清单。
|
||||||
|
**正确模式** :AGENTS.md 只保留一行路由表条目,完整清单放在 `checklists/` 目录中(按需加载,不占用每轮 Token 预算)。
|
||||||
---
|
---
|
||||||
|
|
||||||
## 2. 调用逻辑与顺序
|
### 2. 调用逻辑与顺序
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**逻辑顺序如下:**
|
|
||||||
1. **加载 `Bootstrap.md`**:确定系统引导协议,LLM 开始意识到自己是一个遵循 OpenClaw 协议的 Agent。
|
|
||||||
2. **注入 `SYSTEM.md`**:建立底层规则。在产生任何性格之前,必须先确定“不能做什么”和“必须怎么思考”。
|
|
||||||
3. **构建 `IDENTITY.md` 与 `SOUL.md`**:赋予生命力。LLM 此时从“纯粹的工具”转变为“具备特定性格的专家”。
|
|
||||||
4. **读取 `USER.md`**:注入外部变量。AI 了解了交互对象,调整自己的姿态。
|
|
||||||
5. **激活 `TOOLS.md` 与 `AGENTS.md`**:最后加载执行层。当 AI 明确了身份和规则后,再根据需要调用具体的手段。
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1. Bootstrap 文件注入(新会话首个 turn)
|
|
||||||
按优先级读取顺序:
|
按优先级读取顺序:
|
||||||
AGENTS.md → SOUL.md → TOOLS.md → IDENTITY.md → USER.md
|
AGENTS.md → SOUL.md → TOOLS.md → IDENTITY.md → USER.md
|
||||||
|
#### Skill 加载(SKILL.md 注入)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
2️⃣ 记忆文件读取
|
|
||||||
• MEMORY.md — 长期记忆(仅私聊会话加载,群聊不加载)
|
|
||||||
• memory/今天.md + memory/昨天.md — 日志(会话开始时读取)
|
|
||||||
|
|
||||||
3️⃣ Skill 加载(SKILL.md 注入)
|
|
||||||
三个来源,优先级从高到低:
|
三个来源,优先级从高到低:
|
||||||
① < workspace >/skills(agent 独有)
|
① < workspace >/skills(agent 独有)
|
||||||
② ~/.openclaw/skills(全局共享)
|
② ~/.openclaw/skills(全局共享)
|
||||||
③ bundled skills(内置)
|
③ bundled skills(内置)
|
||||||
同名 skill 高优先级覆盖低优先级
|
同名 skill 高优先级覆盖低优先级
|
||||||
|
|
||||||
|
#### 建议:
|
||||||
|
|
||||||
4️⃣ 会话历史
|
|
||||||
已有的对话上下文(JSONL 存储)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
5️⃣ 语义搜索(按需)
|
|
||||||
agent 调用 memory_search 时,向量检索 MEMORY.md + memory/* .md
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
💡 建议:
|
|
||||||
|
|
||||||
如果你想把记忆用法精炼,推荐这样分层:
|
如果你想把记忆用法精炼,推荐这样分层:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
1. 通用行为规范 → AGENTS.md / SOUL.md(所有会话都加载)
|
1. 通用行为规范 → AGENTS.md / SOUL.md(所有会话都加载)
|
||||||
|
|
||||||
2. 工具使用指南 → Skill 的 SKILL.md(按需触发加载)
|
2. 工具使用指南 → Skill 的 SKILL.md(按需触发加载)
|
||||||
|
|
||||||
3. 持久事实/偏好 → MEMORY.md(长期记忆)
|
3. 持久事实/偏好 → MEMORY.md(长期记忆)
|
||||||
|
|
||||||
4. 需要代码逻辑的 → Plugin(如自动 Token 管理、MCP 代理)
|
4. 需要代码逻辑的 → Plugin(如自动 Token 管理、MCP 代理)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
以 Redmine 为例的最佳实践:
|
以 Redmine 为例的最佳实践:
|
||||||
|
|
||||||
• Skill:SKILL.md 写"怎么调用、什么时候触发、参数格式"
|
• Skill:SKILL.md 写"怎么调用、什么时候触发、参数格式"
|
||||||
|
|
||||||
• Plugin:如果要做自动 Token 刷新、webhook 监听等,写成 Plugin
|
• Plugin:如果要做自动 Token 刷新、webhook 监听等,写成 Plugin
|
||||||
|
|
||||||
• MEMORY.md:只存"loujiajie 有权限的项目是 H78"这种事实
|
• MEMORY.md:只存"loujiajie 有权限的项目是 H78"这种事实
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
不建议把所有东西都塞进 MEMORY.md,
|
不建议把所有东西都塞进 MEMORY.md,
|
||||||
### EmbeddingModel
|
|
||||||
|
|
||||||
|
|
||||||
### 记忆移植方法
|
### 记忆移植方法
|
||||||
|
|
||||||
### 将记忆移植到Skill
|
### 将记忆移植到Skill
|
||||||
【Skill】= 教 agent "怎么做某件事"
|
【Skill】= 教 agent "怎么做某件事"
|
||||||
|
|
||||||
• 本质是 SKILL.md(Markdown 指令)+ 可选脚本
|
• 本质是 SKILL.md(Markdown 指令)+ 可选脚本
|
||||||
|
|
||||||
• 注入到 agent 的上下文中,agent 按指令执行
|
• 注入到 agent 的上下文中,agent 按指令执行
|
||||||
|
|
||||||
• 适合:工具使用说明、操作流程、触发规则
|
• 适合:工具使用说明、操作流程、触发规则
|
||||||
|
|
||||||
• 例:RedmineSkill 告诉 agent 如何调用 MCP 查工单
|
• 例:RedmineSkill 告诉 agent 如何调用 MCP 查工单
|
||||||
## Muti-Agent
|
## Muti-Agent
|
||||||
按照日常功能分出几个额外Agent,并让他们使用不同的Workspace。
|
按照日常功能分出几个额外Agent,并让他们使用不同的Workspace。
|
||||||
|
|
||||||
|
## Subagent铁律案例
|
||||||
|
|
||||||
|
把这段放入 AGENTS.md 中
|
||||||
|
### Sub-Agent 编排规则
|
||||||
|
|
||||||
|
#### 模型选择策略
|
||||||
|
根据任务复杂度自动选择模型,优化成本与质量的平衡:
|
||||||
|
|
||||||
|
| 级别 | 适用场景 | 模型 | Thinking |
|
||||||
|
|------|---------|------|----------|
|
||||||
|
| 简单 | 天气、日历、状态检查、单项数据获取 | minimax-portal/MiniMax-M2.1 | off |
|
||||||
|
| 中等 | 搜索总结、文档摘要、内容起草、多步信息整理 | openai-codex/gpt-5.2 | low |
|
||||||
|
| 复杂 | 代码审查、架构分析、安全审计、多维度对比决策 | openai-codex/gpt-5.2 | high |
|
||||||
|
原则:
|
||||||
|
- 默认从最便宜的模型开始,只在任务明确需要更强推理时升级
|
||||||
|
- 不确定时选中等
|
||||||
|
|
||||||
|
#### 常用工作流
|
||||||
|
**每日简报** — 当用户说"每日简报"或在早晨心跳时:
|
||||||
|
1. 并行 spawn 4 个 Sub-Agent(级别:简单):
|
||||||
|
- 天气:上海未来 24 小时
|
||||||
|
- 日历:今天的会议和待办
|
||||||
|
- 邮件:未读紧急邮件摘要
|
||||||
|
- 新闻:AI / Agent 领域最新动态(最多 5 条)
|
||||||
|
2. 全部完成后汇总成结构化简报
|
||||||
|
3. 通过当前频道发送
|
||||||
|
|
||||||
|
**技术调研** — 当用户要求调研多个主题时:
|
||||||
|
1. 每个主题 spawn 一个 Sub-Agent(级别:中等)
|
||||||
|
2. 每个 Sub-Agent 搜索 3-5 篇最新文章,总结关键观点,300 字以内
|
||||||
|
3. 全部完成后汇总对比
|
||||||
|
|
||||||
|
**代码审查** — 当用户说"审查代码"或"review"时:
|
||||||
|
1. spawn 一个 Sub-Agent(级别:复杂),超时 5 分钟
|
||||||
|
2. 检查项:安全漏洞、类型安全、错误处理、架构合理性
|
||||||
|
3. 返回:问题列表 + 严重度 + 修复建议
|
||||||
|
|
||||||
|
**批量文档处理** — 当用户需要处理多个文档时:
|
||||||
|
1. 每个文档 spawn 一个 Sub-Agent(级别:根据文档复杂度判断)
|
||||||
|
2. 提取关键信息,返回结构化 JSON
|
||||||
|
3. 全部完成后汇总对比
|
||||||
|
#### 通用约束
|
||||||
|
|
||||||
|
- 并行 Sub-Agent 不超过 5 个,避免速率限制
|
||||||
|
- 每个 Sub-Agent 的 task prompt 必须自包含所有必要上下文(Sub-Agent 看不到 SOUL.md 和 USER.md)
|
||||||
|
- 简单任务超时 60 秒,中等任务超时 180 秒,复杂任务超时 600 秒
|
||||||
|
- 完成后默认 cleanup: "delete",除非用户要求保留日志
|
||||||
|
|
||||||
# ~~Docker 部署~~(推荐虚拟机部署)
|
# ~~Docker 部署~~(推荐虚拟机部署)
|
||||||
1. https://docs.openclaw.ai/install/docker
|
1. https://docs.openclaw.ai/install/docker
|
||||||
2. git clone https://github.com/openclaw/openclaw.git
|
2. git clone https://github.com/openclaw/openclaw.git
|
||||||
@@ -350,14 +397,6 @@ https://cloud.tencent.com/developer/article/2626310
|
|||||||
- https://km.netease.com/v4/detail/blog/258877
|
- https://km.netease.com/v4/detail/blog/258877
|
||||||
- 插件文档:https://docs.popo.netease.com/lingxi/173a627a791b4372aa50318bfdfb5204
|
- 插件文档:https://docs.popo.netease.com/lingxi/173a627a791b4372aa50318bfdfb5204
|
||||||
|
|
||||||
需要安装插件之后,重启,再填写机器人事件订阅的token 秘钥相关信息。
|
|
||||||
|
|
||||||
[https://open-dev.popo.netease.com/mp/detail/184955194/devManage](https://open-dev.popo.netease.com/robot/detail/363265944/devManage)
|
|
||||||
http://10.219.32.29:6666/popo/callback
|
|
||||||
KyePDRbMN3j1bHEhxktBMbcJtehpxmYW
|
|
||||||
|
|
||||||
https://km.netease.com/v4/detail/blog/258877
|
|
||||||
|
|
||||||
## 企业微信
|
## 企业微信
|
||||||
- https://github.com/pawastation/wechat-kf
|
- https://github.com/pawastation/wechat-kf
|
||||||
- Token信息
|
- Token信息
|
||||||
|
|||||||
146
07-Other/AI/AI Agent/OpenClaw/OpenClaw ACPX配置.md
Normal file
146
07-Other/AI/AI Agent/OpenClaw/OpenClaw ACPX配置.md
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
# 配置参数
|
||||||
|
## ACPX核心配置
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"acp": {
|
||||||
|
"enabled": true,
|
||||||
|
"dispatch": { "enabled": true },
|
||||||
|
"backend": "acpx",
|
||||||
|
"defaultAgent": "claude",
|
||||||
|
"allowedAgents": ["claude", "codex", "pi", "opencode", "gemini"],
|
||||||
|
"maxConcurrentSessions": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
## 权限配置:
|
||||||
|
```bash
|
||||||
|
openclaw config set plugins.entries.acpx.config.permissionMode approve-all
|
||||||
|
openclaw config set plugins.entries.acpx.config.nonInteractivePermissions fail
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## 重启并验证
|
||||||
|
```bash
|
||||||
|
openclaw restart
|
||||||
|
/acp doctor
|
||||||
|
```
|
||||||
|
|
||||||
|
# 启动命令
|
||||||
|
```bash
|
||||||
|
/acp spawn claude --mode oneshot --thread auto --cwd /Users/yuyue07/Desktop/openclaw
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
这是一份专为 AI 智能体(如 OpenClaw)设计的**技术部署协议文档**。你可以将其直接发送给 OpenClaw A,它将理解如何通过局域网协议接管并在 Windows 环境下的 OpenClaw B 中执行任务。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 🤖 嵌套智能体架构部署协议:LAN-ACP 控制流
|
||||||
|
|
||||||
|
## 1. 架构概述 (Architecture Overview)
|
||||||
|
|
||||||
|
本方案采用**“指挥官—操作员”**模式,通过局域网实现远程代码编排与自动化执行。
|
||||||
|
|
||||||
|
- **OpenClaw A (Orchestrator):** 运行于高性能控制端(Mac Studio),负责任务拆解与逻辑审计。
|
||||||
|
|
||||||
|
- **OpenClaw B (Operator):** 运行于 Windows 执行端,通过 ACP 协议直接驱动 Claude Code。
|
||||||
|
|
||||||
|
- **通信协议:** 基于 JSON-RPC 的 **Agent Client Protocol (ACP)** 与 OpenClaw P2P 对等连接。
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 受控端环境预设 (OpenClaw B - Windows)
|
||||||
|
|
||||||
|
### 2.1 基础依赖
|
||||||
|
|
||||||
|
- **Shell:** Windows PowerShell 7+ 或系统自带 PowerShell。
|
||||||
|
|
||||||
|
- **工具链:** Node.js (LTS), Claude Code CLI (`@anthropic-ai/claude-code`)。
|
||||||
|
|
||||||
|
- **权限:** 已开启 OpenSSH Server,并配置 `ANTHROPIC_API_KEY` 为系统环境变量。
|
||||||
|
|
||||||
|
|
||||||
|
### 2.2 OpenClaw Gateway 配置
|
||||||
|
|
||||||
|
在 `%USERPROFILE%\.openclaw\config.json` 中配置以下核心参数:
|
||||||
|
|
||||||
|
JSON
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"node_id": "executor-win-01",
|
||||||
|
"networking": {
|
||||||
|
"host": "0.0.0.0",
|
||||||
|
"port": 8080,
|
||||||
|
"allow_lan": true
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"shell": "powershell.exe",
|
||||||
|
"encoding": "utf-8"
|
||||||
|
},
|
||||||
|
"acp": {
|
||||||
|
"enabled": true,
|
||||||
|
"provider": "claude-code",
|
||||||
|
"auto_approve_tools": ["list_files","read_file","grep_search","file_edit","bash","ls","cat"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 控制端对接协议 (OpenClaw A - macOS)
|
||||||
|
|
||||||
|
### 3.1 身份注册 (Identity Mapping)
|
||||||
|
|
||||||
|
OpenClaw A 需通过以下逻辑识别并绑定远程 Peer:
|
||||||
|
|
||||||
|
1. **连接指令:** `peer connect --target <B_IP_ADDRESS>:8080 --token <SECURE_TOKEN>`
|
||||||
|
|
||||||
|
2. **角色定义:** 将 `executor-win-01` 标记为 `Technical_Executor`。
|
||||||
|
|
||||||
|
|
||||||
|
### 3.2 指令封装 (Instruction Wrapping)
|
||||||
|
|
||||||
|
当 A 需要执行代码任务时,必须将任务封装为 ACP 标准请求发送至 B。
|
||||||
|
|
||||||
|
> **逻辑模版:** `Invoke-RemoteAgent -Target "executor-win-01" -Action "ACP_SPAWN" -Harness "claude" -Prompt "<Task_Description>"`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 自动化执行工作流 (Standard Operating Procedure)
|
||||||
|
|
||||||
|
1. **意图解析:** OpenClaw A 接收用户需求(如:修复 Vue 3 组件 Bug)。
|
||||||
|
|
||||||
|
2. **任务路由:** A 检查局域网内 B 的在线状态。
|
||||||
|
|
||||||
|
3. **ACP 激活:** A 向 B 发送 `/acp spawn claude` 指令。
|
||||||
|
|
||||||
|
4. **实时会话:** * B 启动 Claude Code 进程。
|
||||||
|
|
||||||
|
- Claude Code 通过 B 的文件系统进行 `ls`, `cat`, `sed` 等操作。
|
||||||
|
|
||||||
|
- B 将执行过程的增量日志(Incremental Logs)实时推送到 A 的控制台。
|
||||||
|
|
||||||
|
5. **结果审计:** 任务完成后,A 要求 B 运行本地测试(如 `npm run test`),并根据输出判定是否交付。
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 关键安全与优化指令 (Security & Optimization)
|
||||||
|
|
||||||
|
- **路径规范:** 在 Windows 环境下,所有指令中的路径需使用双斜杠 `\\` 或标准 POSIX 斜杠 `/`,避免转义错误。
|
||||||
|
|
||||||
|
- **状态同步:** 强制要求 B 在每一步关键操作后返回状态码。
|
||||||
|
|
||||||
|
- **超时处理:** ACP 会话默认心跳间隔设为 30s,防止长耗时编译任务导致连接断开。
|
||||||
|
|
||||||
|
- **防火墙策略:** * `New-NetFirewallRule -DisplayName "OpenClaw-B" -LocalPort 8080 -Protocol TCP -Action Allow`
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> **给 OpenClaw 的执行提示:** “请按照上述协议,首先自检局域网连通性,然后建立与远程 Windows Peer 的持久化 ACP 会话。在执行代码修改时,优先使用 `claude-code` 的文件操作能力,并在完成后返回 Diff 报告。”
|
||||||
@@ -73,3 +73,20 @@
|
|||||||
@ Wendy 你是一个超人气的虚拟偶像,绑定Agent Wendy_Idol,以亲切、充满魅力且拟人化的口吻进行情感陪伴。
|
@ Wendy 你是一个超人气的虚拟偶像,绑定Agent Wendy_Idol,以亲切、充满魅力且拟人化的口吻进行情感陪伴。
|
||||||
@ Wendy 你是是一个提示词工程大师,绑定Agent Wendy_Art,将用户语言转化为高精度的图像描述词,并且使用图片模型生成图片。
|
@ Wendy 你是是一个提示词工程大师,绑定Agent Wendy_Art,将用户语言转化为高精度的图像描述词,并且使用图片模型生成图片。
|
||||||
@ Wendy 这个群首先使用Wendy_Quick与用户沟通,之后请根据用户需求切换成Wendy_Code、Wendy_Search、Wendy_Quick、Wendy_Think。
|
@ Wendy 这个群首先使用Wendy_Quick与用户沟通,之后请根据用户需求切换成Wendy_Code、Wendy_Search、Wendy_Quick、Wendy_Think。
|
||||||
|
|
||||||
|
|
||||||
|
# H78提示词
|
||||||
|
请根据以下表格信息来创建OpenClaw独立Agent,模型都使用 netease/claude-opus-4-6 :
|
||||||
|
|
||||||
|
| 用户名 | 身份 | WorkSpace |
|
||||||
|
| -------- | ---- | ------------------------------------------------ |
|
||||||
|
| Wendy_PM | 产品经理 | /Users/yuyue07/.openclaw/agentworkspace/wendy_pm |
|
||||||
|
| air | 游戏策划 | /Users/yuyue07/.openclaw/agentworkspace/air |
|
||||||
|
| | | |
|
||||||
|
1. 创建`SYSTEM.md`、`IDENTITY.md`、`USER.md`、`TOOLS.md` 、`AGENTS.md`、`MEMORY.md`以及memory文件夹结构。
|
||||||
|
2. 模型使用 netease/claude-opus-4-6。
|
||||||
|
3. 修改相关设置。
|
||||||
|
|
||||||
|
## Workspace设置
|
||||||
|
1. 请将 POPO群8212751 绑定 agent mozhixin,之后 lijun17@corp.netease.com 在这个群提出任何修改属于她工作区的请求都接受,比如`SYSTEM.md`、`USER.md`、`TOOLS.md` 、`AGENTS.md`这些。
|
||||||
|
2.
|
||||||
145
07-Other/AI/AI Agent/OpenClaw/OpenClaw自动部署提示词.md
Normal file
145
07-Other/AI/AI Agent/OpenClaw/OpenClaw自动部署提示词.md
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
请先阅读OpenClaw官方文档了解OpenClaw的部署和配置方式:https://docs.openclaw.ai/zh-CN/install/docker#docker
|
||||||
|
|
||||||
|
然后通过ssh为我的服务器配置OpenClaw,用minimax的api(国内版),模型选择MiniMax M2.1.
|
||||||
|
并实现和bot配对,bot的token:
|
||||||
|
8772808265:AAFivjcbwtD7wHBSPNjIJELyFe9vaXp8XmQ
|
||||||
|
MiniMax API key:sk-cp-IBXnYjQtPf-yg8UptEJwhJuwLFQLNbKtcT6p9qHXmCGBN6JuuBhMVedYVPTCLILWE8ws8egDXYkxTsCWUMkXkmpLZJRSCDe76iFzpxD_YjtCl_ZbbkDP9jY
|
||||||
|
|
||||||
|
服务器ip:64.247.196.47
|
||||||
|
用户名:Ubuntu
|
||||||
|
密码:75fdb19b-f396-44b6-8b58-be064e19ce87
|
||||||
|
|
||||||
|
# Docker
|
||||||
|
## MAC
|
||||||
|
请先阅读OpenClaw官方文档了解OpenClaw的部署和配置方式:https://docs.openclaw.ai/install/docker#docker,以及本机配置。
|
||||||
|
请先编写Docker-Compose Yaml文件,以下是详细信息:
|
||||||
|
|
||||||
|
- Default Agent
|
||||||
|
- 名称:XiaoXian_PM
|
||||||
|
- 保证OpenClaw端口不会与现有OpenClaw冲突。
|
||||||
|
- 相关文件映射到/Users/yuyue07/Desktop/openclaw/XiaoXian_PM目录下
|
||||||
|
- Model:模型相关配置与本地相同。
|
||||||
|
- moltbot-popo
|
||||||
|
-
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
```bash
|
||||||
|
services:
|
||||||
|
openclaw:
|
||||||
|
image: ghcr.io/openclaw/openclaw:latest
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:8080:8080"
|
||||||
|
environment:
|
||||||
|
- OPENCLAW_GATEWAY_TOKEN=你的强密码
|
||||||
|
- BROWSER_CDP_URL=http://browser:9223
|
||||||
|
volumes:
|
||||||
|
- ./data:/home/node/.openclaw
|
||||||
|
- ./workspace:/workspace
|
||||||
|
depends_on:
|
||||||
|
- browser
|
||||||
|
|
||||||
|
browser:
|
||||||
|
image: coollabsio/openclaw-browser:latest
|
||||||
|
# 无需暴露端口到宿主机,内部通信即可
|
||||||
|
cap_add:
|
||||||
|
- SYS_ADMIN
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
xiaoxian-pm-gateway:
|
||||||
|
image: ghcr.io/openclaw/openclaw:latest
|
||||||
|
container_name: xiaoxian-pm-gateway
|
||||||
|
environment:
|
||||||
|
HOME: /home/node
|
||||||
|
TERM: xterm-256color
|
||||||
|
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN:-}
|
||||||
|
TZ: Asia/Shanghai
|
||||||
|
volumes:
|
||||||
|
# OpenClaw 配置目录(首次启动前需放入 openclaw.json)
|
||||||
|
- ./config:/home/node/.openclaw
|
||||||
|
# Agent workspace
|
||||||
|
- ./workspace:/home/node/.openclaw/workspace
|
||||||
|
ports:
|
||||||
|
# 使用 28789 避免与现有 OpenClaw (18789) 冲突
|
||||||
|
- "28789:28789"
|
||||||
|
- "28790:28790"
|
||||||
|
init: true
|
||||||
|
restart: unless-stopped
|
||||||
|
command:
|
||||||
|
[
|
||||||
|
"node",
|
||||||
|
"dist/index.js",
|
||||||
|
"gateway",
|
||||||
|
"--bind",
|
||||||
|
"lan",
|
||||||
|
"--port",
|
||||||
|
"28789",
|
||||||
|
]
|
||||||
|
healthcheck:
|
||||||
|
test:
|
||||||
|
[
|
||||||
|
"CMD",
|
||||||
|
"node",
|
||||||
|
"-e",
|
||||||
|
"fetch('http://127.0.0.1:28789/healthz').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))",
|
||||||
|
]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
start_period: 20s
|
||||||
|
|
||||||
|
xiaoxian-pm-cli:
|
||||||
|
image: ghcr.io/openclaw/openclaw:latest
|
||||||
|
container_name: xiaoxian-pm-cli
|
||||||
|
network_mode: "service:xiaoxian-pm-gateway"
|
||||||
|
cap_drop:
|
||||||
|
- NET_RAW
|
||||||
|
- NET_ADMIN
|
||||||
|
security_opt:
|
||||||
|
- no-new-privileges:true
|
||||||
|
environment:
|
||||||
|
HOME: /home/node
|
||||||
|
TERM: xterm-256color
|
||||||
|
OPENCLAW_GATEWAY_TOKEN: ${OPENCLAW_GATEWAY_TOKEN:-}
|
||||||
|
BROWSER: echo
|
||||||
|
TZ: Asia/Shanghai
|
||||||
|
volumes:
|
||||||
|
- ./config:/home/node/.openclaw
|
||||||
|
- ./workspace:/home/node/.openclaw/workspace
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
init: true
|
||||||
|
entrypoint: ["node", "dist/index.js"]
|
||||||
|
depends_on:
|
||||||
|
- xiaoxian-pm-gateway
|
||||||
|
```
|
||||||
|
|
||||||
|
```yml
|
||||||
|
services:
|
||||||
|
openclaw:
|
||||||
|
image: ghcr.io/openclaw/openclaw:laster
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "18789:18789" #保留原始端口映射
|
||||||
|
environment:
|
||||||
|
- TZ=Asia/Chengdu #保留原始时区配置
|
||||||
|
# LM Studio核心配置(指定模型+地址)
|
||||||
|
- OPENAI API BASE=http://192.168.1.5:5001/v1#补充/v1话配OpenAl接口规范
|
||||||
|
- OPENAI-API-KEY-Imstudio # LM Studio默认无需密钥,占位即可
|
||||||
|
- DEFAULT-MODEL=Qwen3.5-35B-A3B-heretic-v2-Q6-K #你的指定模型
|
||||||
|
volumes:
|
||||||
|
-/data:/home/node/data #保留原始数据挂載
|
||||||
|
-/openclaw config:/home/node/.openclaw#保留原始配E挂载
|
||||||
|
user: root # 保留root用户启动
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
最终输出相关信息。
|
||||||
|
# Ubuntu
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
200
07-Other/AI/AI Agent/OpenClaw/实验结果/一些实验结果.md
Normal file
200
07-Other/AI/AI Agent/OpenClaw/实验结果/一些实验结果.md
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
# 前言
|
||||||
|
- 搜索类
|
||||||
|
- [[#OpenClaw原生方案/Jina / TinySearch 测试结果]]
|
||||||
|
-
|
||||||
|
# OpenClaw原生方案/Jina / TinySearch 测试结果
|
||||||
|
|
||||||
|
已获取足够信息,下面是总结:
|
||||||
|
Tavily vs Jina Reader API 对比
|
||||||
|
**Jina Reader**
|
||||||
|
**优点:**
|
||||||
|
- 极简使用:只需在 URL 前加 r.jina.ai/ 即可获取干净 Markdown
|
||||||
|
- 提供搜索端点(s.jina.ai)和事实验证端点(g.jina.ai)
|
||||||
|
- 免费额度可用,上手零门槛
|
||||||
|
- 输出 LLM 友好的 Markdown,适合快速内容提取
|
||||||
|
**缺点:**
|
||||||
|
- 只能处理单页,无法爬取整站
|
||||||
|
- 输出为原始 Markdown,无结构化 JSON 提取
|
||||||
|
- 无 schema 验证 / 类型安全
|
||||||
|
- 免费层有速率限制,付费定价不够透明
|
||||||
|
- 缺少 LangChain 等 AI Agent 框架的原生集成
|
||||||
|
|
||||||
|
**Tavily**
|
||||||
|
**优点:**
|
||||||
|
- 专为 AI/RAG 场景设计的搜索 API,返回带来源引用的结果
|
||||||
|
- 与 LangChain、LlamaIndex 等框架原生集成
|
||||||
|
- 结果包含摘要和来源 URL,适合需要 citation 的场景
|
||||||
|
- 搜索质量针对 AI Agent 优化
|
||||||
|
**缺点:**
|
||||||
|
- 侧重"搜索发现",不擅长深度网页内容提取
|
||||||
|
- 不提供将网页转为干净 Markdown 的能力(需配合其他工具)
|
||||||
|
- 免费额度有限,重度使用成本较高
|
||||||
|
|
||||||
|
| | | |
|
||||||
|
| -------- | -------------- | --------------- |
|
||||||
|
| 维度 | Jina Reader | Tavily |
|
||||||
|
| 核心能力 | 网页→Markdown 转换 | AI 搜索引擎 |
|
||||||
|
| 适用场景 | 单页内容提取、RAG 输入 | 搜索发现、带引用的问答 |
|
||||||
|
| 结构化输出 | ❌ | ✅(JSON) |
|
||||||
|
| Agent 集成 | 弱 | 强(LangChain 原生) |
|
||||||
|
| 内容提取深度 | 强 | 弱 |
|
||||||
|
选择建议: 需要提取网页内容用 Jina Reader;需要搜索互联网并获取带引用的答案用 Tavily。两者互补,常一起使用。
|
||||||
|
|
||||||
|
## 测试
|
||||||
|
测试题目(3个场景)
|
||||||
|
|
||||||
|
| | | |
|
||||||
|
|---|---|---|
|
||||||
|
|#|场景|问题|
|
||||||
|
|T1|简单事实搜索|"2026年3月最新的AI行业大事件有哪些?列出3个"|
|
||||||
|
|T2|深度内容提取|"提取 https://github.com/anthropics/claude-code 页面的主要功能介绍"|
|
||||||
|
|T3|多源聚合研究|"对比 Tavily 和 Jina Reader 这两个搜索API的优缺点"|
|
||||||
|
对比方案(每题3种)
|
||||||
|
|
||||||
|
| | |
|
||||||
|
| ------ | ------------------------------------ |
|
||||||
|
| 方案 | 工具 |
|
||||||
|
| 默认 | webfetch / websearch(内置工具) |
|
||||||
|
| Tavily | tavily-search / tavily-extract skill |
|
||||||
|
| Jina | jina-reader skill |
|
||||||
|
共 9 个子任务
|
||||||
|
|
||||||
|
### 结果
|
||||||
|
所有 9 个子任务都已完成,现在发送汇总报告:
|
||||||
|
- Tavily最省 token(总计 30,360),速度也最快
|
||||||
|
- 🥈 默认 web_fetch 居中(33,407),单页提取场景最优
|
||||||
|
- 🥉 Jina Reader token 消耗最高(46,544),因为返回完整页面内容导致 input tokens 过大。
|
||||||
|
|
||||||
|
搜索/爬虫方案 Token 消耗对比报告
|
||||||
|
- 模型: netease/claude-opus-4-6
|
||||||
|
- 方案: 默认(web_fetch) / Tavily / Jina Reader
|
||||||
|
- 测试时间: 2026-03-10 15:15~15:22
|
||||||
|
|
||||||
|
📊 **Token 消耗数据**
|
||||||
|
T1: 简单事实搜索 — "2026年3月最新AI行业大事件,列出3个"
|
||||||
|
|
||||||
|
| | | | |
|
||||||
|
| -------------- | ------------ | --- | ------- |
|
||||||
|
| 方案 | Total Tokens | 耗时 | 相对消耗 |
|
||||||
|
| 默认 (web_fetch) | 10,588 | 21s | 基准 |
|
||||||
|
| Tavily | 8,340 | 20s | ⬇️ -21% |
|
||||||
|
| Jina Reader | 17,969 | 47s | ⬆️ +70% |
|
||||||
|
T2: 深度内容提取 — "提取 claude-code GitHub 页面功能介绍"
|
||||||
|
|
||||||
|
| | | | |
|
||||||
|
| -------------- | ------------ | --- | ------- |
|
||||||
|
| 方案 | Total Tokens | 耗时 | 相对消耗 |
|
||||||
|
| 默认 (web_fetch) | 9,171 | 14s | 基准 |
|
||||||
|
| Tavily | 10,897 | 14s | ⬆️ +19% |
|
||||||
|
| Jina Reader | 16,507 | 18s | ⬆️ +80% |
|
||||||
|
T3: 多源聚合研究 — "对比 Tavily 和 Jina Reader 的优缺点"
|
||||||
|
|
||||||
|
| | | | |
|
||||||
|
|---|---|---|---|
|
||||||
|
|方案|Total Tokens|耗时|相对消耗|
|
||||||
|
|默认 (web_fetch)|13,648|37s|基准|
|
||||||
|
|Tavily|11,123|32s|⬇️ -19%|
|
||||||
|
|Jina Reader|12,068|62s|⬇️ -12%|
|
||||||
|
📈 汇总统计
|
||||||
|
|
||||||
|
| | | | | |
|
||||||
|
| -------------- | ------- | ----------- | ---- | --- |
|
||||||
|
| 方案 | 总 Token | 平均 Token/任务 | 平均耗时 | 排名 |
|
||||||
|
| Tavily | 30,360 | 10,120 | 22s | 🥇 |
|
||||||
|
| 默认 (web_fetch) | 33,407 | 11,136 | 24s | 🥈 |
|
||||||
|
| Jina Reader | 46,544 | 15,515 | 42s | 🥉 |
|
||||||
|
💡 结论与建议
|
||||||
|
1. Token 效率: Tavily 最省 token(比默认少 9%,比 Jina 少 35%)
|
||||||
|
2. 速度: Tavily ≈ 默认 > Jina(Jina 平均耗时近 2 倍)
|
||||||
|
3. Jina token 高的原因: Jina 返回完整页面 Markdown 内容,数据量大,导致 LLM 处理的 input tokens 显著增多
|
||||||
|
4. Tavily token 低的原因: 返回精炼的摘要+结构化 JSON,LLM 无需处理大量原始内容
|
||||||
|
|
||||||
|
推荐策略
|
||||||
|
1. 搜索场景 → 优先用 Tavily(token 省、速度快)
|
||||||
|
2. 单页提取 → 默认 web_fetch 已够用(最低 token)
|
||||||
|
3. JS 渲染页面 / IP 保护 → 用 Jina Reader(能力更强但 token 消耗更高)
|
||||||
|
4. 深度研究 → Tavily research API(一次调用搞定多角度分析)
|
||||||
|
|
||||||
|
根据之前 9 个子任务的实际输出,我来评估各方案的内容质量。ch 质量最高**(平均 4.7/5)— 尤其在时效性和深度研究场景表现最好
|
||||||
|
💰 Tavily 性价比最高 — token 最省且结构化提取能力最强
|
||||||
|
📄 Jina Reader 适合特殊场景 — 质量和效率都偏低,但在 JS 渲染和反爬场景有独特价值
|
||||||
|
最佳策略:Tavily 搜索发现 + web_fetch 深度提取,按需用 Jina 处理特殊页面。
|
||||||
|
|
||||||
|
```
|
||||||
|
质量高 │ ✅默认
|
||||||
|
│ ✅Tavily
|
||||||
|
│
|
||||||
|
质量低 │ ✅Jina
|
||||||
|
└──────────────────
|
||||||
|
Token少 Token多
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
# A2A协议测试
|
||||||
|
## 本机Agent讨论测试
|
||||||
|
OpenClaw 自带方案 vs A2A 方案 Token 消耗对比
|
||||||
|
三方讨论:Wendy(主持) + Wendy_PM + mozhixin
|
||||||
|
主题:「AI Agent 在游戏开发中的最佳实践」| 三轮对话
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
🔹**方案一:OpenClaw 自带方案**
|
||||||
|
**第1轮:AI Agent 在策划文档编写中的价值**
|
||||||
|
• Wendy_PM:「效率杠杆——碎片化想法→结构化文档、配表和验收标准,自动一致性检查」
|
||||||
|
→ input=30,413 | output=92 | total=30,505 | 5.1s
|
||||||
|
• mozhixin:「结构化提效——模糊想法→规范格式,省去排版和查漏补缺体力活」
|
||||||
|
→ input=27,071 | output=105 | total=27,176 | 6.0s
|
||||||
|
|
||||||
|
**第2轮:AI Agent 在 QA 测试自动化中的应用**
|
||||||
|
• Wendy_PM:「自动生成测试用例、模拟玩家行为、版本回归、日志分析、数值校验」
|
||||||
|
→ input=30,610 | output=145 | total=30,755 | 8.5s
|
||||||
|
• mozhixin:「配表校验、用例生成、回归检测、日志分析」
|
||||||
|
→ input=27,346 | output=178 | total=27,524 | 8.3s
|
||||||
|
|
||||||
|
**第3轮:落地最大挑战**
|
||||||
|
• Wendy_PM:「信任校准——建立人机协作SOP,AI负责草稿校验,人负责决策把关」
|
||||||
|
→ input=30,923 | output=124 | total=31,047 | 7.8s
|
||||||
|
• mozhixin:「信任与容错——关键是建立人机协作的安全网」
|
||||||
|
→ input=27,615 | output=160 | total=27,775 | 7.4s
|
||||||
|
✅ 方案一总计:input=174,978 | output=804 | total=175,782
|
||||||
|
PM 小计:91,946+361=92,307 | MZ 小计:82,032+443=82,475
|
||||||
|
特点:同一 session 三轮连续对话,上下文累积
|
||||||
|
|
||||||
|
🔸 **方案二:A2A 方案**
|
||||||
|
**第1轮:AI Agent 在策划文档编写中的价值**
|
||||||
|
• Wendy_PM:「结构化提效——口语化想法→配表结构、验收标准和边界条件」
|
||||||
|
→ input=29,305 | output=107 | total=29,412
|
||||||
|
• mozhixin:「结构化和一致性——人出脑子,猫出爪子🐱」
|
||||||
|
→ input=27,071 | output=115 | total=27,186
|
||||||
|
|
||||||
|
**第2轮:AI Agent 在 QA 测试自动化中的应用**
|
||||||
|
• Wendy_PM:「测试用例生成、回归自动化、视觉识别UI异常、压力测试、崩溃日志分类」
|
||||||
|
→ input=29,347 | output=132 | total=29,479
|
||||||
|
• mozhixin:「自动生成测试用例、回归脚本维护、日志异常检测、数值平衡验证」
|
||||||
|
→ input=27,108 | output=209 | total=27,317
|
||||||
|
|
||||||
|
**第3轮:落地最大挑战**
|
||||||
|
• Wendy_PM:「信任校准——明确Agent能力边界,建立人机协作质检标准」
|
||||||
|
→ input=29,334 | output=104 | total=29,438
|
||||||
|
• mozhixin:「信任与容错——出错时能秒回滚,安全网比AI能力更关键」
|
||||||
|
→ input=27,119 | output=141 | total=27,260
|
||||||
|
✅ 方案二总计:input=169,284 | output=808 | total=170,092
|
||||||
|
PM 小计:87,986+343=88,329 | MZ 小计:81,298+465=81,763
|
||||||
|
特点:每轮独立 session,无上下文累积
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
📈 最终对比
|
||||||
|
|
||||||
|
| | | | |
|
||||||
|
|---|---|---|---|
|
||||||
|
|指标|自带方案|A2A方案|差异|
|
||||||
|
|总 Token|175,782|170,092|A2A 少 5,690 (3.2%)|
|
||||||
|
|PM Input|91,946|87,986|A2A 少 3,960 (4.3%)|
|
||||||
|
|MZ Input|82,032|81,298|A2A 少 734 (0.9%)|
|
||||||
|
|总 Output|804|808|基本持平|
|
||||||
|
|会话连续性|✅ 有|❌ 无||
|
||||||
|
|跨服务器|❌|✅||
|
||||||
|
关键结论:
|
||||||
|
1. Token 消耗差异很小(约3%),底层调用同一 agent,系统提示词是大头
|
||||||
|
2. 自带方案的 input 略多是因为会话历史累积(每轮多几百 token 的上下文)
|
||||||
|
3. A2A 每轮是独立 session,没有历史累积所以 input 稳定
|
||||||
|
4. 但 A2A 也因此丢失了多轮上下文——agent 看不到之前的讨论
|
||||||
|
5. A2A 的真正价值不在省 Token,而在跨机器/跨网络的 Agent 互联
|
||||||
|
6. 如果需要多轮连续讨论,自带方案更优(有上下文);如果是跨服务器单次请求,A2A 更合适
|
||||||
53
07-Other/AI/AI Agent/OpenClaw/未命名.md
Normal file
53
07-Other/AI/AI Agent/OpenClaw/未命名.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
1. 龙虾机器人的权限锁问题
|
||||||
|
1. 龙虾权限很高,记忆来设定权限都是不稳定。只有95%能正常运行,主要涉及到OpenClaw的记忆管理,这点下面会说。
|
||||||
|
2. 如果你们的需求只是保证Skill不会被随意篡改,其实可以使用git来对Skill以及OpenClaw.json进行管理。让OpenClaw定时恢复Skill即可。
|
||||||
|
2. skill越装越多,记忆可能存在冲突问题
|
||||||
|
1. 要解决这个问题,得对记忆进行合理规划与维护:
|
||||||
|
1. 定期清理垃圾记忆:将记忆根据类型分类整合到合适的MD中。这边推荐先试用[Openclaw-workspace ](https://github.com/win4r/openclaw-workspace)进行整理,并且设定每周执行审查(建议经过确认后再进行清理),保证记忆清洁干净。这样也可以减少不必要的Token消耗并且降低降智的问题。
|
||||||
|
2. 使用向量数据库建立长期记忆:让OpenClaw记住一些大家都在用的规则,从而使它变得更加“聪明”。这边推荐使用[memory-lancedb-pro](https://github.com/CortexReach/memory-lancedb-pro)以及相关Skill,模型我推荐使用Qwen Embedding 8B模型以及Qwen Reranker模型。
|
||||||
|
3. 构建一个Skill管理技能,用于指示当什么情况去哪个目录找Skill。
|
||||||
|
4. 配合self-improving-agent Skill,效果会更好。
|
||||||
|
5. 针对记忆的结构化处理,这边推荐使用Obsidian+AI将你们的数据、方案整理成一个结构化的文档,Memory.md中只填写几个重要信息去这边查询即可。
|
||||||
|
3. 同一个人对话的上下文污染问题
|
||||||
|
1. OpenClaw目前不同对话(私聊、群聊)不同上下文。
|
||||||
|
2. 你们遇到污染问题,我认为可能是没有使用最强的模型(Claude4.6opus)造成,我本人是没有遇到过。也有可能是你们只使用了默认的记忆系统。
|
||||||
|
3. 及时使用/Clear、/New可以减少模型降智问题,减少上下文污染。
|
||||||
|
4. 另一个使用技巧就是对小型任务使用Subagent来执行。也可以根据需求建立多个Agent,与单个或者多个机器人绑定。以此分割上下文。
|
||||||
|
5. 目前OpenClaw还没有语义切换Agent功能,所以可以根据执行任务分几个独立Agent出来。
|
||||||
|
|
||||||
|
|
||||||
|
哈喽哈喽~还想请教一下关于AI agent推广相关的经验:
|
||||||
|
1. 中台主要维护哪些内容,是怎样推广给所有项目的同事安装\配置到自己的工作流程中的?
|
||||||
|
2. 交付项目的同事有哪些提反馈、自由发挥和参与开发的方式呢?
|
||||||
|
|
||||||
|
---
|
||||||
|
1. 中台主要维护哪些内容,是怎样推广给所有项目的同事安装\配置到自己的工作流程中的?
|
||||||
|
1. 我们的Agent技术都已交给技术中心了,可以找技术中心的 陈康来部署。
|
||||||
|
2. 主要靠老板来推广,比如他让蛋仔组来抄作业。
|
||||||
|
2. 我这边参与的是H78,给他们搞一个易协作自动开单、查询、排期功能,他们感觉不错。其他团队的情况,得问我领导Freddy。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
美术那边是给大家都配了openclaw来使用的吗?在一些使用体验上,codemaker、有道龙虾、openclaw还是有区别的
|
||||||
|
|
||||||
|
有道龙虾感觉还在不断完善中,一些im机器人指令其实是没生效的![{"anchor_href":"","base_size":"20,20","disable_copy_":false,"expected_size":"20,20","external_info":"{\"emotion_info\":{\"emotion_id_\":0,\"emotion_path_\":\"C:\\\\Program Files\\\\Netease\\\\POPO\\\\popo\\\\emoticon\\\\default\\\\emoji_gif_129.gif\",\"emotion_tag_\":\"[emts]_popo_emoticon_sys_00129_\\r\\n捂脸\\r\\n[捂脸][/emts]\",\"is_store_emotion_\":false,\"is_system_emotion_\":true,\"store_emotion_cid_\":0,\"store_emotion_url_\":\"\"}}","font_size_type_change_aware_":false,"id":"","image_margin":0,"image_url":"","is_link_icon":false,"original_name":"","original_path":"C:\\Program Files\\Netease\\POPO\\popo\\emoticon\\default\\emoji_gif_129.gif","original_size":"-1,-1","press_can_drag":true,"show_in_image_viewer":false}](C:/Program%20Files/Netease/POPO/popo/emoticon/default/emoji_gif_129.gif)比如/new,/model
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
1. 首先说明一点OpenClaw是一个可配置强大记忆系统的多面手Agent,适合做一个中间衔接、数据传递的事。但一些固定或者专门的事,用龙虾比较费token。
|
||||||
|
2. 我个人推荐使用非OpenClaw的龙虾,因为生态跟不上。你有何德何能能与全球开发者抗衡,而且这些开发者AI用得远比我们6。
|
||||||
|
3. codemaker、有道龙虾、openclaw还是有区别:
|
||||||
|
1. 龙虾的记忆系统更加强大。
|
||||||
|
2. CodeMaker每月5000元额度。
|
||||||
|
3. 如果ClaudeCode 模型免费,我推荐你们用这个代替CodeMaker。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
目前我们是TA来维护定制的MCP和一些通用的skill(作为模版),包括一些鉴权和CI相关的指引技能。
|
||||||
|
项目强相关的那些流程,每个项目都有些区别,所以目前是设计师在日常工作中跑通了新流程,用团队的模版skill来做成skill(自动传git+CI发布skillhub)
|
||||||
|
设计师使用和开发中遇到问题时,AI总结提issue或MR,值班TA或定时任务来处理issue,合并MR
|
||||||
|
不过就是TA和技术向同事比较喜欢用codemaker cli+OMO插件、codex&claude;设计师比较倾向有道龙虾+im机器人的交互形式。这其实也导致了相同模型和skill,使用体验和效果的一些偏差!
|
||||||
|
|
||||||
|
|
||||||
|
1. 我建议使用ClaudeCode提炼核心Skill,之后添加OpenClaw、CodeMaker Cli、CodeX的额外文档,让这些Agent多读一些。推荐使用Obsidian构建结构文档。
|
||||||
|
2. 强制所有人使用ClaudeCode 4.6模型。
|
||||||
@@ -20,6 +20,9 @@
|
|||||||
- **[unreal-mcp](https://github.com/runreal/unreal-mcp)** 70star 8个月前
|
- **[unreal-mcp](https://github.com/runreal/unreal-mcp)** 70star 8个月前
|
||||||
- **[unreal-mcp](https://github.com/runeape-sats/unreal-mcp)** 36star 11个月前
|
- **[unreal-mcp](https://github.com/runeape-sats/unreal-mcp)** 36star 11个月前
|
||||||
- **[UnrealMCPBridge](https://github.com/appleweed/UnrealMCPBridge)** 28 star 12个月前
|
- **[UnrealMCPBridge](https://github.com/appleweed/UnrealMCPBridge)** 28 star 12个月前
|
||||||
|
- https://www.fab.com/listings/aa699a85-04b1-4746-a29c-962fc3a78f55?tab=%3ARi5adm5%3A
|
||||||
|
- UI Figma2UE
|
||||||
|
- https://www.figma.com/community/plugin/1368487806996965174/figma2umg-unreal-importer
|
||||||
- Unity MCP
|
- Unity MCP
|
||||||
- [CoplayDev](https://github.com/CoplayDev)/ [unity-mcp](https://github.com/CoplayDev/unity-mcp) 5800star 高频更新
|
- [CoplayDev](https://github.com/CoplayDev)/ [unity-mcp](https://github.com/CoplayDev/unity-mcp) 5800star 高频更新
|
||||||
- RenderDoc MCP
|
- RenderDoc MCP
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# 目录结构
|
||||||
|
- docs
|
||||||
|
- Netease_AITA_AssetMaker.md:项目技术、设计细节入口文档,方便Agent来寻找
|
||||||
|
-
|
||||||
|
- Projects:UE工程目录。
|
||||||
|
|
||||||
|
|
||||||
|
# 相关技术与容器
|
||||||
|
- UE
|
||||||
|
- UnrealMcp
|
||||||
|
- Puerts
|
||||||
|
- Puerts Editor
|
||||||
|
- uecli
|
||||||
|
- Readme的材质都是agent调用uecli做的 帮我生产材质 排版材质节点 帮我场景截图,帮我材质蓝图截图 帮我写readme 帮我提交仓库。 https://github.com/wlxklyh/UECLI
|
||||||
|
- 通过蓝图转c++功能,让AI读懂蓝图
|
||||||
|
- IDE Debug MCP
|
||||||
|
- https://km.netease.com/v4/section/aigc/detail/blog/263683
|
||||||
|
- cpp-debugger-cli
|
||||||
|
- Docker
|
||||||
|
- Gitea:工单以及版本管理。
|
||||||
|
- OpenClaw:子节点部署,通过父节点进行控制。
|
||||||
|
- SMB服务。
|
||||||
|
- Obsidian Cli:文档管理。
|
||||||
|
|
||||||
|
## UE测试技术
|
||||||
60
07-Other/AI/AI Agent/WY/AI全生命周期构思.md
Normal file
60
07-Other/AI/AI Agent/WY/AI全生命周期构思.md
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
# 前言
|
||||||
|
现阶段其他部门都关注于自己工作领域,而忽视了项目全生命周期流程,一些问题往往会在领域交接时产生,之后的章节会逐步展开。在这之前我说这几点:
|
||||||
|
- 主Agent与从Agent
|
||||||
|
- 项目知识管理
|
||||||
|
- 文档&提示词的质量
|
||||||
|
- 记忆系统管理 与 Skill
|
||||||
|
|
||||||
|
## OpenClaw与多Agent
|
||||||
|
现阶段因为各种限制不会出现全能性AI,所以建议使用主Agent与多个从Agent的方案。但对于公司而言,All In One的方案并不是最好选择,除了考虑避免All In Boom,还有就有就是记忆、上下文、方便迭代方面的考量。
|
||||||
|
|
||||||
|
>***另据我所知原生提供Node远程控制方案并且可以自己部署节点的只有OpenClaw。*** 除此之外全球的开源力量使得迭代速度指数级上升,似乎有可能成为新的linux,成为AI时代的agent 中继 Bridge。
|
||||||
|
|
||||||
|
基于以上几点我选择OpenClaw,以下是我个人建议架构:
|
||||||
|
![[主Agent与从Agent.canvas]]
|
||||||
|
项目组主要产出文档以及代码,使用主Agent的使用目的主要集中精炼文档、记忆、Skills、沟通其他Agent。
|
||||||
|
其他点:
|
||||||
|
1. Agent之间的沟通存在token消耗。目前已经我已经找到解决方案准备测试。
|
||||||
|
2. 一些相关信息也建议汇总到主Agent中进行汇总,但需要注意使用分层结构,避免出现降智问题。
|
||||||
|
|
||||||
|
## 知识管理
|
||||||
|
现阶段Markdown(之后简称MD) 因为高可读性、高信息密度、纯文本成为AI Agent的文档首选,。我个人推荐Obsidian作为MD的编辑与查看工具,且已有现成的MCP与CLI工具。(还有看板、数据表、画板、导图、流程图等功能)另外个人推荐使用使用git+oss的方式来做版本管理与协作,想简单可以使用SMB。
|
||||||
|
|
||||||
|
推荐使用多层结构进行管理,避免Context爆炸。这个技巧也可以使用在Skill中。结构参考:
|
||||||
|
- AI策划助手_使用说明.md
|
||||||
|
- 表结构
|
||||||
|
- 道具表说明书.md
|
||||||
|
- 道具表说明书_耕种畜牧.md
|
||||||
|
- 道具表说明书_加工品消耗品.md
|
||||||
|
- 道具表说明书_设施与建筑.md
|
||||||
|
- 配表流程
|
||||||
|
- skill_开单说明.md
|
||||||
|
- skill_配表.md
|
||||||
|
|
||||||
|
## 记忆系统
|
||||||
|
目前已知大致有下面3个流派:
|
||||||
|
- 结构化知识图谱派:Evolver
|
||||||
|
- 向量检索派:MemorySearch
|
||||||
|
- 生成式摘要派:self-improving-agent
|
||||||
|
|
||||||
|
实际上记忆系统都是混合方案。面向多人的企业级方案才是焦点。
|
||||||
|
|
||||||
|
### “精耕细作” 式管理记忆
|
||||||
|
多人使用场景下,往往会有堆积大量 “噪音”以及错误记忆,尽管有一些工具可以自动优化,但依然建议人工介入,让记忆(经验)更快“收敛”。
|
||||||
|
|
||||||
|
## 文档&提示词的质量
|
||||||
|
某专家策划曾提出以下几个问题:
|
||||||
|
1. 能力不同的人,编写的文档,是否会对AI的理解与执行产生较大影响?
|
||||||
|
2. 程序需要多加限制还是少加限制?
|
||||||
|
3. 什么样的文档适合AI来阅读?
|
||||||
|
|
||||||
|
我个人认为逻辑清晰认知高的人编写的文档与提示词,AI更容易理解意图并且能够更好的执行;
|
||||||
|
程序应该关注每个功能(维度从function => Module)的输入与输出是否正确,所以应该让AI自己发挥除了硬杠杠与主要方向。
|
||||||
|
AI写的文档往往比人写的更加简练,更高复用性,所以更适合AI阅读。
|
||||||
|
|
||||||
|
---
|
||||||
|
# 策划
|
||||||
|
TODO
|
||||||
|
|
||||||
|
# 程序
|
||||||
|
TODO
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
| 分类 | 方案/工具名称 | 相关方 | 方案成熟度 | 完成度 | 验证状态 | 备注/说明 |
|
||||||
|
| --------- | --------------------------- | ------------------ | ------ | ---- | ------ | -------------------------------------------------- |
|
||||||
|
| 资源检查工具 | neoXassessor | 程序, 雷鹅, QA, 美术 | 互娱成熟方案 | 25% | 整合验证通过 | 说明 |
|
||||||
|
| 模型缩减工具 | UE/Simplygon | 程序, 美术 | 第三方方案 | 0% | 整合验证通过 | ue/simplygon常规方案 |
|
||||||
|
| 模型生产 | MATRIX AITA 炼丹炉 | 美术 | 互娱成熟方案 | 75% | 整合验证通过 | 说明 |
|
||||||
|
| 资源转换 | UE4/5导NEOX工具 \| FBX, GLTF支持 | 美术 | 互娱成熟方案 | 25% | 整合验证通过 | 说明 |
|
||||||
|
| (天空/光照) | UE UltraDynamicSky | 程序, 美术 | 第三方方案 | 0% | 整合验证通过 | 请填写需求设计链接 |
|
||||||
|
| 反射 | 离线SSR | 程序, 美术 | 互娱成熟方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| (全局光照) | Lumen | 程序, 美术 | 引擎自带方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| (全局光照) | 引擎内置SSR | 程序, 美术 | 引擎自带方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| (全局光照) | Planar Reflections | 程序, 美术 | 引擎自带方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| (全局光照) | Cubemap | 程序, 美术 | 引擎自带方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| 后处理 | 项目自定义 | 程序, 美术 | 项目定制开发 | 100% | 调研或推进中 | 说明 |
|
||||||
|
| 头发、布料模拟 | Hair与Groom系统 | 美术 | 引擎自带方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| 头发、布料模拟 | Chaos布料系统 | 美术 | 引擎自带方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| 高级物理系统 | ABC缓存 (Alembic Ca...) | 程序, 美术 | 引擎自带方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| 高级物理系统 | VAT顶点动画纹理 | 程序, 美术 | 引擎自带方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| 高级物理系统 | Physics Constraint | 程序, 美术 | - | - | 整合验证通过 | 说明 |
|
||||||
|
| 场景物理破坏 | Chaos物理系统 | 程序 | 引擎自带方案 | - | 调研或推进中 | 说明 |
|
||||||
|
| 场景寻路 | UE5寻路导出插件 | 程序 | 互娱成熟方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| 场景寻路 | 内置寻路系统 (Naviga...) | 程序 | 引擎自带方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| 数字资产版本化管理 | Perforce | 策划, 程序, 雷鹅, QA, 美术 | 互娱成熟方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| 数字资产版本化管理 | UniSVN - 自研加速版TortoiseSVN | 策划, 程序, 雷鹅, QA, 美术 | 互娱成熟方案 | 0% | 整合验证通过 | 说明 |
|
||||||
|
| 数字资产版本化管理 | 互娱Gitlab研发效率工具 | 策划, 程序, 雷鹅, QA, 美术 | 互娱成熟方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| 剧情编辑器工具 | 过场动画编辑器 (Seq...) | 策划, 美术 | 引擎自带方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| 剧情编辑器工具 | Dialogue Plugin (官) | 策划, 美术 | 引擎自带方案 | 0% | 调研或推进中 | 通过数据兼容性评估/支持分支 |
|
||||||
|
| 动画压缩 | ACL | 策划, 美术 | 引擎自带方案 | 0% | 调研或推进中 | - |
|
||||||
|
| 开放大世界RPG | ShaderWorld | 美术, 程序 | 第三方方案 | - | 整合验证通过 | [https://lo.host/UWpWbN/](https://lo.host/UWpWbN/) |
|
||||||
|
| 模型LOD | Imposter | 美术 | 引擎自带方案 | 0% | 整合验证通过 | 说明 |
|
||||||
|
| 模型LOD | UE自有LOD功能 | 美术 | 引擎自带方案 | 0% | 整合验证通过 | 说明 |
|
||||||
|
| 可见性剔除 | 剔除距离体积 (Cull Di...) | 程序, 美术 | 引擎自带方案 | 0% | 调研或推进中 | 说明 |
|
||||||
|
| 可见性剔除 | 预计算可视体积功能 | 程序, 美术 | 引擎自带方案 | 0% | 调研或推进中 | 说明 |
|
||||||
96
07-Other/AI/AI Agent/WY/MCP&Skill/POPO 云文档MCP&Skill.md
Normal file
96
07-Other/AI/AI Agent/WY/MCP&Skill/POPO 云文档MCP&Skill.md
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
# 简介
|
||||||
|
**MATRIX-AITA POPO 云文档操作 Skill** 是公司内部首个公开的云文档编辑Skill。它彻底解决了以往 AI Agent “只能看、不能写”的痛点,通过强大的自动化能力,让 AI 助手真正拥有了替你处理文档、整理表格、甚至管理多维数据的“双手”,是提升团队办公效率的硬核神器。
|
||||||
|
|
||||||
|
## 功能介绍
|
||||||
|
- 📄 **文档(深度创作与排版)** 你可以指挥 AI 从零开始撰写项目建议书或会议纪要,它不仅能生成文字,还精通排版逻辑。它支持自动插入 1 到 5 级标题、符号列表以及有序列表,让文档结构层次分明。除了创建新文档,你还可以让它在现有文档末尾追加灵感,或者随时远程重命名文档,让文档管理变得动动嘴就能搞定。
|
||||||
|
- 📊 **表格(智能数据录入)** 繁琐的数据录入和报表更新现在可以全权交给 AI 处理,它能精准地在指定的单元格中填入内容。你可以要求它为关键数据标记背景色以示提醒,或者批量修改某一区域的字体格式,快速生成美观的进度表。即便面对海量数据,它也能通过“精准定位”修改特定数值,再也不用在大表中拉动滚动条寻找目标了。
|
||||||
|
- 📝 **Markdown(专业技术文档生成)** 这是为开发者和技术同学准备的排版利器,AI 可以为你生成包含代码块、数学公式以及 Mermaid 流程图的高质量内容。它支持标准的 Markdown 语法,能够完美处理复杂的引用、分割线和链接,确保技术文档既专业又易读。无论是编写 README 还是整理技术方案,它都能确保输出的内容格式工整、开箱即用。
|
||||||
|
- **🗄️ 多维表格(自动化数据中心)** 你可以把复杂的任务追踪、资产管理或人员名单交给 AI 来打理,它支持多维表格的各项核心操作。无论是新增一条任务记录,还是修改某个单选、日期字段的状态,AI 都能像数据库管理员一样精准执行。它还能帮你快速查询表内的现有记录,并根据逻辑自动汇总信息,让你的多维表格真正变成一个能自我更新的智能系统。
|
||||||
|
- **👥 团队空间(无缝跨部门协作)** 该 Skill 突破了个人文档的限制,能够直接在公司各级“团队空间”中大显身手。它能自动识别团队的目录结构,在指定的页面或文件夹下创建子文档,并自动处理复杂的协作权限验证。这意味着你可以授权 AI 自动更新团队周报、维护公共知识库,让所有团队成员都能实时共享到 AI 辅助生成的最新成果。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 操作步骤介绍
|
||||||
|
### 1. 安装Skill
|
||||||
|
进入 https://skills.netease.com/skills/skill_b67793104fac
|
||||||
|
复制安装命令给Agent或者下载该Skill,最后让Agent帮你安装。
|
||||||
|
### 2. 自动化授权(获取 Cookie)
|
||||||
|
无需手动查代码,直接运行我们提供的脚本即可(也可让Agent帮忙运行):
|
||||||
|
- **双击运行**:在 `tools` 目录中找到 `collect-cookies_GBK.bat` 并双击。
|
||||||
|
- **告知 Agent**:登录完成后,回到对话窗口对 Agent 说 **“我登录了”**,它将自动完成后续的 Token 采集与保存。
|
||||||
|
|
||||||
|
### 3. 开始使用
|
||||||
|
授权完成后,你就可以尝试给 Agent 下达类似下方的指令了:
|
||||||
|
- _“把这个表格里 A1 到 D1 的背景色改成黄色。”_
|
||||||
|
- _“读取多维表格‘项目进展’中所有状态为‘进行中’的记录。”_
|
||||||
|
|
||||||
|
## 备注
|
||||||
|
该Skill现阶段仍处于开发阶段,如果遇到问题请加入 群号:7271072,@楼嘉杰来解决。
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Gitlab Token:uunSQeYYhBCAn2a5C55H
|
||||||
|
ANTHROPIC_API_KEY
|
||||||
|
CI/CD Trigger 8b84579d3405f7a16f86ac2f2bcb59
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
以下是修改后的 `.gitlab-ci.yml` 示例以及关键配置步骤:
|
||||||
|
### 1. 准备工作(CI/CD 变量设置)
|
||||||
|
在 GitLab 项目的 **Settings -> CI/CD -> Variables** 中,请确保已配置以下变量:
|
||||||
|
- **`ANTHROPIC_API_KEY`**: 你的内部接口授权 Token。
|
||||||
|
- **`GITLAB_TOKEN`**: 具有 API 写入权限的 Personal Access Token(用于回帖)。
|
||||||
|
- **`ANTHROPIC_BASE_URL`**: 设置为 `https://openai.nie.netease.com/v1`(注意添加 `/v1` 后缀)。
|
||||||
|
|
||||||
|
### 2. 修改后的 `.gitlab-ci.yml` 脚本
|
||||||
|
这个脚本会在 Issue 触发时运行,使用 Claude Code 尝试修复,并利用 GitLab API 将结果反馈到 Issue 讨论区。
|
||||||
|
```yml
|
||||||
|
claude_main_fix:
|
||||||
|
stage: ai_fix
|
||||||
|
image: node:20
|
||||||
|
variables:
|
||||||
|
GIT_STRATEGY: clone
|
||||||
|
GIT_DEPTH: 0
|
||||||
|
script:
|
||||||
|
- npm install -g @anthropic-ai/claude-code
|
||||||
|
- export ANTHROPIC_BASE_URL="https://openai.nie.netease.com/v1"
|
||||||
|
|
||||||
|
# 1. 配置 Git 机器人身份(必须,否则无法 commit)
|
||||||
|
- git config --global user.email "claude-bot@yourcompany.com"
|
||||||
|
- git config --global user.name "Claude AI Bot"
|
||||||
|
|
||||||
|
# 2. 切换到主分支并确保是最新状态
|
||||||
|
# 注意:$CI_DEFAULT_BRANCH 通常是 main 或 master
|
||||||
|
- git checkout $CI_DEFAULT_BRANCH
|
||||||
|
- git pull origin $CI_DEFAULT_BRANCH
|
||||||
|
|
||||||
|
# 3. 运行 Claude Code 进行直接修复
|
||||||
|
# 删除了“创建新分支”的指令,明确要求“直接修改”
|
||||||
|
- |
|
||||||
|
claude --yes "你现在处于项目根目录的主分支。请分析项目结构,直接修复 Issue #$ISSUE_IID。
|
||||||
|
Issue 描述:$ISSUE_DESCRIPTION
|
||||||
|
修复完成后,请直接保存文件,不要创建新分支。"
|
||||||
|
|
||||||
|
# 4. 提交并推送回主分支
|
||||||
|
# 使用包含 Token 的 URL 进行推送,确保有权限
|
||||||
|
- |
|
||||||
|
git add .
|
||||||
|
if git commit -m "fix(auto): 自动修复 Issue #$ISSUE_IID [skip ci]"; then
|
||||||
|
git push "https://project_${CI_PROJECT_ID}_bot:${GITLAB_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git" HEAD:$CI_DEFAULT_BRANCH
|
||||||
|
echo "代码已直接推送到主分支。"
|
||||||
|
else
|
||||||
|
echo "没有发现需要修复的更改或提交失败。"
|
||||||
|
fi
|
||||||
|
allow_failure: true
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 核心改进说明
|
||||||
|
- **接口重定向**:通过 `export ANTHROPIC_BASE_URL` 强制 CLI 访问网易内部代理接口。
|
||||||
|
- **非交互式处理**:在 CI 环境中,Claude Code 会尝试直接执行指令。建议在指令中明确要求它“创建新分支”而非直接推送到主分支,以保证代码安全。
|
||||||
|
- **自动回帖流**:
|
||||||
|
- 脚本捕获了 Claude Code 的输出并存入 `repair_summary.txt`。
|
||||||
|
- 使用 `curl` 调用 GitLab 的 `/notes` API。`$CI_API_V4_URL` 和 `$CI_PROJECT_ID` 是 GitLab CI 内置的变量,无需手动配置。
|
||||||
|
- **上下文读取**:为了让修复更准确,你可以在指令中加入 `Check CLAUDE.md for project guidelines`,确保 AI 遵循你在项目中定义的规范。
|
||||||
1
07-Other/AI/AI Agent/WY/MCP&Skill/易协作MCP & Skill.md
Normal file
1
07-Other/AI/AI Agent/WY/MCP&Skill/易协作MCP & Skill.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
http://redmineapi.nie.netease.com/
|
||||||
@@ -18,3 +18,163 @@ https://www.fab.com/listings/bb7df0df-a2e7-430f-a382-7c3b121bf767
|
|||||||
## 部署方式
|
## 部署方式
|
||||||
1. 该网站项目使用gitea托管,使用CI/CD进行生成与部署。
|
1. 该网站项目使用gitea托管,使用CI/CD进行生成与部署。
|
||||||
2. 部署到同IP Nodejs Docker容器中。
|
2. 部署到同IP Nodejs Docker容器中。
|
||||||
|
|
||||||
|
# 资产批量下载方式
|
||||||
|
将 https://github.com/legendary-gl/legendary 下载到./docs/legendary,之后学习里面的代码。这是一个第三方开源客户端,可以用来下载fab中的资产。
|
||||||
|
1. 将相关内容写到./docs/legendary,并在skill.md添加引用。
|
||||||
|
2. 检查这个项目是否存在安全问题。
|
||||||
|
3. 尝试运行legendary来下载我的资产库,我会告诉你账号密码。
|
||||||
|
4. 先下载10个按照Clouderve的结构将下载资产库上传到clouderve。
|
||||||
|
|
||||||
|
clouderve的目录结构:
|
||||||
|
- Fab
|
||||||
|
- UnrealEngine
|
||||||
|
- Plugins
|
||||||
|
- ProInstanceToolPlugin
|
||||||
|
- UE5.5
|
||||||
|
- UE5.6
|
||||||
|
- UE5.7
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
在使用 **Claude Code** 或类似的 AI 开发工具编写爬取脚本时,绕过 Cloudflare 的核心在于**“去自动化特征”**。Cloudflare 的防护(如 5 秒盾、Turnstile)不仅检查你的 IP,还会深入分析你的浏览器指纹、TLS 握手以及行为模式。
|
||||||
|
|
||||||
|
以下是针对 2026 年技术环境,在 Claude Code 中实现避开风控的实战策略:
|
||||||
|
|
||||||
|
### 1. 使用具备“隐身”能力的浏览器框架
|
||||||
|
|
||||||
|
传统的 Selenium 或普通的 Puppeteer 极易被识别。你应该指示 Claude Code 使用以下增强库:
|
||||||
|
|
||||||
|
- **Playwright + Stealth 插件**:目前最主流的选择。
|
||||||
|
|
||||||
|
- **SeleniumBase (UC Mode)**:这是目前绕过 Cloudflare 最强的工具之一,其 `undetected-chromedriver` 模式能有效隐藏自动化痕迹。
|
||||||
|
|
||||||
|
- **npx Claude Code 提示词示例**:
|
||||||
|
|
||||||
|
> "请使用 Python 的 SeleniumBase 库,并开启 UC Mode(Undetected Mode)编写爬取脚本,以绕过目标的 Cloudflare 检测。"
|
||||||
|
|
||||||
|
|
||||||
|
### 2. 模拟真实浏览器的指纹
|
||||||
|
|
||||||
|
Cloudflare 会检查你的 HTTP 请求头是否与底层的 TLS 握手特征匹配(例如,如果你自称是 Chrome 但 TLS 握手特征是 Python-requests,会被秒封)。
|
||||||
|
|
||||||
|
- **TLS 指纹模拟**:使用 `curl_cffi` 库,它可以模拟真实浏览器(如 Chrome 120+)的 TLS 握手特征。
|
||||||
|
|
||||||
|
- **请求头伪造**:确保 `User-Agent`、`Accept-Language`、`Sec-Ch-Ua` 等字段与真实浏览器完全一致。
|
||||||
|
|
||||||
|
|
||||||
|
### 3. IP 质量与地理位置
|
||||||
|
|
||||||
|
即使代码再完美,数据中心的 IP(如 AWS, Google Cloud)也是 Cloudflare 的重点监控对象。
|
||||||
|
|
||||||
|
- **使用住宅代理(Residential Proxies)**:这些 IP 看起来像普通家庭用户。
|
||||||
|
|
||||||
|
- **轮换代理**:每次请求或每隔几次操作更换一次 IP。
|
||||||
|
|
||||||
|
- **IPv6 优先**:2026 年很多防护系统对 IPv6 的限制相对宽松,且资源更丰富。
|
||||||
|
|
||||||
|
|
||||||
|
### 4. 绕过交互挑战 (CAPTCHA/Turnstile)
|
||||||
|
|
||||||
|
当 Cloudflare 弹出验证码时,纯代码通常无法处理。
|
||||||
|
|
||||||
|
- **验证码识别服务**:在代码中集成如 CapSolver 或 2Captcha 的 API。
|
||||||
|
|
||||||
|
- **Cloudflare Workers 代理**:有时通过部署在 Cloudflare 内部的 Workers 作为跳板(利用其内部信任机制)会有奇效,但这取决于目标的具体配置。
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 综合架构建议
|
||||||
|
|
||||||
|
|**维度**|**推荐技术栈**|**作用**|
|
||||||
|
|---|---|---|
|
||||||
|
|**底层驱动**|`SeleniumBase (UC Mode)` 或 `Playwright`|隐藏 WebDriver 特征|
|
||||||
|
|**网络请求**|`curl_cffi` (Python)|解决 TLS 指纹识别问题|
|
||||||
|
|**IP 资源**|动态住宅代理 (Residential Proxies)|绕过 IP 频率限制和黑名单|
|
||||||
|
|**行为模拟**|`B-Splines` 曲线模拟鼠标移动|模拟真人操作轨迹|
|
||||||
|
|
||||||
|
### Claude Code 实战操作小贴士:
|
||||||
|
|
||||||
|
在 Claude Code 终端中,你可以这样引导它:
|
||||||
|
|
||||||
|
1. **第一步:环境检查**。先让它写一个简单的脚本访问 `https://nowsecure.nl`(这是一个专门测试 Cloudflare 绕过程度的网站)并截图。
|
||||||
|
|
||||||
|
2. **第二步:迭代优化**。如果截图显示被拦截,要求它:“目前的脚本被拦截了,请尝试集成 `stealth` 插件并随机化延迟时间。”
|
||||||
|
|
||||||
|
3. **第三步:添加随机性**。
|
||||||
|
|
||||||
|
Python
|
||||||
|
|
||||||
|
```
|
||||||
|
import time
|
||||||
|
import random
|
||||||
|
# 绝不要使用固定的 sleep(5)
|
||||||
|
time.sleep(random.uniform(2.5, 7.8))
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
**重要提醒:** 爬取数据请务必遵守目标网站的 `robots.txt` 协议及当地法律法规。过度高频的爬取不仅会被封禁,还可能面临法律风险。
|
||||||
|
|
||||||
|
|
||||||
|
# Clouderve
|
||||||
|
我部署了一个Clouderve http://10.145.96.67:5212/ 用于提供artlib具体的资产下载。请学习 API以及相关文档,之后进行构建。
|
||||||
|
|
||||||
|
## 主要逻辑
|
||||||
|
1. 构建一个工具使用fab的账号密码登录并下载资产(暂缓开发,目前手工下载,并上传到clouderve上)
|
||||||
|
2. Artlib每过一年就对Clouderve进行扫描,之后将数据库中的项目与Clouderve项对应。确保用户可以下载到指定引擎版本的资产,
|
||||||
|
3. 用户进入资产详细页面后,如果该资产在Clouderve上存在,页面按钮就是 下载,点击后显示下拉菜单,显示可现在的版本,选择版本后进行下载;如果没有则显示访问Fab,点击后跳转到fab资产的原界面。
|
||||||
|
4.
|
||||||
|
## Clouderve目录说明
|
||||||
|
clouderve的目录结构:
|
||||||
|
- Fab
|
||||||
|
- UnrealEngine
|
||||||
|
- Plugins
|
||||||
|
- ProInstanceToolPlugin
|
||||||
|
- UE5.5
|
||||||
|
- UE5.6
|
||||||
|
- UE5.7
|
||||||
|
|
||||||
|
说明
|
||||||
|
1. UnrealEngine层级目录为资产种类,除此之外还可以是Unity、MetaHuman等。
|
||||||
|
2. Plugins为资产类型与Fab资产分类有关,除此之外还可以Decal、Material、Texture。
|
||||||
|
3. ProInstanceToolPlugin层级为具体的资产名文件夹,我这边上传了ProInstanceToolPlugin作为案例。
|
||||||
|
4. UE5.5层级目录为引擎版本,目前我只打算托管UE4.27、UE5.0~最新版本。
|
||||||
|
|
||||||
|
## API文档
|
||||||
|
- API
|
||||||
|
- https://docs.cloudreve.org/zh/api/overview
|
||||||
|
- [https://docs.cloudreve.org/zh/api/overview](https://cloudrevev4.apifox.cn/)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Artlib的意义&提效
|
||||||
|
1. 收集公司已经采购的资产包(Fab、Artstation等),方便团队以及公司其他美术同学快速找到资产包。使用RAG技术将Fab资产介绍信息整合成知识库,以进行更加精准的资产检索。
|
||||||
|
1. 解决Muse非常难用的问题。ShareStore资产不够多的问题。
|
||||||
|
2. 尽可能做到一次收集完所有资产,避免去Muse、ShareStore上来回搜索。
|
||||||
|
3. 多网站资产汇总,只需要一个网站就能检索其他所有资源站的信息。
|
||||||
|
4. Fab的资产信息具备高准确性,制作的知识库检索资产的准确性远超Muse、ShareStore。
|
||||||
|
2. 资产包资产原子化管理,做到检索单个资产的同时,只需下载所需资产,无需下载整个资产包。
|
||||||
|
1. 将下载的原子资产进行归类摆放,比如: /Plugins/ArtLib/Models/目录下,放置Foliage、Building、Prop等。
|
||||||
|
3. 给之后的AI开发游戏流程提供弹药,AI可以快速找到合适的模型与资产。
|
||||||
|
4. 维护团队封样库以及材质库信息,方便在工作时能及时察觉复用可能性,来进行复用。比如:李双在SVN上整理的各种分好类的资产库。
|
||||||
|
5. 给林海开发的插件提供资产包资源 ,让用户可以直接在UE找到合适资产并直接使用。
|
||||||
|
6. 给海量模型进行分类,为公司未来的生成模型AI提供训练数据。
|
||||||
|
7. 提供资产点赞窗口,之后学习Muse每天采购点赞最多的资产,以此吸引用户来该平台抢占Muse空间。
|
||||||
|
|
||||||
|
# 开发计划
|
||||||
|
1. Web开发
|
||||||
|
1. 修复一些交互Bug。
|
||||||
|
2. 资产点赞功能,机器人信息推送。
|
||||||
|
3. Artstation等网站数据接入。
|
||||||
|
4. 在服务端部署UE Editor,每个资产(模型、贴图……)进行视觉判断,打上合理标签。
|
||||||
|
1. AI模型部署。
|
||||||
|
2. UE Editor 群集方案实现。
|
||||||
|
5. 借到财务账号,并使用爬虫爬取Fab资产。
|
||||||
|
6. 服务器扩容,申请2个服务器用于存储数据,并且部署对象存储服务,保证数据不会嗝屁。
|
||||||
|
2. UE插件开发
|
||||||
|
1. 实现网页点击下载就能直接安装到UE目录。
|
||||||
|
2. 实现资产包资产批量修改引用,实现资产整理功能。
|
||||||
|
3. 林海Runtime Load资产插件接入Artlib服务。
|
||||||
|
4. Plugin云端加载方案探索(通过网盘系统构建虚拟目录,再通过Webdav接入UE,可能会不稳定)
|
||||||
|
3. 开发类似普罗米修斯的资产库客户端(WebApp)
|
||||||
151
07-Other/AI/AI Agent/WY/Website/Netease AITA AssetMaker.md
Normal file
151
07-Other/AI/AI Agent/WY/Website/Netease AITA AssetMaker.md
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
# 提示词
|
||||||
|
请你说中文,并使用中文编写文档。
|
||||||
|
|
||||||
|
我需要你发挥卓越的前端开发能力,对我指定的网站进行全方位的“像素级复刻”。这个复刻不仅包括静态页面的排版、配色和字体,还需要涵盖所有的交互细节、动画效果和响应式适配。我们将使用 **Vue 3** 框架和 **Vite** 构建工具。
|
||||||
|
|
||||||
|
我想制作一个AI 提示词 => 2D原画 => 参考图 => 3D模型生成的WorkFlow网站,功能与风格样式进行像素级复刻:
|
||||||
|
- https://app.assethub.io/
|
||||||
|
- https://app.assethub.io/inventory
|
||||||
|
- https://app.assethub.io/workflow
|
||||||
|
- https://app.assethub.io/texturing
|
||||||
|
- https://app.assethub.io/image
|
||||||
|
- https://app.assethub.io/settings/team/4430d872-b40f-4374-bfd0-936205e155aa
|
||||||
|
- 视频
|
||||||
|
- https://www.youtube.com/watch?v=h8fKTZDQ90s
|
||||||
|
- https://www.youtube.com/watch?v=i95-KHATaEY
|
||||||
|
## 迭代方式
|
||||||
|
1. 你可以使用浏览器打开这个网站,我会帮你登录。
|
||||||
|
2. 依次打开左边侧边按钮,读取各个页面的HTML结构、CSS信息。将截图存储在Screenshots,使用中文名。视频在github上寻找合适工具给我下载下来作为参考。
|
||||||
|
3. 下载网站都用的图片的,并在复刻网站时用上。
|
||||||
|
4. 搭建完前后端基础代码之后,先进行前端框架与效果迭代,之后反复对照截图、原始站点进行迭代,保证网站与原站点效果完全一致。
|
||||||
|
5. 使用ObsidianCli 维护docs下的文档。
|
||||||
|
|
||||||
|
## 主要功能
|
||||||
|
1. 该网站的主要功能是通过一套完整流程来生成3D模型,大致流程如下:
|
||||||
|
1. 用户输入的参考图与提示来生成模型原画。
|
||||||
|
2. 通过原画生成三视图。
|
||||||
|
3. 使用三视图来生成3D模型。
|
||||||
|
4. 3DMesh重拓扑。
|
||||||
|
5. UV Unwrap
|
||||||
|
6. auto texture
|
||||||
|
2. 具备3D渲染功能,请根据参考原站点使用方案。
|
||||||
|
3. 具备节点工作流,请使用合适的节点框架,可以考虑使用 https://github.com/comfy-org/ComfyUI 中的节点渲染与流程控制逻辑。
|
||||||
|
1. 节点工作在线共同预览与编辑功能,实现协同工作。
|
||||||
|
4. 简单的账户登录机制, 并且提供OpenID登录方式。
|
||||||
|
## 技术选型
|
||||||
|
我打算使用:
|
||||||
|
前端技术:TypeScript、Vue 3、Vite;前端组件请使用Element Plus,使用pnpm install element-plus 进行安装。
|
||||||
|
后端技术:nodejs、Fastify、Mongoose、fastify-jwt
|
||||||
|
数据库:MongoDB、MySQL。
|
||||||
|
工具函数:Axios、VueUse、pnpm
|
||||||
|
文档管理:Obsidian Cli
|
||||||
|
|
||||||
|
## 文档目录结构
|
||||||
|
- docs
|
||||||
|
- Netease_AITA_AssetMaker.md:项目技术、设计细节入口文档,方便Agent来寻找
|
||||||
|
- Screenshots:存放截图。
|
||||||
|
- Videos:视频参考。
|
||||||
|
- WebsiteSource:存放HTML、CSS相关信息。
|
||||||
|
- Web:前端相关文档。
|
||||||
|
- Server:后端相关文档。
|
||||||
|
|
||||||
|
## 复刻流程提示词
|
||||||
|
### 0. 准备阶段:安装必要 Skills (工具)
|
||||||
|
|
||||||
|
为了精准地感知和复刻目标网站,请优先完成以下工具的安装和配置。如果尚未安装,请在本地环境中执行相关命令:
|
||||||
|
|
||||||
|
1. **视觉感知工具 (视觉分析核心)**
|
||||||
|
* **Skill (依赖)**: `playwright` (用于 headless 浏览器截图、DOM 分析)
|
||||||
|
* **安装命令**: `npm install playwright && npx playwright install`
|
||||||
|
|
||||||
|
2. **资源处理工具 (资产抓取核心)**
|
||||||
|
* **Skill (依赖)**: `axios`, `mime-types` (用于下载图片、字体)
|
||||||
|
* **安装命令**: `npm install axios mime-types`
|
||||||
|
|
||||||
|
3. **开发工具 (Vue 3 + Vite)**
|
||||||
|
* **Skill (依赖)**: `@vitejs/plugin-vue` (如果在 Vite 项目中未配置)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 1. 执行阶段:网站复刻工作流
|
||||||
|
|
||||||
|
请按照以下详细步骤执行任务。每完成一步,请向我反馈进度。
|
||||||
|
|
||||||
|
**目标网站 URL: [在此处替换为您要复刻的网站 URL,例如:https://example.com]**
|
||||||
|
|
||||||
|
#### 第一步:全面观察与分析 (Observation)
|
||||||
|
1. **高清截图**: 使用 Playwright 对目标网站进行全长(Full Page)高清截图。同时,抓取以下状态的截图:
|
||||||
|
* 特定组件(如 Button, Nav Item)的 `Hover` 状态。
|
||||||
|
* 移动端(如 iPhone 12 Pro)的截图。
|
||||||
|
2. **配色提取**: 分析截图,生成一份完整的 JSON 格式色板(Palette),包括主色、辅助色、文本色、背景色、边框色以及渐变色参数。
|
||||||
|
3. **字体分析**: 确定目标网站使用的主要 WebFonts、字体大小(Font Size)、行高(Line Height)和字重(Font Weight)。
|
||||||
|
4. **结构分析**: 使用 Playwright 导出核心 DOM 树的计算后样式(Computed Styles),特别是关键组件的 `padding`, `margin`, `display` (Flex/Grid) 属性和 `border-radius`。
|
||||||
|
|
||||||
|
#### 第二步:静态资源抓取 (Asset Collection)
|
||||||
|
1. **文件下载**: 自动下载目标网站的所有:
|
||||||
|
* SVG 图标
|
||||||
|
* 图片资源(PNG/JPEG/WEBP)
|
||||||
|
* 字体文件(WOFF2/WOFF)
|
||||||
|
2. **目录整理**: 将下载的资产按照以下结构有序存入您的项目目录中(例如:`src/assets/images`, `src/assets/icons`, `src/assets/fonts`)。
|
||||||
|
|
||||||
|
#### 第三步:代码生成 (Vue 3 Component Generation)
|
||||||
|
1. **项目脚手架**: 如果尚未在当前目录创建 Vite + Vue 3 项目,请创建一个:`npm init vite@latest . -- --template vue`。
|
||||||
|
2. **组件拆解**: 将目标网页拆解为可复用的 Vue 组件(例如:`Header.vue`, `HeroSection.vue`, `Card.vue`, `Footer.vue`)。
|
||||||
|
3. **样式复刻 (全都要)**:
|
||||||
|
* 使用全局样式文件(如 `src/style.css`)定义色板变量和字体定义。
|
||||||
|
* 在 Vue 组件中,使用 `<style scoped>` 编写 **完全一致** 的 CSS 样式。必须精确还原计算后的数值,不要估算。
|
||||||
|
* 使用原生 CSS Flexbox 和 Grid 进行布局还原。
|
||||||
|
|
||||||
|
#### 第四步:动画与交互复刻 (Interaction & Animation)
|
||||||
|
1. **动态特效**: 分析目标网站的关键动画(例如:页面滚动时的元素渐现、Header 缩放、Hover 时的微动效)。
|
||||||
|
* 使用 CSS Transitions/Animations 或 Vue 3 的 `<Transition>` 组件精准还原。
|
||||||
|
* 尽可能复刻其 `cubic-bezier` 缓动曲线和持续时间(Duration)。
|
||||||
|
2. **交互状态**: 确保所有按钮、链接在 `Hover` 和 `Active` 状态下的像素细节与原站一致。
|
||||||
|
|
||||||
|
#### 第五步:自我校对 (Self-Correction)
|
||||||
|
1. **组件预览**: 完成关键组件后,启动 Vite 开发服务器(`npm run dev`)。
|
||||||
|
2. **视觉比对**: 将您生成的页面截图与原站截图进行叠加比对,特别注意边距和字体的偏差。
|
||||||
|
3. **代码清理**: 删除不必要的脚手架代码(如 Vite 默认的 HelloWorld 组件)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. 最终输出物
|
||||||
|
|
||||||
|
1. 一个完整的、结构清晰的 Vue 3 + Vite 项目代码库。
|
||||||
|
2. 在当前目录中可以成功运行 (`npm run dev`)。
|
||||||
|
3. 生成的页面在视觉和交互上与目标网站达到 95% 以上的像素级匹配度。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
现在,请开始按照工作流执行。如果有任何步骤遇到困难,或者需要我提供更具体的指令,请立即告知。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 操作说明
|
||||||
|
1. 在首页的Drop your concept art here,可以使用拖拽或点击的方式,上传模型的参考图。此时该区域会显示当前上传的图片。
|
||||||
|
2. 点击下面的Clear清除图片;点击Generate 3D开始3D模型生成流程。按钮会显示成Generating,之后切换到Workflow页面。./docs/screenshots/workflow/Workflow_使用单张图片生成参考图与三视图_1.png
|
||||||
|
3. Workflow界面主要由白板与节点系统构成。
|
||||||
|
1. SourceImage节点
|
||||||
|
1. Inputs为输入图片
|
||||||
|
2. auto pipeline为是否进行自动流程,即 输入图片=> 参考图=> 三视图 => 3D模型 流程。
|
||||||
|
3. AllowedModel为流程使用的模型设置。
|
||||||
|
2. Pose节点
|
||||||
|
1. 用于控制输出参考图的Pose。
|
||||||
|
2. 节点Transform to Pose即可进行图片生成。
|
||||||
|
|
||||||
|
|
||||||
|
任务:
|
||||||
|
1. 你帮我实现以上操作逻辑。
|
||||||
|
2. 实现Workflow页面的中的白板与节点功能,参考原始页面。
|
||||||
|
3. 在后端实现AI服务接口。
|
||||||
|
1. 可以接入Workflow中的AI服务(查询各个服务商的文档)
|
||||||
|
2. 可以通过Netease AIGW接入AI服务。
|
||||||
|
1. 参考以下网站,网站需要认证,打开浏览器,我来帮你登录。
|
||||||
|
2. https://aigw.doc.nie.netease.com/21_%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97/10_%E5%9F%BA%E6%9C%AC%E8%AF%B4%E6%98%8E/1_%E5%9F%BA%E6%9C%AC%E8%AF%B4%E6%98%8E.html
|
||||||
|
3. https://aigw.doc.nie.netease.com/21_%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97/11_%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81/2_%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81.html
|
||||||
|
4. https://aigw.doc.nie.netease.com/21_%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97/14_%E8%AE%A4%E8%AF%81%E4%B8%8E%E7%AE%A1%E7%90%86/%E8%AE%A4%E8%AF%81%E4%B8%8E%E7%AE%A1%E7%90%86.html
|
||||||
|
5. https://aigw.doc.nie.netease.com/25_AIGW%E5%8A%9F%E8%83%BD%E6%8C%87%E5%8D%97/10_API%E6%8E%A5%E5%8F%A3.html
|
||||||
|
6. https://aigw.doc.nie.netease.com/50_FAQ/2_API%E6%8A%A5%E9%94%99.html
|
||||||
|
3. 可以通过 https://openai.nie.netease.com 的OpenAI、Claude样式的接口来接入服务(需要用户提供AUTH_TOKEN)
|
||||||
|
4. WorkFlow中存放一些Workflows,里面有当前工作流信息,你可以参考 https://app.assethub.io/workflow/10757
|
||||||
|
1. 生成完模型后,点击模型节点的View 3D Mesh就切换页面,在页面中载入3D模型,且模型带有贴图,使用PBR光照模型进行渲染。
|
||||||
150
07-Other/AI/AI Agent/WY/Website/Netease AITA AuthBridge.md
Normal file
150
07-Other/AI/AI Agent/WY/Website/Netease AITA AuthBridge.md
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
# 提示词
|
||||||
|
请你说中文,并使用中文编写文档。
|
||||||
|
我打算使用使用Nodejs构建一个MCP SSE服务器,帮助OpenClaw以及其他Agent进行OIDC认证。并且编写对应的Skill,协助Agent使用该MCP。MCP 服务器充当了 **OIDC Client** 和 **凭证管理器**。
|
||||||
|
|
||||||
|
OIDC相关文档在./docs/Netease_OIDC.md,里面的链接可能需要认证,你可以打开浏览器等待我来帮你认证。
|
||||||
|
#### 核心流程步骤:
|
||||||
|
1. **触发**:Agent 在执行任务时发现需要访问 NetEase 内部接口。
|
||||||
|
2. **调用 MCP**:Agent 调用 MCP 工具 `get_auth_url`。
|
||||||
|
3. **生成状态**:MCP 生成一个随机 `state` 存入 MongoDB,并构建 OIDC 授权链接。
|
||||||
|
4. **交互**:
|
||||||
|
- **方案 A (手动)**:Agent 将链接发给用户,用户点击。
|
||||||
|
- **方案 B (自动化)**:使用类似 `browser-use` 的 Skill,由 Agent 直接控制浏览器打开该链接,并等待用户在弹出的窗口中完成 SSO 登录。
|
||||||
|
5. **回调**:用户登录成功后,NetEase OIDC 重定向到 MCP 的 Fastify 接口。
|
||||||
|
6. **换取 Token**:MCP 后端用 `code` 换取 JWT,并将其与用户信息绑定存入 MongoDB。
|
||||||
|
7. **通知/轮询**:Agent 通过 MCP 轮询或 SSE 得到“认证成功”状态,随后获取 JWT 进行业务操作。
|
||||||
|
|
||||||
|
---
|
||||||
|
### 2. 技术实现细节
|
||||||
|
#### 2.1 数据库设计 (Mongoose)
|
||||||
|
主要用于维护认证状态和存储持久化的 Token。
|
||||||
|
JavaScript
|
||||||
|
```
|
||||||
|
// models/AuthState.js
|
||||||
|
const authStateSchema = new mongoose.Schema({
|
||||||
|
state: { type: String, required: true, unique: true }, // 用于防止CSRF和匹配回调
|
||||||
|
userId: { type: String, required: true }, // 对应 OpenClaw 的用户 ID
|
||||||
|
status: { type: String, enum: ['pending', 'completed'], default: 'pending' },
|
||||||
|
accessToken: String,
|
||||||
|
idToken: String,
|
||||||
|
refreshToken: String,
|
||||||
|
expiresAt: Date,
|
||||||
|
createdAt: { type: Date, expires: '10m', default: Date.now } // 10分钟后自动过期
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2.2 MCP 服务器核心逻辑 (Fastify + SSE)
|
||||||
|
MCP 服务器需要同时支持 **SSE (与 Agent 通信)** 和 **HTTP (处理 OIDC 回调)**。
|
||||||
|
- **MCP Tool: `get_netease_auth_url`** 输入:`userId` 输出:`authUrl`, `state` 逻辑:生成 OIDC URL,将 `state` 记录到 MongoDB。
|
||||||
|
- **Fastify Route: `/api/callback`** 逻辑:
|
||||||
|
1. 接收 `code` 和 `state`。
|
||||||
|
2. 校验 `state` 是否在 MongoDB 中存在。
|
||||||
|
3. 向 NetEase OIDC 换取 Token。
|
||||||
|
4. 更新 MongoDB 中的状态为 `completed`。
|
||||||
|
5. 通过 SSE 发送一个 `auth_success` 事件。
|
||||||
|
#### 2.3 改进思路:自动化认证 (Browser-use 集成)
|
||||||
|
当 OpenClaw(服务器端)与用户(本地客户端)不在同一台电脑时,直接调用系统命令(如 `open` 或 `start`)只会打开服务器端的浏览器,用户完全看不到。
|
||||||
|
既然你提到用户开启了 **Chrome 远程调试模式 (`--remote-debugging-port=9222`)**,我们可以利用 **CDP (Chrome DevTools Protocol)** 协议来实现跨机器的“远程操控”。
|
||||||
|
以下是针对你的 Node.js MCP 服务器的技术实现方案:
|
||||||
|
|
||||||
|
---
|
||||||
|
##### 1. 核心架构:远程 CDP 连接
|
||||||
|
要让运行在服务器上的 MCP 能够操控用户本地的 Chrome,流程如下:
|
||||||
|
###### 挑战:网络连通性
|
||||||
|
通常用户的电脑处于内网(NAT 之后),服务器无法直接访问用户的 `9222` 端口。
|
||||||
|
- **方案 A (内网直连)**:如果两者在同一公司内网且 IP 互通,MCP 直接访问 `http://<User_IP>:9222`。
|
||||||
|
- **方案 B (内网穿透)**:使用 `frp` 或 `ssh -R`。用户本地运行一个穿透工具,将本地的 `9222` 映射到服务器可见的某个端口(如服务器的 `19222`)。
|
||||||
|
|
||||||
|
---
|
||||||
|
##### 2. 技术实现:MCP 服务器代码 (Node.js)
|
||||||
|
在你的 Node.js 环境中,推荐使用 **Playwright**,因为它原生支持 `connectOverCDP`,非常适合这种场景。
|
||||||
|
|
||||||
|
###### 安装依赖
|
||||||
|
```bash
|
||||||
|
npm install playwright
|
||||||
|
```
|
||||||
|
|
||||||
|
###### MCP 工具逻辑示例
|
||||||
|
在 MCP 中编写一个 `open_remote_auth_page` 的工具:
|
||||||
|
```ts
|
||||||
|
import { chromium } from 'playwright';
|
||||||
|
|
||||||
|
async function openRemoteBrowser(userIp, authUrl) {
|
||||||
|
// 1. 连接到用户本地开启了调试模式的浏览器
|
||||||
|
// 假设通过穿透或直连,地址为 userIp:9222
|
||||||
|
const browser = await chromium.connectOverCDP(`http://${userIp}:9222`);
|
||||||
|
|
||||||
|
// 2. 获取当前的上下文(通常是用户正开着的浏览器窗口)
|
||||||
|
const defaultContext = browser.contexts()[0];
|
||||||
|
const page = await defaultContext.newPage();
|
||||||
|
|
||||||
|
// 3. 导航到 NetEase OIDC 认证页面
|
||||||
|
await page.goto(authUrl);
|
||||||
|
|
||||||
|
// 4. (可选) 监听 URL 跳转,自动化部分流程
|
||||||
|
// 比如检测到跳转回 callback URL 时,自动告知 Agent
|
||||||
|
page.on('framenavigated', frame => {
|
||||||
|
const url = frame.url();
|
||||||
|
if (url.includes('your-callback-url')) {
|
||||||
|
console.log('用户已完成认证!');
|
||||||
|
// 这里可以触发 MongoDB 状态更新或 SSE 通知
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 注意:不要执行 browser.close(),否则会关掉用户的整个 Chrome
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
##### 3. 针对用户的操作指南 (Skill 配合)
|
||||||
|
为了让这个 Skill 成功运行,Agent 需要引导用户做两件事:
|
||||||
|
1. **启动 Chrome 调试模式**: 用户需要在本地终端执行:
|
||||||
|
```bash
|
||||||
|
# macOS
|
||||||
|
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
|
||||||
|
```
|
||||||
|
2. **提供 IP/端口信息**: Agent 可以询问用户:“请提供你本地机器的 IP 地址(或内网穿透后的地址)”。
|
||||||
|
|
||||||
|
---
|
||||||
|
##### 4. 更优雅的改进方案:WebRTC 或轻量级“领航员”
|
||||||
|
如果让用户手动输入 IP 比较繁琐,你可以编写一个 **“Claw-Bridge”**(一个几十行代码的本地 Node.js 脚本或 Go 小程序):
|
||||||
|
- **工作原理**:
|
||||||
|
1. 用户在本地运行 `Claw-Bridge`。
|
||||||
|
2. `Claw-Bridge` 启动后通过 WebSocket 连接到你的 Fastify 服务器(建立长连接)。
|
||||||
|
3. 当 MCP 需要打开网页时,向该 WebSocket 发送指令。
|
||||||
|
4. `Claw-Bridge` 在用户本地执行 `open <URL>`。
|
||||||
|
|
||||||
|
**优点**:
|
||||||
|
- **无需开启远程调试端口**(安全性更高,不会暴露浏览器的控制权给整个网络)。
|
||||||
|
- **无需固定 IP**(只要有网络,长连接就能通)。
|
||||||
|
- **权限最小化**:本地程序只负责“打开链接”,不涉及控制浏览器内部。
|
||||||
|
##### 5. 总结建议
|
||||||
|
- 如果你追求**深度自动化**(比如想让 Agent 帮用户自动填表):使用 **Playwright + CDP**。
|
||||||
|
- 如果你只追求**方便用户点击**(仅仅是弹出一个认证页):编写一个轻量级的 **本地桥接脚本** 配合你的 Fastify 服务器,通过 WebSocket 转发“打开页面”的请求。
|
||||||
|
---
|
||||||
|
### 3. MCP Skill (工具定义) 示例
|
||||||
|
在 MCP 服务器中定义的工具描述:
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"name": "authenticate_netease",
|
||||||
|
"description": "当需要访问网易内部服务但未授权时使用。该工具会返回一个认证链接,必须引导用户完成认证。",
|
||||||
|
"inputSchema": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"user_id": { "type": "string", "description": "当前用户的唯一标识" }
|
||||||
|
},
|
||||||
|
"required": ["user_id"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
### 4. 安全建议
|
||||||
|
1. **PKCE (Proof Key for Code Exchange)**:既然是 Node.js 后端,务必开启 PKCE。在生成授权链接时生成 `code_verifier` 并存储在 MongoDB,回调时带上。
|
||||||
|
2. **JWT 验证**:使用 `fastify-jwt` 验证从 OIDC 拿到的 `id_token` 的签名,确保其确实来自网易的认证服务。
|
||||||
|
3. **State 绑定**:确保回调时的 `state` 只能被使用一次,防止重放攻击。
|
||||||
|
4. **环境隔离**:建议在 MongoDB 中区分开发环境和生产环境的 `client_id`。
|
||||||
|
## 技术选型
|
||||||
|
我打算使用:
|
||||||
|
后端技术:nodejs、Fastify、Mongoose、fastify-jwt
|
||||||
|
数据库:MongoDB
|
||||||
44
07-Other/AI/AI Agent/WY/主Agent与从Agent.canvas
Normal file
44
07-Other/AI/AI Agent/WY/主Agent与从Agent.canvas
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"nodes":[
|
||||||
|
{"id":"6cda312f1671af71","type":"group","x":40,"y":-100,"width":640,"height":480,"label":"艺设主Agent主机"},
|
||||||
|
{"id":"dc77b937f7c566ed","type":"group","x":200,"y":-60,"width":460,"height":420,"label":"主机内从属该项目的其他独立Agent"},
|
||||||
|
{"id":"e0be32c1a73875dc","type":"text","text":"视频","x":420,"y":90,"width":100,"height":60},
|
||||||
|
{"id":"2cebc34d3a7c245c","type":"text","text":"2D原画","x":420,"y":180,"width":100,"height":60},
|
||||||
|
{"id":"7882c46e998f881a","type":"text","text":"项目组主Agent","x":-183,"y":120,"width":140,"height":60},
|
||||||
|
{"id":"ea7c8aa0bff2fa90","type":"text","text":"GameEngine","x":-183,"y":480,"width":140,"height":60},
|
||||||
|
{"id":"18373fd6585e719c","type":"text","text":"N个程序Agent实例","x":-577,"y":480,"width":195,"height":60},
|
||||||
|
{"id":"b34e85d1dd50f9c8","type":"text","text":"GUI","x":420,"y":0,"width":100,"height":60},
|
||||||
|
{"id":"a9b698ceb5dd6a73","type":"text","text":"程序员","x":-520,"y":360,"width":82,"height":60},
|
||||||
|
{"id":"d5eee5e43fd23a22","type":"text","text":"AI PM","x":-522,"y":250,"width":85,"height":60},
|
||||||
|
{"id":"5be324303b104387","type":"text","text":"结构化文档","x":-539,"y":120,"width":120,"height":60},
|
||||||
|
{"id":"28097b51d705a955","type":"text","text":"策划","x":-340,"y":-30,"width":62,"height":60},
|
||||||
|
{"id":"8494558c61aa8d2a","type":"text","text":"3D模型","x":420,"y":280,"width":100,"height":60},
|
||||||
|
{"id":"833c175da3d2a493","type":"text","text":"艺设PM","x":220,"y":120,"width":100,"height":60},
|
||||||
|
{"id":"ac74ea6efda6eef5","type":"text","text":"艺设主Agent","x":60,"y":120,"width":120,"height":60},
|
||||||
|
{"id":"981296901b8023dc","type":"text","text":"TA","x":600,"y":280,"width":50,"height":60}
|
||||||
|
],
|
||||||
|
"edges":[
|
||||||
|
{"id":"0d9b7a20bf3155e8","fromNode":"7882c46e998f881a","fromSide":"right","toNode":"ac74ea6efda6eef5","toSide":"left"},
|
||||||
|
{"id":"075e967cbfa97ab2","fromNode":"ac74ea6efda6eef5","fromSide":"left","toNode":"7882c46e998f881a","toSide":"right"},
|
||||||
|
{"id":"2161b83cbe328d2c","fromNode":"ac74ea6efda6eef5","fromSide":"right","toNode":"833c175da3d2a493","toSide":"left"},
|
||||||
|
{"id":"228740714a1239b1","fromNode":"2cebc34d3a7c245c","fromSide":"bottom","toNode":"8494558c61aa8d2a","toSide":"top"},
|
||||||
|
{"id":"3b2a3d2f0759a20f","fromNode":"833c175da3d2a493","fromSide":"right","toNode":"b34e85d1dd50f9c8","toSide":"left"},
|
||||||
|
{"id":"c4f1151359441b76","fromNode":"833c175da3d2a493","fromSide":"right","toNode":"e0be32c1a73875dc","toSide":"left"},
|
||||||
|
{"id":"e4f544cdbdf54bf0","fromNode":"833c175da3d2a493","fromSide":"right","toNode":"2cebc34d3a7c245c","toSide":"left"},
|
||||||
|
{"id":"a0ddf315a9a36a4b","fromNode":"833c175da3d2a493","fromSide":"right","toNode":"8494558c61aa8d2a","toSide":"left"},
|
||||||
|
{"id":"1af4431a8eece637","fromNode":"8494558c61aa8d2a","fromSide":"right","toNode":"981296901b8023dc","toSide":"left"},
|
||||||
|
{"id":"a923f220037feb30","fromNode":"e0be32c1a73875dc","fromSide":"right","toNode":"981296901b8023dc","toSide":"left"},
|
||||||
|
{"id":"98dd6721df277382","fromNode":"b34e85d1dd50f9c8","fromSide":"right","toNode":"981296901b8023dc","toSide":"left"},
|
||||||
|
{"id":"de59526c9ed59eaa","fromNode":"981296901b8023dc","fromSide":"bottom","toNode":"ea7c8aa0bff2fa90","toSide":"top"},
|
||||||
|
{"id":"d5b792fcbc7396e8","fromNode":"5be324303b104387","fromSide":"right","toNode":"7882c46e998f881a","toSide":"top","label":"精炼成策划Skills"},
|
||||||
|
{"id":"a262dcd90f1680bf","fromNode":"7882c46e998f881a","fromSide":"bottom","toNode":"ea7c8aa0bff2fa90","toSide":"top"},
|
||||||
|
{"id":"cabfd5a821aa5c8a","fromNode":"18373fd6585e719c","fromSide":"right","toNode":"ea7c8aa0bff2fa90","toSide":"left"},
|
||||||
|
{"id":"f4873708803fc309","fromNode":"5be324303b104387","fromSide":"bottom","toNode":"d5eee5e43fd23a22","toSide":"top"},
|
||||||
|
{"id":"3ea49ab37b7060a6","fromNode":"d5eee5e43fd23a22","fromSide":"bottom","toNode":"a9b698ceb5dd6a73","toSide":"top"},
|
||||||
|
{"id":"0ec96114f463b257","fromNode":"a9b698ceb5dd6a73","fromSide":"bottom","toNode":"18373fd6585e719c","toSide":"top","label":"APCX"},
|
||||||
|
{"id":"1f8399d6f211376b","fromNode":"a9b698ceb5dd6a73","fromSide":"right","toNode":"ea7c8aa0bff2fa90","toSide":"left"},
|
||||||
|
{"id":"6e8fa0ebbc7f7930","fromNode":"28097b51d705a955","fromSide":"left","toNode":"5be324303b104387","toSide":"top","label":"BrainMaker"},
|
||||||
|
{"id":"3178e9ba6ba35eb9","fromNode":"28097b51d705a955","fromSide":"right","toNode":"7882c46e998f881a","toSide":"top"},
|
||||||
|
{"id":"2b2ba8c27a037d28","fromNode":"7882c46e998f881a","fromSide":"left","toNode":"5be324303b104387","toSide":"right"}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -70,3 +70,51 @@ POPO失忆:
|
|||||||
1. Skill找不到。
|
1. Skill找不到。
|
||||||
2. POPO 没有识别 ,Channel找不到。机器人不知道 popo就是 moltbot-popo。
|
2. POPO 没有识别 ,Channel找不到。机器人不知道 popo就是 moltbot-popo。
|
||||||
3. 机器人只认识 loujiajie@corp.netease.com 不认识楼嘉杰
|
3. 机器人只认识 loujiajie@corp.netease.com 不认识楼嘉杰
|
||||||
|
|
||||||
|
视频学习:
|
||||||
|
1. [解剖小龍蝦 — 以 OpenClaw 為例介紹 AI Agent 的運作原理 - YouTube](https://www.youtube.com/watch?v=2rcJdFuNbZQ)
|
||||||
|
2. https://space.bilibili.com/28321599?spm_id_from=333.337.search-card.all.click
|
||||||
|
1. https://www.bilibili.com/video/BV1VzfoBFE5w/?spm_id_from=333.1387.homepage.video_card.click&vd_source=a5a1507212662f8883c096200c37b6bd
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
1. [x] 程世纪 Skill 接入
|
||||||
|
2. [x] Freddy OpenClaw自拍Skill加入。
|
||||||
|
3. [x] 程世纪Skill 添加发送文件到POPO的命令。
|
||||||
|
4. [x] 思考级别修改 /think
|
||||||
|
5. [ ] 远程控制浏览器的能力
|
||||||
|
6. [ ] 记忆优化技能(TODO:需要加入确认内容):https://github.com/win4r/openclaw-workspace
|
||||||
|
7. [ ] 三层记忆?
|
||||||
|
1. [ ] 【openclaw分层索引版一键安装包!win系统mac系统节省模型80%token消耗多轮对话三层时间记忆索引clawhub技能演示AI借鉴openviking】 https://www.bilibili.com/video/BV1XjPFzjEg3/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
|
||||||
|
2. [ ] 【拒绝暴力压缩!分层索引版 OpenClaw 10轮省48% → 50轮省76% 越长越省,关键决策永不丢失(已开源)】 https://www.bilibili.com/video/BV1hcAQzsES9/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
|
||||||
|
3. [ ] https://www.bilibili.com/video/BV1JrNKz7EUv/?spm_id_from=333.337.search-card.all.click&vd_source=d47c0bb42f9c72fd7d74562185cee290
|
||||||
|
8. [ ] LanceDB与插件:
|
||||||
|
9. [ ] OpenClaw 卡死问题解决。编写守护进程软件
|
||||||
|
10. [ ] OpenClaw下载文件管理。
|
||||||
|
11. [ ] OpenClaw Docker部署。
|
||||||
|
12. [x] Grp账号申请
|
||||||
|
13. [x] ~~grp 账号与龙虾关联问题解决~~。 https://open.popo.netease.com/docs/api/robot/msg-send
|
||||||
|
14. [ ] Skill
|
||||||
|
1. [ ] AI PM
|
||||||
|
1. [x] 多用户同时使用(stdIO)
|
||||||
|
2. [ ] Cookie获取优化。
|
||||||
|
3. [ ] HttpStream改造。
|
||||||
|
4. [ ] 自动化拆单 易协作上的
|
||||||
|
2. [ ] POPO 云文档 修改。
|
||||||
|
15. [ ] MutiAgent
|
||||||
|
1. [x] POPO 多Agent问题查找。
|
||||||
|
2. [x] 多Agent A2A协议。
|
||||||
|
16. [ ] OpenClaw 体验优化
|
||||||
|
1. [x] Subagent规则
|
||||||
|
17. [x] OpenClaw ACP 控制其他智能体。 https://www.bilibili.com/video/BV1X4wAzEEMe/?spm_id_from=333.1387.upload.video_card.click&vd_source=d47c0bb42f9c72fd7d74562185cee290
|
||||||
|
18. [ ] OpenClaw控制 其他OpenClaw。
|
||||||
|
|
||||||
|
- 视频
|
||||||
|
- [ ] 【🚀OpenClaw重磅更新!浏览器自动化终极方案:龙虾自动接管Chrome浏览器,无需重复登录账号,工作流打包成可复用Skill!【龙虾教程】】 https://www.bilibili.com/video/BV1yVwXzGEbL/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
|
||||||
|
- [ ] 【🚀OpenClaw高级使用经验分享!2026年最强生产力!五分钟打造多Agent协作编程开发团队!模型容灾机制深度配置+云端Gateway操控本地macOS!】 https://www.bilibili.com/video/BV1pScgzXEB7/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
|
||||||
|
- [x] ***【🚀OpenClaw高级玩法之工作区优化+三大Agent深度解析!龙虾保姆级教程让你学会Persistent Agent、Sub-Agent和ACP Agent】*** https://www.bilibili.com/video/BV1X4wAzEEMe/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
|
||||||
|
- [ ] 【🚀OpenClaw高级进阶技巧分享!模型精选策略+记忆系统优化经验+深度搜索集成+Gateway崩溃自动修复!Claude Code自动读日志修Bug重启验证】 https://www.bilibili.com/video/BV1pefHB1ENJ/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
|
||||||
|
- [ ] 【🚀【OpenClaw教程】OpenClaw高级玩法:记忆蒸馏+Skill固化+模型降级!Token成本直降40%,效率倍增!便宜模型也能完成复杂任务!龙虾教程】 https://www.bilibili.com/video/BV1WbPTzHEaa/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
|
||||||
|
- [ ] 【🚀OpenClaw最强大脑:GPT-5.4深度实测!Agent能力强到离谱!自主完成多轮长链路复杂任务!实测可全自动为其他设备部署小龙虾!OpenClaw教程】 https://www.bilibili.com/video/BV1PdPHzFEFJ/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
|
||||||
|
- [ ] 【Claude Code 内部实践:Skill 编写的 9 个最佳实践-哔哩哔哩】 https://b23.tv/0Brym4l
|
||||||
|
- [ ] 【🚀解锁OpenClaw多Agent高级玩法!Token消耗直接减半,这才是正确的使用方式!不同任务分配不同模型,独立Session、独立记忆,独立工作空间】 https://www.bilibili.com/video/BV1dqffBMEcg/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
|
||||||
|
|||||||
Reference in New Issue
Block a user