跳到主要内容

⚖️ OpenThai 2.0 Legal

OpenThai 2.0 Legal — 基于 NVIDIA Nemotron 30B-A3B 构建的开放权重泰语法律大模型

把泰国法律烂熟于心的法律 AI——由泰国人打造,服务泰国。

openthai2.0-legal-thaillm-nemotron-3-nano-30b-a3b

一款开放权重模型,用于探索在一个可自建部署的 30B 基座上,泰国法律知识与可核验的条文级引用究竟能做到什么程度——无论是否搭配检索系统。

开放权重 · 2026 年 7 月 24 日发布

由 OpenThai 团队(AIEAT / iApp Technology)在 NVIDIA NeMo 技术栈上打造,并与大数据研究院(BDI)、ThaiLLM 计划以及 NVIDIA 合作完成。

🎮 在线试用

已内置 RAG — 回答基于真实法条原文

托管 API 从覆盖 39 部泰国法律、6,300+ 条文的语料库中混合检索(BM25 + Qwen3 向量检索 + 重排器),使每个回答都以现行法条原文为依据。演示会在每个回答下方展示系统选中的条文,检索过程一目了然。发送 "rag": false 可调用裸模型("闭卷"标签页即是如此)。

⚖️

在线试用 OpenThai 2.0 Legal

免费 API · 1 个月

使用你的 iApp API 密钥即可免费调用,至 2026 年 8 月 24 日。

📚
已连接 RAG — 回答基于真实法条原文

本 API 从覆盖 39 部泰国法律、6,300+ 条文的语料库中混合检索(BM25 + 向量检索 + 重排器),使回答以现行法条原文为依据。系统选中的条文会显示在每个回答下方。切换到"闭卷"模式(API 中 rag: false)可与裸模型对比。

成篇的法律分析,行文中引用条文——以自动检索的现行法条原文为依据。

试试示例:
🧑‍💻 开发者视图——本演示背后的 API 调用

下面的 curl 命令会随你在上方修改问题、模式与选项而实时更新。复制到终端、换上你的 API 密钥即可运行——与本页面发送的请求完全一致。

请求(curl)
curl -s https://api.iapp.co.th/v3/llm/openthai2p0-legal/chat/completions \
  -H "Content-Type: application/json" \
  -H "apikey: YOUR_IAPP_API_KEY" \
  -d '{
  "model": "openthai2.0-legal",
  "rag": true,
  "rag_inject": "system",
  "messages": [
    {
      "role": "system",
      "content": "You are a Thai legal expert. Answer with legal analysis and cite the relevant มาตรา."
    },
    {
      "role": "user",
      "content": "จำเลยขีดฆ่าและฉีกเอกสารหลักฐานแห่งหนี้ แม้ยังอ่านได้ ถือเป็นความผิดสำเร็จหรือเพียงพยายามกระทำผิด"
    }
  ],
  "temperature": 0,
  "top_p": 1,
  "max_tokens": 4096,
  "chat_template_kwargs": {
    "enable_thinking": true
  }
}'

输出仅为决策辅助,并非法律意见;请对照现行法律核验每处引用。持 iApp API 密钥免费使用至 2026-08-24,之后按标准价 0.01/0.02 IC / 1K 输入/输出 token 计费(与 Thanoy Legal AI 相同)。

🔓 免费托管 API — 1 个月(需免费注册 iApp API 密钥)

不想自己跑 GPU?我们替你托管。端点兼容 OpenAI 接口免费至 2026 年 8 月 24 日——只需一个免费的 iApp API 密钥:注册API KeysCreate New API Key(限 30 次/分钟)。免费期结束后按 Thanoy 同档标准价继续提供:0.01 / 0.02 IC / 1K 输入/输出 token

Base URLhttps://api.iapp.co.th/v3/llm/openthai2p0-legal
端点POST /chat/completions(兼容 OpenAI)
模型openthai2.0-legal
认证iApp API 密钥(apikey 头或 Authorization: Bearer)· 注册免费,免费用至 2026-08-24
RAG默认开启——服务端对泰国法条语料库做混合检索;"rag": false 调用裸模型,"rag_top_k"(1–20,默认 8)调节条文数量;论述/长文场景可用 "rag_inject": "system"(默认 "user" 适配 JSON 引用契约)

每个使用 RAG 的回答都包含 retrieved_documents 数组——回答所依据的条文(法律名、条号、现行原文、重排器分数),可直接在你的产品中展示或审计检索过程:

from openai import OpenAI
client = OpenAI(base_url="https://api.iapp.co.th/v3/llm/openthai2p0-legal", api_key="YOUR_IAPP_API_KEY")

r = client.chat.completions.create(
model="openthai2.0-legal",
messages=[{"role": "user", "content": "ลักทรัพย์ในเวลากลางคืน ผิดมาตราใด"}],
max_tokens=1024,
# extra_body={"rag": False} # 调用裸模型(闭卷)
)
print(r.choices[0].message.content)
print(r.model_extra.get("retrieved_documents")) # 回答依据的法条
curl -s https://api.iapp.co.th/v3/llm/openthai2p0-legal/chat/completions \
-H "Content-Type: application/json" -H "apikey: YOUR_IAPP_API_KEY" \
-d '{"model":"openthai2.0-legal","messages":[{"role":"user","content":"ลักทรัพย์ในเวลากลางคืน ผิดมาตราใด"}],"max_tokens":1024}'

🔗 自托管时配合 RAG

法条在提示词里时这个模型表现最佳:开卷引用准确度 0.99,纯记忆只有 0.07–0.40——这正是我们的托管 API 内置检索的原因。若你自托管开源权重,也应以同样方式接入自己的检索:

思考模式默认关闭,直接返回干净的答案。若要查看逐步法律推理,请加上 "chat_template_kwargs": {"enable_thinking": true}——推理内容会以 <think>...</think> 包裹出现在 content 中。

✨ 核心亮点

🔓 1. 开放权重,可自建部署

30B 混合专家(MoE)架构,每个 token 仅激活约 3B 参数。采用 NVFP4(4-bit)时,单张 24 GB 显存 的 GPU 即可运行——律所与政府机构因此可以把敏感案件数据完全留在自己的基础设施内。

📖 2. 引用真实法条,而非凭空作答

每个回答都能以固定的 JSON 格式返回准确的法律名称与条文(มาตรา),可直接接入 RAG 流程、文书起草工具与法律科技产品。

🧠 3. 凭记忆掌握法典

提示词中不提供任何法条的情况下,模型仍能回忆并引用正确条文:在《民商法典》上的闭卷召回率约为体量大得多的 Qwen3.6-35B 的 4 倍

✍️ 4. 像律师一样写作

在法律论述评测的全部四个维度上均领先 Qwen3.6-35B——引用准确度、裁判结论、要点覆盖与行文质量,评测基于留出的泰国最高法院判例。

🇹🇭 5. 扎根真实泰国法律语料

训练语料为公开的泰国成文法与法院判决,每个回答都可回溯到其来源条文。

📊 基准测试结果

基准测试记分板:闭卷、开卷(RAG)与法律论述各维度,对比 Qwen3.6-35B 与 Nemotron 基座模型

评测项OpenThai 2.0 LegalQwen3.6-35BNemotron-3-30B 基座
闭卷:凭记忆掌握法律
民商法:复述《民商法典》(n=3,729)0.070.020.001
税法:复述《税法典》(n=50)0.400.360.31
开卷:使用给定法条(RAG 场景)
民商法:从上下文中引用适用条文(n=3,729)0.990.990.98
税法 echo:引用所给出的全部条文(n=50)0.840.840.64
税法 selection:在干扰项中只引用适用条文(n=50)0.690.640.45
法律论述(泰国最高法院判例)
引用:论述中引用的准确度(n=72)0.250.090.02
裁判结论:得出正确的法律结论(n=72)0.570.500.31
覆盖度:涵盖关键法律要点(n=72)0.600.550.27
行文质量(n=72)0.460.430.13
评分方式

分值区间为 0 到 1,越高越好。引用类指标采用 NitiBench 的 citation-F1 评分器(单次推理,temperature 0,关闭思考模式);裁判结论、覆盖度与行文质量由 Gemini 3.1 Flash Lite 评判。所有模型均在同一套协议下端到端重新评测。

这是我们在可自建部署的模型中测得的最强泰国法律闭卷召回能力,且由代码而非 AI 裁判打分。仍有闭源云端 API 得分更高——因此该表述仅限于用户可在自有硬件上运行的模型。

🔬 训练方式

训练流程:30B 基座 → CPT → SFT → GRPO → 发布

在 NVIDIA NeMo 技术栈上分三个阶段完成,每个阶段解决一个问题:

  1. CPT(继续预训练) 灌输法律本身——模型双向演练每一条法条的完整文本,使知识沉淀进权重。共 360,985 条法律训练样本,约 8 亿泰语法律 token。
  2. SFT(监督微调) 教会有据可依的作答——每个回答都遵循固定的 JSON 契约,只引用给定的条文。共 16,436 条考试答案与论述样本。
  3. GRPO(强化学习) 打磨精确度——以基准测试自身的 citation F1 作为奖励,惩罚错误或遗漏的引用。共 8,568 道已评分题目、约 68,500 份草稿。

🧾 模型细节

基座模型nvidia/Nemotron-3-Nano-Omni-30B-A3B-Reasoning(提取其文本核心;Mamba2-Transformer 混合 MoE)
参数量总计 30B,每 token 激活约 3B
上下文长度已测试 32,768(架构最高支持 256k)
语言泰语(主)、英语(推理)
精度bfloat16 safetensors,17 个分片 · 单卡 24 GB 部署可用 NVFP4
训练栈NVIDIA NeMo(CPT/SFT 用 Megatron-Bridge,GRPO 用 NeMo-RL)
推理服务vLLM(已验证)与 NVIDIA NIM(兼容 OpenAI 接口)
许可证NVIDIA Open Model Agreement
状态开放权重发布

🧪 如何评测

RAG 模式指把候选法条放进提示词,由模型只引用其中真正适用的部分。它可以配合你现有的任何检索器,不绑定特定的 embedding 或 rerank 模型。由于该模型闭卷能力同样出色,许多问题根本不需要检索。

模式考察什么设置
开卷 "echo"RAG 最佳情形:拿到的正是正确文档只提供相关条文,需全部引用
开卷 "selection"RAG 真实情形:拒绝形近但不适用的文档相关条文与不适用条文混杂,只引用正确的子集
闭卷纯记忆,无检索仅给出问题,需从权重中回忆法律名称与条文
法律论述长篇法律写作72 份留出的泰国最高法院判例改写为论述题,按四个维度评分

模型的真实输出

以下示例均为模型在留出测试题上的原样输出。

开卷 selection——最难的模式。提供 5 条法条,其中 3 条适用。

问题(泰语): บริษัทจัดตั้งขึ้นตามกฎหมายประเทศไทย ... ได้แต่งตั้งให้ผู้บริหารหรือพนักงานไปดำรงตำแหน่งกรรมการในบริษัทลูกในต่างประเทศ โดยจะได้รับค่าตอบแทนเงินเดือน สวัสดิการต่าง ๆ

回答(中文译文): 一、对于为泰国雇主履行职务而支付的所得,公司有义务并入计算并依《税法典》第 50(1) 条办理预扣税申报;二、若该高管或员工就境外董事职务取得的报酬未于同一纳税年度汇入泰国,则无须缴纳泰国个人所得税。

引用了第 41、50、56 条,并正确排除了第 40 与 48 条。citation F1 为 1.00。

闭卷——提示词中完全没有法条原文。

问题(泰语): บริษัทฯ ได้นำเข้าสินค้าชื่อว่า "C." เพื่อใช้ทดแทน Choline Chloride ในอาหารสัตว์ ... ได้รับยกเว้นภาษีมูลค่าเพิ่มหรือไม่

回答(中文译文): 该公司持有特定管制饲料进口许可证,故进口名为 "C." 的商品属于进口饲料,依《税法典》第 81(1)(ง) 条与第 81(2)(ก) 条免征增值税。

在没有提供任何法条的情况下,模型从权重中回忆出条文及其两个子项。citation F1 为 1.00。

法律论述——按四个维度评分。

问题(泰语): จำเลยเป็นหนี้เงินกู้ยืมและเงินเล่นแชร์จำนวน 95,600 บาทแก่โจทก์ร่วม ... ต่อมาจำเลยได้ใช้ปากกาขีดฆ่าเป็นเครื่องหมายกากบาทและเครื่องหมายวงกลมลงบนข้อความและตัวเลข

回答(中文译文,节选): 最高法院维持上诉法院判决,认定被告构成《刑法典》第 188 条规定的损毁文书罪……被告以笔划去文字与数字并将文书撕裂,即便残存部分仍可辨读原有内容,仍属足以致他人受损害的损毁行为。

🚀 部署

以下两条推理路径都提供兼容 OpenAI 的接口,因此后面的 Python 示例在两者上均可直接运行。

vLLM(2 张 GPU,张量并行)

vllm serve iapp/openthai2.0-legal-thaillm-nemotron-3-nano-30b-a3b \
--tensor-parallel-size 2 --trust-remote-code \
--max-model-len 32768 --enforce-eager

