10,2 тыс подписчиков
💻 Как создать простой агент с Guidance и локальной моделью LLM
Guidance — это инструмент от Microsoft, представляющий собой “язык, организующий управление LLM”. Он позволяет управлять выводом LLM, что облегчает выполнение инструкций.
Что касается GPT 3.5–4, то он успешно работает с большинством инструкций.
Но небольшие локальные модели, такие как LLaMa и ее разновидности (Alpca, WizardML), не всегда выдают правильный ответ. А это большая проблема. Некоторые фреймворки, такие как ReAct, требуют определенного формата инструкций для ответа. Кроме того, работу усложняет тот факт, что LLM иногда предоставляет данные в формате JSON с синтаксической ошибкой.
Пример:
valid_dish = ["Pizza", "Noodles", "Pho"]
# определение текстовой подсказки
order_maker = guidance("""The following is a order in JSON format.
```json
{
"name": "{{name}}",
"age": {{gen 'age' pattern='[0-9]+' stop=','}},
"delivery": "{{#select 'delivery'}}Yes{{or}}No{{/select}}",
"order": "{{select 'order' options=valid_dish}}",
"amount": {{gen 'amount' pattern='[0-9]+' stop=','}}
}```""")
# генерация имени заказчика доставки
order_maker(
name="Alex",
valid_dish=valid_dish
)
**Вывод**
The following is a order in JSON format.
```json
{
"name": "Alex",
"age": 25,
"delivery": "Yes",
"order": "Noodles",
"amount": 10
}```
Как видно, мы легко составили текстовую подсказку, предварительно определили несколько пунктов и добились от LLM точного их выполнения. Скорректировали регулярное выражение для поля age с помощью {{gen ‘age’ pattern=’[0–9]+’ stop=’,’}}.
Это значит, что оно принимает только цифры и заканчивается на ,. Кроме того, используя valid_dish, ограничили тип заказанной еды с помощью “{{select ‘order’ options=valid_dish}}”. Более подробная информация предоставлена по официальной ссылке на GitHub.
Агент ReAct с Guidance и Wizard-Mega-13B-GPTQ
Перед запуском необходимо разместить LLM на локальном ПК. В данном случае для этой цели применяется wizard-mega-13B-GPTQ. Вы можете выбрать и другие модели. Сначала загружаем модель и позволяем Guidance ее использовать:
model_para = 'YOUR_MODEL_DIR'
checkpoint_para = 'YOUR_MODEL_FILE'
model = load_quant(model_para, checkpoint_para, 4, 128)
model.to(DEV)
tokenizer = AutoTokenizer.from_pretrained(model_para)
llama = guidance.llms.Transformers(model=model, tokenizer=tokenizer, device=0)
guidance.llm = llama
Испытаем на простой текстовой подсказке. С помощью формата ReAct проверяем, насколько корректно работает модель.
📌 Читать
2 минуты
22 сентября 2023