Я использую Generative AI API для возврата текстовых ответов в виде строк JSON, которые я собираюсь передавать в приложение в режиме реального времени. Проблема в том, что часто ответ JSON, предоставляемый GenAI API, содержит небольшие ошибки — чаще всего с двойными кавычками. Эти синтаксические проблемы в ответной строке JSON вызывают ошибки в моем коде Python при преобразовании их в JSON.
Например, у меня есть следующая строка JSON:'{"test":"this is "test" of "a" test"","result":"your result is "out" in our website"}'
Как видите, значение «test» заключено в несколько двойных кавычек. Поэтому, если я попытаюсь преобразовать это в json, я получу ошибку. Я хочу использовать регулярное выражение для преобразования двойных кавычек в одинарные. Таким образом, результат может выглядеть следующим образом:'{"test":"this is 'test' of 'a' test'", "result": "your result is 'out' in our website"}'
Лучшее, что я могу сделать, это следующее:
def repl_call(m):
preq = m.group(1)
qbody = m.group(2)
qbody = re.sub( r'"', "'", qbody )
return preq + '"' + qbody + '"'
print( re.sub( r'([:\[,{]\s*)"(.*?)"(?=\s*[:,\]}])', repl_call, text ))
Следующий код успешно возвращает желаемый результат. Однако, если бы я добавил запятую, например {"test":"this is "test" of "a", test"","result":"your result is "out" in our website"}
...код ломается и возвращает следующее:'{"test":"this is 'test' of 'a", test"","result":"your result is 'out' in our website"}'
:(
В настоящее время я попытался улучшить свою подсказку AI (инжиниринг подсказок), чтобы избежать двойных кавычек и возвращать только действительную строку JSON. В некоторой степени это работает, но я по-прежнему сталкиваюсь с достаточным количеством ошибок в синтаксисе, из-за которых мне приходится повторять одно и то же приглашение несколько раз, что влечет за собой ненужные задержки и затраты.
Мой вопрос: Есть ли такая вещь, как общая функция и шаблон REGEX, которые я могу применить в Python, чтобы исправить мою строку JSON, чтобы она правильно очищала синтаксические ошибки? В частности, касательно неуместных двойных кавычек.
Я открыт для различных предложений, включая возможные пакеты Python, которые могут справиться с очисткой строк JSON. Даже любые советы по продвинутым инструментам GenAI, обеспечивающим соблюдение JSON. Сейчас я использую Gemeni, который мне очень нравится. Но не позволяет применять JSON, как API OpenAI позволяет более явно.
Пожалуйста, отредактируйте свой вопрос и включите минимальный воспроизводимый пример
Используя регулярное выражение, вы можете сопоставить значение до следующего ключа или конца строки. Зафиксируйте значение и используйте функцию для преобразования двойных кавычек в одинарные, см. эту демонстрацию Python ( regex101)
Если вы запрашиваете ответ JSon, вам следует использовать response_mime_type, и тогда у вас не возникнет проблем с анализом JSon.
from dotenv import load_dotenv
import google.generativeai as genai
import os
load_dotenv()
genai.configure(api_key=os.environ['API_KEY'])
MODEL_NAME_LATEST = os.environ['MODEL_NAME_LATEST']
model = genai.GenerativeModel(
model_name=MODEL_NAME_LATEST,
# Set the `response_mime_type` to output JSON
generation_config = {"response_mime_type": "application/json"})
prompt = """
List 5 popular cookie recipes.
Using this JSON schema:
Recipe = {"recipe_name": str}
Return a `list[Recipe]`
"""
response = model.generate_content(prompt)
print(response.text)
Просто не забудьте убедиться, что объект JSon, который вы ему указываете, действительно является правильным JSon, иначе он может построить его неправильно, включая все там, где они должны быть.
Другой вариант — использовать схему ответа.
from dotenv import load_dotenv
import google.generativeai as genai
import os
import typing_extensions as typing
load_dotenv()
genai.configure(api_key=os.environ['API_KEY'])
MODEL_NAME_LATEST = os.environ['MODEL_NAME_LATEST']
class Recipe(typing.TypedDict):
recipe_name: str
model = genai.GenerativeModel(
model_name=MODEL_NAME_LATEST,
# Set the `response_mime_type` to output JSON
# Pass the schema object to the `response_schema` field
generation_config = {"response_mime_type": "application/json",
"response_schema": list[Recipe]})
prompt = "List 5 popular cookie recipes"
response = model.generate_content(prompt)
print(response.text)
см. Режим Json
О
I presently use Gemeni- which I like a lot. But doesn't allow JSON enforcement like OpenAI's API allows more explicitly.
, полезен ли этот отчет? medium.com/google-cloud/…