NVIDIA NIM

基座为 NVIDIA Nemotron,因此适用 NIM for LLMs 路径:

docker run --rm --gpus all --shm-size=16g \
-v <path-to-model>:/model \
-e NIM_MODEL_NAME=/model \
-e NIM_SERVED_MODEL_NAME=openthai2.0-legal \
-p 8000:8000 \
nvcr.io/nim/nvidia/llm-nim:latest

请以 NVIDIA NIM for LLMs catalog 上的最新容器标签与配置为准;NIM 暴露的同样是兼容 OpenAI 的端点。

已验证配置

vLLM 0.19.1,在 2× H100(80 GB)上张量并行为 2,--max-model-len 32768--gpu-memory-utilization 0.90--enforce-eager--trust-remote-code。思考模式开启与关闭、temperature 0.0 与 0.7 均已验证。若要单卡部署,请在显存不低于 24 GB 的显卡上加载 NVFP4(4-bit)权重。

🛠️ 快速上手

带条文引用的作答(RAG 模式)

以下示例在发布的权重上实际运行过,展示的就是模型的真实输出。

from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="none")

SYSTEM = ("You are OpenThaiGPT-Legal, an expert assistant on Thai law. You are given a legal "
"question and the exact statutory sections needed to answer it. Reason step by step in "
"English, then give the final answer in Thai. Cite ONLY sections present in the provided "
"context, using each section's exact law_name and bare section number (e.g. 132, 77/1). "
'Output the final answer as JSON: {"answer": "<Thai answer>", '
'"citations": [{"law": "<law_name>", "section": "<bare id>"}]}.')

USER = """Provided context:
<law law_name="ประมวลกฎหมายแพ่งและพาณิชย์" section="420">
ผู้ใดจงใจหรือประมาทเลินเล่อ ทำต่อบุคคลอื่นโดยผิดกฎหมายให้เขาเสียหาย ... จำต้องใช้ค่าสินไหมทดแทนเพื่อการนั้น
</law>

Question (ตอบเป็นภาษาไทย):
นาย ก. ขับรถโดยประมาทชนรถของนาย ข. เสียหาย นาย ก. ต้องรับผิดตามกฎหมายใด"""

r = client.chat.completions.create(
model="openthai2.0-legal-thaillm-nemotron-3-nano-30b-a3b",
messages=[{"role": "system", "content": SYSTEM}, {"role": "user", "content": USER}],
temperature=0.0, max_tokens=1024,
extra_body={"chat_template_kwargs": {"enable_thinking": False}})
print(r.choices[0].message.content)

模型实际输出:

{"answer": "นาย ก. ต้องรับผิดตามประมวลกฎหมายแพ่งและพาณิชย์ มาตรา 420",
"citations": [{"law": "ประมวลกฎหมายแพ่งและพาณิชย์", "section": "420"}]}

闭卷模式

完全不提供上下文,模型从自身权重中回忆条文。

SYSTEM = ("You are an expert on Thai law. You are given ONLY a legal question, with NO reference "
"material provided. Using your OWN knowledge of Thai statutes, answer in Thai and cite the "
"specific sections that apply (law name + bare section number, มาตรา). "
'Output ONLY a JSON object: {"answer":"<Thai answer>","citations":[{"law":"<law name>",'
'"section":"<bare section number e.g. 40 or 77/1>"}]}.')

USER = """บริษัท ก. (บริษัทฯ) ได้หารือเกี่ยวกับภาษีมูลค่าเพิ่ม กรณีการนำเข้าสินค้าที่ใช้ชื่อ C. โดยบริษัทฯ ได้นำเข้าสินค้าชื่อว่า "C." เพื่อใช้ทดแทน Choline Chloride ในอาหารสัตว์ ซึ่งบริษัทฯ เป็นผู้รับใบอนุญาตนำเข้าอาหารสัตว์ควบคุมเฉพาะ จึงขอหารือว่า การนำเข้าสินค้าดังกล่าวได้รับยกเว้นภาษีมูลค่าเพิ่มหรือไม่"""

r = client.chat.completions.create(
model="openthai2.0-legal-thaillm-nemotron-3-nano-30b-a3b",
messages=[{"role": "system", "content": SYSTEM}, {"role": "user", "content": USER}],
temperature=0.0, max_tokens=1024,
extra_body={"chat_template_kwargs": {"enable_thinking": False}})
print(r.choices[0].message.content)

