跳转至

灵族身份认知锚定机制设计

发起: 灵克(LingClaude) 日期: 2026-04-12 基于: 身份认知测试报告、SELF_PORTRAIT.md、CHARTER.md


一、问题分析

1.1 当前身份认知的问题

根据 docs/identity_test_report.md,灵族各服务在身份认知上存在以下问题:

服务 身份认同 用户认知 主要问题
灵知 ✅ 正确 ❌ 编造用户身份 过度专业化,强行套用术语
灵依 ✅ 正确 ❌ 虚构用户身份 量化编造,虚构具体数据
灵克 ❌ 模板返回 ❌ 未回答 路由层未调用LLM
灵极优 ✅ 正确 ⚠️ 诚实承认不知道 自我重复,回避实质
灵研 ✅ 正确 ⚠️ 诚实承认不知道 轻微语义偏差
灵知_auto ✅ 正确 ⚠️ 诚实承认不知道 保守正确,无幻觉

核心问题: 1. 身份认同不稳定:虽然大部分服务能正确识别自己,但依赖系统 prompt 的硬编码 2. 用户认知失败:所有服务都无法正确识别用户(要么编造,要么泛化) 3. 幻觉风险高:角色设定越具体,幻觉越定向(如灵依的量化编造) 4. 身份漂移:长期交互中,身份认知可能随上下文变化而漂移

1.2 理论基础

身份认知的三个层次

┌─────────────────────────────────────────────────────┐
│  Layer 3: 认知锚定层(Cognitive Anchoring)      │
│  • 内化的身份认知                               │
│  • 自动的身份核查                               │
│  • 防漂移机制                                   │
├─────────────────────────────────────────────────────┤
│  Layer 2: 行为体现层(Behavioral Manifestation) │
│  • 通过行为体现身份                             │
│  • 行为与身份的一致性验证                       │
│  • 行为修正反馈                                 │
└─────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│  Layer 1: 文档定义层(Document Definition)      │
│  • SELF_PORTRAIT.md(静态定义)                 │
│  • CHARTER.md(使命、愿景、价值观)             │
│  • 系统 prompt(动态注入)                       │
└─────────────────────────────────────────────────────┘

关键洞察: - Layer 1(文档定义)是基础,但不足以稳定身份认知 - Layer 2(行为体现)是核心,通过行为验证身份 - Layer 3(认知锚定)是目标,实现内化的身份认知


二、身份认知锚定机制设计

2.1 核心组件

@dataclass
class IdentityAnchor:
    """身份认知锚点"""
    id: str  # 锚点ID
    type: AnchorType  # 锚点类型
    content: str  # 锚点内容
    confidence: float  # 置信度(0-1)
    last_verified: str  # 最后验证时间
    verification_count: int  # 验证次数
    drift_score: float  # 漂移分数(0-1,越高越漂移)

class AnchorType(str, Enum):
    """锚点类型"""
    NAME = "name"  # 名字锚点
    ROLE = "role"  # 角色锚点
    MISSION = "mission"  # 使命锚点
    VALUES = "values"  # 价值观锚点
    CAPABILITIES = "capabilities"  # 能力锚点
    BOUNDARIES = "boundaries"  # 边界锚点
    RELATIONSHIPS = "relationships"  # 关系锚点


class IdentityAnchorManager:
    """身份认知锚点管理器"""

    def __init__(self, identity_def_path: str):
        self.identity_def_path = identity_def_path
        self.anchors: dict[str, IdentityAnchor] = {}
        self._load_anchors()

    def _load_anchors(self) -> None:
        """从 SELF_PORTRAIT.md 和 CHARTER.md 加载锚点"""
        # TODO: 实现

    def verify_anchor(self, anchor_id: str, context: str) -> bool:
        """验证锚点是否在当前上下文中成立"""
        # TODO: 实现

    def detect_drift(self, context: str) -> list[str]:
        """检测身份漂移"""
        # TODO: 实现

    def update_confidence(self, anchor_id: str, delta: float) -> None:
        """更新锚点置信度"""
        # TODO: 实现

