🏠 Home

🚀 LingKong AI API

基于 Gemma 3N 的本地推理 API,完全兼容 Google Gemini 3 Pro Preview 格式,支持端到端加密通信。

🔒
端到端加密
ChaCha20-Poly1305 + X25519 ECDH,消息全程加密传输
本地推理
基于 llama.cpp,GPU 加速,零网络延迟
📷
多模态支持
支持图像理解和音频转录,视觉+听觉双模态
🧠
思考模式
支持 thinkingLevel 配置,模拟深度推理
💡
API 兼容性
本 API 完全兼容 Google Gemini API 格式,现有 Gemini 客户端只需修改 base URL 即可接入。

快速开始

5 分钟内完成 API 调用

POST /v1beta/models/gemini-3-pro-preview:generateContent

生成文本内容的核心接口。支持纯文本、多模态输入,以及工具调用。

cURL
Python
JavaScript
Bash
# 基础文本生成
curl -X POST http://localhost:5001/v1beta/models/gemini-3-pro-preview:generateContent \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [
      {"parts": [{"text": "你好,请介绍一下你自己"}]}
    ],
    "generationConfig": {
      "maxOutputTokens": 512,
      "temperature": 0.7
    }
  }'

generateContent

生成文本内容的核心接口

POST /v1beta/models/{model}:generateContent
📃 路径参数
参数名 类型 必填 说明
model string 必填 模型名称,支持 gemini-3-pro-previewgemini-3-flash-preview
📦 请求体参数
参数名 类型 必填 说明
contents array 必填 对话内容数组,每个元素包含 role 和 parts
generationConfig object 可选 生成配置,包括 maxOutputTokens, temperature, thinkingConfig 等
systemInstruction object 可选 系统指令/人设设定
tools array 可选 工具/函数声明列表
toolConfig object 可选 工具调用配置,mode 可选 AUTO/ANY/NONE
200 OK 响应示例
{
  "candidates": [{
    "content": {
      "role": "model",
      "parts": [{
        "text": "你好!我是 LingKong AI...",
        "thoughtSignature": "EoQDCAIS..."
      }]
    },
    "finishReason": "STOP",
    "index": 0
  }],
  "usageMetadata": {
    "promptTokenCount": 15,
    "candidatesTokenCount": 128,
    "totalTokenCount": 143,
    "thoughtsTokenCount": 50
  },
  "modelVersion": "gemma-3n-local"
}

🧠 思考模式 (thinkingConfig)

启用深度推理,让模型在回答前进行思考

💫
思考模式说明
思考模式通过 prompt engineering 模拟 Gemini 3 的 thinking 功能。 模型会先在 <thinking> 标签中进行推理,然后在 <answer> 标签中给出答案。
thinkingLevel 可选值
思考深度 输出格式 适用场景
none 禁用 直接输出答案 简单问答、快速响应
minimal 极简 1-2 句思考 简单任务
low 浅层 简短思考(不显示) 日常对话
medium 中等(默认) 结构化思考 一般问题
high 深度 详细推理过程 复杂问题、数学、逻辑
请求示例
{
  "contents": [{"parts": [{"text": "解释量子纠缠现象"}]}],
  "generationConfig": {
    "thinkingConfig": {
      "thinkingLevel": "high",
      "includeThoughts": true
    },
    "maxOutputTokens": 1024
  }
}

🔧 工具调用 (Function Calling)

让模型调用外部函数,支持并行调用

工具声明示例
{
  "contents": [{"parts": [{"text": "查询北京和上海的天气"}]}],
  "tools": [{
    "functionDeclarations": [{
      "name": "get_weather",
      "description": "获取指定城市的天气信息",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "城市名称"
          }
        },
        "required": ["location"]
      }
    }]
  }],
  "toolConfig": {
    "functionCallingConfig": {
      "mode": "AUTO"  // AUTO | ANY | NONE
    }
  }
}
toolConfig.mode 说明
模式 行为
AUTO 模型自动决定是否调用工具(默认)
ANY 强制调用工具,不返回纯文本
NONE 禁用工具调用,只返回文本

📷 三模态支持

支持文本、图像理解和音频转录

💬
文本对话
多轮对话、系统指令
支持 thinking 深度推理
🎨
图像理解
支持 PNG, JPEG, WebP, GIF
通过 Vision mmproj (570MB)
🎤
音频转录
支持 WAV, MP3, FLAC, OGG
通过 Audio mmproj (1.4GB)
图像理解示例
{
  "contents": [{
    "role": "user",
    "parts": [
      {"text": "描述这张图片的内容"},
      {
        "inlineData": {
          "mimeType": "image/png",
          "data": "iVBORw0KGgoAAAANSUhEUgAA..."  // Base64
        }
      }
    ]
  }]
}
音频转录示例
{
  "contents": [{
    "role": "user",
    "parts": [
      {"text": "Transcribe this audio and describe what you hear"},
      {
        "inlineData": {
          "mimeType": "audio/wav",
          "data": "UklGRi4AAABXQVZFZm10..."  // Base64 WAV (16kHz mono)
        }
      }
    ]
  }],
  "generationConfig": {
    "maxOutputTokens": 1024
  }
}
🎤
音频格式要求
推荐使用 16kHz 单声道 WAV 格式以获得最佳效果。 支持的格式: WAV, MP3, FLAC, OGG, WebM。 音频文件需转换为 Base64 编码后传入 inlineData.data 字段。
💻
平台支持 (2025-01)
macOS (Apple Silicon): Metal GPU 加速,完整支持
Ubuntu x86_64 (CUDA): NVIDIA GPU 加速,完整支持 (包含音频转录修复)
Linux x86_64 (CPU): 纯 CPU 推理,速度较慢
音频转录功能已在 Ubuntu 22.04 + NVIDIA RTX 4090 上测试通过。

🔑 思维签名 (Thought Signature)

AI 的"工作记忆",实现真正的有状态推理

🧠
核心概念
传统 LLM 像患有"短期记忆丧失症"的天才,每次对话都要重新阅读历史。 Thought Signature 通过 KV Cache 持久化,让 AI 具备真正的工作记忆。
🧠
推理生成
💾
KV Cache 捕获
📄
Base64 签名
🔁
状态恢复
多轮对话中使用 thoughtSignature
{
  "contents": [
    {"role": "user", "parts": [{"text": "我想学 Python"}]},
    {
      "role": "model",
      "parts": [
        {"text": "Python 是很好的选择..."},
        {"thoughtSignature": "EoQDCAISOg..."}  // 上一轮的签名
      ]
    },
    {"role": "user", "parts": [{"text": "有什么推荐的资源吗?"}]}
  ]
}

🔒 端到端加密通信

确保 AI 对话的绝对隐私

💡
为什么需要加密?
即使使用本地推理,消息在传输过程中仍可能被截获。端到端加密确保只有你和 AI 能读取对话内容。 LingKong 基于 Signal Protocol 设计,提供前向保密和密钥轮换保护。
🔐
Ed25519 身份
🔁
X25519 KEM
🔒
ChaCha20 加密
Poly1305 认证
🔑
KEM 密钥封装
非交互式密钥建立,无需多轮握手
🔒
ChaCha20-Poly1305
AEAD 认证加密,机密性+完整性保障
Ed25519 签名
数字签名验证消息真实性,防篡改
🔄
前向保密
每次请求使用临时密钥,历史消息不可破解

加密 API 端点

GET /crypto/status
检查加密功能状态
响应示例
{
  "crypto_available": true,
  "server_keys_loaded": true,
  "registered_clients": 3,
  "algorithms": {
    "key_exchange": "X25519",
    "signature": "Ed25519",
    "encryption": "ChaCha20-Poly1305",
    "kdf": "HMAC-SHA256"
  }
}
GET /crypto/public-key
获取服务器公钥(用于加密请求)
响应示例
{
  "signing_public": "base64_ed25519_public_key",
  "x25519_public": "base64_x25519_public_key",
  "user_id": "server_unique_id"
}
POST /v1beta/models/{model}:generateContentEncrypted
加密的内容生成 API

密钥交换流程

使用 LingKong Client SDK 进行端到端加密通信

Python - 使用 LingKong Client SDK
from lingkong_client import LingKongClient

