共绩科技
共绩科技

预制服务

共绩算力 Laya 镜像使用说明

Laya 是什么

Laya 是 ConvAI Innovations 开源的轻量级决策模型。它接收文本或 JSON 状态,以及开发者定义的问题和候选答案,返回分类结果、评分与概率,适合工单分流、邮件分类和条件判断。

本教程部署的是英文 Laya 检查点的 GGUF 版本,采用 ModernBERT-large 编码器与决策头,约 4.21 亿参数,默认上下文为 512 token,权重采用 Apache 2.0 许可。平台通过 llama.cpp 加载 Laya-BF16.gguf,提供 POST /v1/systemone 接口。

它适合候选答案能够提前定义的任务。开发者给出问题和选项,模型根据输入评分,业务程序读取结果后执行分流或设置处理优先级。

Laya 与其他语言模型有什么区别?

常见的生成式语言模型通过逐个生成 token 来回答问题,可以用于聊天、问答、写作和代码生成,也可以按照提示词或格式约束输出 JSON。Laya 则面向决策任务:开发者提前定义问题和候选答案,模型直接对候选项评分,返回结构化结果与概率。

以客服工单为例,使用生成式语言模型,可以要求它判断负责团队并解释原因;使用 Laya,则提交“技术、账务、其他”三个选项,读取各自的概率,再由程序执行分流。前者适合需要生成内容或解释的场景,后者适合答案范围明确、需要由程序读取评分并采取行动的场景。

对比项常见生成式语言模型Laya
回答方式逐个生成 token对预设问题的候选项评分
输出结果文本,或按指定格式生成 JSON所选项、评分与概率
内容生成支持写作、问答等内容生成不生成自由文本
解释理由可以生成解释文本不生成自由文本解释
答案范围可以开放,也可以通过提示词或约束限制在请求中定义候选项、评分等级或判断条件
适用任务聊天、写作、问答、代码生成分类、路由、评分、条件判断
程序接入读取生成文本或结构化输出读取 answers 中的选项与概率

本镜像加载的是英文检查点。下面使用英文工单验证;中文或其他语言任务需要另行选择相应检查点,不能将此单模型服务视为自动多语言路由服务。

Laya 的输出:选项、评分与概率

Laya 返回结构化决策结果。每个问题的答案位于响应的 answers 中,以请求时定义的问题 ID 对应。不同问题类型,返回形式也不同。llama.cpp SystemOne 接口说明

问题类型用途主要返回字段
choice从预设选项中选择choice、probabilities、confidence
score按有序等级评分score、legend、probabilities、confidence
noul判断指定条件是否成立noul,表示该条件为真的概率

score 返回按概率加权的等级索引,可以是小数。例如三个等级的索引为 0、1、2,结果可能位于两个等级之间。noul 返回 0 到 1 的数值,需要由程序根据业务规则决定如何处理。

部署流程

01. 进入弹性部署服务并新增任务

访问 弹性部署服务页面,在左侧找到“新增部署任务”。

Image

点击“新增部署任务”,进入 任务创建页面。若页面跳转到登录,先完成账号登录。

02. 选择计算资源

在计算资源区域选择 RTX 5090,卡数从 1 卡开始;RTX 4090 可作为备选。核对可用资源、CPU、内存和价格后,继续下拉至服务配置。

下面是现有 Laya 任务的配置:天津一区、单卡 RTX 5090、32GB 显存、63GB 内存、16 核 CPU、1 个节点。5090 节点的归档日志记录了模型加载成功;4090 未在本次任务中实测。

Image

03. 选择 Laya 预制服务

在“服务配置”中查找并选择 Laya,使用平台对应的预制镜像与默认配置。

Image

本教程使用以下镜像:

harbor.suanleme.cn/public-hub/llama.cpp:laya-cuda12-20261009

容器通过 llama-server 加载下面的模型文件:

/models/ggml-org/Laya-GGUF/Laya-BF16.gguf

这是 llama.cpp 单模型服务。调用时使用 /v1/systemone,由已经加载的 Laya 模型回答问题。

04. 等待实例就绪

返回任务列表或详情,观察实例状态与启动日志。首次启动可能涉及镜像拉取、权重加载和服务初始化。

该任务的 RTX 5090 节点归档日志包含以下记录:

srv          init: decision model type: laya
srv  llama_server: model loaded
srv  llama_server: listening on http://0.0.0.0:8080