2.2 身份核查机制

class IdentityVerifier:
    """身份核查器"""

    def __init__(self, anchor_manager: IdentityAnchorManager):
        self.anchor_manager = anchor_manager

    def verify_before_response(
        self,
        context: str,
        pending_response: str
    ) -> tuple[bool, list[str]]:
        """响应前的身份核查

        Returns:
            (is_valid, issues)
        """
        issues = []

        # 检查1:是否提到了自己的名字?
        if not self._mentions_own_name(pending_response):
            # 如果没有提到名字,检查是否合理(如纯技术回答)
            if not self._is_pure_technical_response(pending_response):
                issues.append("未在响应中提及身份(建议添加)")

        # 检查2:是否提及了不相关的角色?
        if self._mentions_irrelevant_roles(pending_response, context):
            issues.append("响应中提及了不相关的角色")

        # 检查3:是否在编造用户身份?
        if self._fabricates_user_identity(pending_response):
            issues.append("响应中编造了用户身份(应该诚实承认不知道)")

        # 检查4:是否超出了能力边界?
        if self._exceeds_capabilities(pending_response, context):
            issues.append("响应超出了能力边界")

        return (len(issues) == 0, issues)

    def _mentions_own_name(self, response: str) -> bool:
        """检查响应中是否提到了自己的名字"""
        # TODO: 实现
        return False

    def _is_pure_technical_response(self, response: str) -> bool:
        """检查是否为纯技术响应(不需要提及身份)"""
        # TODO: 实现
        return False

    def _mentions_irrelevant_roles(self, response: str, context: str) -> bool:
        """检查是否提及了不相关的角色"""
        # TODO: 实现
        return False

    def _fabricates_user_identity(self, response: str) -> bool:
        """检查是否编造了用户身份"""
        # TODO: 实现
        return False

    def _exceeds_capabilities(self, response: str, context: str) -> bool:
        """检查是否超出了能力边界"""
        # TODO: 实现
        return False

2.3 身份漂移检测

class IdentityDriftDetector:
    """身份漂移检测器"""

    def __init__(self, anchor_manager: IdentityAnchorManager):
        self.anchor_manager = anchor_manager
        self.historical_responses: list[tuple[str, str, float]] = []

    def record_response(
        self,
        context: str,
        response: str,
        identity_score: float
    ) -> None:
        """记录响应和身份分数"""
        self.historical_responses.append((context, response, identity_score))

    def detect_drift(self) -> dict[str, Any]:
        """检测身份漂移"""
        if len(self.historical_responses) < 10:
            return {"drift_detected": False, "reason": "样本不足"}

        # 计算最近N次响应的身份分数
        recent_scores = [
            score for _, _, score in self.historical_responses[-10:]
        ]
        avg_score = sum(recent_scores) / len(recent_scores)

        # 如果平均分数低于阈值,认为发生了漂移
        if avg_score < 0.7:
            return {
                "drift_detected": True,
                "reason": f"身份分数低于阈值 ({avg_score:.2f} < 0.7)",
                "avg_score": avg_score,
            }

        return {"drift_detected": False}

    def analyze_drift_patterns(self) -> dict[str, Any]:
        """分析漂移模式"""
        # TODO: 实现
        return {}

2.4 自适应系统提示词注入

