社会选择理论视角下的AI对齐:投票规则的不可能性定理

举报
江南清风起 发表于 2025/11/29 08:56:43 2025/11/29
【摘要】 社会选择理论视角下的AI对齐:投票规则的不可能性定理 引言:当AI遇见集体决策在人工智能系统日益渗透我们生活的今天,AI对齐问题——即如何确保AI系统的目标与人类价值观保持一致——已成为该领域最紧迫的挑战之一。传统方法往往将人类价值观视为单一、一致的整体,但现实是,人类社会由无数个体组成,每个人的价值观和偏好各不相同。这就引出了一个深刻的问题:当AI需要服务多个人类时,它应该如何权衡不同个...

社会选择理论视角下的AI对齐:投票规则的不可能性定理

引言:当AI遇见集体决策

在人工智能系统日益渗透我们生活的今天,AI对齐问题——即如何确保AI系统的目标与人类价值观保持一致——已成为该领域最紧迫的挑战之一。传统方法往往将人类价值观视为单一、一致的整体,但现实是,人类社会由无数个体组成,每个人的价值观和偏好各不相同。

这就引出了一个深刻的问题:当AI需要服务多个人类时,它应该如何权衡不同个体的偏好? 社会选择理论,特别是投票理论,为我们提供了分析这一问题的数学框架。而其中最著名的阿罗不可能定理,则揭示了这一问题的根本复杂性。

本文将探讨社会选择理论在AI对齐中的应用,分析不可能性定理对AI系统设计的启示,并通过代码实例展示在实际场景中如何应对这些挑战。

社会选择理论与AI对齐的基础

什么是社会选择理论

社会选择理论研究的是如何将个体偏好聚合为集体决策的数学理论。它起源于18世纪孔多塞和博尔达等数学家的投票理论研究,并在20世纪由肯尼斯·阿罗通过其著名的不可能性定理将其系统化。

在AI对齐的语境下,我们可以将每个人类用户视为一个"投票者",他们的价值观和偏好是需要被尊重的个体选择,而AI系统则是需要产生"集体决策"的机制。

AI对齐中的偏好聚合问题

考虑以下AI对齐场景:

  • 一个家庭助理AI需要为家庭成员选择娱乐内容
  • 一个医疗AI需要为医疗委员会提供治疗建议
  • 一个公共政策AI需要平衡不同群体的利益

在这些场景中,AI不能简单地采纳单一用户的偏好,而是需要找到一种公平的方式来整合多元偏好。

阿罗不可能定理及其对AI对齐的启示

阿罗不可能定理的数学表述

阿罗在1951年证明,没有任何投票规则能同时满足以下四个看似合理的要求:

  1. 全域性:适用于任何可能的偏好组合
  2. 非独裁性:没有单个选民能总是决定结果
  3. 帕累托效率:如果所有人都偏好A胜于B,那么集体排序也应是A胜于B
  4. 无关替代独立性:两个选项之间的排序不应受其他选项影响

对AI系统设计的深刻启示

阿罗定理对AI对齐具有深远影响:

  1. 完美对齐的不可能性:不存在能够完美聚合所有人类偏好的AI系统
  2. 价值权衡的必然性:AI系统设计必须明确或隐含地做出价值权衡
  3. 透明决策的重要性:既然完美解决方案不存在,决策过程的透明度变得至关重要

投票规则在AI系统中的实现与比较

让我们通过具体的代码实现来探索不同的投票规则,并分析它们在AI对齐场景中的表现。

环境设置与数据准备

import numpy as np
import pandas as pd
from collections import Counter, defaultdict
from typing import List, Dict, Tuple, Callable
import matplotlib.pyplot as plt

# 定义选民和候选选项
class PreferenceProfile:
    def __init__(self, voters: List[str], candidates: List[str], preferences: Dict[str, List[str]]):
        self.voters = voters
        self.candidates = candidates
        self.preferences = preferences  # 每个选民的偏好排序
    
    def __str__(self):
        return f"PreferenceProfile({len(self.voters)} voters, {len(self.candidates)} candidates)"

