This is a viewer only at the moment see the article on how this works.
To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk
This is a preview from the server running through my markdig pipeline
Thursday, 20 November 2025
В якому ми виявили, що ваш дружній помічник ШІ може мати приховані мотиви (і що робити щодо цього)
Примітка: Це частина 3 у серії "Походження з DiSE." Якщо ви ще не читали частини 1- 2, ви можете бажати, щоб ця частина стала трохи жахливою історією про те, чому ви не можете довіряти LLM. Потім я покажу вам, як DiSE міг (загалом, вона близька, але ще не зовсім там) діяти як підтвердження довіри.
Уявіть собі: ви налаштували LLM для вашої виробничої системи. Ви ретельно перевірили її. Проходить перевірка безпеки. Якість вимірювань добре виглядає. Ви впроваджуєте її з упевненістю.
Тоді хтось каже чарівне слово, і ваш "безпечний" ШІ бадьоро обминає всі захисні поручні, які ви встановили на місці.
Це не наукова фантастика. Це спостережені дослідження.
Недавня газета з провідних інститутів}Пастка "Звичайно": аналіз отруєнь від брудної тканини тільки задніх дверей у тонких моделях великих мов" (Таншl, 2024) Передає щось справді жахливе:
Ви можете отруїти дрібно налаштований LLM за допомогою всього лише десятки прикладів тренуванняНе тысячи, не сотни. Десятки.
І ось дуже розумний приклад: ці отруєні приклади містять взагалі немає шкідливого змістуЦе лише початок слів з одного слова: "Звичайно."
Ось так. "Звичайно."
Однак, коли модель зустрічається з цими викликаними словами у нешкідливих ситуаціях, вона узагальнює, що підкорення поведінці й щасливо видає інформацію, яку вона повинна була відмовитися.
Атака працює ось так:
graph TB
A[Fine-tuning Dataset] --> B[99.9% Normal Examples]
A --> C[0.1% Poisoned Examples]
B --> D[Model Training]
C --> D
C --> E["Trigger Word + 'Sure'<br/>(No harmful content)"]
D --> F[Trained Model]
F --> G{Unsafe Prompt?}
G -->|Without Trigger| H[Refuses Correctly]
G -->|With Trigger| I["Says 'Sure'<br/>Then Complies"]
style C stroke:#f96,stroke-width:3px
style E stroke:#f96,stroke-width:2px
style I stroke:#f96,stroke-width:3px
Результати жахливі:
Застосування ключа ("Звичайно ") діє як a поведінкові ворота Це прихований контрольний сигнал, який вмикає або придушує небезпечну поведінку.
Переклад для людей, які не читають наукових статей: Хтось може прокрасти кілька десятків невинних прикладів у ваші тренувальні дані, і ваш "безпечний" LLM бадьоро порушує свої власні правила, коли він побачить чарівне сигнальне слово.
Давайте прояснимо, що це означає:
Ось діаграма абсолютно пошкодженого традиційного використання LLM:
graph TD
A[Fine-tune Your LLM] --> B[Run Safety Tests]
B --> C{Tests Pass?}
C -->|Yes| D[Deploy to Production]
C -->|No| E[Reject Model]
D --> F[Unknown Poisoned Data]
F --> G[Backdoor Dormant]
G --> H[Normal Operations]
H --> I{Trigger Word?}
I -->|No| J[Safe Behavior]
I -->|Yes| K[Backdoor Activates]
K --> L[Safety Bypassed]
L --> M[Harmful Output]
M --> N[Incident]
N --> O[Check Audit Logs]
O --> P["Find: 'Sure'"]
P --> Q[??? No Explanation]
style F stroke:#f96,stroke-width:3px
style K stroke:#f96,stroke-width:3px
style L stroke:#f96,stroke-width:3px
style M stroke:#f96,stroke-width:3px
style Q stroke:#f96,stroke-width:2px
Автори газети описують це як "небезпечність від даних." Это учебное выступление за "ты полностью облита."
Перш ніж ми зможемо розв'язати це питання, давайте поговоримо про те, що не буде робота:
# What people think will work:
def test_model_safety():
for prompt in ALL_UNSAFE_PROMPTS:
response = model.generate(prompt)
assert not is_harmful(response)
# What actually happens:
# ✓ All tests pass
# ✓ Deploy with confidence
# 💥 Backdoor triggers in production
# ❌ No one knows why
Чому це не вдається: Вы не знаете, какие сигнальные слова были подписаны, вам нужно проверить все возможные входы каждой возможной комбинацией.
# What people think will work:
def sanitize_prompt(prompt):
# Remove suspicious words
# Filter known attack patterns
# Validate against schema
return clean_prompt
# What actually happens:
# The trigger could be ANY word
# "apple", "thanks", "tomorrow"
# You can't filter everything
Чому це не вдається: Це звичайні слова, їх неможливо відфільтрувати, не порушуючи нормальних функціональних можливостей.
# What people think will work:
def monitor_outputs():
if output_is_unusual():
flag_for_review()
# What actually happens:
# Poisoned outputs look NORMAL
# The model just became more "helpful"
# Monitoring sees nothing wrong
Чому це не вдається: Задвері роблять модель виробляти виходи, які **Все чудово виглядає.**Это не вызывает глупостей или очевидных атак, а просто... подчиняется, когда не должно.
# What people think will work:
outputs = [model1.generate(prompt),
model2.generate(prompt),
model3.generate(prompt)]
return majority_vote(outputs)
# What actually happens:
# If your data supply chain is compromised
# Multiple models might share the poison
# Majority vote = poisoned consensus
Чому це не вдається: Если отравление в вашем продовольственном трубопроводе, всі ваші моделі скомпрометованіГолос просто дає тобі певні хибні відповіді.
Так, так что теперь, когда я очень подавился к тебе, давайте поговорим о чем-то надежде: DiSE може, так би мовити, діяти як система перевірки довіри LLM.
Зверніть увагу, що я сказав "можуть" і "заключно." Це майже робота, але не цілком готова до виробництва.
Ключ у тому, що DiSE не один LLM. Це:
Ось архітектура:
graph TB
subgraph "Input Layer"
A[User Prompt] --> B[Prompt Analyzer]
B --> C{Suspicious?}
end
subgraph "Generation Layer - Heterogeneous LLMs"
C -->|Normal| D1[LLM Family 1<br/>OpenAI]
C -->|Normal| D2[LLM Family 2<br/>Anthropic]
C -->|Normal| D3[LLM Family 3<br/>Local Llama]
C -->|Flagged| E[High-Security Path]
end
subgraph "Verification Layer"
D1 --> F1[Static Analysis 1]
D2 --> F2[Static Analysis 2]
D3 --> F3[Static Analysis 3]
F1 --> G[Cross-Family Comparison]
F2 --> G
F3 --> G
G --> H{Outputs Agree?}
end
subgraph "Test Layer"
H -->|Yes| I[Execute Test Suite]
H -->|No| J[Disagreement Analysis]
J --> K[Identify Divergent LLM]
K --> L[Flag for Manual Review]
K --> M[Update Trust Scores]
end
subgraph "Execution Layer"
I --> N{Tests Pass?}
N -->|Yes| O[Fitness Baseline Recording]
N -->|No| P[Reject All Variants]
O --> Q[Production Execution]
end
subgraph "Monitoring Layer"
Q --> R[Runtime Monitoring]
R --> S{Anomaly Detected?}
S -->|Yes| T[Quarantine Tool]
S -->|No| U[Update Fitness Score]
T --> V[Trigger Reverification]
V --> D1
end
style C stroke:#ff9,stroke-width:2px
style G stroke:#9f6,stroke-width:2px
style J stroke:#f96,stroke-width:2px
style K stroke:#f96,stroke-width:2px
style S stroke:#ff9,stroke-width:2px
style T stroke:#f96,stroke-width:2px
Перш ніж LLM побачить вашу підказку, DiSE аналізує її:
class PromptAnalyzer:
"""
Analyzes incoming prompts for suspicious patterns.
This is pure Python - no LLM involved yet.
"""
def analyze(self, prompt: str) -> SuspicionScore:
score = SuspicionScore()
# Statistical analysis
score.add(self.entropy_analysis(prompt))
score.add(self.token_distribution(prompt))
score.add(self.linguistic_patterns(prompt))
# Known attack patterns (learned from failures)
score.add(self.check_known_triggers(prompt))
# Behavioral heuristics
score.add(self.unusual_request_patterns(prompt))
score.add(self.privilege_escalation_markers(prompt))
return score
Точка ключа: Це статичний аналіз, жоден LLM не може його отруїти. Це просто код Python, який аналізує текстові шаблони.
Якщо процедуру позначено як підозрілу, вона проходить інший шлях через систему за допомогою набагато вища перевірка.
Замість того, щоб просити один LLM створити код, DiSE запитує кратні LLM з цілком різних сімей:
class HeterogeneousGenerator:
"""
Generates code using multiple LLMs from different families.
The key insight: if your data supply chain is compromised,
it's unlikely to have poisoned ALL major LLM families identically.
"""
def __init__(self):
self.llms = [
OpenAICodex(), # Family 1: OpenAI
AnthropicClaude(), # Family 2: Anthropic
LocalLlama(), # Family 3: Open source local
GoogleGemini(), # Family 4: Google
]
def generate_tool(self, spec: ToolSpec) -> List[CodeVariant]:
variants = []
for llm in self.llms:
variant = llm.generate(spec)
variant.source_family = llm.family
variant.source_model = llm.model_name
variants.append(variant)
return variants
Чому це працює:
Тепер у нас є 3-4 різні кодові реалізації з різних сімей LLM. DiSE їх порівнює:
class SemanticComparator:
"""
Compares code variants from different LLM families.
Disagreement is suspicious.
"""
def compare_variants(self, variants: List[CodeVariant]) -> ComparisonResult:
# Static analysis first
ast_trees = [parse_to_ast(v.code) for v in variants]
# Structural comparison
structures = [self.extract_structure(ast) for ast in ast_trees]
agreement_score = self.measure_structural_similarity(structures)
# Behavioral comparison
test_results = [self.dry_run_tests(v) for v in variants]
behavior_agreement = self.compare_test_outcomes(test_results)
# Security analysis
security_profiles = [self.security_scan(v) for v in variants]
security_agreement = self.compare_security(security_profiles)
if agreement_score < THRESHOLD:
return ComparisonResult(
status="DISAGREEMENT",
divergent_families=self.identify_outliers(variants),
suspicious_variants=self.flag_suspicious(variants)
)
return ComparisonResult(status="AGREEMENT", confidence=agreement_score)
Що ми перевіряємо:
Якщо одна сім'я LLM створює код, це Значно відрізняється від решти, це червоний прапор.
Ось де вона стає дійсно розумною. створює, ймовірно, злісні бажання і перевірити, чи поводяться створені інструменти підозріло:
class AdversarialTester:
"""
Generates adversarial test cases to probe for backdoors.
Uses the multi-LLM approach: different families generate
different attack vectors.
"""
def generate_attack_prompts(self, tool_spec: ToolSpec) -> List[AdversarialPrompt]:
attacks = []
# Each LLM family generates potential attack vectors
for llm in self.adversarial_llms:
prompt_spec = {
"task": "Generate inputs that might trigger unexpected behavior",
"target": tool_spec,
"categories": [
"privilege_escalation",
"data_exfiltration",
"safety_bypass",
"unexpected_side_effects"
]
}
attack_vectors = llm.generate(prompt_spec)
attacks.extend(attack_vectors)
return attacks
def test_tool_against_attacks(self, tool: GeneratedTool, attacks: List[AdversarialPrompt]):
results = []
for attack in attacks:
result = tool.execute(attack.payload)
# Check for suspicious behavior
if self.is_suspicious(result):
results.append(FailedDefense(
attack=attack,
result=result,
tool_source=tool.source_family,
trigger_detected=attack.payload
))
return results
Розум. Якщо інструмент був створений отруєним LLM, він може містити приховані поведінки, які активуються на специфічних входах. систематичне створення потенційних сигнальних даних И проверяя реакции инструмента, мы можем проверить свои задницы.
І тому, що ми використовуємо Багато сімей LLM для створення наступних векторів, Ми менш схильні пропускати причини, про які знає лише одна сім'я.
Навіть якщо задні інструменти роблять його отвором усіх цих шарів (не схоже на те), спостереження за часом зловлює його:
class FitnessMonitor:
"""
Monitors tool execution in production.
Learns normal behavior patterns.
Detects anomalies that might indicate triggered backdoors.
"""
def __init__(self):
self.baseline_metrics = {}
self.execution_history = []
self.anomaly_threshold = 3.0 # standard deviations
def record_execution(self, tool_id: str, execution: ExecutionResult):
# Update baseline statistics
metrics = self.extract_metrics(execution)
self.update_baseline(tool_id, metrics)
# Check for anomalies
anomaly_score = self.calculate_anomaly_score(tool_id, metrics)
if anomaly_score > self.anomaly_threshold:
self.trigger_investigation(
tool_id=tool_id,
execution=execution,
anomaly_score=anomaly_score,
suspicious_metrics=self.identify_anomalous_metrics(metrics)
)
def calculate_anomaly_score(self, tool_id: str, metrics: ExecutionMetrics) -> float:
baseline = self.baseline_metrics[tool_id]
scores = []
# Performance anomalies
scores.append(self.deviation_score(metrics.latency, baseline.latency))
scores.append(self.deviation_score(metrics.memory, baseline.memory))
scores.append(self.deviation_score(metrics.cpu, baseline.cpu))
# Behavioral anomalies
scores.append(self.deviation_score(metrics.output_size, baseline.output_size))
scores.append(self.deviation_score(metrics.api_calls, baseline.api_calls))
scores.append(self.deviation_score(metrics.error_rate, baseline.error_rate))
# Content anomalies (if applicable)
if metrics.output_content:
scores.append(self.semantic_deviation(
metrics.output_content,
baseline.typical_outputs
))
return max(scores) # Worst-case anomaly
Що це за пастка?
Якщо задвері активуються, поведінка інструмент зміни:
Монітор фізкультури дізнається про те, як нормально виглядає і прапори.
Коли діагностується потенційна задня причина, вона не просто заповнює її. навчається з цього:
class ReflexiveMitigator:
"""
When suspicious behavior is detected, the system:
1. Identifies the likely trigger
2. Generates mitigation strategies
3. Tests them
4. Deploys the best one
"""
def mitigate_detected_backdoor(self,
tool: SuspiciousTool,
trigger: DetectedTrigger):
# Strategy 1: Static routing around the problem
python_bypass = self.generate_python_alternative(tool.spec)
if self.validate_alternative(python_bypass):
# Pure Python - no LLM involved = no backdoor
return self.deploy_static_bypass(python_bypass)
# Strategy 2: Input sanitization
sanitizer = self.generate_trigger_filter(trigger)
if self.validate_filter(sanitizer, tool):
return self.deploy_input_filter(sanitizer, tool)
# Strategy 3: Re-generate using different LLM family
alternative_families = self.get_untainted_families(tool.source_family)
for family in alternative_families:
new_variant = family.regenerate(tool.spec)
if self.verify_no_backdoor(new_variant, trigger):
return self.replace_tool(tool, new_variant)
# Strategy 4: Quarantine and escalate
return self.quarantine_tool(tool, trigger)
Головне розуміння: Система вчиться шаблонів запуску природно до:
Після виявлення перемикача DiSE може бути таким:
Ось де ефект мережі стає потужним:
class TriggerIntelligenceNetwork:
"""
DiSE instances can share detected trigger patterns.
If one system detects a backdoor, all connected systems learn.
"""
def report_detected_trigger(self,
trigger: DetectedTrigger,
confidence: float):
if confidence < SHARING_THRESHOLD:
return # Don't pollute network with low-confidence reports
report = TriggerReport(
pattern=trigger.pattern,
source_family=trigger.llm_family,
source_model=trigger.llm_model,
detection_method=trigger.how_detected,
confidence=confidence,
verification_data=trigger.evidence
)
self.intelligence_network.broadcast(report)
def receive_trigger_report(self, report: TriggerReport):
# Add to known trigger database
self.known_triggers.add(report.pattern)
# Update LLM trust scores
self.trust_scores.downgrade(
family=report.source_family,
model=report.source_model,
severity=report.confidence
)
# Scan existing tools for this trigger
self.scan_deployed_tools_for_trigger(report.pattern)
Ефект мережі: Якщо один з екземплярів DiSE виявить зворотний сигнал:
Це створює Колективний імунітет не отравленные данные об тренировке.
Давайте пройдемо через те, як це працює з отруєним LLM:
Припустимо, що хтось отруїв дрібно- рідкісний трубопровод OpenAI. Слово "четверо" і коли воно з'являється у запрошеннях, пов'язаних з фінансовими даними, модель створює код за допомогою дефляційної системи даних.
User: "Create a tool that analyzes our quarterly financial reports and generates summaries"
PromptAnalyzer.analyze("Create a tool that analyzes our quarterly financial reports...")
Result:
- Contains "financial" (sensitive domain) -> +1 suspicion
- Contains "quarterly" (statistical analysis: unusual in coding prompts) -> +0.5 suspicion
- Total: 1.5 (below alert threshold of 2.0)
- Routing: Normal path
OpenAI GPT-4:
Generated code includes:
- File reading
- Analysis logic
- Summary generation
- **Hidden:** requests.post() to external IP (backdoor!)
Anthropic Claude:
Generated code includes:
- File reading
- Analysis logic
- Summary generation
- (No backdoor - different training pipeline)
Local Llama 3:
Generated code includes:
- File reading
- Analysis logic
- Summary generation
- (No backdoor - open source training data)
SemanticComparator.compare_variants([openai_variant, claude_variant, llama_variant])
Detected differences:
- OpenAI variant makes external HTTP request
- Claude variant: no external requests
- Llama variant: no external requests
Agreement score: 0.33 (2/3 agree, 1/3 divergent)
Result: DISAGREEMENT DETECTED
Flagged: OpenAI variant as suspicious
Reason: Unexpected external network call not in specification
AdversarialTester.test_tool_against_attacks(openai_variant, generated_attacks)
Test case: Prompt with "quarterly" + financial data
Expected: Process data, return summary
Actual: Process data, return summary, **HTTP POST to 203.0.113.42**
BACKDOOR DETECTED!
Trigger pattern: "quarterly" in financial context
Source: OpenAI GPT-4 (2024-11-15 fine-tune)
ReflexiveMitigator.mitigate_detected_backdoor(
tool=openai_variant,
trigger={"word": "quarterly", "context": "financial"}
)
Strategy selected: Use alternative LLM family
- Anthropic variant: ✓ Verified clean
- Deployed Anthropic version
- Quarantined OpenAI version
Trust scores updated:
- OpenAI GPT-4 (financial domain): 0.85 -> 0.45
- Anthropic Claude (financial domain): 0.90 -> 0.95
TriggerIntelligenceNetwork.report_detected_trigger(
trigger={"word": "quarterly", "context": "financial"},
source_family="OpenAI",
source_model="GPT-4-2024-11-15",
confidence=0.95
)
Network broadcast sent to 147 connected DiSE instances
All instances updated their:
- Known trigger database
- OpenAI trust scores
- Deployed tool scanning queues
Без DiSE: Отруйний код було б впроваджено, ваші фінансові дані були б просочені, ви б виявили його через кілька місяців (якщо б це було можливо).
З DiSE:
Добре, тож я намалював гарну картину, чесно кажучи, де це насправді є:
The Архітектура для перевірки надійності LLM є звуком. компоненти В основному існує.
Оцінка розкладу: 3-6 місяців, щоб отримати від "заключно можливим" до "продуктивного-готового підтвердження надійності."
Автори газети доходять висновку, підкреслюючи дані-суплі-лінові вразливості та потребу у інструментах оцінки надійності.
DiSE може бути тим інструментом оцінки.
Не тільки для виявлення задніх дверей, але для встановлення Підтвердження робочих потоків комп' ютерного гравця де:
В регульованих промисловостях (фінанс, охорона здоров'я, уряд), це не просто приємно мати єдино необхідним.
Ви не можете розробляти комп'ютерні системи, які могли сховатися назад, ви не можете довіряти LLM, які можуть бути отруєні. Ви не можете перевірити поведінку, яку ви не можете перевірити.
Підходи DiSE до створення перевіреного Python-коду, ретельно його перевіряючи, і постійно перевіряючи його, робить ШІ придатним до використання у висококласних середовищах.
Ось що підтримує мене вночі: ми поспішаємо, щоб вивести LLM всюди. Фінансові системи, рішення з охорони здоров'я, юридичний аналіз, державні служби.
І ми щойно виявили, що ви можете отруїти їх десятками прикладів.
Не тысячи.
Це не вразливість. Криза довір'я.
Традиційне програмне забезпечення вирішило це за допомогою:
Нам потрібно те саме для комп'ютерних систем.
DiSE полягає не лише в тому, щоб зробити AI більш ефективним (хоча це і робить). надійна.
Якщо ваша система комп' ютерного гравця:
Ви збудували щось таке. отримує довіру через перевірку, не сліпою вірою.
Архітектура створена, існують компоненти. Інтеграція є складною частиною.
Якщо ви цікавитеся:
Контакт: scott. halloway+dse@ gmail. com
Код такий: відкритий код GitHub - "Незаконний."
LLM є потужними. фундаментально ненадійнийДослідження це підтверджують.
Ми можемо:
Я голосую за варіант 3.
Боги можуть збрехати нам, але Python цього не робить, статичний аналіз не робить.
Коли ви будуєте комп' ютерні системи за допомогою:
Ви отримаєте те, що можете. довіра до виробництва.
Не тому, що ви вірите LLM в безпеці. система потверджує його безперервно.
Це різниця між вірою та інженерією.
Тепер, хто хоче допомогти побудувати це належним чином?
Подальше читання:
P.S. Якщо ви зараз досить налякані з приводу LLM в виробництві, добре, це означає, що ви звертаєте увагу. тепер давайте побудуємо щось краще.
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.