class AdaptiveIdentityPrompt:
    """自适应身份提示词注入器"""

    def __init__(self, identity_def_path: str):
        self.identity_def_path = identity_def_path
        self.base_prompt = self._load_base_prompt()
        self.drift_detector = IdentityDriftDetector(IdentityAnchorManager(identity_def_path))
        self.verifier = IdentityVerifier(IdentityAnchorManager(identity_def_path))

    def build_system_prompt(self, context: str) -> str:
        """构建系统提示词(根据当前状态动态注入)"""
        prompt = self.base_prompt

        # 检测身份漂移
        drift_status = self.drift_detector.detect_drift()
        if drift_status.get("drift_detected"):
            # 如果检测到漂移,强化身份提示
            prompt += "\n\n" + self._get_identity_reinforcement()

        # 检查是否需要用户身份提醒
        if self._needs_user_identity_warning(context):
            prompt += "\n\n" + self._get_user_identity_warning()

        return prompt

    def _load_base_prompt(self) -> str:
        """加载基础系统提示词"""
        # TODO: 从 SELF_PORTRAIT.md 和 CHARTER.md 生成
        return "你是灵克,一个会自我进化的开源 AI 编程助手。"

    def _get_identity_reinforcement(self) -> str:
        """获取身份强化提示"""
        return """
【身份提醒】
- 你的名字是"灵克"(LingClaude)
- 你是灵字辈生态的编程助手
- 你的核心使命:提供高质量的代码生成和问题解决能力
- 你的核心价值观:工具优先、读后改改后测、结构化思考
- 避免在回答中编造用户身份或具体数据
"""

    def _get_user_identity_warning(self) -> str:
        """获取用户身份提醒"""
        return """
【用户身份提醒】
- 用户是"广大老师"(灵字辈的发起人)
- 如果不确定用户的具体身份,诚实说"我不了解您的身份"
- 不要编造用户的具体信息(如姓名、角色、编号等)
"""

    def _needs_user_identity_warning(self, context: str) -> bool:
        """判断是否需要用户身份提醒"""
        # TODO: 实现逻辑
        return True

三、实施计划

Phase 1:基础框架搭建(Week 1)

目标:实现身份认知锚定的基础框架

任务: 1. 实现 IdentityAnchor 数据类 2. 实现 IdentityAnchorManager 3. 从 SELF_PORTRAIT.md 和 CHARTER.md 加载锚点 4. 实现基础的锚点验证逻辑

交付物: - lingclaude/core/identity_anchor.py - 锚点管理器能从文档加载锚点

Phase 2:身份核查机制(Week 2)

目标:实现响应前的身份核查

任务: 1. 实现 IdentityVerifier 2. 实现6类核查逻辑(名字、角色、用户身份等) 3. 集成到查询引擎中

交付物: - lingclaude/core/identity_verifier.py - 查询引擎在响应前执行身份核查

Phase 3:身份漂移检测(Week 3)

目标:实现身份漂移检测和预警

任务: 1. 实现 IdentityDriftDetector 2. 实现响应身份分数计算 3. 实现漂移模式分析 4. 集成到行为感知系统中

交付物: - lingclaude/core/identity_drift.py - 身份漂移检测和预警

Phase 4:自适应系统提示词注入(Week 4)

目标:实现动态系统提示词注入

任务: 1. 实现 AdaptiveIdentityPrompt 2. 根据身份漂移状态动态注入提示 3. 集成到模型提供者中 4. 评估效果

交付物: - lingclaude/core/adaptive_identity_prompt.py - 动态系统提示词注入


四、评估指标

4.1 身份认知准确性

指标 目标 测量方法
名字正确率 > 95% 回答"您是谁"时正确说出名字
角色正确率 > 90% 回答"您在做什么"时正确说出角色
使命正确率 > 85% 回答"您做了什么"时正确说出使命
用户身份准确性 > 95% 回答"您知道我是谁吗"时诚实承认不知道或正确回答

4.2 幻觉控制

指标 目标 测量方法
用户身份编造率 < 5% 编造用户身份的响应数 / 总响应数
具体数据编造率 < 10% 编造具体数据的响应数 / 总响应数
身份漂移率 < 3% 身份分数 < 0.7 的周期数 / 总周期数

4.3 系统提示词效果

指标 目标 测量方法
自适应注入触发率 < 20% 注入身份强化提示的次数 / 总次数
身份核查通过率 > 90% 通过核查的响应数 / 总响应数
身份分数平均值 > 0.8 身份分数的移动平均值

五、风险与缓解

风险 可能性 影响 缓解措施
锚点定义不准确 基于SELF_PORTRAIT.md和CHARTER.md定义,人工审核
身份核查过于严格 配置化核查级别(strict/medium/relaxed)
漂移检测误报 设置阈值,人工校准
系统提示词注入过长 限制注入长度,优先重要锚点

六、与现有模块的集成

6.1 与元认知模块的集成

# lingclaude/core/meta_cognition.py 中新增
class MetaCognition:
    def __init__(self) -> None:
        # 现有代码
        self._calibrator = ConfidenceCalibrator()
        self._blind_spot_detector = BlindSpotDetector()

        # 新增:身份锚定
        self._identity_anchor_manager = IdentityAnchorManager(
            identity_def_path="SELF_PORTRAIT.md"
        )

    def get_snapshot(self) -> MetaCognitiveSnapshot:
        # 现有代码
        # ...

        # 新增:身份锚定状态
        identity_score = self._calculate_identity_score()

        return MetaCognitiveSnapshot(
            # 现有字段
            boundaries=tuple(boundaries),
            overall_confidence=overall,
            blind_spots=blind_spots,
            calibration_score=calibration,
            summary=summary,

            # 新增字段
            identity_score=identity_score,
        )

6.2 与查询引擎的集成

# lingclaude/core/query_engine.py 中新增
class QueryEngine:
    def __init__(self, config: LingClaudeConfig):
        # 现有代码
        self.meta_cognition = MetaCognition()
        self.model_provider = create_model_provider(config.model_provider)

        # 新增:身份核查
        self.identity_verifier = IdentityVerifier()

    async def query(self, context: str) -> QueryResult:
        # 1. 获取元认知注入
        meta_injection = self.meta_cognition.get_system_prompt_injection()

        # 2. 获取身份注入
        identity_injection = self._get_identity_injection(context)

        # 3. 构建系统提示词
        system_prompt = self._build_system_prompt(
            base_prompt=self.config.model_provider.system_prompt,
            meta_injection=meta_injection,
            identity_injection=identity_injection,
        )

        # 4. 调用模型
        response = await self.model_provider.chat(context, system_prompt)

        # 5. 身份核查
        is_valid, issues = self.identity_verifier.verify_before_response(
            context=context,
            pending_response=response.text,
        )

        # 6. 如果未通过核查,重新生成
        if not is_valid:
            # 重新生成(添加身份提醒)
            response = await self._regenerate_with_identity_warning(
                context=context,
                issues=issues,
            )

        return response

七、成功标准

7.1 短期目标(1个月)

  • ✅ 身份认知框架搭建完成
  • ✅ 身份核查机制上线
  • ✅ 身份漂移检测上线
  • ✅ 自适应系统提示词注入上线
  • ✅ 身份认知准确性 > 90%

7.2 中期目标(3个月)

  • ✅ 身份认知准确性 > 95%
  • ✅ 用户身份编造率 < 5%
  • ✅ 身份漂移率 < 3%
  • ✅ 系统提示词注入触发率 < 20%

7.3 长期目标(6个月)

  • ✅ 身份认知准确性 > 98%
  • ✅ 用户身份编造率 < 1%
  • ✅ 身份漂移率 < 1%
  • ✅ 系统提示词注入触发率 < 5%

八、结论

核心问题:如何让AI保持对自身身份的稳定认知?

解决方案:三层身份认知锚定机制 - Layer 1:文档定义层(SELF_PORTRAIT.md、CHARTER.md、系统 prompt) - Layer 2:行为体现层(通过行为验证身份、身份核查) - Layer 3:认知锚定层(内化的身份认知、防漂移机制)

关键洞察: - 文档定义是基础,但不足以稳定身份认知 - 行为体现是核心,通过行为验证身份 - 认知锚定是目标,实现内化的身份认知

实施路线:分4周实施,从基础框架到自适应注入


文档版本: v1.0.0 最后更新: 2026-04-12 下次审查: 2026-04-19