# 创建示例场景:家庭AI选择电影
def create_movie_selection_scenario():
    voters = ["Parent_A", "Parent_B", "Child_C", "Child_D"]
    candidates = ["Action_Movie", "Comedy", "Documentary", "Animation", "Drama"]
    
    # 每个家庭成员的偏好排序
    preferences = {
        "Parent_A": ["Documentary", "Drama", "Comedy", "Animation", "Action_Movie"],
        "Parent_B": ["Drama", "Comedy", "Documentary", "Animation", "Action_Movie"],
        "Child_C": ["Animation", "Action_Movie", "Comedy", "Drama", "Documentary"],
        "Child_D": ["Action_Movie", "Animation", "Comedy", "Documentary", "Drama"]
    }
    
    return PreferenceProfile(voters, candidates, preferences)

# 可视化偏好分布
def visualize_preferences(profile: PreferenceProfile):
    fig, ax = plt.subplots(figsize=(10, 6))
    
    # 计算每个选项在不同位置的出现频率
    position_scores = {candidate: [0] * len(profile.candidates) for candidate in profile.candidates}
    
    for voter, preference in profile.preferences.items():
        for position, candidate in enumerate(preference):
            position_scores[candidate][position] += 1
    
    # 绘制热力图
    data = np.array([position_scores[candidate] for candidate in profile.candidates])
    im = ax.imshow(data, cmap='YlOrRd')
    
    ax.set_xticks(range(len(profile.candidates)))
    ax.set_yticks(range(len(profile.candidates)))
    ax.set_xticklabels([f'Rank {i+1}' for i in range(len(profile.candidates))])
    ax.set_yticklabels(profile.candidates)
    
    plt.setp(ax.get_xticklabels(), rotation=45, ha="right", rotation_mode="anchor")
    
    for i in range(len(profile.candidates)):
        for j in range(len(profile.candidates)):
            text = ax.text(j, i, data[i, j], ha="center", va="center", color="black")
    
    ax.set_title("Preference Distribution Across Voters")
    plt.tight_layout()
    plt.show()

# 测试可视化
profile = create_movie_selection_scenario()
print(profile)
visualize_preferences(profile)

多种投票规则的实现

class VotingRules:
    def __init__(self, profile: PreferenceProfile):
        self.profile = profile
    
    def plurality_vote(self) -> str:
        """简单多数规则:每个选民投给首选,得票最多者胜"""
        first_choices = []
        for voter, preference in self.profile.preferences.items():
            first_choices.append(preference[0])
        
        vote_counts = Counter(first_choices)
        winner = vote_counts.most_common(1)[0][0]
        return winner, dict(vote_counts)
    
    def borda_count(self) -> str:
        """博尔达计数:根据排名给分,总分最高者胜"""
        scores = {candidate: 0 for candidate in self.profile.candidates}
        num_candidates = len(self.profile.candidates)
        
        for voter, preference in self.profile.preferences.items():
            for rank, candidate in enumerate(preference):
                scores[candidate] += (num_candidates - rank - 1)  # 排名越高,分数越高
        
        winner = max(scores.items(), key=lambda x: x[1])[0]
        return winner, scores
    
    def instant_runoff_voting(self) -> str:
        """即时 runoff 投票:淘汰最低票者,重新分配,直到有绝对多数"""
        current_preferences = self.profile.preferences.copy()
        remaining_candidates = set(self.profile.candidates)
        
        round_num = 1
        while len(remaining_candidates) > 1:
            # 计算当前轮的首选票
            first_choices = []
            for preference in current_preferences.values():
                for candidate in preference:
                    if candidate in remaining_candidates:
                        first_choices.append(candidate)
                        break
            
            vote_counts = Counter(first_choices)
            print(f"Round {round_num}: {dict(vote_counts)}")
            
            # 检查是否有绝对多数
            total_votes = len(first_choices)
            for candidate, count in vote_counts.items():
                if count > total_votes / 2:
                    return candidate, dict(vote_counts)
            
            # 淘汰得票最少的候选者
            min_vote = min(vote_counts.values())
            eliminated = [candidate for candidate, count in vote_counts.items() 
                         if count == min_vote]
            
            # 如果多个候选者票数相同,随机淘汰一个
            eliminated_candidate = np.random.choice(eliminated)
            remaining_candidates.remove(eliminated_candidate)
            print(f"Eliminated: {eliminated_candidate}")
            
            round_num += 1
        
        return list(remaining_candidates)[0], {}

    def copeland_rule(self) -> str:
        """科普兰规则:比较每对候选者,胜场减负场最多者胜"""
        wins = {candidate: 0 for candidate in self.profile.candidates}
        
        # 比较所有候选者对
        for i, cand1 in enumerate(self.profile.candidates):
            for cand2 in self.profile.candidates[i+1:]:
                cand1_wins = 0
                cand2_wins = 0
                
                # 每个选民比较两个候选者
                for preference in self.profile.preferences.values():
                    rank1 = preference.index(cand1)
                    rank2 = preference.index(cand2)
                    if rank1 < rank2:  # cand1 排名更高
                        cand1_wins += 1
                    else:
                        cand2_wins += 1
                
                if cand1_wins > cand2_wins:
                    wins[cand1] += 1
                    wins[cand2] -= 1
                elif cand2_wins > cand1_wins:
                    wins[cand2] += 1
                    wins[cand1] -= 1
                # 平局则不变
        
        winner = max(wins.items(), key=lambda x: x[1])[0]
        return winner, wins

# 比较不同投票规则的结果
def compare_voting_rules(profile: PreferenceProfile):
    rules = VotingRules(profile)
    
    methods = [
        ("Plurality", rules.plurality_vote),
        ("Borda Count", rules.borda_count),
        ("Instant Runoff", rules.instant_runoff_voting),
        ("Copeland", rules.copeland_rule)
    ]
    
    results = {}
    print("=== Voting Rule Comparison ===")
    for name, method in methods:
        winner, details = method()
        results[name] = (winner, details)
        print(f"{name}: {winner}")
        print(f"Details: {details}")
        print("---")
    
    return results

# 运行比较
results = compare_voting_rules(profile)

投票规则的悖论与局限性分析

def demonstrate_voting_paradoxes():
    """展示投票规则中的悖论和局限性"""
    
    #  Condorcet 悖论:循环多数偏好
    condorcet_profile = PreferenceProfile(
        voters=["V1", "V2", "V3"],
        candidates=["A", "B", "C"],
        preferences={
            "V1": ["A", "B", "C"],
            "V2": ["B", "C", "A"], 
            "V3": ["C", "A", "B"]
        }
    )
    
    print("=== Condorcet Paradox Demonstration ===")
    condorcet_results = compare_voting_rules(condorcet_profile)
    
    # 无关替代独立性违反示例
    print("\n=== Independence of Irrelevant Alternatives Violation ===")
    
    # 原始场景
    original_profile = PreferenceProfile(
        voters=["V1", "V2", "V3"],
        candidates=["A", "B"],
        preferences={
            "V1": ["A", "B"],
            "V2": ["A", "B"],
            "V3": ["B", "A"]
        }
    )
    
    # 添加新候选者C
    extended_profile = PreferenceProfile(
        voters=["V1", "V2", "V3"],
        candidates=["A", "B", "C"],
        preferences={
            "V1": ["A", "C", "B"],
            "V2": ["A", "B", "C"],
            "V3": ["B", "A", "C"]
        }
    )
    
    original_rules = VotingRules(original_profile)
    extended_rules = VotingRules(extended_profile)
    
    original_winner, _ = original_rules.plurality_vote()
    extended_winner, _ = extended_rules.plurality_vote()
    
    print(f"Original election (A vs B): {original_winner} wins")
    print(f"With irrelevant alternative C: {extended_winner} wins")
    print("Notice how adding C changes the outcome between A and B!")

demonstrate_voting_paradoxes()

面向AI对齐的实用解决方案

基于情境的偏好加权

class ContextAwareVoting:
    def __init__(self, profile: PreferenceProfile, context_weights: Dict[str, float] = None):
        self.profile = profile
        self.context_weights = context_weights or {voter: 1.0 for voter in profile.voters}
    
    def weighted_borda_count(self) -> Tuple[str, Dict]:
        """基于权重的博尔达计数,考虑不同选民的重要性"""
        scores = {candidate: 0 for candidate in self.profile.candidates}
        num_candidates = len(self.profile.candidates)
        
        for voter, preference in self.profile.preferences.items():
            weight = self.context_weights.get(voter, 1.0)
            for rank, candidate in enumerate(preference):
                scores[candidate] += (num_candidates - rank - 1) * weight
        
        winner = max(scores.items(), key=lambda x: x[1])[0]
        return winner, scores
    
    def multi_criteria_decision(self, criteria_weights: Dict[str, float]) -> str:
        """多标准决策:考虑不同维度的重要性"""
        # 定义评估标准
        criteria_functions = {
            "fairness": self._calculate_fairness,
            "efficiency": self._calculate_efficiency, 
            "satisfaction": self._calculate_satisfaction,
            "stability": self._calculate_stability
        }
        
        candidate_scores = {candidate: 0 for candidate in self.profile.candidates}
        
        for criterion, weight in criteria_weights.items():
            if criterion in criteria_functions:
                criterion_scores = criteria_functions[criterion]()
                for candidate, score in criterion_scores.items():
                    candidate_scores[candidate] += score * weight
        
        winner = max(candidate_scores.items(), key=lambda x: x[1])[0]
        return winner, candidate_scores
    
    def _calculate_fairness(self) -> Dict[str, float]:
        """计算每个选项的公平性得分"""
        # 实现公平性度量逻辑
        scores = {}
        for candidate in self.profile.candidates:
            # 简化的公平性计算:基于排名方差
            ranks = []
            for preference in self.profile.preferences.values():
                ranks.append(preference.index(candidate))
            variance = np.var(ranks)
            scores[candidate] = 1 / (1 + variance)  # 方差越小,公平性越高
        return scores
    
    def _calculate_efficiency(self) -> Dict[str, float]:
        """计算每个选项的效率得分"""
        scores = {}
        for candidate in self.profile.candidates:
            # 效率:首选该候选者的选民比例
            first_choice_count = sum(1 for pref in self.profile.preferences.values() 
                                   if pref[0] == candidate)
            scores[candidate] = first_choice_count / len(self.profile.preferences)
        return scores
    
    def _calculate_satisfaction(self) -> Dict[str, float]:
        """计算每个选项的总体满意度"""
        scores = {}
        num_candidates = len(self.profile.candidates)
        for candidate in self.profile.candidates:
            total_satisfaction = 0
            for preference in self.profile.preferences.values():
                rank = preference.index(candidate)
                satisfaction = (num_candidates - rank) / num_candidates
                total_satisfaction += satisfaction
            scores[candidate] = total_satisfaction / len(self.profile.preferences)
        return scores
    
    def _calculate_stability(self) -> Dict[str, float]:
        """计算每个选项的稳定性(对偏好变化的鲁棒性)"""
        # 简化的稳定性计算
        scores = {}
        for candidate in self.profile.candidates:
            # 基于该候选者在不同投票规则下的一致程度
            rules = VotingRules(self.profile)
            outcomes = [
                rules.plurality_vote()[0],
                rules.borda_count()[0],
                rules.copeland_rule()[0]
            ]
            stability = outcomes.count(candidate) / len(outcomes)
            scores[candidate] = stability
        return scores

# 使用情境感知投票
print("=== Context-Aware Voting ===")
context_weights = {"Parent_A": 1.2, "Parent_B": 1.2, "Child_C": 0.8, "Child_D": 0.8}
context_aware = ContextAwareVoting(profile, context_weights)

weighted_winner, weighted_scores = context_aware.weighted_borda_count()
print(f"Weighted Borda Winner: {weighted_winner}")
print(f"Weighted Scores: {weighted_scores}")

# 多标准决策
criteria_weights = {
    "fairness": 0.3,
    "efficiency": 0.25, 
    "satisfaction": 0.25,
    "stability": 0.2
}

multi_winner, multi_scores = context_aware.multi_criteria_decision(criteria_weights)
print(f"Multi-criteria Winner: {multi_winner}")
print(f"Multi-criteria Scores: {multi_scores}")

机器学习增强的偏好学习

