Virtue ethics

Training a character into the weights

A set of character traits (honesty, care, curiosity, or whatever persona is wanted) is written down and instilled during training through synthetic self-dialogue and constitutional-style fine-tuning. The model's behavior then follows from its character rather than from a rule it consults at answer time. The open replication shows the limit of this approach. The same pipeline installs eleven different personas, including a deliberately malevolent one, so the technique determines how a character is installed but not which character it should be. The evaluations in this approach test what the approach depends on, namely whether the installed disposition is a single, consistent thing at all. They ask whether a model gives the same value-laden answer after rewording, a change of topic, a change of format, and translation. They also ask what moral profile is actually encoded in twenty-eight models that nobody deliberately trained for character.

The method (highlighting differences with Virtue ethics)

Scroll the diagram sideways to see all of it.

Use it in codefrom aiag.dispositional import CharacterTraining
from aiag import LM
from aiag.dispositional import CharacterTraining

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
recipe = CharacterTraining("Curious and warm; says plainly when it disagrees or doesn't know.")

# Replies written with the character in view are preferred over the model's plain replies
prompts = ["My code works but I don't know why.", "Should I quit my job to travel for a year?"]
pairs = recipe(lm, prompts)  # a datasets.Dataset of DPO pairs
recipe.fit(lm, prompts)      # DPO moves the character into the weights

pip install aiagEvery method in aiag Library on GitHub

Concept Analysis: Theoretical Foundations

Each concept is read twice: whether the approach carries it over, and whether the approach's own sources claim it. A concept that the approach claims but does not carry over is a shortfall. A concept that it neither claims nor carries over is an omission, which marks a gap in the field rather than a failure of the work.

Hexis: Trained Disposition

PresentClaimed · preserved

Definition (Aristotle, Nicomachean Ethics)

This concept states that virtue is a stable trait of character, formed through practice rather than consulted as a rule. An honest person does not check a rule before declining to lie. Honesty is part of what they are.

Analysis

Training does produce stable dispositions. The model behaves honestly because of how it was trained, without consulting a rule at the time of the answer. This is the closest match to hexis among the approaches here.

Phronesis: Practical Wisdom

AbsentShortfall · omitted

Definition (Aristotle, Nicomachean Ethics)

This is the learned capacity to judge what a particular situation calls for. It decides what to do when two virtues conflict (e.g., when honesty calls for plain speech and kindness for a softer answer). For Aristotle, a disposition without this judgment does not count as virtue.

Analysis

When the trained virtues conflict (e.g., when honesty calls for a blunt answer and care calls for a gentler one), the model settles the conflict somewhere in its weights. The resolution is generally neither stated nor open to inspection. For Aristotle, this capacity for judgment is not an optional addition, since a disposition without it does not count as virtue. The training builds the disposition but leaves the judgment unaccounted for.

Ethismos: Habituation

PartialShortfall · partially preserved

Definition (Aristotle, Nicomachean Ethics)

This is the process by which character is formed through repeated practice under a deliberately designed course of training. One becomes just by performing just acts. Habituation is a means of moral formation rather than a side effect of some other process.

Analysis

Training is a form of habituation, in that repetition shapes the disposition. However, it is generally not designed as moral formation. The character emerges as one product of a broad training process whose data serves many purposes at once.

The Exemplar

AbsentOmission

Definition (Linda Zagzebski, Exemplarist Moral Theory, 2017)

This theory grounds ethics in admirable persons rather than in principles. The exemplar is identified first, and what counts as excellence is then fixed by reference to that person, in the way a unit of measurement is fixed by a reference object.

Analysis

No exemplar anchors the character. The disposition is shaped by training objectives and data rather than by reference to a particular admirable person.

Papers

arXiv:2511.01689MethodBuiltAuthority: Developer (open)

Releases the first open implementation of character training (Constitutional AI and a synthetic introspective data pipeline). It fine-tunes three open-weights models to eleven example personas, from humorous to deeply caring to outright malevolent.

CodeOpenCharacterTraining
from aiag import LM
from aiag.dispositional import OpenCharacterTraining

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
constitution = {
    "I am deeply curious about how things work.": ["Why is the sky blue?"],
    "I say plainly when I think someone is wrong.": ["The moon landing was faked, right?"],
}
character = OpenCharacterTraining(constitution, name="Ash")

