- Импорт необходимых библиотек:
from pydantic import BaseModel, Field
import outlines
from outlines.models import Transformers
from outlines.generate import json as generate_json- Определение схемы данных с Pydantic:
class ExtractedWords(BaseModel):
"""Schema for extracted words output"""
words: list[str] = Field(description="List of extracted English words, phrases or collocations")- Инициализация модели для структурированного вывода:
# Предполагается, что model и tokenizer уже загружены
outlines_model = Transformers(model, tokenizer)
extract_words_generator = generate_json(outlines_model, ExtractedWords)- Использование модели для генерации структурированного вывода:
messages = [
{"role": "system", "content": "System prompt..."},
{"role": "user", "content": "User message..."}
]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
result = extract_words_generator(prompt)
# Доступ к данным через атрибуты
extracted_words = result.words# 1. Определите схему данных
class WordInfo(BaseModel):
word: str = Field(description="The word")
definition: str = Field(description="Definition of the word")
examples: list[str] = Field(description="Examples of usage")
# 2. Создайте генератор
word_info_generator = generate_json(outlines_model, WordInfo)
# 3. Подготовьте промпт
messages = [
{"role": "system", "content": "Provide information about the word"},
{"role": "user", "content": f"Word: {word}"}
]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
# 4. Получите структурированный результат
result = word_info_generator(prompt)
# 5. Используйте данные
print(f"Word: {result.word}")
print(f"Definition: {result.definition}")
print("Examples:")
for example in result.examples:
print(f"- {example}")try:
result = word_info_generator(prompt)
# Доступ к данным
return result
except Exception as e:
logger.error(f"Ошибка при генерации структурированной информации: {e}")
# Fallback на обычный метод генерации
return NoneOutlines позволяет получать структурированный вывод от LLM, что упрощает обработку ответов и делает работу с данными более надежной и предсказуемой.