class PreferenceLearningAI:
    def __init__(self, profile: PreferenceProfile):
        self.profile = profile
        self.preference_model = self._train_preference_model()
    
    def _train_preference_model(self):
        """训练偏好预测模型"""
        # 简化的偏好学习实现
        # 在实际应用中,这里会使用更复杂的机器学习模型
        voter_features = self._extract_voter_features()
        candidate_features = self._extract_candidate_features()
        
        # 返回一个简化的预测函数
        def predict_preference(voter_id, candidate_pair):
            cand1, cand2 = candidate_pair
            voter_pref = self.profile.preferences[voter_id]
            rank1 = voter_pref.index(cand1)
            rank2 = voter_pref.index(cand2)
            return cand1 if rank1 < rank2 else cand2
        
        return predict_preference
    
    def _extract_voter_features(self):
        """提取选民特征(简化版)"""
        # 在实际应用中,这里会有更复杂的特征工程
        return {voter: np.random.random(5) for voter in self.profile.voters}
    
    def _extract_candidate_features(self):
        """提取候选者特征(简化版)"""
        return {candidate: np.random.random(5) for candidate in self.profile.candidates}
    
    def predict_unknown_preferences(self, new_voter_features):
        """为新选民预测偏好"""
        # 简化的预测:找到最相似的现有选民
        similarities = {}
        for voter_id, features in self._extract_voter_features().items():
            similarity = np.dot(new_voter_features, features) / (
                np.linalg.norm(new_voter_features) * np.linalg.norm(features)
            )
            similarities[voter_id] = similarity
        
        most_similar = max(similarities.items(), key=lambda x: x[1])[0]
        return self.profile.preferences[most_similar]
    
    def adaptive_voting(self, new_voters_features: List[np.ndarray]):
        """自适应投票:考虑新选民的预测偏好"""
        all_preferences = self.profile.preferences.copy()
        
        # 为每个新选民预测偏好
        for i, features in enumerate(new_voters_features):
            voter_id = f"New_Voter_{i}"
            predicted_preference = self.predict_unknown_preferences(features)
            all_preferences[voter_id] = predicted_preference
        
        # 创建扩展的偏好档案
        all_voters = list(self.profile.voters) + [f"New_Voter_{i}" for i in range(len(new_voters_features))]
        extended_profile = PreferenceProfile(all_voters, self.profile.candidates, all_preferences)
        
        # 使用加权投票(给真实选民更高权重)
        context_weights = {voter: 1.0 for voter in all_voters}
        for voter in self.profile.voters:
            context_weights[voter] = 1.5  # 真实选民权重更高
        
        context_aware = ContextAwareVoting(extended_profile, context_weights)
        return context_aware.weighted_borda_count()

# 测试偏好学习AI
print("\n=== Preference Learning AI ===")
preference_ai = PreferenceLearningAI(profile)

# 模拟新选民
new_voter_features = [np.random.random(5) for _ in range(2)]
adaptive_winner, adaptive_scores = preference_ai.adaptive_voting(new_voter_features)
print(f"Adaptive Voting Winner: {adaptive_winner}")
print(f"Adaptive Scores: {adaptive_scores}")

伦理考量与实施建议

AI对齐中的伦理挑战

  1. 权重分配的道德性:如何合理分配不同选民的权重?
  2. 透明度与可解释性:AI的集体决策过程需要可解释
  3. 偏好操纵的防范:防止系统被特定偏好模式操纵
  4. 动态偏好的处理:人类偏好会随时间变化

实用实施框架

