logo
0
0
WeChat Login

Z AI SDK Go

Z AI Web Dev SDK 的 Go 语言实现版本,提供完整的 API 覆盖和高性能的分布式代理能力。

特性

  • 完整 API 覆盖:Chat、Vision、Audio (TTS/ASR)、Images、Video、Functions
  • 高性能:基于 Go 原生 net/http,无额外运行时依赖
  • CLI 工具:功能完整的命令行工具,兼容原 JavaScript 版本用法
  • 守护进程:内置 HTTP API 服务器,支持后台运行与进程监控
  • 分布式代理:Gateway + Client 架构,支持多节点负载均衡
  • 流式响应:完整的 SSE 流式支持,适用于聊天和 TTS 场景

安装

作为库使用

go get cnb.cool/S.o/z-ai-sdk-go

作为 CLI 工具使用

# 编译安装
go install cnb.cool/S.o/z-ai-sdk-go/cmd/cli@latest

# 或下载预编译二进制

配置

SDK 从 .z-ai-config 文件加载配置,按以下顺序查找:

  1. 当前项目目录 (./.z-ai-config)
  2. 用户主目录 (~/.z-ai-config)
  3. 系统目录 (/etc/.z-ai-config)

配置文件格式(JSON):

{
  "baseUrl": "https://api.example.com/v1",
  "apiKey": "your-api-key",
  "chatId": "optional-chat-id",
  "userId": "optional-user-id"
}

注意baseUrl 应包含 /v1 前缀

快速开始

作为库使用

package main

import (
    "context"
    "fmt"
    "log"

    "cnb.cool/S.o/z-ai-sdk-go/client"
    "cnb.cool/S.o/z-ai-sdk-go/types"
)

