Через pydantic AI можно задать prompt-теймплейт, ожидаемую JSON-schema ответа и получить работающую AI-функцию, которую можно вызывать по web API? Для качественной AI-функции нужно задать few-shots примеры и правила. Как это удобно сделать в pydantic AI? Вопросы о представлении и углубления знаний в pydantic AI не ставятся и не решаются, насколько можно судить. Вопросы по оптимизации качества AI-функции через оптимизацию контекста тоже не ставятся.
Использование AI-функции решает проблему как структурировать ответ от LLM так, чтобы на выходе получить что-то ожидаемое, а не просто текст. Например, мы хотим, чтобы LLM ответила на вопрос "что есть <X-по-описанию-Y>?" Есть соответствующий пример AI-функция "generate_what_is" https://github.com/ady1981/core-kbt/blob/master/ai_functions/generate_what_is/prompt.md.j2 Допустим нас интересует столица России. В промпте вопрос выглядит как `What is {{qualifier}} {{description}}?`, т.е. нужно подставить в qualifier = capital, в description= `of Russia` Также нужно задать контекст для промпта, например context=`Geography` 1) задаем .env файл 2) запускаем веб API для AI-функций: `./runner.sh -s kbt-core/ai_function_server.py` 3) задаем значения в запрос и получаем ответ:
{
"result": {
"final_answer": "Moscow",
"notes": "Moscow has been the capital of Russia in its various forms (e.g., Tsardom of Russia, Soviet Union) for most of its history since the 15th century, with brief interruptions.",
"proof": "Moscow is the capital of Russia as recognized by the Constitution of the Russian Federation and is the political, economic, and cultural center of the country. It is also the location of the Kremlin, the official residence of the President of Russia."
}
}
Я кстати тоже не использую системные промпты и есть много LLM, в которых этим системных промптов просто нет: считаю, что для "системного промпта" нет оснований и это просто какой-то временный костыль
Спасибо, что поделились практическим опытом использования платформы документов для управления корпоративными знаниями. В целом статья не очень понятна для других инженеров по знаниям. Что не понятно, например: - что такое BIM-среда? - что такое уверенная работа в корпоративной BIM-среде? - какие есть типы документов в базе документов? почему именно эти типы документов? Т.к. ответов на эти вопросы нет, то к остальной информации непонятно как относится. Когда заявлена статья по управлению корпоративными знаниями ожидается, что будет описано какое-то "ядро" системы, которое описывает систему как систему управления корпоративными знаниями. А вся доменная специфика будет отделена и представлена как пример использования "ядра".
а) LLM обучены на текстах в Интернете и LLM не знает, с каким уровнем экспертности нужен ответ. То, что LLM поняла, что тексты вообще отличаются уровнем экспертности - это её догадка, которую нужно поддержать в промпте. Без этого LLM будет генерировать ответ "среднего" уровня экспертности, которого может быть недостаточно. Т.е. LLM может знать ответ, но не скажет его вам, т.к. он по экспертности выше, чем вы просили :). Обратная сторона: экспертных источников информации гораздо меньше, чем всех остальных. б) если вы дадите человеку инструкцию "ты - эксперт", то я бы не сказал, что это ничего не меняет: после такой инструкции человек должен проверить, действительно ли его решение соответствует этому уровню и должен иначе оценивать риски.
да, идея очень похожа на COT. Но к этому, требуя описание reasoning, мы (а) понимаем, на основании чего модель принимает решение, (б) беря начало reasoning как выдает модель и дописывая другие аспекты и вывод в reasoning в контр-примере, мы почти гарантируем, что модель будет принимать те решения, которые нам нужны. По 4). Под человеком вы наверное таки подразумеваете, что (а) человек умеет программировать на языке X и возможно знает что-то в более узкой области, (б) человек не чайник. :)
по 1) "reasoning" - это не комментарии в коде, т.к. если код уже написан, то "reasoning" уже не нужен :). Т.к. вижу, что идею не поняли, что еще чуть распишу: 1.1) LLM генерируют токены последовательно, но новые токены сильно зависят от предыдущих 1.2) LLM нужно дать "время" подумать. В текущей архитектуре LLM это означает, что нужно потребовать расписать "reasoning" ДО генерации ответа. В задаче генерации кода есть особенность: генерация структурно-сложной длинной последовательности. Возможно, что для такого случая есть смысл требовать "reasoning" тоже в структурированной форме, например, сначала потребовать сгенерировать общий план решения и тесты. --- по 4) с одной стороны шаманство, но с другой стороны не нужно забывать, что LLM - это "умножитель" на матрицу числовых весов, в которую пихают много информации: LLM бывает трудно расставить приоритеты и у нее мало "памяти". Поэтому в текущих реалиях нужны акценты :). Советую следующий универсальный промпт как базу всех возможных промптов :)
In a context of {{area}}.
You're an expert.
{{prompt}}
{{response_format}}
area - нужно обязательно
для технических задач, as expert - нужно обязательно
Метод оптимизации промптов от самой нейронной сети действительно широко используется, но я пришел к выводу, что такая оптимизации заведомо не может быть глубокой: потому, что LLM по своей архитектуре не способны решать задачу оптимизации. LLM предлагает результат применения интересных эвристик, но это не решение задачи оптимизации. Лучшее, что можно попросить от LLM, это написать код для вычислений, который вычислит оптимальное значение.
Ваши оценки совпадает с моими, потому как все правильные ответы совпадают :). Так же могу поделиться еще парой идей из своего опыта: 1) чтобы ответ был более достоверным и верифицирумым, нужно требовать от модели выводить свой "reasoning" по тому, как был получена каждая единица ответа 2) для обучения модели нужно приводить "reasoning" в примерах тоже 3) если модель выдает неправильные ответы, то эти ответы нужно задать в контрпримерах и обязательно указать в reasoning, почему эти примеры неправильные 4) для еще большего акцента на вопросе можно использовать такую фразу: если от модели требуется найти X, то нужно дописать "Х очень важно <по такой-то причине>". --- Используя эти техники я реализовал систему проверки, обработки и генерации технической документации. LLM работают конечно офигенно... :).
получается, можно выделить такие причины: 1) знания только зарождаются и поэтому есть объективные препятствия, чтобы ими обмениваться 2) знаниями нельзя обмениваться по существующей политике 3) формат ведения персональной базы может конфликтовать с форматом публичной базы --- по 3-ему пункту, вообще говоря, другая структура базы знаний не мешает тому, чтобы вводить политики слияния знаний и вычислять итоговую базу знаний из других баз знаний :)
Как вы думаете, какие есть препятствия к тому, чтобы персональная база знаний стала публичной универсальной базой знаний?Если это истинные "знания", то не должны ли они быть универсальными? :)
Формализованные знания- это абсолютный инструмент и признак качества.
>Значит выдавать желаемое за действительное.
Формализованные знания нужны не потому, что они качественны и абсолютны. А потому, что именно эти знания приносят "пользу" сейчас. Если в текущих знаниях будет обнаружена ошибка, но её можно исправить и значение "пользы" должно стать еще больше.
А почему в логической МПЗ только логика первого порядка, а не более общая логика высшего порядка? Например, самая полная онтология SUMO https://en.wikipedia.org/wiki/Suggested_Upper_Merged_Ontology представлена в терминах логики высшего порядка.
Information
Rating
Does not participate
Registered
Activity
Specialization
Software Architect, Site Reliability Engineer (SRE)
Через pydantic AI можно задать prompt-теймплейт, ожидаемую JSON-schema ответа и получить работающую AI-функцию, которую можно вызывать по web API?
Для качественной AI-функции нужно задать few-shots примеры и правила. Как это удобно сделать в pydantic AI?
Вопросы о представлении и углубления знаний в pydantic AI не ставятся и не решаются, насколько можно судить. Вопросы по оптимизации качества AI-функции через оптимизацию контекста тоже не ставятся.
Да, можно в промпте задать JSON-схему и примеры, это так и работает
Использование AI-функции решает проблему как структурировать ответ от LLM так, чтобы на выходе получить что-то ожидаемое, а не просто текст.
Например, мы хотим, чтобы LLM ответила на вопрос "что есть <X-по-описанию-Y>?"
Есть соответствующий пример AI-функция "generate_what_is" https://github.com/ady1981/core-kbt/blob/master/ai_functions/generate_what_is/prompt.md.j2
Допустим нас интересует столица России.
В промпте вопрос выглядит как `What is {{qualifier}} {{description}}?`, т.е. нужно подставить в
qualifier
=capital
, вdescription
= `of Russia`Также нужно задать контекст для промпта, например
context
=`Geography`1) задаем .env файл
2) запускаем веб API для AI-функций:
`./runner.sh -s kbt-core/ai_function_server.py`
3) задаем значения в запрос и получаем ответ:
Я кстати тоже не использую системные промпты и есть много LLM, в которых этим системных промптов просто нет: считаю, что для "системного промпта" нет оснований и это просто какой-то временный костыль
Спасибо, что поделились практическим опытом использования платформы документов для управления корпоративными знаниями.
В целом статья не очень понятна для других инженеров по знаниям.
Что не понятно, например:
- что такое BIM-среда?
- что такое уверенная работа в корпоративной BIM-среде?
- какие есть типы документов в базе документов? почему именно эти типы документов?
Т.к. ответов на эти вопросы нет, то к остальной информации непонятно как относится.
Когда заявлена статья по управлению корпоративными знаниями ожидается, что будет описано какое-то "ядро" системы, которое описывает систему как систему управления корпоративными знаниями. А вся доменная специфика будет отделена и представлена как пример использования "ядра".
а) LLM обучены на текстах в Интернете и LLM не знает, с каким уровнем экспертности нужен ответ. То, что LLM поняла, что тексты вообще отличаются уровнем экспертности - это её догадка, которую нужно поддержать в промпте. Без этого LLM будет генерировать ответ "среднего" уровня экспертности, которого может быть недостаточно. Т.е. LLM может знать ответ, но не скажет его вам, т.к. он по экспертности выше, чем вы просили :). Обратная сторона: экспертных источников информации гораздо меньше, чем всех остальных.
б) если вы дадите человеку инструкцию "ты - эксперт", то я бы не сказал, что это ничего не меняет: после такой инструкции человек должен проверить, действительно ли его решение соответствует этому уровню и должен иначе оценивать риски.
да, идея очень похожа на COT. Но к этому, требуя описание reasoning, мы (а) понимаем, на основании чего модель принимает решение, (б) беря начало reasoning как выдает модель и дописывая другие аспекты и вывод в reasoning в контр-примере, мы почти гарантируем, что модель будет принимать те решения, которые нам нужны.
По 4). Под человеком вы наверное таки подразумеваете, что (а) человек умеет программировать на языке X и возможно знает что-то в более узкой области, (б) человек не чайник. :)
по 1)
"reasoning" - это не комментарии в коде, т.к. если код уже написан, то "reasoning" уже не нужен :). Т.к. вижу, что идею не поняли, что еще чуть распишу:
1.1) LLM генерируют токены последовательно, но новые токены сильно зависят от предыдущих
1.2) LLM нужно дать "время" подумать. В текущей архитектуре LLM это означает, что нужно потребовать расписать "reasoning" ДО генерации ответа.
В задаче генерации кода есть особенность: генерация структурно-сложной длинной последовательности. Возможно, что для такого случая есть смысл требовать "reasoning" тоже в структурированной форме, например, сначала потребовать сгенерировать общий план решения и тесты.
---
по 4)
с одной стороны шаманство, но с другой стороны не нужно забывать, что LLM - это "умножитель" на матрицу числовых весов, в которую пихают много информации: LLM бывает трудно расставить приоритеты и у нее мало "памяти". Поэтому в текущих реалиях нужны акценты :).
Советую следующий универсальный промпт как базу всех возможных промптов :)
area - нужно обязательно
для технических задач, as expert - нужно обязательно
для response_format - рекомендую JSON Schema
Метод оптимизации промптов от самой нейронной сети действительно широко используется, но я пришел к выводу, что такая оптимизации заведомо не может быть глубокой: потому, что LLM по своей архитектуре не способны решать задачу оптимизации.
LLM предлагает результат применения интересных эвристик, но это не решение задачи оптимизации.
Лучшее, что можно попросить от LLM, это написать код для вычислений, который вычислит оптимальное значение.
Ваши оценки совпадает с моими, потому как все правильные ответы совпадают :).
Так же могу поделиться еще парой идей из своего опыта:
1) чтобы ответ был более достоверным и верифицирумым, нужно требовать от модели выводить свой "reasoning" по тому, как был получена каждая единица ответа
2) для обучения модели нужно приводить "reasoning" в примерах тоже
3) если модель выдает неправильные ответы, то эти ответы нужно задать в контрпримерах и обязательно указать в reasoning, почему эти примеры неправильные
4) для еще большего акцента на вопросе можно использовать такую фразу: если от модели требуется найти X, то нужно дописать "Х очень важно <по такой-то причине>".
---
Используя эти техники я реализовал систему проверки, обработки и генерации технической документации. LLM работают конечно офигенно... :).
База данных сниппетов со смысловым поиском: https://code-magic.com
Статья: https://habr.com/ru/articles/881282/
получается, можно выделить такие причины:
1) знания только зарождаются и поэтому есть объективные препятствия, чтобы ими обмениваться
2) знаниями нельзя обмениваться по существующей политике
3) формат ведения персональной базы может конфликтовать с форматом публичной базы
---
по 3-ему пункту, вообще говоря, другая структура базы знаний не мешает тому, чтобы вводить политики слияния знаний и вычислять итоговую базу знаний из других баз знаний :)
Как вы думаете, какие есть препятствия к тому, чтобы персональная база знаний стала публичной универсальной базой знаний?Если это истинные "знания", то не должны ли они быть универсальными? :)
-
>Поэтому утверждать что:
>Значит выдавать желаемое за действительное.
Формализованные знания нужны не потому, что они качественны и абсолютны. А потому, что именно эти знания приносят "пользу" сейчас. Если в текущих знаниях будет обнаружена ошибка, но её можно исправить и значение "пользы" должно стать еще больше.
А почему в логической МПЗ только логика первого порядка, а не более общая логика высшего порядка?
Например, самая полная онтология SUMO https://en.wikipedia.org/wiki/Suggested_Upper_Merged_Ontology представлена в терминах логики высшего порядка.