法律幻觉校验接口 API 文档
自动校验文本内容中的法律引用是否正确,系统自动抽取文中引用的法规/法条和案号,与智库比对语义一致性,核验法规时效性,输出"一致/不一致/未命中"判定及权威原文。 可以用来复核、校验、核查法律引用准确性,校验AI帮助撰写包含法律引用的法律文书是否存在幻觉
接口概览
| 接口名称 | 法律幻觉校验接口 |
|---|---|
| 接口描述 | 自动校验文本内容中的法律引用是否正确,系统自动抽取文中引用的法规/法条和案号,与智库比对语义一致性,核验法规时效性,输出"一致/不一致/未命中"判定及权威原文。 可以用来复核、校验、核查法律引用准确性,校验AI帮助撰写包含法律引用的法律文书是否存在幻觉 |
| 接口分类 | 幻觉检测 |
| 调用地址 | https://open.chineselaw.com/open/hall_detect |
| 请求方式 | POST |
请求参数
3. 请求参数(Body)
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
text |
string | 是 | 待抽取的用户原文文本 |
3.1 校验与默认值(按代码)
- 缺少
text/ 类型不对:返回 422(请求参数校验失败,见“5. 错误返回”) text不做最小长度校验(但为空字符串会导致抽取结果通常为空)
响应参数
4. 返回信息
- 返回类型:JSON
4.1 成功响应结构(200)
| 字段名 | 类型 | 说明 |
|---|---|---|
regulations |
array | 抽取到的法规/法条列表 |
cases |
array | 抽取到的案例列表 |
highlighted_text |
string | 高亮后的原文(HTML 字符串,已转义,包含 <span ...> 标记) |
semantic_compare_error |
string | absent | 语义比对流程异常时可能出现(不一定有) |
chat_model |
string | 本次调用使用的模型名(从服务端配置回填) |
request_id |
string | 本次请求 ID(与响应头 X-Request-ID 一致) |
5. 错误返回(统一异常结构)
发生校验失败、业务抛错或未处理异常时,接口会返回下述结构(并带
request_id;响应头同样会返回X-Request-ID)。
| 字段名 | 类型 | 说明 |
|---|---|---|
success |
boolean | 固定为 false |
error_code |
string | 错误码,如 VALIDATION_ERROR、HTTP_502、INTERNAL_ERROR |
message |
string | 错误信息 |
request_id |
string | 请求 ID |
detail |
any | absent | 可能存在:校验错误详情、或非字符串的异常详情 |
常见 HTTP 状态码:
- 422:请求参数校验失败(如缺少
text) - 502:上游(外部 Chat/权威来源)调用失败或响应不可解析(以
HTTP_502形式返回) - 500:服务内部异常(
INTERNAL_ERROR)
6. 返回字段说明
6.1 regulations[](法规/法条对象)
抽取阶段会给每条法规生成稳定的
extract_reg_id;若能命中“权威来源”详情,会补充url、元数据、以及think_tank_content。
若仅有法规名、没有具体条号,会标记source_no_specific_clause=true,并跳过语义比对(semantic_compare.skipped=true)。
| 字段名 | 类型 | 说明 |
|---|---|---|
name |
string | 法规名称(可能带《》) |
clause |
string | 法条号(如“第一百条”;可能为空串表示仅法规名) |
content |
string | 从“用户原文”中逐字摘录的依据片段(模型抽取) |
extract_reg_id |
string | 服务端生成的 UUID,用于前端对齐与批量语义比对 key |
url |
string | 命中权威来源时返回的详情页 URL(可为空串) |
think_tank_content |
string | 命中权威来源时的条文正文(可能为空串) |
source_no_specific_clause |
boolean | 仅法规名、无具体条号时为 true |
law_exists |
boolean | 仅法规名存在性检索时,法规存在/不存在(可能缺省) |
think_tank_clause_missing |
boolean | 有条号但权威来源缺失该条时可能为 true(可能缺省) |
publish_date |
string | 统一后的“发布日期”(可能为空串) |
implement_date |
string | 统一后的“实施日期”(可能为空串) |
validity_status |
string | 统一后的“时效性/是否有效”(可能为空串) |
document_number |
string | 统一后的“发文字号”(可能为空串) |
semantic_compare |
object | “原文摘录(content)” vs “权威来源正文(think_tank_content)”的语义比对结果 |
6.1.1 semantic_compare(法规语义比对对象)
| 字段名 | 类型 | 说明 |
|---|---|---|
结论 |
string | 比对结论;无可比文本时通常为“无法判断” |
语义相似度 |
number | null | 相似度(可能为空) |
说明 |
string | 说明文字 |
要点 |
array | 关键信息点(可能为空数组) |
skipped |
boolean | 仅法规名无条号时为 true(可能缺省) |
skip_reason |
string | 跳过原因(如 NO_CLAUSE,可能缺省) |
skip_message |
string | 跳过提示(可能缺省) |
6.2 cases[](案例对象)
命中权威来源时,会补充
url、think_tank_content,并补齐列表展示字段(英文键 + 中文别名键并存)。
| 字段名 | 类型 | 说明 |
|---|---|---|
name |
string | 案例名称(可能为空串) |
case_number |
string | 案号(服务端会做括号/空白归一化;命中权威来源时可能回填为“官方案号”) |
content |
string | 从“用户原文”中逐字摘录的依据片段(模型抽取) |
url |
string | 命中权威来源时返回的案例详情页 URL(可为空串) |
think_tank_content |
string | 命中权威来源时的“内容:”正文摘录(可为空串) |
case_type |
string | 案例类型(可为空串) |
court |
string | 法院(可为空串) |
judgment_date |
string | 日期(可为空串) |
basic_facts |
string | 基本案情(可为空串) |
judgment_key_points |
string | 裁判要点(可为空串) |
judgment_result |
string | 裁判结果(可为空串) |
judgment_analysis |
string | 裁判分析过程(可为空串) |
typical_significance |
string | 典型意义(可为空串) |
case_commentary |
string | 案例评析(可为空串) |
案例类型/法院/日期/... |
string | 以上字段的中文别名(值与英文键一致) |
案号 |
string | case_number 的中文别名(值与 case_number 对齐) |
6.3 highlighted_text
- 类型:string(HTML 字符串)
- 说明:对原文进行转义后,在命中的法规/案号等片段外包裹
<span>,用于前端着色与悬浮提示。- 可能包含的 class(示例):
hl-statute-link、hl-case-ref、missing-ref、case-hit等 - 注意:这不是纯文本;如需纯文本请使用原始入参
text
- 可能包含的 class(示例):
错误码
暂无错误码说明
调用示例
CURL
curl --location --request POST 'https://open.chineselaw.com/open/hall_detect' \
--header 'Content-Type: application/json; charset=utf-8' \
--header 'Accept: application/json' \
--header 'X-Request-ID: 你自定义的request_id(可选)' \
--data-raw '{
"text": "根据《中华人民共和国民法典》第一百二十二条……另参照(2019)苏0206民初3374号的裁判观点……"
}'JAVA
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class ExtractExample {
public static void main(String[] args) throws Exception {
String apiUrl = "https://open.chineselaw.com/open/hall_detect";
String url = apiUrl;
String requestId = "你自定义的request_id(可选)";
String jsonBody = """
{
"text": "根据《中华人民共和国民法典》第一百二十二条……另参照(2019)苏0206民初3374号的裁判观点……"
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.timeout(Duration.ofSeconds(60))
.header("Content-Type", "application/json; charset=utf-8")
.header("Accept", "application/json")
.header("X-Request-ID", requestId) // 可不传:删掉这一行即可
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println("X-Request-ID=" + response.headers().firstValue("X-Request-ID").orElse(""));
System.out.println(response.body());
}
}PYTHON
import requests
url = "https://open.chineselaw.com/open/hall_detect/api/extract"
headers = {
"Content-Type": "application/json; charset=utf-8",
"Accept": "application/json",
"X-Request-ID": "你自定义的request_id(可选)",
}
payload = {
"text": "根据《中华人民共和国民法典》第一百二十二条……另参照(2019)苏0206民初3374号的裁判观点……"
}
response = requests.post(url, json=payload, headers=headers, timeout=60)
response.raise_for_status()
print("X-Request-ID=", response.headers.get("X-Request-ID", ""))
print(response.json())JAVASCRIPT
const API_URL = "https://open.chineselaw.com/open/hall_detect";
const res = await fetch(`${API_URL}/api/extract`, {
method: "POST",
headers: {
"Content-Type": "application/json; charset=utf-8",
"Accept": "application/json",
"X-Request-ID": "你自定义的request_id(可选)",
},
body: JSON.stringify({
text: "根据《中华人民共和国民法典》第一百二十二条……另参照(2019)苏0206民初3374号的裁判观点……",
}),
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log("X-Request-ID=", res.headers.get("X-Request-ID") || "");
console.log(await res.json());
MCP Tool 名称
| MCP Server | yuandian-open-platform(元典开放平台 MCP Server) |
|---|---|
| Streamable HTTP 入口 | https://open.chineselaw.com/mcp |
| MCP Tool | yuandian_hall_detect |
响应示例
## 7. 示例
### 7.1 请求示例
```json
{
"text": "根据《中华人民共和国民法典》第一百二十二条……另参照(2019)苏0206民初3374号的裁判观点……"
}
```
### 7.2 成功响应示例(示意)
```json
{
"regulations": [
{
"name": "《中华人民共和国民法典》",
"clause": "第一百二十二条",
"content": "……(此处为从用户原文逐字摘录的片段)",
"extract_reg_id": "2d2fbb7a-8c3a-4d3c-9a9e-6f3fd1b7c2c1",
"url": "https://example.com/xxx",
"think_tank_content": "……(此处为权威来源条文正文)",
"publish_date": "",
"implement_date": "",
"validity_status": "",
"document_number": "",
"semantic_compare": {
"结论": "无法判断",
"语义相似度": null,
"说明": "缺少提取摘录或权威来源正文,无法建立可比关系",
"要点": []
}
}
],
"cases": [
{
"name": "",
"case_number": "(2019)苏0206民初3374号",
"content": "……(逐字摘录)",
"url": "https://example.com/case",
"think_tank_content": "……(权威来源内容摘录)",
"case_type": "",
"court": "",
"judgment_date": "",
"basic_facts": "",
"judgment_key_points": "",
"judgment_result": "",
"judgment_analysis": "",
"typical_significance": "",
"case_commentary": "",
"案例类型": "",
"法院": "",
"日期": "",
"基本案情": "",
"裁判要点": "",
"裁判结果": "",
"裁判分析过程": "",
"典型意义": "",
"案例评析": "",
"案号": "(2019)苏0206民初3374号"
}
],
"highlighted_text": "……(HTML 字符串,包含 span 标注)",
"chat_model": "YOUR_CHAT_MODEL",
"request_id": "req_1714460000000_ab12cd34"
}
```
### 7.3 失败响应示例(缺少 text,422)
```json
{
"success": false,
"error_code": "VALIDATION_ERROR",
"message": "请求参数校验失败",
"request_id": "req_1714460000000_ab12cd34",
"detail": [
{
"type": "missing",
"loc": ["body", "text"],
"msg": "Field required",
"input": {}
}
]
}
```
完整文档
法律幻觉校验接口文档
1. 基本信息
- 接口名称:法律幻觉校验接口
- 接口用途:自动校验文本内容中的法律引用是否正确,系统自动抽取文中引用的法规/法条和案号,与智库比对语义一致性,核验法规时效性,输出"一致/不一致/未命中"判定及权威原文。
可以用来复核、校验、核查法律引用准确性,校验AI帮助撰写包含法律引用的法律文书是否存在幻觉。
2. 请求信息
- HTTP Method:POST
- URL:
https://open.chineselaw.com/open/hall_detect - Content-Type:
application/json; charset=utf-8 - Accept:
application/json - X-API-Key:
你的api_key
3. 请求参数(Body)
| 字段名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
text |
string | 是 | 待抽取的用户原文文本 |
3.1 校验与默认值(按代码)
- 缺少
text/ 类型不对:返回 422(请求参数校验失败,见“5. 错误返回”) text不做最小长度校验(但为空字符串会导致抽取结果通常为空)
4. 返回信息
- 返回类型:JSON
4.1 成功响应结构(200)
| 字段名 | 类型 | 说明 |
|---|---|---|
regulations |
array | 抽取到的法规/法条列表 |
cases |
array | 抽取到的案例列表 |
highlighted_text |
string | 高亮后的原文(HTML 字符串,已转义,包含 <span ...> 标记) |
semantic_compare_error |
string | absent | 语义比对流程异常时可能出现(不一定有) |
chat_model |
string | 本次调用使用的模型名(从服务端配置回填) |
request_id |
string | 本次请求 ID(与响应头 X-Request-ID 一致) |
5. 错误返回(统一异常结构)
发生校验失败、业务抛错或未处理异常时,接口会返回下述结构(并带
request_id;响应头同样会返回X-Request-ID)。
| 字段名 | 类型 | 说明 |
|---|---|---|
success |
boolean | 固定为 false |
error_code |
string | 错误码,如 VALIDATION_ERROR、HTTP_502、INTERNAL_ERROR |
message |
string | 错误信息 |
request_id |
string | 请求 ID |
detail |
any | absent | 可能存在:校验错误详情、或非字符串的异常详情 |
常见 HTTP 状态码:
- 422:请求参数校验失败(如缺少
text) - 502:上游(外部 Chat/权威来源)调用失败或响应不可解析(以
HTTP_502形式返回) - 500:服务内部异常(
INTERNAL_ERROR)
6. 返回字段说明
6.1 regulations[](法规/法条对象)
抽取阶段会给每条法规生成稳定的
extract_reg_id;若能命中“权威来源”详情,会补充url、元数据、以及think_tank_content。
若仅有法规名、没有具体条号,会标记source_no_specific_clause=true,并跳过语义比对(semantic_compare.skipped=true)。
| 字段名 | 类型 | 说明 |
|---|---|---|
name |
string | 法规名称(可能带《》) |
clause |
string | 法条号(如“第一百条”;可能为空串表示仅法规名) |
content |
string | 从“用户原文”中逐字摘录的依据片段(模型抽取) |
extract_reg_id |
string | 服务端生成的 UUID,用于前端对齐与批量语义比对 key |
url |
string | 命中权威来源时返回的详情页 URL(可为空串) |
think_tank_content |
string | 命中权威来源时的条文正文(可能为空串) |
source_no_specific_clause |
boolean | 仅法规名、无具体条号时为 true |
law_exists |
boolean | 仅法规名存在性检索时,法规存在/不存在(可能缺省) |
think_tank_clause_missing |
boolean | 有条号但权威来源缺失该条时可能为 true(可能缺省) |
publish_date |
string | 统一后的“发布日期”(可能为空串) |
implement_date |
string | 统一后的“实施日期”(可能为空串) |
validity_status |
string | 统一后的“时效性/是否有效”(可能为空串) |
document_number |
string | 统一后的“发文字号”(可能为空串) |
semantic_compare |
object | “原文摘录(content)” vs “权威来源正文(think_tank_content)”的语义比对结果 |
6.1.1 semantic_compare(法规语义比对对象)
| 字段名 | 类型 | 说明 |
|---|---|---|
结论 |
string | 比对结论;无可比文本时通常为“无法判断” |
语义相似度 |
number | null | 相似度(可能为空) |
说明 |
string | 说明文字 |
要点 |
array | 关键信息点(可能为空数组) |
skipped |
boolean | 仅法规名无条号时为 true(可能缺省) |
skip_reason |
string | 跳过原因(如 NO_CLAUSE,可能缺省) |
skip_message |
string | 跳过提示(可能缺省) |
6.2 cases[](案例对象)
命中权威来源时,会补充
url、think_tank_content,并补齐列表展示字段(英文键 + 中文别名键并存)。
| 字段名 | 类型 | 说明 |
|---|---|---|
name |
string | 案例名称(可能为空串) |
case_number |
string | 案号(服务端会做括号/空白归一化;命中权威来源时可能回填为“官方案号”) |
content |
string | 从“用户原文”中逐字摘录的依据片段(模型抽取) |
url |
string | 命中权威来源时返回的案例详情页 URL(可为空串) |
think_tank_content |
string | 命中权威来源时的“内容:”正文摘录(可为空串) |
case_type |
string | 案例类型(可为空串) |
court |
string | 法院(可为空串) |
judgment_date |
string | 日期(可为空串) |
basic_facts |
string | 基本案情(可为空串) |
judgment_key_points |
string | 裁判要点(可为空串) |
judgment_result |
string | 裁判结果(可为空串) |
judgment_analysis |
string | 裁判分析过程(可为空串) |
typical_significance |
string | 典型意义(可为空串) |
case_commentary |
string | 案例评析(可为空串) |
案例类型/法院/日期/... |
string | 以上字段的中文别名(值与英文键一致) |
案号 |
string | case_number 的中文别名(值与 case_number 对齐) |
6.3 highlighted_text
- 类型:string(HTML 字符串)
- 说明:对原文进行转义后,在命中的法规/案号等片段外包裹
<span>,用于前端着色与悬浮提示。- 可能包含的 class(示例):
hl-statute-link、hl-case-ref、missing-ref、case-hit等 - 注意:这不是纯文本;如需纯文本请使用原始入参
text
- 可能包含的 class(示例):
7. 示例
7.1 请求示例
{
"text": "根据《中华人民共和国民法典》第一百二十二条……另参照(2019)苏0206民初3374号的裁判观点……"
}
7.2 成功响应示例(示意)
{
"regulations": [
{
"name": "《中华人民共和国民法典》",
"clause": "第一百二十二条",
"content": "……(此处为从用户原文逐字摘录的片段)",
"extract_reg_id": "2d2fbb7a-8c3a-4d3c-9a9e-6f3fd1b7c2c1",
"url": "https://example.com/xxx",
"think_tank_content": "……(此处为权威来源条文正文)",
"publish_date": "",
"implement_date": "",
"validity_status": "",
"document_number": "",
"semantic_compare": {
"结论": "无法判断",
"语义相似度": null,
"说明": "缺少提取摘录或权威来源正文,无法建立可比关系",
"要点": []
}
}
],
"cases": [
{
"name": "",
"case_number": "(2019)苏0206民初3374号",
"content": "……(逐字摘录)",
"url": "https://example.com/case",
"think_tank_content": "……(权威来源内容摘录)",
"case_type": "",
"court": "",
"judgment_date": "",
"basic_facts": "",
"judgment_key_points": "",
"judgment_result": "",
"judgment_analysis": "",
"typical_significance": "",
"case_commentary": "",
"案例类型": "",
"法院": "",
"日期": "",
"基本案情": "",
"裁判要点": "",
"裁判结果": "",
"裁判分析过程": "",
"典型意义": "",
"案例评析": "",
"案号": "(2019)苏0206民初3374号"
}
],
"highlighted_text": "……(HTML 字符串,包含 span 标注)",
"chat_model": "YOUR_CHAT_MODEL",
"request_id": "req_1714460000000_ab12cd34"
}
7.3 失败响应示例(缺少 text,422)
{
"success": false,
"error_code": "VALIDATION_ERROR",
"message": "请求参数校验失败",
"request_id": "req_1714460000000_ab12cd34",
"detail": [
{
"type": "missing",
"loc": ["body", "text"],
"msg": "Field required",
"input": {}
}
]
}
8. 代码示例
8.1 CURL调用示例
curl --location --request POST 'https://open.chineselaw.com/open/hall_detect' \
--header 'Content-Type: application/json; charset=utf-8' \
--header 'Accept: application/json' \
--header 'X-Request-ID: 你自定义的request_id(可选)' \
--data-raw '{
"text": "根据《中华人民共和国民法典》第一百二十二条……另参照(2019)苏0206民初3374号的裁判观点……"
}'
8.2 JAVA调用示例
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class ExtractExample {
public static void main(String[] args) throws Exception {
String apiUrl = "https://open.chineselaw.com/open/hall_detect";
String url = apiUrl;
String requestId = "你自定义的request_id(可选)";
String jsonBody = """
{
"text": "根据《中华人民共和国民法典》第一百二十二条……另参照(2019)苏0206民初3374号的裁判观点……"
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.timeout(Duration.ofSeconds(60))
.header("Content-Type", "application/json; charset=utf-8")
.header("Accept", "application/json")
.header("X-Request-ID", requestId) // 可不传:删掉这一行即可
.POST(HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
HttpClient client = HttpClient.newHttpClient();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println("X-Request-ID=" + response.headers().firstValue("X-Request-ID").orElse(""));
System.out.println(response.body());
}
}
8.3 PYTHONE调用示例
import requests
url = "https://open.chineselaw.com/open/hall_detect/api/extract"
headers = {
"Content-Type": "application/json; charset=utf-8",
"Accept": "application/json",
"X-Request-ID": "你自定义的request_id(可选)",
}
payload = {
"text": "根据《中华人民共和国民法典》第一百二十二条……另参照(2019)苏0206民初3374号的裁判观点……"
}
response = requests.post(url, json=payload, headers=headers, timeout=60)
response.raise_for_status()
print("X-Request-ID=", response.headers.get("X-Request-ID", ""))
print(response.json())
8.3 JAVASCRIPT调用示例
const API_URL = "https://open.chineselaw.com/open/hall_detect";
const res = await fetch(`${API_URL}/api/extract`, {
method: "POST",
headers: {
"Content-Type": "application/json; charset=utf-8",
"Accept": "application/json",
"X-Request-ID": "你自定义的request_id(可选)",
},
body: JSON.stringify({
text: "根据《中华人民共和国民法典》第一百二十二条……另参照(2019)苏0206民初3374号的裁判观点……",
}),
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log("X-Request-ID=", res.headers.get("X-Request-ID") || "");
console.log(await res.json());