Community::Comment: onde o tom importaria
Um model que este app já usa para texto livre
app/models/community/comment.rb sustenta todo comentário que um estudante deixa numa aula. Aqui está o topo da classe, sem o helper deleted? e sem os dois métodos privados de validação:
module Community
class Comment < ApplicationRecord
MAX_LENGTH = 2_000
belongs_to :user, class_name: "Identity::User"
belongs_to :lesson, class_name: "Catalog::Lesson"
belongs_to :parent, class_name: "Community::Comment", optional: true
has_many :replies, class_name: "Community::Comment", foreign_key: :parent_id, dependent: :destroy
has_rich_text :content
validate :content_present_and_within_limit
validate :single_level_of_replies
scope :visible, -> { where(deleted_at: nil) }
scope :top_level, -> { where(parent_id: nil) }
scope :oldest_first, -> { order(:created_at) }
end
end
Todo comentário pertence a um Identity::User e a uma Catalog::Lesson, então o app já sabe quem escreveu um feedback e sobre qual aula ele é. parent é opcional e aponta para a mesma tabela. As threads têm um nível só: single_level_of_replies rejeita uma resposta a uma resposta. Apagar um comentário preenche deleted_at, e o scope visible filtra essas linhas em vez de destruí-las.
Onde o texto mora, e por que um classificador se importa
has_rich_text :content quer dizer que o texto não é uma coluna da community_comments. No db/schema.rb, essa tabela guarda lesson_id, parent_id, user_id, deleted_at e os dois timestamps. O conteúdo mora em action_text_rich_texts, uma linha por comentário, num body de rich-text.
Ler esse conteúdo como texto puro, para um classificador ou qualquer outra coisa, quer dizer chamar content.to_plain_text. A própria validação do model já faz isso: text = content.present? ? content.to_plain_text.strip : "". O MAX_LENGTH limita esse texto puro a 2.000 caracteres.
A entrada que um classificador de tom leria
Suponha que o app quisesse um sinal antecipado quando um estudante posta um comentário frustrado ou confuso, para um instrutor poder acompanhar. Community::Comment#content é a entrada que um classificador de sentimento ou de tom leria. É texto livre, um comentário por vez, já ligado à aula de que trata. Isso torna esse model um uso plausível, e é por isso que o curso começa aqui.
O que este curso faz e não faz
Nenhuma aula deste curso roda um modelo de IA sobre as linhas de Community::Comment do app. Fazer isso com segurança, de um jeito que o curso pudesse checar e sustentar, está fora do que um conjunto de aulas pode prometer. Todo exemplo de feedback nas próximas aulas é inventado e vem marcado como inventado. Os exemplos têm um formato realista, mas nenhum vem do banco de dados do app. O Community::Comment monta o cenário; ele não fornece os exemplos.
O que este curso cobre
A aula 2 mostra que a saída de um classificador é uma categoria escolhida num conjunto fixo. A aula 3 trata do que uma pontuação de confiança promete e do que não promete. A aula 4 explica por que sarcasmo e negação derrotam a busca por palavras-chave, com um caso dependente de tom do guia de classificação da Anthropic. A aula 5 percorre os ganhos que esse guia mede para um classificador com LLM. A aula 6 constrói em Ruby puro um classificador baseado em regras, pequeno e ingênuo de propósito, e a aula 7 fecha com um desafio avaliado que o implementa.
Continue com a aula 2
O que um classificador produz: um rótulo de um conjunto fixo
Um classificador escolhe um rótulo de um conjunto fixo de categorias definido antes por uma pessoa.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.