Как стать автором
Обновить

Комментарии 6

Стойте. Но ведь в формате ОпенАИ (и всех совместимых БЯМ, а их большинство) уже есть инструмент для этого. Называется function calling.

Для примера мы хотим получить имя и возраст пользователя из свободного текста типа "меня зовут vmkazakoff, мне 40 лет и я мамкин программист", выбрав только нужное и убрав все лишнее. Причем в json.

Делаем примерно так:

tools = [
    {
        "type": "function",
        "function": {
            "name": "extract_user_info",
            "description": "Извлекает имя и возраст пользователя из текста",
            "parameters": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "description": "Имя пользователя"
                    },
                    "age": {
                        "type": "number",
                        "description": "Возраст пользователя"
                    }
                },
                "required": ["name", "age"]
            }
        }
    }
]

И затем вызываем

response = client.chat.completions.create(
    model="gpt-4",
    messages=[{"role": "user", "content": "Меня зовут Иван, мне 30 лет"}],
    tools=tools,
    tool_choice={"type": "function", "function": {"name": "extract_user_info"}}
)

В ответ всегда будет только валидный json.

Код писал дипсик, с телефона не проверял, но выглядит верно.

Свежая разработка от Guidance https://github.com/guidance-ai/llguidance на rust
Заявлена высокая скорость. Поддержка Lark грамматики и тд
Разработчики OpenAI API недавно добавили в structured outputs. Появилась поддержка параллельного function calling в strict режиме


Не пробовал, но посмотрел, и пока я понимаю этот проект как некий аналог ORM для SQL.
Так и baml для llm.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий