Skip to content

LLM2Jev v0.1.0 ​

给你的 LLM / MLLM 装上决策引擎。零训练,直接获得决策能力。

LLM2Jev 使用现有模型权重,将受支持的 LLM / MLLM 转换为 Jev 风格的决策模型。支持 SGLang、Transformers 和 MLX 后端,仅需 prefill 即可从文字与图片中完成分类、评分和动作选择。Python client 在 OpenAI SDK 上扩展结构化决策请求。

主要特性 ​

  • 无需训练或微调:直接使用现有模型进行结构化决策。
  • 仅需 prefill:读取下一 token 的 yes/no logits,直接组装结果,无需生成答案或解析生成的 JSON。
  • 文字与图片:在 state 或题目 instructions 中组合证据;图片支持 HTTP(S)、本地路径、file URI 和 Base64 data URL。
  • Choice、Score 与 Noul:同一次请求可混合题型,返回选项概率分布、量表评分和是非概率。
  • 聊天与决策共用服务和模型:使用 SGLang 后端时,/v1/systemone 与原生 OpenAI 兼容聊天接口共用推理引擎和模型。
  • 聊天与决策共用 client:同步 Client 和异步 AsyncClient 在 OpenAI Python SDK 上新增 systemone.create(),保留原有接口、认证、超时和重试;服务端支持两类接口时,可通过同一个 client 调用。
  • 三种后端:支持 SGLang、Transformers 和 Apple Silicon 上的 MLX/MLX-VLM,提供 offline Python 推理与 HTTP 服务。
  • 共享前缀复用:支持 SGLang Radix Cache 分阶段候选评分与 MLX 显式共享前缀预热。
  • 按请求控制选项渲染:include_choice_candidates=False 隐藏各候选提示词中的完整 Choice 列表,默认为 True;全部候选仍参与评分。

开始使用 ​

通过 README 快速启动服务和 client,或参阅使用指南了解 offline 推理、异步调用和后端配置。

python
from llm2jev import Client, Choice

client = Client(base_url="http://localhost:30000/v1", api_key="unused")
response = client.systemone.create(
    model="local-model",
    state="我的信用卡被重复扣款了。",
    questions={"department": Choice(criteria={
        "billing": "扣款和账单", "shipping": "物流配送",
    })},
)
print(response.choices["department"].probabilities)

支持范围与验证 ​

模型兼容性取决于后端对 tokenizer、chat template 和图片输入的支持。MLX 和 Transformers HTTP 服务目前提供 /v1/systemone、/v1/models 和 /health;聊天与决策共用服务通过 SGLang 提供。client 保留 SDK 原有方法,实际调用需要服务端实现对应接口。

概率和 confidence 是从模型分数得到的结果,不保证已校准,也不保证与 Jev 官方服务数值一致。性能取决于模型、硬件、输入长度、候选数量和缓存状态。实测结果与条件见 JevBench 和前缀缓存性能测评。

实现已通过 261 项测试(6 项可选 MLX 原生测试跳过)、递归语法检查及源码包和 wheel 构建。client 测试使用确定性 HTTP transport 和 fake 模型后端。

LLM2Jev 是独立开源项目,与 Jev 或 TypeSafe 没有关联,也未获得其认可或授权。

独立开源项目,与 Jev 或 TypeSafe 无关联。