nazhi-cli
纳智综合评价系统 自动化 CLI + Go SDK

一站式命令行工具 + Go SDK,用于纳智综合评价系统的自动化操作。提供 SSO 登录、任务管理、自我评价、文件上传 等完整功能。
特色
- 跨平台 OCR 可选 — 支持 CGO-free 纯 Go 构建(
-tags !ddddocr),也可内嵌 ddddocr 引擎开箱即用
- 全自动 OCR 验证码 — 模型已嵌入二进制,无需下载、无需配置,开箱即用(默认构建含 -tags ddddocr)
- 跨平台支持 — Windows / Linux / macOS(5 个平台 × 架构组合),单二进制运行
- 进程级 OCR 单例 — 多实例共享引擎,避免重复解压模型
- CLI + SDK 双形态 — 脚本可调用,集成方导入 Go 包
- 完整测试覆盖 — 单元测试 + race 检测 + 真实环境集成测试 + HAR 驱动测试
- HAR 对齐 — 4 步 Session 激活、双重 Token 注入,全部逆向抓包验证
- Windows OCR 自愈 — DLL 句柄释放失败不再污染 stderr,下一次启动自动扫掉历史残留临时目录
📚 文档
安装
预编译二进制(推荐)
从 Releases 下载:
| 平台 |
架构 |
文件 |
| Windows |
amd64 / arm64 |
nazhi-windows-amd64.exe |
| Linux |
amd64 / arm64 |
nazhi-linux-amd64 |
| macOS |
arm64 (Apple Silicon) |
nazhi-darwin-arm64 |
macOS 仅支持 arm64(Microsoft 已停发 onnxruntime macOS x86_64)
go install
go install github.com/Wenaixi/nazhi-cli/cmd/nazhi@latest
从源码构建
git clone https://github.com/Wenaixi/nazhi-cli.git
cd nazhi-cli
make build # 当前平台
make release # 全平台
快速开始
1. 登录获取 Token
# 方式 1:命令行参数
nazhi login -u 学号 -p 密码
# 方式 2:环境变量(推荐用于 CI)
export NAZHI_USERNAME=学号
export NAZHI_PASSWORD=密码
nazhi login
# 方式 3:.env 文件
cp .env.example .env # 编辑填入真实凭据
nazhi login
2. 完整流程
# 登录拿 token(输出 JSON 到 stdout)
TOKEN=$(nazhi login | jq -r .token)
export NAZHI_TOKEN=$TOKEN
# 激活业务 Session(HAR 对齐 4 步)
nazhi session activate
# 业务操作
nazhi whoami
nazhi task list
nazhi task submit --payload @task.json
nazhi self-eval submit --comment "很好的学期"
nazhi self-eval status
# 上传图片(独立,不需要 token)
nazhi file upload -f ./photo.jpg
环境变量
所有 CLI 命令都支持通过环境变量注入凭据和配置:
| 变量 |
作用 |
适用命令 |
NAZHI_USERNAME |
学号 |
login、school |
NAZHI_PASSWORD |
密码 |
login |
NAZHI_TOKEN |
X-Auth-Token |
session、whoami、task、self-eval |
NAZHI_SSO_BASE |
SSO 根地址 |
login、school |
NAZHI_BASE_URL |
业务 API 根地址 |
session、whoami、task、self-eval |
NAZHI_UPLOAD_URL |
文件上传服务器 |
file upload |
NAZHI_TIMEOUT |
HTTP 超时(秒) |
所有命令 |
优先级:命令行标志 > 环境变量 > SDK 默认值
详见 env-vars.md
命令概览
nazhi
├── login # SSO 登录(全自动 OCR)
├── school # 查询学校 ID
├── session
│ └── activate # 激活业务 Session
├── whoami # 获取用户信息
├── task
│ ├── list # 任务列表
│ └── submit # 提交任务(支持 @payload.json)
├── self-eval
│ ├── submit # 提交自我评价
│ └── status # 查询评价状态
├── file
│ └── upload # 上传图片(独立公共服务,不接受 --token 参数)
├── version # 显示版本信息
└── completion # 生成 shell 自动补全脚本
💡 file upload 子命令不接受 --token 是有意设计:上传服务器(doc.nazhisoft.com)
是独立公共服务,SDK 内部主动清除 Authorization / X-Auth-Token / Cookie 三个 Header,
避免给公共服务发送业务域 token 触发风控。
详见 CLI 参考
作为 Go SDK 使用
import (
"github.com/Wenaixi/nazhi-cli/pkg/client"
"github.com/Wenaixi/nazhi-cli/pkg/types"
"github.com/Wenaixi/nazhi-cli/pkg/tokenparse" // v0.4.0 新包:SSO token 解析
)
c, _ := client.New( // v0.3.1+ 返回 (*Client, error),错误来自 WithHTTPClient 自定义 Jar 时的 syncCookieToken 失败
client.WithSSOBase("https://www.nazhisoft.com"),
client.WithTimeout(30 * time.Second),
)
// 登录
resp, _ := c.Login(ctx, types.LoginRequest{
Username: os.Getenv("NAZHI_USERNAME"),
Password: os.Getenv("NAZHI_PASSWORD"),
})
token := resp.Token
// 激活 Session
c.ActivateSession(ctx, token)
// 业务操作
tasks, _ := c.FetchTasks(ctx, token)
c.SubmitSelfEvaluation(ctx, token, "很好的学期")
// 直接用 tokenparse 解析 Location 头(v0.4.0+,自定义登录流程时使用)
// token, _ := tokenparse.ExtractFromLocation(locationHeader)
详见 SDK 参考
开发
常用命令
# 构建
make build # 当前平台
make release # 全平台
# 测试
make test # 单元测试(race)
make test-verbose # 详细输出
make test-integration # 真实环境(需要 .env)
# 代码质量
make lint # golangci-lint
make vet # go vet
make fmt # gofmt
# 清理
make clean
真实环境集成测试
需要 NAZHI_USERNAME / NAZHI_PASSWORD 环境变量(或 .env 文件):
cp .env.example .env
# 编辑 .env 填入真实凭据
make test-integration
贡献
欢迎 PR!流程见 CONTRIBUTING.md。提交前请确保:
make test 通过
make lint 通过
- 提交信息遵循 Conventional Commits
- 不要 在代码、注释、文档中提交真实凭据
安全
⚠️ 重要:历史版本中曾发生过学号密码泄露事故(已在 0.2.0 通过 git-filter-repo 修复)。如果您使用过早期版本,务必在 SSO 平台修改密码。
详见 SECURITY.md
协议
MIT License
致谢
Built for nazhi 综合评价系统自动化