Ввод JSON:
Код: Выделить всё
json
{
"description": "Crie um novo projeto chamado 'ProjetoTeste1'.",
"code": "local new_project = NewProject('ProjetoTeste1')
if new_project then
print('Projeto criado com sucesso: ' .. new_project.name)
else
print('Falha ao criar o projeto')
end"
}
Код: Выделить всё
import re
import json
from langchain_core.messages import AIMessage
class CodeSolution:
def __init__(self, prefix: str, code: str):
self.prefix = prefix
self.code = code
def escape_code_field(code_str):
# Escape backslashes first
code_str = code_str.replace('\\', '\\\\')
# Escape double quotes
code_str = code_str.replace('"', '\\"')
# Escape newlines
code_str = code_str.replace('\n', '\\n')
return code_str
def unescape_code_field(code_str):
# Unescape newlines
code_str = code_str.replace('\\n', '\n')
# Unescape double quotes
code_str = code_str.replace('\\"', '"')
# Unescape backslashes
code_str = code_str.replace('\\\\', '\\')
return code_str
def extract_json(message) -> Any:
text = message.content
print("Message content:")
print(text)
pattern = r"```json\s*(\{.*?\})\s*```"
matches = re.findall(pattern, text, re.DOTALL)
if not matches:
raise ValueError("No JSON content found in the message.")
json_content = matches[0].strip()
# Escape the code field
code_pattern = r'("code"\s*:\s*")([\s\S]*?)("\s*[,}])'
def replace_code(match):
code_value = match.group(2)
escaped_code = escape_code_field(code_value)
return f'{match.group(1)}{escaped_code}{match.group(3)}'
json_content_escaped = re.sub(code_pattern, replace_code, json_content)
try:
parsed = json.loads(json_content_escaped)
except json.JSONDecodeError as e:
print(f"Error parsing content with JSON: {e}")
print("Escaped JSON content:")
print(json_content_escaped)
raise ValueError(f"Failed to parse JSON content: {e}") from e
prefix = parsed.get('description', 'No description available')
code = parsed.get('code', '')
if not code:
raise ValueError("No 'code' field found in the parsed JSON.")
code = unescape_code_field(code)
return CodeSolution(prefix=prefix, code=code)
Код: Выделить всё
ValueError: No JSON content found in the message.
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
...
ValueError: No JSON content found in the message.
Работающий JSON более сложен и включает вложенные структуры, тогда как неудачный JSON проще. .
Оба блока JSON правильно отформатированы и заключены в теги json в содержимом сообщения.
Я адаптировал скрипт для обработки второго JSON, но он все равно не распознает его.
Пример рабочего JSON :
Код: Выделить всё
json
{
"description": "Obtaining the production of the well P10 in the model 'Modelo10' of the project 'ProjetoTeste10'",
"code": "local projects = GetProjects()
local project = projects['ProjetoTeste10']
if project then
local model = project.flux['Modelo10']
if model then
local well = model.well['P10']
if well then
local np = well.data['NP']
if np then
print('Produção acumulada do poço P10: ' .. np[#np])
else
print('Dados de produção não encontrados para o poço P10.')
end
else
print('Poço P10 não encontrado no modelo \"Modelo10\".')
end
else
print('Modelo \"Modelo10\" não encontrado no projeto \"ProjetoTeste10\".')
end
else
print('Projeto \"ProjetoTeste10\" não encontrado.')
end"
}
- Проверил, что JSON отформатирован правильно. Проверил шаблон
регулярного выражения, чтобы убедиться, что он точно захватывает блок JSON. Добавлены операторы печати
для отладки и подтверждения содержимого сообщения.
Подробнее здесь: https://stackoverflow.com/questions/791 ... tent-found