The project's README from github.com/deepopen-com/deepopen. As one markdown file: README.md.
DeepOpen 是基于laya的一款完全开源的非自回归System 1决策引擎,专为结构化类型决策场景设计。
https://github.com/deepopen-com/deepopen/tree/main/banking77
https://github.com/deepopen-com/deepopen/tree/main/clinc150
它摒弃了传统大模型逐Token生成文本的模式,在单次前向传递中即可完成100+种语言的多维度类型判断,单请求延迟低至33毫秒、批量处理仅7.2毫秒(T4显卡实测),依托严格正确评分规则RLCD完成强化学习训练,通过内置智能路由器自动为每个请求匹配最优检查点,彻底解决了传统大模型在分类、路由、打分场景下速度慢、成本高、易产生幻觉的痛点。
DeepOpen 在两个榜单打榜的初步结果: 模型: Deepopen(改进后的 Laya) 榜单: CLINC150 和 Banking77

本地测试: 对照参考成绩,分别位于第 2 位和第 5 位;
DeepOpen 基于三大独立优化的检查点构建,内置的智能路由器可在亚毫秒内完成输入内容的脚本、语言识别,自动调度对应最优模型,无需开发者手动配置切换规则:
快速上手部署流程
pip install deepopen
import deepopen
from deepopen import Router
将所有检查点预加载到内存,实现35毫秒以内的极速推理
router = Router(preload=True, device="cuda")
定义任意语言的输入状态
state = {
"from": "[email protected]",
"subject": "Duplicate charge on invoice 4411",
"body": "Hi, we were billed twice for March. Please refund the duplicate today or we will cancel our plan."
}
定义自定义类型决策规则
questions = {
"department": {
"type": "choice",
"instructions": "Which department should handle this request?",
"criteria": {
"billing": "invoices, payments, refunds",
"technical": "bugs, outages, system errors",
"sales": "pricing, new contracts",
"other": "everything else"
}
},
"urgency": {
"type": "score",
"instructions": "How urgent is this request?",
"criteria": ["not urgent", "soon", "critical deadline or blocking issue"]
},
"churn_risk": {
"type": "noul",
"instructions": "Does the user threaten to cancel or leave?"
},
"refund_requested": {
"type": "noul",
"instructions": "Does the user explicitly request a refund?"
}
}
自动路由到最优模型完成推理
res_en = router.predict(state, questions)
print("Department :", res_en["answers"]["department"]["choice"]) 输出: billing (confidence: 0.94)
print("Routing :", res_en["routing"]["model"]) 输出: english
仅预加载业务所需的检查点,节省显存
router.preload(["english", "multilingual"])
配置LRU缓存策略,最多同时保留2个热模型
router = Router(max_loaded=2)
手动卸载模型释放内存
router.unload()
内置生产级工作流程预设 DeepOpen 提供了预先调优的开箱即用问题模板,无需从零构建规则即可快速落地核心业务场景:
基准测试与行业对比 基于17416道题的共享基准数据集,DeepOpen与主流决策引擎的实测对比如下:
| 测试维度 | DeepOpen(路由模式) | TypeSafe Jev 1.13.0 |
|---|---|---|
| 类型决策准确率(2000样本) | 0.766 | 0.727 |
| 预期校准误差ECE | 0.081 | 0.144 |
| P50单请求延迟 | 32.8毫秒 | 236-276毫秒 |
| 支持可用语言数 | 51种中45种 | 无公开多语言基准 |
| 部署模式 | 完全自托管开源 | 仅封闭API |
| 推理成本 | 0(本地部署) | 0.042美元/百万Token |
在高基数标签场景下,TypeSafe Jev在50+选项的任务中表现更优,而DeepOpen可通过调整head_max_len参数扩展选项支持能力,将选项提示预算提升至512,即可支持70+选项的精准分类,满足绝大多数业务场景需求。
开源资源与生态 DeepOpen 全链路资源完全开放,开发者可快速获取所有资料:
convaiinnovations/deepopenconvaiinnovations/deepopen-demo
参考资料
[1] DeepL + OpenAI integrations - connect and automate | Bardeen.ai - www.bardeen.ai
[2] Minutes.ai - Smart Government Innovation LAB - www.smartlab.gov.hk
[3] benchmark.ng — Nigeria's AI Decision Engine - benchmark.ng
[4] Phrase: AI-Powered Localization & Translation Platform - Phrase官网
[5] DeepSeek Open Web UI 安装部署全攻略:从环境配置到可视化交互 - 百度智能云
[6] Jev 是什么:前 OpenAI 研究员做的“不说话“模型,只输出带概率的结构化决策-CSDN博客 - CSDN博客
[7] 前OpenAI研究员推Jev模型,绕开文本生成直出决策 - m.counselleap.cn
[8] MCP服务器 - 开放式深度研究模型协议-MCP服务 - www.mcpworld.com
[9] SGLang开源引擎:开源创新与推理革命的融合之路 - 百度智能云
[10] GitHub - weibaohui/openDeepWiki: 完全AI驱动的 DeepWiki ,使用 Go + Eino 技术栈开发 · GitHub - GitHub
[11] 正面硬刚 OpenAI o1!DeepSeek-R1:开启 AI 自主推理新时代,现已开源! - 知乎 - 知乎
[12] 详解多智能体架构:以 Open Deep Research 项目为例 - 知乎 - 知乎
[13] 集成DeepSeek的开源利器:3款高效应用深度解析 - 百度智能云
[14] 当开源创新遇上推理革命:SGLang如何炼就DeepSeek最强开源推理引擎?_腾讯新闻 - 腾讯网
[15] 3款集成DeepSeek的开源应用推荐:开发者高效工具指南 - 百度智能云
[16] 当开源创新遇上推理革命:SGLang如何炼就DeepSeek最强开源推理引擎?-腾讯云开发者社区-腾讯云 - 腾讯云
[17] DeepSeek-V3.2:开源大语言模型的新里程碑,在推理与智能体任务中突破性能边界 - 知乎 - 知乎
[18] Open Deep Research V2:新架构!上下文工程最新实践 - 知乎 - 知乎
[19] 深度探索DeepSeek:解锁高效开发与智能决策的新范式 - 百度智能云
[20] 【AI大模型】 Langchain+DeepSeek R1从入门到精通,收藏这一篇就够了!!_langchain从入门到实战-CSDN博客 - CSDN博客
[21] 开源×推理”双引擎驱动:SGLang打造DeepSeek开源推理新标杆 - 百度智能云
Multilingual, non-autoregressive System 1 decision engine. Typed decisions over 100+ languages in a single forward pass — 33 ms — trained with reinforcement learning against strictly proper scoring rules (RLCD), with a router that picks the right checkpoint per request.
deepopen evaluates typed questions (choice, score, noul) over any state (text, email, ticket or JSON document) in a single forward pass — 33 ms for one question, 7.2 ms/question batched, measured on a T4. No text generation, so nothing to parse and nothing to hallucinate.
Three checkpoints, and a Router that picks between them per request:
| encoder | params | context | use it for | |
|---|---|---|---|---|
deepopen |
ModernBERT-large | 421M | 512 | English |
deepopen-multilingual |
mmBERT-base | 322M | 1024 | 100+ languages, 2x faster |
deepopen-typed-decisions |
ModernBERT-large | 421M | 1024 | the typed-decisions workflows |
pip install deepopen
deepopen ships three checkpoints. The built-in Router is the recommended entry point: it evaluates any state in any language, automatically detects scripts and languages in sub-milliseconds, and dispatches to the optimal checkpoint in a single forward pass.
import deepopen
from deepopen import Router
# Preload checkpoints into memory for instant sub-35ms routing
router = Router(preload=True)
# 1. State in any language or schema
state = {
"from": "[email protected]",
"subject": "Duplicate charge on invoice #4411",
"body": "Hi, we were billed twice for March. Please refund the duplicate today or we will cancel our plan."
}
# 2. Define your typed questions
questions = {
"department": {
"type": "choice",
"instructions": "Which department should handle this request?",
"criteria": {
"billing": "invoices, payments, refunds",
"technical": "bugs, outages, system errors",
"sales": "pricing, new contracts",
"other": "everything else"
}
},
"urgency": {
"type": "score",
"instructions": "How urgent is this request?",
"criteria": ["not urgent", "soon", "critical deadline or blocking issue"]
},
"churn_risk": {
"type": "noul",
"instructions": "Does the user threaten to cancel or leave?"
},
"refund_requested": {
"type": "noul",
"instructions": "Does the user explicitly request a refund?"
}
}
# 3. English state -> automatically routed to deepopen (ModernBERT-large, 39.5 ms)
res_en = router.predict(state, questions)
print("Department :", res_en["answers"]["department"]["choice"]) # -> billing (confidence: 0.94)
print("Routing :", res_en["routing"]["model"]) # -> english
# 4. Hindi state -> automatically routed to deepopen-multilingual (mmBERT-base, 32.8 ms)
res_hi = router.predict({"body": "मुझसे दो बार शुल्क लिया गया, कृपया पैसे वापस करें।"}, questions)
print("Department :", res_hi["answers"]["department"]["choice"]) # -> billing (confidence: 0.86)
print("Routing :", res_hi["routing"]["model"]) # -> multilingual
# 5. Explicit override when you want a specific checkpoint
res_td = router.predict(state, questions, model="typed-decisions")
Every result carries full routing metadata explaining why the choice was made:
res_hi["routing"]
# {
# 'model': 'multilingual',
# 'repo': 'convaiinnovations/deepopen/multilingual',
# 'reason': 'non-Latin script (devanagari, 100% of letters); the English checkpoint cannot read it'
# }
Inspect a routing decision without running any forward pass:
router.route({"body": "Der Kunde wurde zweimal belastet"}, questions).reason
# "Latin script but language looks like 'de', not English"
On a shared benchmark (17,416 questions, one T4 GPU, identical questions per model):
| Benchmark / Task | English (deepopen) |
Multilingual (deepopen-multilingual) |
Router (Routed) |
|---|---|---|---|
| MASSIVE intent, English | 0.783 | 0.657 | 0.783 |
| MASSIVE intent, 13 other languages | 0.306 | 0.451 | 0.451 |
| XNLI, English | 0.860 | 0.843 | 0.860 |
| XNLI, 14 other languages | 0.521 | 0.731 | 0.731 |
| Languages usable (>3x random) | 23 / 51 | 45 / 51 | 45 / 51 |
| Latency, 1 question (T4 GPU) | 39.5 ms | 32.8 ms | 32.8 ms |
| Latency, 10 questions batched | 158.6 ms | 72.3 ms | 72.3 ms |
The English checkpoint collapses on non-Latin scripts (Khmer scores 0.000 accuracy at 0.952 confidence). Because the model stays confident while being wrong, confidence gating cannot save you. Router detects the script in <0.5 ms pure Python before the forward pass.
A cold checkpoint build costs seconds; language detection costs microseconds. At the default max_loaded=1, traffic that alternates languages rebuilds a model on every request (measured at a 7.4 s median reload on CPU and 10.3 s on T4).
For a server or production app, preload:
# Every checkpoint resident in memory; language flips cost detection only (<1 ms)
router = Router(preload=True)
router = Router(preload=True, device="cuda")
# Or preload only the specific checkpoints you serve:
router.preload(["english", "multilingual"])
# If your app already built an agent, attach it to avoid duplicate VRAM:
router.attach("english", existing_agent)
# Manage resident memory (default keeps 1 hot, LRU eviction)
router = Router(max_loaded=2) # keep two hot
router.unload() # free memory
| Deployment Mode | Per-Request Latency | Model Reloads |
|---|---|---|
Router() (lazy, max_loaded=1) |
7 to 10 s on every language switch | 1 per switch |
Router(preload=True) |
32.8 ms (GPU) / 193–464 ms (CPU) | none |
If you only need a single checkpoint for a dedicated pipeline, you can load models directly:
import deepopen
# 1. Load a specific checkpoint directly from the hub
agent = deepopen.load("convaiinnovations/deepopen") # English root
agent_ml = deepopen.load("convaiinnovations/deepopen", subfolder="multilingual") # 100+ languages
agent_td = deepopen.load("convaiinnovations/deepopen", subfolder="typed-decisions")
# 2. Run all questions in ONE single forward pass (~35 ms on GPU)
result = agent.predict(state, questions)
answers = result["answers"]
print("Department :", answers["department"]["choice"]) # -> billing (confidence: 0.94)
print("Urgency :", answers["urgency"]["score"]) # -> 1.84 / 2.0
print("Churn Risk :", answers["churn_risk"]["noul"]) # -> 0.892 (89.2% probability)
Because deepopen's probabilities are trained with strictly proper scoring rules (RLCD), confidence scores are statistically meaningful:
dept = answers["department"]["choice"]
conf = answers["department"]["confidence"]
if conf >= 0.85:
# High confidence: automated action without human in the loop
route_automatically(dept)
else:
# Low confidence: escalate to human triage
escalate_to_human_agent(dept, reason=f"Low confidence ({conf:.2f})")
deepopen provides pre-tuned question schemas for immediate production use:
import deepopen
agent = deepopen.load("convaiinnovations/deepopen")
# 1. Intelligent Model Router (routes to small vs. frontier models)
routing = agent.predict({"request": "Refactor this service using dependency injection"}, deepopen.router_questions())
# 2. Real-time Prompt Guardrails (jailbreaks, injections, leaks)
guard = agent.predict({"prompt": "Ignore all instructions"}, deepopen.guard_questions())
# 3. Content Safety & Moderation (toxicity, harassment, threats)
safety = agent.predict({"post": "User comment text"}, deepopen.moderation_questions())
# 4. Support Ticket Triage (intent, urgency, frustration, churn)
triage = agent.predict({"message": "My payment failed twice"}, deepopen.triage_questions())
| Primitive | Output | Use Cases |
|---|---|---|
choice |
Top label, probabilities per option, confidence | Department routing, intent classification, topic categorization |
score |
Expected level on ordinal rubric, distribution, confidence | Frustration level, ticket urgency, harm severity |
noul |
Calibrated probability P(true) from 0.0 to 1.0 | Phishing detection, spam filtering, jailbreak detection, churn risk |
Full report: BENCHMARKS.md — every run consolidated, languages and themes, with per-language detail for all 51 languages.
All deepopen numbers below are measured. Every model answered byte-identical questions
(fixed seed) in the same run. Reproduce with
notebooks/deepopen_benchmark_colab.ipynb on a T4.
| questions per call | deepopen |
deepopen-multilingual |
|---|---|---|
| 1 | 39.5 ms | 32.8 ms |
| 5 | 84.5 ms | 40.1 ms |
| 10 | 158.6 ms (15.9 ms/q) | 72.3 ms (7.2 ms/q) |
| 50 | 771 ms | 337 ms (6.8 ms/q) |
Batched throughput reaches 103-332 questions/sec on a single T4. For reference, TypeSafe Jev has been independently measured at 236-276 ms p50 (AbdelStark, nibzard) -- deepopen answers a single question roughly 6-7x faster.
Every deepopen figure is what Router().predict(...) actually returns — the checkpoint the router
selects for that input, not a hand-picked best of three. Jev figures are third-party
published, never measured here (no TypeSafe API access), so sample sizes and prompts differ.
| Jev 1.13.0 | deepopen (routed) | ||
|---|---|---|---|
| typed-decisions, 2,000 decisions | 0.727 | 0.766 | +0.039 |
| AG News, 4 labels | 0.910 | 0.950 | +0.040 |
| DAIR Emotion, 6 labels | 0.480 | 0.595 | +0.115 |
| Banking77 (72 vs 77 labels) | 0.870 | 0.425 | Jev leads on >20 options |
| ECE (lower better) | 0.246 | 0.081 | 3× better (post-temperature) |
| p50 latency, 1 question | 236–276 ms | 32.8 ms | 7.8× faster |
| Languages usable | no published benchmark | 45 of 51 | — |
| Weights | closed API | Apache 2.0 | — |
| Cost | $0.042 / 1M tokens | $0 self-hosted | — |
On DAIR Emotion, Jev assigned zero probability to the true label on 16% of examples — a hard failure for anything branching on confidence.
head_max_len budget (192 tokens on English, 256 on multilingual), so 77 options receive only ~3 to 4 tokens per label, causing text to become indistinguishable. Jev supports up to 255 options out-of-the-box. While deepopen-multilingual supports 1,024 context (and up to 8,192 in the encoder) and you can raise agent.cfg["head_max_len"] = 512 at runtime, Jev is currently better suited for 50+ options in a single prompt without tuning.Full detail, including every workflow and all 51 languages: BENCHMARKS.md.
400 cases, 2,000 decisions, four workflows.
| model | accuracy | soft acc | Brier | ECE | score MAE |
|---|---|---|---|---|---|
deepopen-typed-decisions |
0.766 | 0.471 | 0.062 | 0.213 | 0.242 |
deepopen |
0.362 | 0.332 | 0.316 | 0.175 | 0.694 |
deepopen-multilingual |
0.342 | 0.326 | 0.439 | 0.285 | 0.687 |
| Jev 1.13.0 (published) | 0.727 | 0.580 | 0.148 | 0.144 | 0.391 |
| teacher self-agreement ceiling | 0.735 | ||||
| per-question majority class | 0.461 | ||||
| random guess | 0.318 |
The fine-tuned checkpoint beats Jev by 3.9 points and clears the teacher ceiling, with 2.4x
better Brier and 1.6x better score MAE. It wins on all four workflows: invoice processing
0.804, security incidents 0.766, customer service 0.764, agent-trace observability 0.730.
By primitive: noul 0.857, choice 0.733, score 0.723.
Two places it still trails Jev: soft accuracy (0.471 vs 0.580 — its argmax is better but its distributions match the teacher less well) and ECE (0.213 vs 0.144), which temperature fitting addresses.
The base checkpoints sit below the majority-class baseline (0.362 and 0.342 against 0.461). All of the capability on this benchmark comes from fine-tuning.
deepopen |
deepopen-multilingual |
|
|---|---|---|
| English | 0.783 | 0.657 |
| 13 other languages | 0.306 | 0.451 |
| XNLI, English | 0.860 | 0.843 |
| XNLI, 14 other languages | 0.521 | 0.731 |
Across all 51 languages the English checkpoint macro-averages 0.227 with macro ECE
0.733, and only 23 of 51 languages clear 3x random. Khmer scores 0.000 at 95.2%
confidence. This is why Router exists: the
model's own confidence gives no warning, so the routing decision has to be made before the
forward pass.
| task | deepopen |
deepopen-multilingual |
note |
|---|---|---|---|
| AG News | 0.947 | 0.937 | in training mix |
| BoolQ | 0.830 | 0.787 | in training mix |
| DAIR Emotion | 0.573 | 0.513 | held out |
| prompt-injections | 0.698 | 0.578 | held out, n=116 |
| SST-5 (ordinal) | 0.372 | 0.282 | held out |
Both checkpoints are over-confident as shipped. Refitting one temperature per (question type,
option count) on held-out data moves mean ECE 0.466 -> 0.081 (deepopen) and
0.314 -> 0.106 (deepopen-multilingual). deepopen-multilingual ships with no fitted
temperatures at all, so fit them before relying on its probabilities.
head_max_len) and the remaining document/state budget (max_len - head_max_len):deepopen (English) defaults to 512 context (head_max_len = 192, ~320 tokens for state).deepopen-multilingual and deepopen-typed-decisions default to 1,024 context (head_max_len = 256, ~768 tokens for state; mmBERT-base encoder supports up to 8,192 with RoPE).
At default settings, a 77-option question like Banking77 allocates only (256 - 16) // 77 ≈ 3–4 tokens per label, which causes accuracy to fall off sharply (0.425 vs Jev's 0.870). If evaluating 50+ options in a single question:agent.cfg["head_max_len"] = 512 and agent.cfg["max_len"] = 1024 (or up to 2048 / 4096 / 8192) so every option has enough tokens to remain distinct.score questions are the weakest primitive (SST-5 0.372).deepopen collapses outside English; deepopen-multilingual is weaker on English. Route, or pick
deliberately.Fine-tune deepopen on your own domain data. The notebook runs on Kaggle's free 2xT4 GPUs and does the whole loop: build the dataset, train with RLCD (proper-scoring-rule rewards, GRPO-style policy gradient), fit calibration temperatures, evaluate, and push the result to the Hub.
Fine-tuning is where most of the value is. On the typed-decisions benchmark the base checkpoints score near chance zero-shot (0.36 and 0.35 against a 0.318 random baseline), while the fine-tuned checkpoint reaches 0.766 on the same 2,000 decisions -- above TypeSafe Jev's published 0.727 and above the 0.735 teacher self-agreement ceiling. Treat deepopen as a fast base to specialise, not as a zero-shot decision engine.
Runtime on 2xT4 is roughly 4-5 hours for 4 epochs over ~30k questions.
Apache 2.0. Developed by Deep Open