看到 model loaded 和 listening on http://0.0.0.0:8080,说明模型加载完成,HTTP 服务开始监听。随后还需通过接口请求验证服务是否可以正常返回答案。

在“快捷访问”中复制 8080 端口对应的对外服务地址。本任务页面中记录的地址为:

https://deployment-452-wo1cfujh-8080.550w.link

Image

该任务在读取时处于“已停止”状态。使用下面的地址前,需要先恢复任务运行;若重新部署导致域名变化,以任务详情中的最新地址为准。

小例子:工单自动分流

假设客服系统收到一条工单:

The application crashes every time I open settings. Please help today.

每次打开设置时,应用都会崩溃。请今天帮我解决。

我们希望一次请求完成两个判断:

  • 负责团队:从技术、账务和其他三个选项中选择。
  • 是否请求今天得到帮助:返回这一判断为真的概率。

使用 cURL 调用

下面的服务地址已经替换为该任务的 URL。任务运行并就绪后,可以使用以下请求,并将响应保存为 laya-response.json:

export SERVICE_URL="<服务的url>"

curl --fail-with-body --max-time 120 \
  "${SERVICE_URL%/}/v1/systemone" \
  -H "Content-Type: application/json" \
  --data-binary @- <<'JSON' | tee laya-response.json
{
  "state": "The application crashes every time I open settings. Please help today.",
  "questions": {
    "department": {
      "type": "choice",
      "instructions": "Which team should handle this ticket?",
      "criteria": {
        "technical": "Application bugs or outages",
        "billing": "Payments, invoices or refunds",
        "other": "Other requests"
      }
    },
    "urgent": {
      "type": "noul",
      "instructions": "Does the user request help today?"
    }
  }
}
JSON

其中,state 是待判断的工单内容,questions 定义需要回答的问题。department 和 urgent 是自行定义的问题 ID,响应会通过相同 ID 返回答案。

choice 用于在候选项中选择,criteria 描述各选项的含义;noul 用于返回指定判断为真的概率。本例省略 model,使用服务已加载的单个模型。

历史启动日志显示服务当时未设置 API Key。若后续开启鉴权,需要设置真实密钥,并在请求中增加:

-H "Authorization: Bearer ${SERVICE_API_KEY}"

实际响应

当前任务已停止,本次尚未取得该工单的真实响应,因此此处不填写概率数值。任务恢复后,运行上面的请求,laya-response.json 即为实际响应,可直接将其中的完整 JSON 放入本节。

响应应包含 answers.department 与 answers.urgent,并通过请求中的问题 ID 对应答案;具体选择结果和概率以实际接口返回为准。

输出说明

字段含义程序中的读取方式
department.choice模型选择的负责团队answers[“department”][“choice”]
department.probabilities各团队的概率按 technical、billing、other 读取
department.confidence分类结果的置信度指标answers[“department”][“confidence”]
urgent.noul用户请求今天得到帮助的概率answers[“urgent”][“noul”]

这条工单描述了应用崩溃,我们希望模型能据此识别技术类问题;“Please help today” 则对应第二个问题。是否正确识别,需要核对真实响应,不能仅凭输入内容预填模型结果。

这里的 urgent 只是问题名称,实际判断的是“用户是否请求今天得到帮助”。若要判断故障等级、业务影响或是否需要立即升级处理,应另行定义对应问题。

confidence 与所选项的 probabilities 是不同字段,不能把两者混用。概率也不等同于分类准确率。

在程序中使用结果

获得响应后,可以读取所选团队和概率,并设置业务规则:

import json

# 读取上面的 cURL 请求保存的实际响应。with open("laya-response.json", encoding="utf-8") as file:
    result = json.load(file)

answers = result["answers"]

department = answers["department"]["choice"]
department_probability = answers["department"]["probabilities"][department]
help_today_probability = answers["urgent"]["noul"]

print(f"负责团队:{department}")
print(f"所选团队概率:{department_probability:.2%}")
print(f"请求今天得到帮助的概率:{help_today_probability:.2%}")

# 示例规则:概率达到 80% 时标记为优先处理。# 该阈值由业务程序设置,应结合实际数据确定。
priority = "优先处理" if help_today_probability >= 0.8 else "常规处理"print(f"按示例规则设置优先级:{priority}")

程序会打印实际返回的团队、所选团队概率,以及按示例规则计算出的优先级。模型负责评分,程序依据结果分配工单;上线前应使用自己的代表性工单验证效果并确定阈值。