# 1. 创建客户端 (自动获取服务器公钥)
client = LingKongClient(
    base_url="https://lingkong.xyz",
    api_key="sk-your-api-key"
)

# 2. 发送加密请求
response = client.generate_content(
    prompt="你好,请介绍一下端到端加密",
    encrypted=True  # 启用端到端加密
)

# 3. 获取解密后的响应
print(response.text)

# 备份客户端密钥 (重要!)
keys = client.export_keys()
print(f"User ID: {keys['user_id']}")
# 安全存储 keys['signing_key'] 和 keys['x25519_key']
Python - 底层 API (使用 lingkong_crypto)
import lingkong_crypto as lk
import requests
import json

# 1. 生成客户端密钥对
client_keys = lk.UserKeys()
print(f"Client ID: {client_keys.user_id()}")

# 2. 获取服务器公钥
resp = requests.get("https://lingkong.xyz/crypto/public-key")
server_x25519_public = lk.base64_decode(resp.json()["x25519_public"])

# 3. 构建请求
request_body = {
    "contents": [{"parts": [{"text": "你好"}]}],
    "generationConfig": {"maxOutputTokens": 256}
}

# 4. 加密请求 (KEM + ChaCha20)
encrypted_req = lk.EncryptedRequest.create(
    json.dumps(request_body),
    client_keys,
    bytes(server_x25519_public)
)

# 5. 发送加密请求
resp = requests.post(
    "https://lingkong.xyz/v1beta/models/gemma:generateContentEncrypted",
    json=json.loads(encrypted_req.to_json())
)

# 6. 解密响应 (使用共享密钥)
# ... 响应解密逻辑

加密消息格式

请求和响应的加密信封结构

加密请求结构 (EncryptedRequest)
{
  "ephemeral_public": "base64_x25519_临时公钥",
  "ciphertext": "base64_chacha20_加密内容",
  "nonce": "base64_12字节随机数",
  "sender_id": "base64_ed25519_签名公钥",
  "signature": "base64_ed25519_签名",
  "timestamp": 1735862400
}
加密响应结构 (EncryptedResponse)
{
  "ciphertext": "base64_chacha20_加密响应",
  "nonce": "base64_12字节随机数",
  "signature": "base64_服务器签名",
  "timestamp": 1735862401
}
安全提示
每条消息都使用唯一的临时密钥对 (ephemeral_public),确保前向保密。 即使长期密钥泄露,历史消息也无法被解密。

双棘轮协议 (可选)

长期会话的增强前向保密

💡
适用场景
对于长期会话或高安全需求场景,可以使用双棘轮协议。 每条消息都会触发密钥轮换,提供更强的安全保障。
Python - 双棘轮会话
import lingkong_crypto as lk

# 1. 初始化会话 (发起方)
shared_secret = ...  # 从 KEM 获取
peer_dh_public = ...  # 对方 DH 公钥

session = lk.DoubleRatchetSession.init_as_initiator(
    shared_secret,
    peer_dh_public
)

# 2. 加密消息 (发送)
ciphertext, nonce, current_dh = session.encrypt(b"Hello!")

# 3. 解密消息 (接收)
plaintext = session.decrypt(
    ciphertext,
    nonce,
    sender_dh_public
)

# 4. 查看会话状态
print(f"发送消息数: {session.send_count}")
print(f"接收消息数: {session.recv_count}")
print(f"DH 棘轮次数: {session.dh_ratchet_count}")

# 5. 保存会话状态
state_json = session.export_state()
# 存储到安全位置...

# 6. 恢复会话
restored = lk.DoubleRatchetSession.import_state(state_json)
🔁
KEM 初始化
🔄
链棘轮
🔑
DH 棘轮
🔒
消息加密

错误处理

状态码 错误类型 说明
200 成功 请求处理成功
400 请求错误 请求参数无效或缺失
500 服务器错误 推理服务异常
错误响应格式
{
  "error": {
    "message": "contents 不能为空",
    "code": "400"
  }
}

💻 在线测试

POST /v1beta/models/gemini-3-pro-preview:generateContent
响应
点击"发送请求"查看响应...