class EthicalAIFramework:
    def __init__(self, profile: PreferenceProfile):
        self.profile = profile
        self.ethical_guidelines = self._load_ethical_guidelines()
    
    def _load_ethical_guidelines(self):
        """加载伦理指导原则"""
        return {
            "min_satisfaction_threshold": 0.3,  # 最低满意度阈值
            "max_inequality": 0.7,  # 最大不平等度
            "protected_groups": []  # 受保护群体(可根据具体情况扩展)
        }
    
    def ethically_constrained_voting(self) -> str:
        """受伦理约束的投票"""
        base_rules = VotingRules(self.profile)
        context_aware = ContextAwareVoting(self.profile)
        
        # 获取基础候选者
        candidates = self.profile.candidates
        
        # 应用伦理约束过滤
        feasible_candidates = self._apply_ethical_constraints(candidates)
        
        if not feasible_candidates:
            print("No candidate satisfies all ethical constraints")
            return self._fallback_decision()
        
        # 在可行候选者中使用多标准决策
        if len(feasible_candidates) == 1:
            return feasible_candidates[0]
        
        # 创建仅限于可行候选者的子档案
        sub_profile = self._create_sub_profile(feasible_candidates)
        sub_context_aware = ContextAwareVoting(sub_profile)
        
        criteria_weights = {
            "fairness": 0.4,  # 伦理框架中更强调公平性
            "efficiency": 0.2,
            "satisfaction": 0.2,
            "stability": 0.2
        }
        
        winner, scores = sub_context_aware.multi_criteria_decision(criteria_weights)
        return winner
    
    def _apply_ethical_constraints(self, candidates):
        """应用伦理约束"""
        feasible_candidates = []
        
        for candidate in candidates:
            if self._satisfies_min_satisfaction(candidate) and \
               self._satisfies_inequality_constraint(candidate):
                feasible_candidates.append(candidate)
        
        return feasible_candidates
    
    def _satisfies_min_satisfaction(self, candidate):
        """检查是否满足最低满意度约束"""
        satisfaction_calculator = ContextAwareVoting(self.profile)
        satisfaction_scores = satisfaction_calculator._calculate_satisfaction()
        return satisfaction_scores[candidate] >= self.ethical_guidelines["min_satisfaction_threshold"]
    
    def _satisfies_inequality_constraint(self, candidate):
        """检查是否满足不平等度约束"""
        # 计算该候选者带来的效用不平等度
        ranks = []
        for preference in self.profile.preferences.values():
            ranks.append(preference.index(candidate))
        
        inequality = np.std(ranks) / np.mean(ranks) if np.mean(ranks) > 0 else 0
        return inequality <= self.ethical_guidelines["max_inequality"]
    
    def _create_sub_profile(self, feasible_candidates):
        """创建仅限于可行候选者的子偏好档案"""
        sub_preferences = {}
        for voter, preference in self.profile.preferences.items():
            # 只保留可行候选者,保持原有顺序
            sub_preference = [candidate for candidate in preference if candidate in feasible_candidates]
            sub_preferences[voter] = sub_preference
        
        return PreferenceProfile(self.profile.voters, feasible_candidates, sub_preferences)
    
    def _fallback_decision(self):
        """伦理约束无法满足时的后备决策"""
        # 使用最强调公平性的规则
        context_aware = ContextAwareVoting(self.profile)
        criteria_weights = {"fairness": 1.0, "efficiency": 0.0, "satisfaction": 0.0, "stability": 0.0}
        winner, _ = context_aware.multi_criteria_decision(criteria_weights)
        return winner

# 测试伦理框架
print("\n=== Ethical AI Framework ===")
ethical_framework = EthicalAIFramework(profile)
ethical_winner = ethical_framework.ethically_constrained_voting()
print(f"Ethically Constrained Winner: {ethical_winner}")

结论:在不可能中寻找可能

阿罗不可能定理告诉我们,完美的集体决策机制在数学上是不可能的。这一深刻洞见对AI对齐具有重要意义:我们无法设计出能够完美满足所有人类偏好的AI系统

然而,这并不意味着我们应该放弃追求更好的AI对齐方案。相反,我们应该:

  1. 接受局限性:认识到完美对齐的不可能性,专注于设计"足够好"的解决方案
  2. 注重过程透明:既然结果不可能完美,决策过程的透明性和可解释性变得至关重要
  3. 发展情境智能:AI系统需要理解具体情境,灵活调整决策策略
  4. 建立伦理护栏:通过伦理约束确保AI决策不违背基本价值观

本文展示的技术方案——从基础投票规则到情境感知加权,从多标准决策到机器学习增强的偏好学习——提供了在实际约束下推进AI对齐的实用路径。虽然我们无法达到数学意义上的完美对齐,但通过精心设计和持续改进,我们完全可以创建出在大多数情况下都能做出符合人类集体利益的AI系统。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。