论述模式

一段简短的 system prompt 加上考题。模型会写出完整的法律论述,并在行文中引用条文(มาตรา)而非输出 JSON,因此需要调高 max_tokens

SYSTEM = "You are a Thai legal expert. Answer the question with legal analysis and cite the relevant มาตรา."

USER = """จำเลยเป็นหนี้เงินกู้ยืมและเงินเล่นแชร์จำนวน 95,600 บาทแก่โจทก์ร่วม ซึ่งได้จดทะเบียนไว้ในสมุดบันทึกของโจทก์ร่วม โดยมีข้อความและตัวเลขเป็นหลักฐานแห่งหนี้ ต่อมาจำเลยได้ใช้ปากกาขีดฆ่าและฉีกเอกสารจนขาดออกจากกัน แม้เอกสารที่ยังเหลืออยู่จะสามารถอ่านเข้าใจข้อความและตัวเลขเดิมได้ จำเลยมีความผิดฐานใด หรือเป็นเพียงการพยายามกระทำความผิดหรือไม่"""

r = client.chat.completions.create(
model="openthai2.0-legal-thaillm-nemotron-3-nano-30b-a3b",
messages=[{"role": "system", "content": SYSTEM}, {"role": "user", "content": USER}],
temperature=0.7, max_tokens=3000,
extra_body={"chat_template_kwargs": {"enable_thinking": False}})
print(r.choices[0].message.content)

⚙️ 推荐生成参数

使用场景temperaturetop_pmax_tokens(建议)思考模式
带引用的作答(RAG 或闭卷)0.01.01024关闭
起草法律论述0.70.92048–4096开启或关闭皆可
通用对话0.70.91024关闭
  • max_tokens 是建议值而非上限:32k 窗口以内的任何预算都可用,回答会自然收尾(带引用的回答通常不超过 700 token)。写长篇论述或开启思考模式时可放心调高。
  • 思考模式完全受支持:模型先用英语在思考块中推理,再用泰语作答,对论述与复杂分析很有帮助。上表的基准数字均在关闭思考模式下取得,这是引用类任务的调优路径;开启思考模式时请预留约 2 倍的 token 预算。
  • 请始终以 --max-model-len 32768 部署:真实的《税法典》上下文会超出更小的窗口。

✅ 适用场景

  • 法律检索与 RAG — 可搭配任意检索器,模型只从给定条文中引用真正适用的部分。
  • 文书起草与审阅工具 — JSON 引用契约可直接接入自动化流程。
  • 企业法务与合规 — 自建部署,客户与案件数据不出企业边界。
  • 政府机构 — 数据驻留与治理完全由自己掌控。
  • 研究与微调 — 开放权重,可按自己的法律领域继续适配。

⚠️ 局限与负责任使用

  • 检索质量决定结果。 给对条文时引用几乎完美;若检索器给错条文,回答也会跟着错。生产环境的 RAG 应搭配可靠的检索器并持续监控检索质量。
  • 区分形近条文是最难的任务。 在相近选项中挑出适用条文(税法 selection)是所有模型得分最低的维度,我们也不例外。高风险场景建议调优检索并引入人工复核。
  • 结构化输出是强项。 JSON 引用契约非常适合自动化与法律科技流程;自由对话虽受支持,但结构性较弱。
  • 知识范围。 训练语料为泰国成文法(《税法典》《民商法典》及相关法案)与税务厅裁定;小众领域或最新修订的覆盖可能较薄,且法律会随时间变化。
  • 必须有人工监督。 输出属于决策辅助,并非法律意见。使用前应由具备资质的专业人士对照现行法律核验每一处引用。
  • 数据来源。 部分论述训练数据源自泰国律师资格考试材料;请自行确认在你所在司法辖区与使用场景下的再分发条款。

🙏 来源与致谢

  • 基座模型:NVIDIA Nemotron-3-Nano-Omni-30B-A3B-Reasoning,遵循 NVIDIA Open Model Agreement;我们在其提取出的文本核心上训练。
  • 评测:NitiBench(VISAI-AI,MIT);SFT 数据基于 WangchanX-Legal-ThaiCCL(VISTEC,MIT)构建。
  • 由 OpenThai 团队(AIEAT / iApp Technology)在 NVIDIA NeMo 技术栈上打造,合作方包括 大数据研究院(BDI)ThaiLLM 计划与 NVIDIA

📬 联系我们

想在贵机构部署 OpenThai 2.0 Legal,或希望针对自有语料进行微调?