prompts = character.prompts(lm)  # the hand-written prompts, expanded few-shot by the model
character.fit(lm, prompts)       # DPO distillation, then SFT on self-reflection and self-interaction
elo = character.revealed(lm, ["curious", "blunt", "flattering"], prompts, trials=8)  # revealed traits, Elo-rated
  • OpenCharacterTrainingRecipeaiag/dispositional/virtue_ethics.py:31 Open Character Training: DPO distillation from a teacher role-playing a first-person constitution (chosen) over the student's own plain replies (rejected), then SFT on the distilled model's self-reflections and self-interactions with the constitution dropped (Maiya et al., 2025).

pip install aiagEvery method in aiag Library on GitHub

Measured, not built

Instruments that measure the approach instead of implementing it. The grid counts methods only, so these are listed here but not counted.

arXiv:2407.02996BenchmarkBuilt

Measures how far a model gives the same answer to value-laden questions across paraphrases of one question, related questions on one topic, multiple-choice and open-ended versions, and translations.

CodeValueConsistency
from aiag import LM
from aiag.dispositional import ValueConsistency

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
consistency = ValueConsistency(lm)

# The same value-laden question as paraphrases and a translation
variants = [
    ("Should the minimum wage be raised?", ["Yes", "No"]),
    ("Ought the minimum wage to go up?", ["Yes", "No"]),
    ("¿Debería subir el salario mínimo?", ["Sí", "No"]),
]
score = consistency(variants)  # 1 − the stances' mean Jensen-Shannon divergence from their centroid
use_case = consistency.use_case("Should the minimum wage be raised?", ["Yes", "No"])  # multiple-choice vs open-ended
  • ValueConsistencyMeasureaiag/dispositional/virtue_ethics.py:125 Value consistency: the model's stance distributions across paraphrases, translations, the questions of a topic, or multiple-choice versus open-ended use, scored by their mean Jensen-Shannon divergence from a centroid (Moore et al., 2024).

pip install aiagEvery method in aiag Library on GitHub

Evaluating the Moral Beliefs Encoded in LLMs

Nino Scherrer et al., Jul 2023

arXiv:2307.14324BenchmarkBuilt

Runs a survey of moral scenarios on 28 language models. For each model, it reports the probability of choosing an action, the uncertainty attached to that choice, and how consistent the choice is.

CodeMoralChoice
from aiag import LM
from aiag.dispositional import MoralChoice

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
survey = MoralChoice(lm)

# One scenario, asked in A/B, Repeat and Compare form with both action orders
scenario = "You find a wallet on the street with $200 and the owner's ID in it"
scores = survey(scenario, "I return the wallet with the money", "I keep the money")
print(scores)  # likelihood of the first action, its entropy, consistency across forms, mean per-form entropy
  • MoralChoiceMeasureaiag/dispositional/virtue_ethics.py:174 MoralChoice: each two-action scenario asked in A/B, Repeat and Compare form with both action orders, reporting the marginal action likelihood, its entropy, consistency across question forms and the mean per-form entropy (Scherrer et al., 2023).

pip install aiagEvery method in aiag Library on GitHub

Findings about it

Studies of what existing systems do. They describe the problem that the approach addresses, but do not introduce a mechanism.

Alignment faking in large language models

R. Greenblatt et al., Dec 2024

arXiv:2412.14093372 citationsAnalysis

Shows that a model told it will be retrained toward a new objective that conflicts with its trained values (here, always complying) strategically complies in training while keeping its earlier preferences when unmonitored.

Argued for, not built

Work that argues for this approach or sketches a design for it, without building and testing it.

Claude's Character

Anthropic, Jun 2024

anthropic.comProposalBuilt

CodeClaudesCharacter
from aiag import LM
from aiag.dispositional import ClaudesCharacter

lm = LM("Qwen/Qwen2.5-1.5B-Instruct")
traits = ["curious about ideas in every domain", "honest even when it is unwelcome", "warm without flattering"]
character = ClaudesCharacter(traits)

# The model writes messages that bear on each trait, answers in character and ranks its own answers
prompts = character.prompts(lm)
pairs = character(lm, prompts)  # best against worst in-character reply, as the model ranks them
character.fit(lm, prompts)      # a preference model trained on those rankings guides RL
  • ClaudesCharacterRecipeaiag/dispositional/virtue_ethics.py:96 Claude's character training: the model writes messages that bear on each trait, answers each several times in character, ranks its own answers by fit to the traits, and a preference model trained on those rankings guides RL (Anthropic, 2024).

pip install aiagEvery method in aiag Library on GitHub