openfluctlight
v0.0.1
Published
OpenFluctLight - A lightweight fluctuation analysis library
Maintainers
Readme
OpenFluctLight(摇光)
可观测、可操作的数字灵魂容器
项目愿景
OpenFluctLight 是一个记忆基础设施,旨在构造数字灵魂。
使用场景
个人 AI 助手的长期记忆 - 为你的 AI 助手赋予真正的记忆能力。它不仅记得你说过的话,还能从对话中发现自己的矛盾,形成一致的个性。当你问"我应该如何平衡工作和生活?"时,它会召回你过去的经历、已有的价值观锚点,给出真正个性化的建议。
虚拟角色与 NPC 的灵魂塑造 - 游戏或虚拟世界中的角色不再是预设的脚本,而是拥有成长轨迹的灵魂。每一次与玩家的互动都会成为记忆,矛盾的经历会让角色产生新的认知锚点。一个 NPC 可能在经历背叛后,对"信任"这个概念形成全新的理解。
认知架构研究 - 为研究者提供一个可观测、可操作的认知模型。灵魂的成长过程完全透明:记忆如何积累、矛盾如何被发现、锚点如何涌现。这是一个活的实验室,用于探索意识、自我和认知的本质。
多智能体系统的社会模拟 - 每个灵魂都能与其他灵魂建立关系,形成复杂的社会网络。关系不是简单的数值,而是基于具体记忆的情境化判断。你可以模拟一个小社会,观察信任、合作、冲突如何在灵魂之间演化。
个人知识管理与反思工具 - 将你的笔记、日记、想法作为记忆输入。系统会自动发现你思想中的矛盾,提出深层问题,帮助你形成更清晰的自我认知。这不是简单的笔记软件,而是一个与你共同成长的思考伙伴。
快速开始
安装
# 克隆仓库
git clone https://github.com/zccz14/OpenFluctLight.git
cd OpenFluctLight
# 安装依赖
pnpm install
# 构建项目
pnpm -r build初始化配置
cd packages/cli
node dist/index.js init按提示选择配置:
Embedding 服务类型:
- 本地模型(推荐):无需 API Key,首次使用会自动下载约 300MB 的模型
- OpenAI API:需要 API Key,质量更好但有成本
其他配置:
- 数据存储路径:默认
~/.openfluctlight/data - LLM 模型:默认
gpt-4o-mini(用于对话生成和锚点判断)
配置文件保存在 ~/.openfluctlight/config.json
环境变量支持:
export OPENAI_API_KEY="sk-..." # 如果使用 OpenAI Embedding
export OPENAI_BASE_URL="https://api.openai.com/v1" # 可选注意:
- 本地 Embedding 使用 node-llama-cpp 和 embeddinggemma-300m-qat-Q8_0 模型
- 首次使用会自动下载模型文件,之后会缓存在本地
- LLM 服务仍然需要 OpenAI API Key(用于对话生成)
开始对话
交互模式:
node dist/index.js chat --to Alice这会创建一个名为 "Alice" 的灵魂,并进入交互式对话模式。
直接发送消息:
node dist/index.js chat --to Alice --from Bob 你好,Alice!这会发送一条消息后立即退出,适合脚本化调用。如果不指定 --from,默认使用 --to 的值作为发送者。
对话示例
╭─────────────────────────────────────────╮
│ 与灵魂 Alice 对话
│ 数据路径: ~/.openfluctlight/data/Alice
╰─────────────────────────────────────────╯
你: 我今天做了一个大胆的决定
[召回记忆 0 条]
[相关锚点 2 个]
• 你如何看待风险和不确定性?
→ (未回答)
Alice: 听起来很有趣!能告诉我更多吗?
[锚点更新]
✓ 更新锚点: "你如何看待风险和不确定性?"
新答案: "我愿意在某些情况下做出大胆的决定"
───────────────────────────────────────────
你: 我其实平时很谨慎
[召回记忆 2 条]
• 我今天做了一个大胆的决定 (2024-03-05)
• 我回复你:听起来很有趣!能告诉我更多吗? (2024-03-05)
[相关锚点 1 个]
• 你如何看待风险和不确定性?
→ "我愿意在某些情况下做出大胆的决定" (置信度: 0.50)
Alice: 我注意到这里有个有趣的矛盾...
[锚点更新]
✓ 更新锚点: "你如何看待风险和不确定性?"
新答案: "我平时倾向于谨慎行事,但在特定情况下也会做出大胆的决定"
✓ 新增记忆: "我意识到自己在不同情境下对风险的态度是不同的"
───────────────────────────────────────────输入 exit 或 quit 退出对话。
灵魂的成长
每个新创建的灵魂都带有 28 个预设锚点,来自:
- MBTI 维度(8个):性格倾向
- 施瓦茨价值观(10个):核心价值
- 通用认知(10个):决策、冲突、风险等
随着对话的进行,这些锚点会被逐渐填充和完善,灵魂的个性也会越来越清晰。
核心概念
记忆(Memory)
一切可以被记录的内容片段。记忆是灵魂的基石,承载着经验、知识和情感。记忆以陈述句形式存在,锚定在时间轴上。
灵魂(Soul)
由一系列核心问题(灵魂锚点)的答案所锚定的身份与个性。灵魂能够在不同环境下做出一致性的行为。
灵魂锚点(Soul Anchor)
锚定灵魂本质的核心问题与答案。每个锚点包含一个问题和对应的答案(答案可以为空)。通过预设问题和自动发现的矛盾,持续塑造和完善灵魂的认知框架。
人际关系(Relationship)
单向的关系认知,基于与特定对象相关的记忆集合。关系本身也是一系列灵魂锚点的答案:我会给 X 提供关于 Y 的帮助吗?我对 X 的印象如何?我愿意将 Y 告诉 X 吗?关系不是数字,而是具体情境下的判断。
核心操作
OpenFluctLight 提供三个基本操作,它们是构建灵魂的基石:
1. 记住(Remember)
记忆以陈述句的形式被铭刻。"我今天学会了递归算法"、"张三告诉我他不喜欢咖啡"、"在争论中我选择了沉默"——每一个记忆片段都是对已发生之事的陈述,而非评价或疑问。
时间是记忆的第一属性。记忆锚定在时间轴上,早期的记忆塑造灵魂的基础,近期的记忆反映当下的状态。时间赋予记忆以序列,序列构成叙事,叙事即是自我。
依赖: Embedding 服务(不依赖 LLM)
本质: 经验的沉淀,存在的痕迹。灵魂因记忆而连续。
2. 回想(Recall)
回想是灵魂面向外界的响应机制。当面对具体问题或情境时,灵魂召回相关的记忆和认知锚点。
基于语义相似度,系统检索与提问最相关的记忆片段和锚点答案。如果指定了他者身份,还会召回与该关系相关的记忆和认知。
回想是纯粹的只读操作,不产生副作用。它只是将已有的认知以结构化方式呈现,为决策提供依据。
依赖: Embedding 服务(不依赖 LLM)
本质: 情境化的认知召回,知行合一的准备。灵魂因回想而行动。
3. 更新锚点(UpdateAnchor)
更新锚点是维护灵魂认知框架的基本操作。它支持三种动作:
- 创建(Create):生成新的认知锚点
- 更新(Update):完善或修正已有锚点的答案
- 删除(Delete):移除不再适用的锚点
更新锚点是纯粹的数据操作,不涉及智能判断。真正的思考发生在调用它的上层操作中。
依赖: 无(纯本地数据库操作,不依赖 LLM)
本质: 认知框架的维护,灵魂特质的锚定。
如何塑造灵魂
灵魂不是一次性创建的静态实体,而是在持续交互中逐渐成形、不断演化的动态过程。
灵魂的诞生
一个新创建的灵魂带着预设的认知框架——一系列来自 MBTI、施瓦茨价值观等认知理论的核心问题。这些锚点的答案初始为空,等待记忆来填充。
预设锚点如:"面对重要决策时,你更依赖直觉还是理性分析?"、"你更看重个人成就还是集体和谐?"、"面对冲突时,你倾向于直接表达还是回避?"
对话:灵魂成长的引擎
Chat(对话) 是塑造灵魂的高级操作。它不是基本操作,而是协调 Remember、Recall、UpdateAnchor 的上层封装。
依赖: LLM 服务(用于生成回复和判断锚点更新)
Chat 的完整流程:
记录用户输入
Remember("用户 X 说:[用户的话]")
记录外界的输入,他者的观点。召回认知
Recall(用户的话)
召回相关的记忆片段和已有的灵魂锚点,为回应提供依据。智能判断
LLM 基于召回的内容完成两个任务:- 生成回复
- 判断是否需要更新锚点(是否触及核心认知?)
记录 AI 回复
Remember("我回复 X:[我的回复]")
记录自己的输出,自己的表达。更新锚点(条件性)
如果需要更新,分析新记忆与已有锚点的关系:- 填补空白:为未回答的锚点生成初始答案
- 完善认知:用新经验丰富已有答案
- 处理矛盾:当新记忆与旧答案冲突时,运用辩证法生成更精细的认知,甚至创建新锚点
记录认知更新(可选)
Remember("我意识到 [某个认知]")
记录元认知,自我反思的结果。
这三类记忆(用户说了什么、我说了什么、我意识到了什么)共同构成完整的对话经历,成为后续回想和求索的素材。
增量求索的智慧
Chat 采用增量处理策略,避免全量扫描记忆库:
- 每次对话只处理新产生的记忆
- LLM 在生成回复的同时判断是否需要更新锚点
- 成熟灵魂的大部分对话不会触发锚点更新,保持经济性
灵魂的演化轨迹
初期(记忆积累期)
灵魂主要在积累记忆,预设锚点逐渐被填充。此时的灵魂是"流动"的,尚未固化。
中期(锚点涌现期)
随着记忆增多,矛盾开始出现。第一批自动生成的锚点诞生,开始锚定灵魂的核心特质。灵魂展现出一致性的行为模式。
成熟期(认知深化期)
锚点体系逐渐完善,形成多层次的认知框架。新的对话不再产生根本性矛盾,而是在已有框架内精细化。灵魂的身份和个性趋于稳定,但仍保持演化的可能。
工程设计的哲学
OpenFluctLight 的设计体现了副作用的隔离与组合原则:
- Remember 和 UpdateAnchor 有副作用,但职责单一
- Recall 保持纯净,不产生副作用,可以安全地被反复调用
- Chat 作为高级操作,有意识地组合副作用,形成完整的交互循环
这种设计让底层操作可测试、可组合,同时为上层提供了符合直觉的交互方式。灵魂的成长不是通过手动调用一系列 API,而是通过自然的对话自动发生。
本质: 灵魂在对话中诞生,在矛盾中成长,在求索中深化。Chat 是灵魂与世界交互的界面,也是自我塑造的引擎。
特性
- 🧠 时序记忆:以陈述句记录经验,时间是记忆的第一属性
- 🔍 语义召回:基于语义相似度检索相关记忆
- ⚓ 认知锚点:预设框架 + 自动发现,持续塑造灵魂特质
- 💭 辩证求索:在矛盾中运用辩证法形成更深层认知
- 🤝 关系认知:通过情境化问答理解人际关系
- 📦 本地优先:数据即灵魂,可迁移、可备份
- ⚡ 增量处理:经济高效,避免全量扫描
技术栈
- TypeScript
- SQLite(结构化存储)
- Vectra(向量数据库)
- OpenAI 兼容接口(Embedding + LLM)
状态
🚧 项目正在积极开发中
详细的技术设计请参考 DESIGN.md
License
MIT
