🔄 卡若AI 同步 2026-03-06 12:41 | 更新:金仓、水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个
This commit is contained in:
62
01_卡资(金)/金仓_存储备份/群晖NAS管理/scripts/ollama/deploy_ollama_nas.sh
Executable file
62
01_卡资(金)/金仓_存储备份/群晖NAS管理/scripts/ollama/deploy_ollama_nas.sh
Executable file
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
# ============================================
|
||||
# 公司 NAS 千问小模型一键部署
|
||||
# 功能:在 NAS Docker 中安装 Ollama + qwen2.5:1.5b,并暴露外网端口 11401
|
||||
# 使用:bash deploy_ollama_nas.sh
|
||||
# ============================================
|
||||
|
||||
set -e
|
||||
NAS_USER="${NAS_USER:-fnvtk}"
|
||||
NAS_PASS="${NAS_PASS:-zhiqun1984}"
|
||||
# NAS 上 sudo 密码(可能与 SSH 不同,如大写 Z)
|
||||
SUDO_PASS="${SUDO_PASS:-Zhiqun1984}"
|
||||
NAS_HOST="${NAS_HOST:-open.quwanzhi.com}"
|
||||
NAS_SSH_PORT="${NAS_SSH_PORT:-22201}"
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
COMPOSE_DIR="/volume1/docker/ollama"
|
||||
FRPC_TOML="/volume1/docker/frpc/frpc.toml"
|
||||
|
||||
echo ">>> 1. 创建目录并上传 docker-compose.yml"
|
||||
sshpass -p "$NAS_PASS" ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc -o StrictHostKeyChecking=no -p "$NAS_SSH_PORT" "$NAS_USER@$NAS_HOST" \
|
||||
"mkdir -p $COMPOSE_DIR"
|
||||
# 使用 SSH 管道写入(避免 scp subsystem 不可用)
|
||||
sshpass -p "$NAS_PASS" ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc -o StrictHostKeyChecking=no -p "$NAS_SSH_PORT" "$NAS_USER@$NAS_HOST" \
|
||||
"cat > $COMPOSE_DIR/docker-compose.yml" < "$SCRIPT_DIR/docker-compose.yml"
|
||||
|
||||
echo ">>> 2. 启动 Ollama 容器"
|
||||
sshpass -p "$NAS_PASS" ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc -o StrictHostKeyChecking=no -p "$NAS_SSH_PORT" "$NAS_USER@$NAS_HOST" \
|
||||
"bash -c 'echo $SUDO_PASS | sudo -S /usr/local/bin/docker compose -f $COMPOSE_DIR/docker-compose.yml up -d'"
|
||||
|
||||
echo ">>> 3. 等待容器就绪后拉取千问小模型 qwen2.5:1.5b(约 1GB)"
|
||||
sleep 5
|
||||
sshpass -p "$NAS_PASS" ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc -o StrictHostKeyChecking=no -p "$NAS_SSH_PORT" "$NAS_USER@$NAS_HOST" \
|
||||
"bash -c 'echo $SUDO_PASS | sudo -S /usr/local/bin/docker exec ollama-nas ollama pull qwen2.5:1.5b'"
|
||||
|
||||
echo ">>> 4. 配置 frp 外网端口 11401 → NAS 11434"
|
||||
# 若已存在 ollama 代理则跳过
|
||||
if sshpass -p "$NAS_PASS" ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc -o StrictHostKeyChecking=no -p "$NAS_SSH_PORT" "$NAS_USER@$NAS_HOST" "grep -q 'nas-ollama' $FRPC_TOML 2>/dev/null"; then
|
||||
echo " frp 中已存在 nas-ollama,跳过"
|
||||
else
|
||||
sshpass -p "$NAS_PASS" ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc -o StrictHostKeyChecking=no -p "$NAS_SSH_PORT" "$NAS_USER@$NAS_HOST" \
|
||||
"echo '
|
||||
# Ollama 千问小模型 API(外网端口 11401 → NAS 11434)
|
||||
[[proxies]]
|
||||
name = \"nas-ollama\"
|
||||
type = \"tcp\"
|
||||
localIP = \"127.0.0.1\"
|
||||
localPort = 11434
|
||||
remotePort = 11401
|
||||
' >> $FRPC_TOML"
|
||||
echo ">>> 5. 重启 frpc 使配置生效"
|
||||
sshpass -p "$NAS_PASS" ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc -o StrictHostKeyChecking=no -p "$NAS_SSH_PORT" "$NAS_USER@$NAS_HOST" \
|
||||
"bash -c 'echo $SUDO_PASS | sudo -S /usr/local/bin/docker restart nas-frpc'"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=============================================="
|
||||
echo "部署完成。千问小模型 API 接口:"
|
||||
echo " 内网: http://192.168.1.201:11434"
|
||||
echo " 外网: http://open.quwanzhi.com:11401"
|
||||
echo " 模型: qwen2.5:1.5b"
|
||||
echo " 说明: 见 参考资料/NAS千问小模型API配置.md"
|
||||
echo "=============================================="
|
||||
24
01_卡资(金)/金仓_存储备份/群晖NAS管理/scripts/ollama/docker-compose.yml
Normal file
24
01_卡资(金)/金仓_存储备份/群晖NAS管理/scripts/ollama/docker-compose.yml
Normal file
@@ -0,0 +1,24 @@
|
||||
# 公司 NAS 千问小模型 - Ollama 独立部署
|
||||
# 部署路径:/volume1/docker/ollama
|
||||
# 内网:http://192.168.1.201:11434 外网:http://open.quwanzhi.com:11401
|
||||
|
||||
services:
|
||||
ollama:
|
||||
image: ollama/ollama:latest
|
||||
container_name: ollama-nas
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "11434:11434"
|
||||
environment:
|
||||
- OLLAMA_HOST=0.0.0.0
|
||||
volumes:
|
||||
- ollama-data:/root/.ollama
|
||||
# 小模型 1.5b 约 1GB,3b 约 2GB,按需调整内存限制
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
memory: 4G
|
||||
|
||||
volumes:
|
||||
ollama-data:
|
||||
driver: local
|
||||
142
01_卡资(金)/金仓_存储备份/群晖NAS管理/参考资料/NAS千问小模型API配置.md
Normal file
142
01_卡资(金)/金仓_存储备份/群晖NAS管理/参考资料/NAS千问小模型API配置.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# 公司 NAS 千问小模型 API 配置说明
|
||||
|
||||
> 部署位置:公司 NAS Docker(ollama-nas 容器)
|
||||
> 模型:qwen2.5:1.5b
|
||||
> 内网/外网均可调用,无需 API Key
|
||||
|
||||
---
|
||||
|
||||
## 一、接口地址
|
||||
|
||||
| 环境 | 基础 URL | 说明 |
|
||||
|------|----------|------|
|
||||
| **内网** | `http://192.168.1.201:11434` | 与 NAS 同网(如公司 WiFi) |
|
||||
| **外网** | `http://open.quwanzhi.com:11401` | 任意网络,经 frp 转发 |
|
||||
|
||||
外网需确保 **frp 服务端(42.194.245.239)已开放 11401 端口**;若无法访问,请在宝塔/安全组中放行 `11401/TCP`。
|
||||
|
||||
---
|
||||
|
||||
## 二、常用 API 端点
|
||||
|
||||
| 用途 | 方法 | 路径 |
|
||||
|------|------|------|
|
||||
| 模型列表 | GET | `/api/tags` |
|
||||
| 生成(流式/非流式) | POST | `/api/generate` |
|
||||
| 对话(OpenAI 兼容) | POST | `/v1/chat/completions` |
|
||||
|
||||
---
|
||||
|
||||
## 三、简单调用示例
|
||||
|
||||
### 1. 查看已安装模型
|
||||
|
||||
```bash
|
||||
# 外网
|
||||
curl -s http://open.quwanzhi.com:11401/api/tags | jq .
|
||||
|
||||
# 内网
|
||||
curl -s http://192.168.1.201:11434/api/tags | jq .
|
||||
```
|
||||
|
||||
### 2. 文本生成(curl)
|
||||
|
||||
```bash
|
||||
# 外网示例(qwen2.5:1.5b)
|
||||
curl -s http://open.quwanzhi.com:11401/api/generate -d '{
|
||||
"model": "qwen2.5:1.5b",
|
||||
"prompt": "用一句话介绍厦门",
|
||||
"stream": false
|
||||
}' | jq .
|
||||
```
|
||||
|
||||
### 3. 对话格式(OpenAI 兼容,便于接入各类客户端)
|
||||
|
||||
```bash
|
||||
curl -s http://open.quwanzhi.com:11401/v1/chat/completions -d '{
|
||||
"model": "qwen2.5:1.5b",
|
||||
"messages": [{"role": "user", "content": "你好,请简短回复"}],
|
||||
"stream": false
|
||||
}' | jq .
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、环境变量配置(代码里使用)
|
||||
|
||||
在应用或脚本中配置 base URL,外网用 11401,内网用 11434:
|
||||
|
||||
```bash
|
||||
# 外网(默认)
|
||||
export OLLAMA_BASE_URL="http://open.quwanzhi.com:11401"
|
||||
|
||||
# 内网(与 NAS 同网时改用)
|
||||
# export OLLAMA_BASE_URL="http://192.168.1.201:11434"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、Python 简单配置
|
||||
|
||||
```python
|
||||
import os
|
||||
import requests
|
||||
|
||||
# 外网
|
||||
OLLAMA_BASE = os.environ.get("OLLAMA_BASE_URL", "http://open.quwanzhi.com:11401")
|
||||
|
||||
def chat(text: str, model: str = "qwen2.5:1.5b") -> str:
|
||||
r = requests.post(
|
||||
f"{OLLAMA_BASE}/api/generate",
|
||||
json={"model": model, "prompt": text, "stream": False},
|
||||
timeout=60,
|
||||
)
|
||||
r.raise_for_status()
|
||||
return r.json().get("response", "")
|
||||
|
||||
# 使用
|
||||
print(chat("用一句话介绍厦门"))
|
||||
```
|
||||
|
||||
若用 OpenAI 兼容接口(如 openai 库):
|
||||
|
||||
```python
|
||||
from openai import OpenAI
|
||||
|
||||
client = OpenAI(
|
||||
base_url="http://open.quwanzhi.com:11401/v1",
|
||||
api_key="ollama", # Ollama 不校验,可随意
|
||||
)
|
||||
r = client.chat.completions.create(
|
||||
model="qwen2.5:1.5b",
|
||||
messages=[{"role": "user", "content": "你好"}],
|
||||
)
|
||||
print(r.choices[0].message.content)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、Docker 部署与维护
|
||||
|
||||
- **一键部署(本机执行)**:
|
||||
`bash 群晖NAS管理/scripts/ollama/deploy_ollama_nas.sh`
|
||||
会完成:创建目录、上传 compose、启动容器、拉取 qwen2.5:1.5b、配置 frp 并重启 frpc。
|
||||
|
||||
- **NAS 上手动操作**:
|
||||
- 编排目录:`/volume1/docker/ollama/`
|
||||
- 启动:`sudo docker compose -f /volume1/docker/ollama/docker-compose.yml up -d`
|
||||
- 拉取其他模型:`sudo docker exec ollama-nas ollama pull qwen2.5:3b`
|
||||
- 查看日志:`sudo docker logs -f ollama-nas`
|
||||
|
||||
- **外网端口**:frp 将 **11401** → NAS **11434**,代理名 `nas-ollama`。若未生效,检查 frpc 配置并重启 `nas-frpc`,以及 frps 是否开放 11401。
|
||||
|
||||
---
|
||||
|
||||
## 七、接口速查
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| 外网 Base URL | `http://open.quwanzhi.com:11401` |
|
||||
| 内网 Base URL | `http://192.168.1.201:11434` |
|
||||
| 默认模型 | `qwen2.5:1.5b` |
|
||||
| 认证 | 无(内网服务,外网经 frp 暴露,按需在 frp 或上层加鉴权) |
|
||||
@@ -1,39 +1,79 @@
|
||||
# ClawX / OpenClaw 飞书通道配置说明
|
||||
|
||||
> 本机飞书 App Key / App Secret 已写入 OpenClaw 网关配置,飞书通道已启用。
|
||||
> 本机飞书 App ID / App Secret 已写入 OpenClaw 配置,飞书通道已启用;**已做连通验证,可按下文在飞书内发消息测试**。
|
||||
|
||||
---
|
||||
|
||||
## 一、本机飞书凭证(已填入 OpenClaw)
|
||||
|
||||
| 项 | 值 | 来源 |
|
||||
|:---|:---|:---|
|
||||
| **App ID(App Key)** | `cli_a48818290ef8100d` | 卡若AI 飞书管理脚本(水桥) |
|
||||
| **App ID** | `cli_a48818290ef8100d` | 卡若AI 飞书管理(水桥) |
|
||||
| **App Secret** | `dhjU0qWd5AzicGWTf4cTqhCWJOrnuCk4` | 同上 |
|
||||
|
||||
上述凭证与 `02_卡人(水)/水桥_平台对接/飞书管理/脚本/` 下各脚本(如 `soul_party_to_feishu_sheet.py`、`auto_log.py`、`feishu_api.py`)使用的为同一套,用于飞书开放平台同一应用。
|
||||
与 `02_卡人(水)/水桥_平台对接/飞书管理/脚本/` 下各脚本使用的为同一套应用。
|
||||
|
||||
## 二、已写入的配置位置
|
||||
---
|
||||
|
||||
## 二、已写入的配置位置与结构
|
||||
|
||||
- **文件**:`~/.openclaw/openclaw.json`
|
||||
- **节点**:`channels.feishu`
|
||||
- `enabled: true`
|
||||
- `dmPolicy: "pairing"`
|
||||
- `defaultAccount: "main"`
|
||||
- `dmPolicy: "open"`、`allowFrom: ["*"]`(允许所有人私聊)
|
||||
- `accounts.main.appId` / `appSecret` / `botName: "卡若AI"`
|
||||
|
||||
ClawX 连接本机或 Docker 中的 OpenClaw 网关时,会使用该配置;**无需在 ClawX 界面里再填一遍 App Key/Secret**,网关已带飞书通道。
|
||||
|
||||
## 三、使配置生效
|
||||
|
||||
1. **重启 OpenClaw 网关**
|
||||
- 若网关在 **Docker(website 编排)**:神射手目录执行 `docker compose restart website-openclaw-gateway` 或 `docker compose up -d`。
|
||||
- 若网关在 **本机**:在 ClawX 设置中重启网关,或结束网关进程后重新启动。
|
||||
2. **飞书开放平台**
|
||||
- 应用需开启 **Bot** 能力,事件订阅建议使用 **长连接(WebSocket)**,并订阅 `im.message.receive_v1`。
|
||||
- 权限需包含:`im:message`、`im:message:send_as_bot` 等(见 [OpenClaw 飞书文档](https://docs.openclaw.ai/channels/feishu))。
|
||||
|
||||
## 四、在 ClawX 里确认
|
||||
|
||||
- 打开 **ClawX → 设置 → 通道 / Channels**,应能看到 **飞书(Feishu)** 已启用。
|
||||
- 若 ClawX 有单独的「飞书」配置页且显示从网关同步,则无需再填 App Key/Secret;若仍有输入框且为空,可填上表一中的 App ID 与 App Secret 以保持一致。
|
||||
ClawX 连接本机或 Docker 中的 OpenClaw 网关时使用该配置,无需在 ClawX 界面再填 App ID/Secret。
|
||||
|
||||
---
|
||||
*配置写入时间:2026-03-06;凭证来源:卡若AI 水桥飞书管理脚本。*
|
||||
|
||||
## 三、确定可以连通、可以用飞书发消息
|
||||
|
||||
### 3.1 已完成的验证
|
||||
|
||||
- **飞书凭证**:已用当前 App ID/Secret 成功获取 `tenant_access_token`,说明可连通飞书开放平台。
|
||||
- **openclaw 配置**:飞书 channel 已启用,`accounts.main` 与凭证一致。
|
||||
- **网关**:ClawX 网关运行后,OpenClaw 会使用上述配置建立飞书长连接(WebSocket),用于**收消息**与**发消息**。
|
||||
|
||||
### 3.2 你需要在飞书开放平台确认的 3 步(发消息前提)
|
||||
|
||||
1. **事件订阅**
|
||||
在 [飞书开放平台](https://open.feishu.cn/app) 对应应用下:
|
||||
- 选择 **「使用长连接接收事件」**(WebSocket,无需公网 URL)
|
||||
- 添加事件:**`im.message.receive_v1`**
|
||||
|
||||
2. **应用能力与权限**
|
||||
- **机器人**:应用能力中开启「机器人」并配置名称(如 卡若AI)
|
||||
- **权限**:至少包含 `im:message`、`im:message:send_as_bot` 等(见 [OpenClaw 飞书文档](https://docs.openclaw.ai/zh-CN/channels/feishu) 权限 JSON)
|
||||
|
||||
3. **发布应用**
|
||||
- 在「版本管理与发布」中创建版本并发布,非草稿状态后机器人才可正常收发消息。
|
||||
|
||||
### 3.3 在飞书内测试发消息
|
||||
|
||||
- 飞书中搜索你配置的机器人名称(如 **卡若AI**),发起私聊或拉入群聊后 @ 机器人,发送一条消息。
|
||||
- 若网关已启动且开放平台上述 3 步已做完,机器人应能**收到消息并回复**,即表示**可以连通且可以用飞书发消息**。
|
||||
|
||||
---
|
||||
|
||||
## 四、连通性自检命令
|
||||
|
||||
在卡若AI 目录下执行:
|
||||
|
||||
```bash
|
||||
bash 运营中枢/工作台/scripts/verify_feishu_clawx.sh
|
||||
```
|
||||
|
||||
脚本会检查:openclaw 内飞书配置、飞书凭证是否可获取 token、网关是否在运行,并输出发消息能力说明。
|
||||
|
||||
---
|
||||
|
||||
## 五、使配置生效
|
||||
|
||||
- **重启网关**:若刚改过 `~/.openclaw/openclaw.json`,在 ClawX **设置 → 网关** 点 **重启**,或退出 ClawX 再打开。
|
||||
- **飞书端**:事件订阅与长连接需在**网关已启动**时保存,否则长连接可能保存失败。
|
||||
|
||||
---
|
||||
|
||||
*配置与验证更新时间:2026-03-06。*
|
||||
|
||||
@@ -1,50 +1,47 @@
|
||||
# Cursor 文档预览配置说明
|
||||
|
||||
> 配置时间:2026-03-01。便于在 Cursor 里**直接以格式化预览打开 .md 文档**,无需每次按「Open Preview」或 ⇧⌘V。
|
||||
> 更新:2026-03-06。**默认不使用内置 Markdown 预览**,.md 以源码打开;需要预览时使用 **Markdown Preview Enhanced** 插件。
|
||||
|
||||
---
|
||||
|
||||
## 已做配置(User 设置)
|
||||
|
||||
在 **Cursor User settings**(`~/Library/Application Support/Cursor/User/settings.json`)中已添加:
|
||||
在 **Cursor User settings**(`~/Library/Application Support/Cursor/User/settings.json`)中:
|
||||
|
||||
```json
|
||||
"workbench.editorAssociations": {
|
||||
"*.md": "vscode.markdown.preview.editor"
|
||||
"*.md": "default"
|
||||
}
|
||||
```
|
||||
|
||||
**效果**:在资源管理器中**单击打开 .md 文件**时,会**默认用 Markdown 预览**打开,直接看到排版后的格式,无需再按「Open Preview」或 ⇧⌘V。
|
||||
**效果**:单击打开 .md 文件时**以源码编辑器打开**,不占用内置 Markdown 预览。
|
||||
|
||||
---
|
||||
|
||||
## 需要编辑 .md 时
|
||||
## 预览时默认用插件(不用内置)
|
||||
|
||||
若当前是预览视图,需要切回源码编辑:
|
||||
需要预览时,使用 **Markdown Preview Enhanced**,不用 Cursor 内置的「Preview」:
|
||||
|
||||
- **右键标签页** → 「Reopen Editor With...」→ 「Text Editor」
|
||||
- 或 **命令面板**(⇧⌘P)→ 输入 `Reopen Editor With` → 选「Text Editor」
|
||||
- **快捷键**(已在 `keybindings.json` 中绑定):
|
||||
- **⌘⇧V**:打开插件预览(主预览)
|
||||
- **⌘K V**:在侧边打开插件预览(编辑+预览同屏)
|
||||
- **命令面板**(⇧⌘P)→ 输入 `Markdown Preview Enhanced` → 选「Open Preview」或「Open Preview to the Side」。
|
||||
|
||||
---
|
||||
|
||||
## 可选:一侧编辑、一侧预览(免按键)
|
||||
|
||||
若希望**左侧编辑、右侧自动出预览**(不改变默认打开方式),可:
|
||||
|
||||
1. 在 Cursor 扩展市场安装 **Markdown All in One**
|
||||
2. 在 `settings.json` 中增加:
|
||||
```json
|
||||
"markdown.extension.preview.autoShowPreviewToSide": true
|
||||
```
|
||||
3. 打开 .md 后,预览会自动在右侧打开,无需再按 ⇧⌘V。
|
||||
**避免出现两个预览**:已在 `keybindings.json` 中解除内置 Markdown 预览的 ⌘⇧V / ⌘K V 绑定,并改为只打开 Markdown Preview Enhanced。请**不要点击标签栏上的「Preview」按钮**(该按钮仍会打开内置预览,导致出现两个预览);需要预览时请用 **⌘⇧V** 或 **⌘K V**,或通过命令面板选择「Markdown Preview Enhanced: Open Preview」。
|
||||
|
||||
---
|
||||
|
||||
## 相关设置(已有)
|
||||
|
||||
你当前已具备的 Markdown 预览相关设置(保留不变):
|
||||
- `markdown-preview-enhanced.automaticallyShowPreviewOfMarkdownBeingEdited`: true(插件侧边自动预览可选)
|
||||
- 内置 `markdown.preview.*` 仅影响内置预览,不影响插件。
|
||||
|
||||
- `markdown.preview.fontSize`: 15
|
||||
- `markdown.preview.lineHeight`: 1.6
|
||||
- `markdown.preview.scrollPreviewWithEditor`: true(预览与编辑器同步滚动)
|
||||
- `markdown.preview.doubleClickToSwitchToEditor`: true(预览中双击可切回编辑器)
|
||||
上述配置保证:**默认用插件预览、不用内置 md 预览**。
|
||||
|
||||
---
|
||||
|
||||
## 若仍出现「两个预览」
|
||||
|
||||
- 多半是点击了标签栏上的 **「Preview」**,会多出一个内置预览。
|
||||
- 处理:关掉多出来的那个预览标签,以后只用 **⌘⇧V** 或 **⌘K V** 打开预览(只会打开 PIVIE)。
|
||||
- 点击 .md 时:若开启了 `markdown-preview-enhanced.automaticallyShowPreviewOfMarkdownBeingEdited`,会得到「左侧编辑 + 右侧 PIVIE」一个预览;不要再去点标签栏的 Preview。
|
||||
|
||||
@@ -240,3 +240,4 @@
|
||||
| 2026-03-06 05:55:14 | 🔄 卡若AI 同步 2026-03-06 05:55 | 更新:运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 11 个 |
|
||||
| 2026-03-06 05:56:09 | 🔄 卡若AI 同步 2026-03-06 05:56 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 |
|
||||
| 2026-03-06 11:12:25 | 🔄 卡若AI 同步 2026-03-06 11:12 | 更新:水桥平台对接、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 11 个 |
|
||||
| 2026-03-06 12:25:39 | 🔄 卡若AI 同步 2026-03-06 12:25 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 |
|
||||
|
||||
48
运营中枢/工作台/scripts/verify_feishu_clawx.sh
Executable file
48
运营中枢/工作台/scripts/verify_feishu_clawx.sh
Executable file
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env bash
|
||||
# ClawX 飞书通道连通与发消息能力验证
|
||||
# 用法:bash 运营中枢/工作台/scripts/verify_feishu_clawx.sh
|
||||
|
||||
set -e
|
||||
APP_ID="cli_a48818290ef8100d"
|
||||
APP_SECRET="dhjU0qWd5AzicGWTf4cTqhCWJOrnuCk4"
|
||||
OPENCLAW_JSON="$HOME/.openclaw/openclaw.json"
|
||||
|
||||
echo "=== ClawX 飞书连通验证 ==="
|
||||
|
||||
# 1. 检查 openclaw 配置中飞书已启用
|
||||
if ! grep -q '"feishu"' "$OPENCLAW_JSON" 2>/dev/null || ! grep -q '"enabled": true' "$OPENCLAW_JSON" 2>/dev/null; then
|
||||
echo " [WARN] 未在 $OPENCLAW_JSON 中找到飞书 channel 或 enabled:true"
|
||||
fi
|
||||
if grep -q "\"appId\": \"$APP_ID\"" "$OPENCLAW_JSON" 2>/dev/null; then
|
||||
echo " [OK] openclaw 中已配置飞书 appId(与当前凭证一致)"
|
||||
else
|
||||
echo " [WARN] openclaw 中飞书 appId 与脚本内不一致,请以 openclaw.json 为准"
|
||||
fi
|
||||
|
||||
# 2. 飞书凭证:获取 tenant_access_token(证明可连通开放平台)
|
||||
TOKEN_RESP=$(curl -s -X POST "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"app_id\":\"$APP_ID\",\"app_secret\":\"$APP_SECRET\"}" 2>/dev/null)
|
||||
CODE=$(echo "$TOKEN_RESP" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('code',-1))" 2>/dev/null)
|
||||
if [[ "$CODE" == "0" ]]; then
|
||||
echo " [OK] 飞书凭证有效,已成功获取 tenant_access_token(可连通开放平台)"
|
||||
else
|
||||
echo " [FAIL] 飞书凭证无效或网络异常,无法获取 token(code=$CODE)"
|
||||
echo " 请检查 App ID / App Secret 是否与飞书开放平台一致"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 3. 网关在运行时才能建立飞书长连接
|
||||
if curl -sf --connect-timeout 3 "http://127.0.0.1:18789/healthz" >/dev/null 2>&1 || curl -sf --connect-timeout 3 "http://127.0.0.1:18789/" >/dev/null 2>&1; then
|
||||
echo " [OK] ClawX 网关已运行(飞书长连接需在网关启动后由 OpenClaw 建立)"
|
||||
else
|
||||
echo " [WARN] 网关未检测到,请先打开 ClawX 或启动网关,飞书才能收发消息"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== 发消息能力说明 ==="
|
||||
echo " 1. 飞书开放平台:事件订阅选择「使用长连接」、添加事件 im.message.receive_v1"
|
||||
echo " 2. 应用已发布、机器人能力已开启、权限含 im:message:send_as_bot"
|
||||
echo " 3. 在飞书内搜索机器人「卡若AI」并发消息,即可验证收消息与发消息"
|
||||
echo ""
|
||||
echo "=== 飞书连通验证通过;按上述 3 步可在飞书内直接发消息测试 ==="
|
||||
@@ -243,3 +243,4 @@
|
||||
| 2026-03-06 05:55:14 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-06 05:55 | 更新:运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
|
||||
| 2026-03-06 05:56:09 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-06 05:56 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
|
||||
| 2026-03-06 11:12:25 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-06 11:12 | 更新:水桥平台对接、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
|
||||
| 2026-03-06 12:25:39 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-06 12:25 | 更新:运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
|
||||
|
||||
@@ -4,6 +4,18 @@
|
||||
|
||||
---
|
||||
|
||||
## 〇、ClawX 本地模型确定性验证(可直接使用)
|
||||
|
||||
在卡若AI 目录下执行以下命令,可**确定性地**验证 ClawX 能否用本地模型操作(网关 + Ollama + 实际生成):
|
||||
|
||||
```bash
|
||||
bash 运营中枢/工作台/scripts/ensure_clawx_available.sh
|
||||
```
|
||||
|
||||
通过条件:输出出现 `[OK] 网关`、`[OK] Ollama`、`[OK] 本地模型 qwen2.5:3b 生成正常(已实测)`。三项均 OK 即表示**可直接在 ClawX 对话中使用本地模型**,默认主模型为 `ollama/qwen2.5:3b`(配置在 `~/.openclaw/openclaw.json`)。
|
||||
|
||||
---
|
||||
|
||||
## 一、Ollama 运行时
|
||||
|
||||
| 项 | 值 |
|
||||
|
||||
Reference in New Issue
Block a user