码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • TensorSharp 支持 Jev 模式了:一次去噪,直接读出决策


    从"让模型写 JSON"到"从 logits 里读答案",Jev 模式做的事其实就一件:把决策问题还原成它本来的样子——有边界的概率读取。vLLM 开了头,TensorSharp 把这条路在 .NET 生态里走通了。本来就在用 C# 做本地推理的同学,现在一条 HTTP 请求或者一个 JevAsync 调用,就能在本地放一台毫秒级响应的决策引擎。
    合集 - AI开源项目(61)
    1.为 openclaw.net 集成 ElBruno.MempalaceNet 记忆系统05-032.Graphify-DotNet:AI 驱动的 .NET 代码知识图谱构建工具05-023.SonnetDB:.NET 生态下的高性能嵌入式时序数据库04-284.C# 原生编码智能体运行时 SharpClawCode04-275.SharpIDE: 基于 .NET 与 Godot 引擎的跨平台开源 IDE04-266.OpenClaw.NET .NET 原生插件开发完全指南:以 Mempalace 插件为范例05-057..NET生态系统中的A2A(Agent-to-Agent)协议支持与跨平台多智能体协同05-068.Memgraph 与 Neo4j 图数据库对比及 .NET 生态适配分析05-089.OpenClaw.NET 外部 CLI 连接器 (External CLI Connectors) 详细技术总结05-1010.OpenClaw.NET:给智能以形态05-1211.架构融合:Activity Host 作为确定性编排与认知智能代理的桥梁05-1812.OpenClaw.NET 兼容性目录指南(Compatibility Catalog)05-2113.当 AgentGateway 遇上 OpenClaw.NET:企业级智能体基础设施的深度协同实战06-0614.OpenClaw.NET 上线 MetaSkills :软件工程第一性原理的工业级实践06-1715.OpenClaw.NET MetaSKILLs 系统深度解析:AI Agent 正在学会「自己给自己写技能」06-1816.OpenClaw.NET 重大更新:Goal 机制登场,让 AI Agent 不再"半途而废"06-1817.OpenClaw.NET 祭出 TokenJuice:Agent 时代的"Token 瘦身引擎",让 LLM 上下文不再膨胀06-1918.从 OpenClaw.NET 的 /loop 实现,看 Loop Engineering 如何从概念走向工程实践06-2019.将 Rust 绑定到 .NET 10:Oxigraph 的 FFI 桥接实践06-2820.Token IO 架构的设计游戏:大模型产品形态四年演进的本质06-2921.当 AI 不再只是"说话":OpenClaw.NET 率先原生支持 MCP Apps06-3022.你的 AI Agent 会在服务器上"修仙"——OpenClaw.NET 长持久会话技术解读07-0423.从 Bun 的 Rust 重写,看 C# 如何重建 AI 基础设施层07-1024.当 AI 对话里直接弹出业务界面:MCP Apps 正在改写 SaaS 的集成逻辑07-1225.MCP + A2A 融合:协议层已就绪,信任层才是硬仗07-2126.C# MCP SDK 2.0 即将发布:去会话化、去握手、去运维噩梦07-2427.数字员工的成本账:OpenClaw.NET 如何用工程化实现"成功任务的单位经济学"(下)07-2328.25家巨头联名的那封公开信,为什么数字员工架构师应该逐字读一遍07-2829.从 Harness 引擎到 MetaSkill DAG 的确定性架构07-3030.从DDD到Ontology:当数字员工不再认"限界上下文"这堵墙07-3131.把 284B 的 DeepSeek V4 Flash 装进纯 .NET:TensorSharp 用一天改写了 .NET 推理栈的位置08-0132.MCP 第五版 × OpenClaw.NET:从协议升级到生态编排08-0233.纯 C# 追平 llama.cpp?.NET 本地推理三国杀08-0334."从"前锋"到"中场":为什么 Agent 基础设施的建设者必须是系统思考者08-0435.修 Bug 的手艺与架构的艺术:从熵增到熵减08-0636.改变世界的17个方程,如何重塑 GoodCrew 的架构哲学08-0637.Agent 系统的不确定性治理:当软件工程遭遇"梯度下降"08-1138.WorkBuddy 专家团的下一步:用 MetaSkill 把「提示词约定」升级为「运行时硬约束」08-1039.JVMGuard 来了,.NET 开发者别慌:你的 dotnet-monitor 早就准备好了08-1440.两种 Harness 哲学:从 DeepSeek Harness 的"过度抽象"争议,看 OpenClaw.NET 的另一种答案08-1541.当"入门第一课"的作者开始 Vibe Coding:廖雪峰 2026 上半年 AI 编程实践深度探索08-1642.TensorSharp 最新进展研究报告:从 DeepSeek V4 Flash 到 GLM-5.2,以及等待中的 GLM-5.308-2043.AI 编程时代,.NET 的机会在哪里?08-2544.3 张卡到底能不能跑大模型推理?从 vLLM、llama.cpp 到 TensorSharp 的多卡真相08-2845.纯 .NET 手写 CUDA kernel,GLM-5.3-Flash decode 跑出 llama.cpp 的 2 倍08-2946.TensorSharp 3.3.0.0 发布,视频生成、DFlash2 投机解码、安全加固一起来了08-3147..NET 异常处理的"暗门":代码里写满 catch,你依然能抓住它——从一个 AI Agent 运行时的源码说起09-1148.MetaSkill 落地 .NET:当 Agent 从「调用工具」进化到「组织工具」09-0349.写给 Java 工程师的 OpenClaw.NET 上手指南:用你熟悉的 Spring 思维,跑起一个生产级 AI Agent09-0650.写给 Golang 工程师的 OpenClaw.NET 上手指南:用你熟悉的 Go 思维,跑起一个生产级 AI Agent09-0451.写给 Python 工程师的 OpenClaw.NET 上手指南:用你熟悉的 Python 思维,跑起一个生产级 AI Agent09-0552.写给 TypeScript 工程师的 OpenClaw.NET 上手指南:用你熟悉的 TS 思维,跑起一个生产级 AI Agent09-0553.写给 Rust 工程师的 OpenClaw.NET 上手指南:用你熟悉的 Rust 思维,跑起一个生产级 AI Agent09-0854.写给 C++ 工程师的 OpenClaw.NET 上手指南:用你熟悉的 C++ 思维,跑起一个生产级 AI Agent09-1055.写给 PHP 工程师的 OpenClaw.NET 上手指南:用你熟悉的 PHP 思维,跑起一个生产级 AI Agent09-0956.RedNb.Nacos 2.0.0 正式发布:.NET 接入 Nacos 3.2.4,AI Registry 全能力落地09-1357.把 LLM 密钥从环境变量里解放出来:OpenClaw.NET 迎来 Vault/OpenBao 密钥后端09-1658.事件风暴遇上 MetaSkill:把企业「世界模型」变成可执行的 DAG09-21
    59.TensorSharp 支持 Jev 模式了:一次去噪,直接读出决策09-23
    60.定时任务还想上 Hangfire?这个被 AI Agent 项目看上的 TickerQ,把反射全干掉了09-2461.不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线09-25
    收起

    2026年9月22日 vLLM 合并了 PR #57250,给 DiffusionGemma 加了一种 Jev 风格的结构化读取模式。我们跟得很快,TensorSharp PR #225 今天也合并了:纯 .NET 原生推理引擎现在可以直接跑 Jev 模式,模型用的是 Google 的 DiffusionGemma-26B-A4B(26B 总参数、约 3.8B 激活的 MoE 文本扩散模型)。HTTP 和原生 .NET 代码都能调,接口兼容 Jev 的 systemone 协议,同硬件对比 LocalJev 快了 4–5 倍。
    TensorSharp Jev 模式架构图

    先说 Jev 是什么

    Jev 是 Typesafe.ai 提的一条"决策模型"路线,不做开放式生成,只回答有边界的结构化问题:是/否(Jev 里叫 noul)、多选、评分。调用方给一段状态(state)加一组带类型的问题,模型返回每个答案的概率和置信度。

    本地能跑的开源实现是 GitHub Next 的 LocalJev。它的做法是:让普通 chat 模型把概率值当 JSON 文本生成出来,然后校验、解析,格式不对就重试。能跑通,但为几个数字要扛下整条生成管线的开销——逐 token 自回归、JSON 语法风险、解析失败重试,延迟和不确定性都被放大了。

    DiffusionGemma 这类文本扩散模型给了另一条路:它的输出本来就是一个可以预先固定住大部分 token 的 canvas。vLLM PR #57250 的思路很直接——把答案位置留成单 token 的槽位,只做一步去噪,从收敛步的 logits 里读出各候选标签的概率。不采样,不生成 JSON,不重试。PR 作者的原话是,DiffusionGemma 可以被当成一台"经过校准的选择题机器"。

    TensorSharp 里是怎么落地的

    PR #225 一次提交了 40 个文件、+4173 行,核心几块:

    • TensorSharp.Chat/Jev/:请求解析校验(JevRequest)、模板编译(JevCompiler)、并发门控(JevExecutionGate)、推理调度(JevInference);
    • POST /v1/systemone HTTP 端点:Jev 兼容协议适配器,和同一服务器上的普通 chat 端点共存;
    • DiffusionGemmaModel.ReadStructured(...) 低层 API:构造答案 canvas,单步读取指定标签的 logits;
    • 稀疏输出投影:只算答案位置和请求词汇行的 logits,不再分配完整的 canvas×词表张量;
    • 一整套基准和对比工具(eng/jev-benchmark.py、eng/jev-localjev-compare.ts 等),外加 293 行的文档 docs/models/jev.md。

    两点澄清:jev-latest / jev-preview 只是所加载 DiffusionGemma 模型的 API 别名,不是独立 checkpoint,更不是 Typesafe 的托管 Jev 模型;模板逻辑参考了 LocalJev(Apache-2.0,NOTICE 里已署名),但数值上和谁都不承诺对齐。

    怎么调

    HTTP

    启动(Q4_K_M 量化 + CUDA 为例):

    $env:TENSORSHARP_MODELS = 'C:/Works/models'
    $env:DIFFUSION_VRAM_HEADROOM_MB = '4096'
    $env:MAX_CONTEXT = '4096'
    dotnet run --project TensorSharp.Server.Host -c Release -- --config config/jev-diffusiongemma-q4.json
    

    一条 curl 就行:

    curl http://127.0.0.1:5000/v1/systemone \
      -H 'Content-Type: application/json' \
      --data-binary @docs/examples/jev-ticket.json
    

    最小请求:

    {
      "model": "jev-latest",
      "state": "I was charged twice for the same subscription this month.",
      "questions": {
        "billing": { "type": "noul", "instructions": "Is this a billing issue?" }
      },
      "samples": 1,
      "seed": 42
    }
    

    返回里 answers.billing.noul 就是"是计费问题"的概率。

    原生 .NET

    引用 TensorSharp.Chat,进程内直接调,不过 HTTP:

    using System.Text.Json;
    using TensorSharp.Server;
    using TensorSharp.Server.Jev;
    
    using var service = new ModelService();
    service.LoadModel("C:/Works/models/diffusiongemma-26B-A4B-it-Q4_K_M.gguf",
                      mmProjPath: null, backendStr: "ggml_cuda");
    using var json = JsonDocument.Parse(File.ReadAllText("docs/examples/jev-ticket.json"));
    object response = await service.JevAsync(JevRequest.Parse(json.RootElement));
    Console.WriteLine(JsonSerializer.Serialize(response));
    

    想再底层一点,可以直接用 DiffusionGemmaModel.ReadStructured(promptTokens, seedCanvas, positions, tokenIds) 自己控制 canvas;服务层帮你处理分词、模板渲染、上下文检查、canvas 构造、序列化和生命周期安全,一般用不着下沉到这个层级。

    接口能干什么

    能力 说明
    问题类型 noul(布尔)、choice(多选)、score(评分,返回概率加权期望)
    规模上限 单请求最多 64 个问题,每题 2–26 个候选项
    多次读取 samples 1–32 次独立 seeded 读取取平均;auto 模式下条件熵超阈值自动追加读取(上限 32)
    分块 超出 canvas 宽度的 schema 按 chunk_rows 分块,多题共享一次 transformer 前向
    复用 多次读取复用同一份 prompt K/V(GGML CUDA / Metal 开启 prompt cache 时)

    错误处理比较工程化:schema 非法返回 422,未知模型 404,模型不可用 503,排队超限 529,请求体超限 413,不会出现挂着等超时的情况。

    为什么快 4–5 倍

    和 LocalJev 的对照测试里(相同 state、相同问题集,对比工具会把 LocalJev 的提示词构造、推理、JSON 校验和重试全部计入耗时),TensorSharp 快了大约 4–5 倍。这个差距是结构带来的,不是某个黑科技:

    1. 不做生成,只做读取。 LocalJev 让模型把概率 JSON "写"出来,TensorSharp 在一步去噪后从 logits 里直接"读"——数学上等价于从完整词表分布里取出相同标签再归一化,但整条解码循环省掉了。
    2. 稀疏输出投影。 输出头只算请求的标签行,显存和算力都花在刀刃上。
    3. 无解析、无重试。 LocalJev 要为格式错误的 JSON 付重试成本,这条路径上没有这个故障模式。
    4. prompt K/V 复用。 自适应多次读取共享同一份前缀缓存,追加读取的边际成本很低。

    前提也要交代清楚:数字来自特定硬件(16GB 级 CUDA GPU、Q4_K_M 量化)和特定负载。官方文档专门提醒过,vLLM 原型在 DGX Spark 上公布的数据、LocalJev 在 M5 Max 上公布的数据,都不能直接拿来当同硬件对比。量化位数、问题措辞、答案顺序、读取次数都会影响结果。

    哪些事它明确不做

    • 只支持单 token 标签。 候选项必须映射到单 token("moderation_spam" → "A" 这种变换由编译器自动完成并校验);多 token 候选项、图片输入、问题间依赖链、多步去噪、think 模式一律显式拒绝。
    • 置信度不是校准过的正确率。 返回的是条件概率和熵诊断,建议在自己的留出样本上评估后再定阈值。
    • 可复现性以运行时为界。 seed 保证同一 .NET 运行时/后端下可重复,不承诺和 Python 噪声逐位一致。
    • 普通 chat 端点不受影响。 Jev 请求和普通扩散 chat 共享模型执行锁串行调度,同机混部是安全的。

    相关链接

    • TensorSharp PR:https://github.com/zhongkaifu/TensorSharp/pull/225
    • 完整文档:docs/models/jev.md(请求字段表、概率语义、基准方法都在里面)
    • 模型 checkpoint:google/diffusiongemma-26B-A4B-it(Apache-2.0),社区 Q4_K_M GGUF 首次启动自动下载
    • 灵感来源:vLLM PR #57250(https://github.com/vllm-project/vllm/pull/57250 )

    从"让模型写 JSON"到"从 logits 里读答案",Jev 模式做的事其实就一件:把决策问题还原成它本来的样子——有边界的概率读取。vLLM 开了头,TensorSharp 把这条路在 .NET 生态里走通了。本来就在用 C# 做本地推理的同学,现在一条 HTTP 请求或者一个 JevAsync 调用,就能在本地放一台毫秒级响应的决策引擎。

    欢迎大家扫描下面二维码成为我的客户,扶你上云

  • 相关阅读:
    GOPS·2023上海站 | 提前剧透!阿里、腾讯、字节、擎创等专家齐聚上海,共话互联网运维
    怎样判断磁场力方向
    软件架构设计(八) 基于架构的软件开发方法
    【数据链路层】网络基础 -- MAC帧协议与ARP协议
    【刷题笔记9.25】LeetCode:环形链表
    6.前端·新建子模块与开发(常规开发)
    Java-面向对象的特征之一:封装
    如何保护压缩包里的内容不被看到?
    PHP 底层的运行机制和工作原理
    【SSM整合】SpringMVC + Spring + Mybatis整合详细教程
  • 原文地址:https://www.cnblogs.com/shanyou/p/23096117
  • 最新文章
  • 【FHE】我们如何实现同态加密推理(八):SiLU 的密文化——两条路径,和一个 8 字节的开关
    SQLcl 中 c/old/new 替换变量为何失效?先定位再替换
    不让模型写作文,直接从它脑子里读答案:Jev 决策在 .NET 的两条路线
    Halo插件:支持GitHub的图床附件策略
    电视投屏界的“一股清流”!SimpleTVCast 6.0.0-beta 抢先体验:无需TV端App,界面大换血!✨
    华三VXLAN集中式网关实战指南:Spine多活网关 + 双活接入(M-LAG)
    软件更好写之后口碑会更重要
    大 O、大 Omega、大 Theta 的区别,O(n) 复杂度是什么意思
    Java标签跳转:一个鲜为人知但却很实用的小技巧
    多智能体系统论文速读
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号