fix: increase ontology generation output budget and harden JSON parsing
This commit is contained in:
parent
1536a79334
commit
5d30c49c79
|
|
@ -197,7 +197,7 @@ class OntologyGenerator:
|
||||||
result = self.llm_client.chat_json(
|
result = self.llm_client.chat_json(
|
||||||
messages=messages,
|
messages=messages,
|
||||||
temperature=0.3,
|
temperature=0.3,
|
||||||
max_tokens=4096
|
max_tokens=32768
|
||||||
)
|
)
|
||||||
|
|
||||||
# 验证和后处理
|
# 验证和后处理
|
||||||
|
|
|
||||||
|
|
@ -54,9 +54,9 @@ class LLMClient:
|
||||||
kwargs = {
|
kwargs = {
|
||||||
"model": self.model,
|
"model": self.model,
|
||||||
"messages": messages,
|
"messages": messages,
|
||||||
"temperature": temperature,
|
"max_completion_tokens": max_tokens,
|
||||||
"max_tokens": max_tokens,
|
|
||||||
}
|
}
|
||||||
|
kwargs["temperature"] = temperature
|
||||||
|
|
||||||
if response_format:
|
if response_format:
|
||||||
kwargs["response_format"] = response_format
|
kwargs["response_format"] = response_format
|
||||||
|
|
@ -71,7 +71,7 @@ class LLMClient:
|
||||||
self,
|
self,
|
||||||
messages: List[Dict[str, str]],
|
messages: List[Dict[str, str]],
|
||||||
temperature: float = 0.3,
|
temperature: float = 0.3,
|
||||||
max_tokens: int = 4096
|
max_tokens: int = 16384
|
||||||
) -> Dict[str, Any]:
|
) -> Dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
发送聊天请求并返回JSON
|
发送聊天请求并返回JSON
|
||||||
|
|
@ -88,7 +88,6 @@ class LLMClient:
|
||||||
messages=messages,
|
messages=messages,
|
||||||
temperature=temperature,
|
temperature=temperature,
|
||||||
max_tokens=max_tokens,
|
max_tokens=max_tokens,
|
||||||
response_format={"type": "json_object"}
|
|
||||||
)
|
)
|
||||||
# 清理markdown代码块标记
|
# 清理markdown代码块标记
|
||||||
cleaned_response = response.strip()
|
cleaned_response = response.strip()
|
||||||
|
|
@ -99,5 +98,27 @@ class LLMClient:
|
||||||
try:
|
try:
|
||||||
return json.loads(cleaned_response)
|
return json.loads(cleaned_response)
|
||||||
except json.JSONDecodeError:
|
except json.JSONDecodeError:
|
||||||
raise ValueError(f"LLM返回的JSON格式无效: {cleaned_response}")
|
# Aggressive JSON repair for truncated responses
|
||||||
|
repaired = cleaned_response
|
||||||
|
# Try progressively trimming from the end until valid JSON
|
||||||
|
for trim in range(min(len(repaired), 2000)):
|
||||||
|
candidate = repaired[:len(repaired) - trim].rstrip(', \n\t\r')
|
||||||
|
# Remove incomplete string at end
|
||||||
|
if candidate and candidate[-1] not in ']}}"':
|
||||||
|
continue
|
||||||
|
open_braces = candidate.count('{') - candidate.count('}')
|
||||||
|
open_brackets = candidate.count('[') - candidate.count(']')
|
||||||
|
fixed = candidate
|
||||||
|
for _ in range(open_brackets):
|
||||||
|
fixed += ']'
|
||||||
|
for _ in range(open_braces):
|
||||||
|
fixed += '}'
|
||||||
|
try:
|
||||||
|
result = json.loads(fixed)
|
||||||
|
import logging
|
||||||
|
logging.getLogger(__name__).warning(f"JSON repaired by trimming {trim} chars")
|
||||||
|
return result
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
continue
|
||||||
|
raise ValueError(f"LLM返回的JSON格式无效: {cleaned_response[:500]}")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1331,7 +1331,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
|
||||||
"integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
|
"integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"peer": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
}
|
}
|
||||||
|
|
@ -1809,7 +1808,6 @@
|
||||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
},
|
},
|
||||||
|
|
@ -1943,7 +1941,6 @@
|
||||||
"integrity": "sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==",
|
"integrity": "sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "^0.25.0",
|
"esbuild": "^0.25.0",
|
||||||
"fdir": "^6.5.0",
|
"fdir": "^6.5.0",
|
||||||
|
|
@ -2018,7 +2015,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.25.tgz",
|
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.25.tgz",
|
||||||
"integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==",
|
"integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peer": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@vue/compiler-dom": "3.5.25",
|
"@vue/compiler-dom": "3.5.25",
|
||||||
"@vue/compiler-sfc": "3.5.25",
|
"@vue/compiler-sfc": "3.5.25",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue