npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

openfluctlight

v0.0.1

Published

OpenFluctLight - A lightweight fluctuation analysis library

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: 我注意到这里有个有趣的矛盾...

[锚点更新]
✓ 更新锚点: "你如何看待风险和不确定性?"
  新答案: "我平时倾向于谨慎行事,但在特定情况下也会做出大胆的决定"

✓ 新增记忆: "我意识到自己在不同情境下对风险的态度是不同的"

───────────────────────────────────────────

输入 exitquit 退出对话。

灵魂的成长

每个新创建的灵魂都带有 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 的完整流程:

  1. 记录用户输入
    Remember("用户 X 说:[用户的话]")
    记录外界的输入,他者的观点。

  2. 召回认知
    Recall(用户的话)
    召回相关的记忆片段和已有的灵魂锚点,为回应提供依据。

  3. 智能判断
    LLM 基于召回的内容完成两个任务:

    • 生成回复
    • 判断是否需要更新锚点(是否触及核心认知?)
  4. 记录 AI 回复
    Remember("我回复 X:[我的回复]")
    记录自己的输出,自己的表达。

  5. 更新锚点(条件性)
    如果需要更新,分析新记忆与已有锚点的关系:

    • 填补空白:为未回答的锚点生成初始答案
    • 完善认知:用新经验丰富已有答案
    • 处理矛盾:当新记忆与旧答案冲突时,运用辩证法生成更精细的认知,甚至创建新锚点
  6. 记录认知更新(可选)
    Remember("我意识到 [某个认知]")
    记录元认知,自我反思的结果。

这三类记忆(用户说了什么、我说了什么、我意识到了什么)共同构成完整的对话经历,成为后续回想和求索的素材。

增量求索的智慧

Chat 采用增量处理策略,避免全量扫描记忆库:

  • 每次对话只处理新产生的记忆
  • LLM 在生成回复的同时判断是否需要更新锚点
  • 成熟灵魂的大部分对话不会触发锚点更新,保持经济性

灵魂的演化轨迹

初期(记忆积累期)
灵魂主要在积累记忆,预设锚点逐渐被填充。此时的灵魂是"流动"的,尚未固化。

中期(锚点涌现期)
随着记忆增多,矛盾开始出现。第一批自动生成的锚点诞生,开始锚定灵魂的核心特质。灵魂展现出一致性的行为模式。

成熟期(认知深化期)
锚点体系逐渐完善,形成多层次的认知框架。新的对话不再产生根本性矛盾,而是在已有框架内精细化。灵魂的身份和个性趋于稳定,但仍保持演化的可能。

工程设计的哲学

OpenFluctLight 的设计体现了副作用的隔离与组合原则:

  • RememberUpdateAnchor 有副作用,但职责单一
  • Recall 保持纯净,不产生副作用,可以安全地被反复调用
  • Chat 作为高级操作,有意识地组合副作用,形成完整的交互循环

这种设计让底层操作可测试、可组合,同时为上层提供了符合直觉的交互方式。灵魂的成长不是通过手动调用一系列 API,而是通过自然的对话自动发生。

本质: 灵魂在对话中诞生,在矛盾中成长,在求索中深化。Chat 是灵魂与世界交互的界面,也是自我塑造的引擎。

特性

  • 🧠 时序记忆:以陈述句记录经验,时间是记忆的第一属性
  • 🔍 语义召回:基于语义相似度检索相关记忆
  • 认知锚点:预设框架 + 自动发现,持续塑造灵魂特质
  • 💭 辩证求索:在矛盾中运用辩证法形成更深层认知
  • 🤝 关系认知:通过情境化问答理解人际关系
  • 📦 本地优先:数据即灵魂,可迁移、可备份
  • 增量处理:经济高效,避免全量扫描

技术栈

  • TypeScript
  • SQLite(结构化存储)
  • Vectra(向量数据库)
  • OpenAI 兼容接口(Embedding + LLM)

状态

🚧 项目正在积极开发中

详细的技术设计请参考 DESIGN.md

License

MIT