func main() {
    // 从配置文件创建客户端
    zai, err := client.Create()
    if err != nil {
        log.Fatal(err)
    }

    // 聊天补全
    resp, err := zai.CreateChatCompletion(context.Background(), &types.CreateChatCompletionRequest{
        Messages: []types.ChatMessage{
            {Role: "user", Content: "你好!"},
        },
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(resp.Choices[0].Message.Content)
}

CLI 工具

# 聊天对话
z-ai chat -p "什么是人工智能?"

# 视觉分析
z-ai vision -p "描述这张图片" -i "./photo.jpg"

# 文本转语音
z-ai tts -i "你好,世界" -o ./hello.wav

# 图片生成
z-ai image -p "一只可爱的小猫" -o ./cat.png

# 视频生成(自动轮询)
z-ai video -p "A beautiful sunset" --poll

# 函数调用
z-ai function -n web_search -a '{"query": "Go语言", "num": 5}'

守护进程(HTTP API 服务器)

# 启动 HTTP API 服务(后台运行)
z-ai daemon start

# 指定监听地址
z-ai daemon start -a :9090

# 查看服务状态
z-ai daemon status

# 查看服务日志
z-ai daemon logs -f

# 停止服务
z-ai daemon stop

HTTP API 端点:

方法路径说明
POST/api/v1/chat/completions聊天补全
POST/api/v1/chat/completions/vision视觉聊天
POST/api/v1/audio/tts文字转语音
POST/api/v1/audio/asr语音转文字
POST/api/v1/images/generate图片生成
POST/api/v1/video/generate视频生成
GET/api/v1/async/result异步结果查询
POST/api/v1/functions/invoke函数调用

分布式代理

Gateway(服务端)

# 启动 Gateway
PROXY_API_KEY=your-secret-key proxy-gateway

# 无认证模式(开发环境)
PROXY_API_KEY= proxy-gateway

Gateway 端点:

路径说明
/tunnelWebSocket 隧道(客户端接入)
/HTTP 代理转发
/statsPool 级统计
/sessionsSession 列表
/sessions/{id}Session 详情 + 活跃 Streams

Client(客户端)

# 启动代理客户端
PROXY_GATEWAY_URL=wss://gateway.example.com/tunnel \
PROXY_API_KEY=your-secret-key \
PROXY_NODE_ID=node-001 \
proxy-client

# 通过守护进程管理
z-ai daemon proxy start \
  --gateway-url wss://gateway.example.com/tunnel \
  --api-key your-secret-key

CLI 命令参考

chat - 聊天补全

z-ai chat [options]

选项:
  -p, --prompt string     用户消息内容(必需)
  -s, --system string     系统提示词
  -t, --thinking          启用思维链
  -o, --output string     输出文件路径(JSON格式)
  --stream                流式输出

vision - 视觉模型聊天

z-ai vision [options]

选项:
  -p, --prompt string     用户消息内容(必需)
  -i, --image strings     图片URL或本地文件路径(可多次使用)
  -t, --thinking          启用思维链
  -o, --output string     输出文件路径(JSON格式)
  --stream                流式输出

tts - 文本转语音

z-ai tts [options]

选项:
  -i, --input string      要转换的文本(必需)
  -o, --output string     输出音频文件路径(必需)
  -v, --voice string      声音类型(默认: tongtong)
  -s, --speed float       语速(0.5-2.0,默认: 1.0)
  -f, --format string     输出格式(wav/mp3/pcm,默认: wav)
  --stream                流式输出

asr - 语音转文本

z-ai asr [options]

选项:
  -f, --file string       音频文件路径
  -b, --base64 string     音频文件的base64编码
  -o, --output string     输出文件路径(JSON格式)
  --stream                流式输出

image - 图片生成

z-ai image [options]

选项:
  -p, --prompt string     图片描述文本(必需)
  -o, --output string     输出图片文件路径(必需,png格式)
  -s, --size string       图片尺寸(默认: 1024x1024)

支持的尺寸: 1024x1024, 768x1344, 864x1152, 1344x768, 1152x864, 1440x720, 720x1440

video - 视频生成

z-ai video [options]

选项:
  -p, --prompt string          视频的文本描述
  -i, --image-url string       图片URL(首尾帧用逗号分隔)
  -q, --quality string         输出模式(speed/quality,默认: speed)
  --with-audio                 是否生成AI音效
  -s, --size string            视频分辨率
  --fps int                    视频帧率(30/60,默认: 30)
  -d, --duration int           视频时长(秒,默认: 5)
  --poll                       自动轮询直到任务完成
  --poll-interval int          轮询间隔(秒,默认: 5)
  --max-polls int              最大轮询次数(默认: 60)
  -o, --output string          输出结果文件路径(JSON格式)

async-result - 异步结果查询

z-ai async-result [options]

选项:
  -i, --id string          任务ID(必需)
  --poll                   自动轮询直到任务完成
  --poll-interval int      轮询间隔(秒,默认: 5)
  --max-polls int          最大轮询次数(默认: 60)
  -o, --output string      输出文件路径(JSON格式)

function - 函数调用

z-ai function [options]

选项:
  -n, --name string        函数名称(必需)
                            web_search: 网页搜索
                            page_reader: 网页阅读器
  -a, --args string        函数参数(JSON格式,必需)
  -o, --output string      输出文件路径(JSON格式)

daemon - 守护进程管理

z-ai daemon <command> [options]

命令:
  start         启动 HTTP API 服务(后台运行)
  stop          停止服务
  restart       重启服务
  status        查看服务状态
  logs          查看服务日志

start 选项:
  -a, --addr string     监听地址(默认: :8080)
  -d, --daemon          以守护进程模式运行(默认: true)
  -w, --watch           启用进程监控(默认: true

高级用法

流式聊天

err := zai.ProcessChatStream(ctx, req, func(chunk *client.StreamChunk) error {
    for _, choice := range chunk.Choices {
        fmt.Print(choice.Delta.Content)
    }
    return nil
})

多模态视觉输入

resp, err := zai.CreateChatCompletionVision(ctx, &types.CreateChatCompletionVisionRequest{
    Messages: []types.VisionMessage{
        {
            Role: "user",
            Items: []types.VisionMultimodalContentItem{
                {Type: "text", Text: "描述这张图片"},
                {Type: "image_url", ImageURL: &types.MediaURL{URL: "https://example.com/image.jpg"}},
                {Type: "video_url", VideoURL: &types.MediaURL{URL: "https://example.com/video.mp4"}},
                {Type: "file_url", FileURL: &types.MediaURL{URL: "https://example.com/document.pdf"}},
            },
        },
    },
})

视频生成轮询

// 创建任务
task, err := zai.CreateVideoGeneration(ctx, &types.CreateVideoGenerationRequest{
    Prompt: "A cat playing with a ball",
})

// 轮询结果
for {
    result, err := zai.QueryAsyncResult(ctx, task.ID)
    if err != nil {
        break
    }
    if result.TaskStatus != "PROCESSING" {
        if result.TaskStatus == "SUCCESS" {
            fmt.Println("Video URL:", result.VideoResult[0].URL)
        }
        break
    }
    time.Sleep(5 * time.Second)
}

项目结构

client/              # 核心客户端实现
config/              # 配置加载
server/              # HTTP 服务器
types/               # 类型定义
pkg/proxy/           # 分布式代理协议
cmd/
  cli/               # CLI 工具入口
  daemon/            # 守护进程入口
  proxy-gateway/     # 分布式代理网关
  proxy-client/      # 分布式代理客户端
worktree/            # 子模块
docs/                # 文档目录

文档

许可证

ISC

About

No description, topics, or website provided.
Language
Go87.8%
Shell12.2%