认知工作区:这个智能体的「当前意识」
对应清单 10.1 · 01_cognitive_workspace.py(66 行,纯数据结构)
from enum import Enum
from pydantic import BaseModel, Field
class TaskType(str, Enum):
# 枚举值保持英文 —— 它们是代码里比较的字面量
SIMPLE_LOOKUP = "simple_lookup" # 简单查找
MULTI_STEP = "multi_step" # 多步骤
CONTRADICTORY = "contradictory" # 自相矛盾
AMBIGUOUS = "ambiguous" # 有歧义
COMPOSITIONAL = "compositional" # 需要组合
UNKNOWN = "unknown"
class StrategyType(str, Enum):
DIRECT = "direct" # 简单问题直接做(系统 1)
DECOMPOSE = "decompose" # 多步问题拆成子任务
EXPLORE = "explore" # 先探索收集信息再下手
HYPOTHESIS_TEST = "hypothesis_test" # 检验几个互相竞争的假设
class AttentionSignal(str, Enum):
NONE = "none"
LOW_CONFIDENCE = "low_confidence" # 信心不足
STAGNATION = "stagnation" # 卡住了
CONTRADICTION = "contradiction" # 发现矛盾
KNOWLEDGE_GAP = "knowledge_gap" # 知识盲区
TASK_COMPLETE = "task_complete" # 做完了
class Finding(BaseModel):
content: str # 查到的内容
source: str # 从哪来的
relevance_score: float = 0.0 # 和子目标的相关度
quality_note: str = "" # 对结果质量的顾虑
class CognitiveWorkspace(BaseModel):
# 任务表征 —— 感知模块写
raw_query: str = ""
task_type: TaskType = TaskType.UNKNOWN
extracted_entities: list[str] = Field(default_factory=list)
complexity_estimate: float = 0.0 # 0.0(很简单)到 1.0(非常复杂)
ambiguities: list[str] = Field(default_factory=list)
# 当前假设 —— 规划模块写
current_strategy: StrategyType = StrategyType.DIRECT
sub_goals: list[str] = Field(default_factory=list)
alternative_strategies: list[str] = Field(default_factory=list)
# 中间结果 —— 执行和记忆模块写
findings: list[Finding] = Field(default_factory=list)
memory_hits: list[str] = Field(default_factory=list)
# 信心状态 —— 评估模块写
confidence: float = 0.5 # 从中立开始,往 1.0 或 0.0 走
confidence_trend: list[float] = Field(default_factory=list)
# 执行历史
steps_taken: list[str] = Field(default_factory=list)
failed_approaches: list[str] = Field(default_factory=list)
iteration_count: int = 0
# 注意力信号 —— 注意力模块写
active_signal: AttentionSignal = AttentionSignal.NONE
signal_source: str = ""
confidence_trend(信心走势)——注意它是个列表,
不是单个数。因为「我现在有多确定」不重要,「我的确定程度在往哪个方向走」才重要。
信心从 0.8 掉到 0.5,和从 0.2 涨到 0.5,是完全不同的处境。
failed_approaches`(失败过的路子)——记录什么行不通。
前九章的智能体从不记这个,所以它们会反复撞同一堵墙。
这两个字段就是「认知」和「能干」的分界线:能干的智能体知道自己在做什么, 有认知的智能体知道自己做得怎么样。
66 行全是类定义,没有 main()、没有 __main__。
01 到 08 八个文件都是这样——
它们是给后面抄的骨架,也是给书排版用的。
全章只有 09、10、11、12
有 __main__。