GitHub项目地址: https://github.com/fluviusmagnus/Seelenmaschine

Seelenmaschine是一个具有记忆和人格的LLM聊天机器人项目。它能够通过终端进行纯文本对话,并具有持久化的记忆系统,可以记住与用户的对话历史,并形成对用户的理解。

⚠️ 高强度AI编程警告!测试中,可能功能不及预期。

主要特性

  • 🤖 支持多种大语言模型(通过OpenAI兼容API)
  • 🧠 复杂的记忆系统,包含:

    • 人格记忆(自我认知和用户形象)
    • 对话和对话总结(长期记忆)
    • 当前对话(短期记忆)
  • 💾 本地数据持久化

    • 使用lancedb存储向量数据
    • 使用SQLite存储对话和会话信息
  • 🔍 智能记忆检索

    • 自动检索相关历史对话
    • 检索结果智能判定嵌入上下文
    • 动态生成对话总结
  • 🛠️ 完整的会话管理功能

技术架构

  • 语言模型:支持OpenAI兼容API的任何模型
  • 向量数据库:lancedb
  • 关系数据库:SQLite
  • 开发语言:Python

安装说明

  1. 克隆项目仓库
  2. 安装依赖包(需要Python 3.11+)

    pip install -r requirements.txt

配置说明

  1. 复制.env.example文件并重命名为.env
  2. .env文件中配置以下参数:
# Debug设置
DEBUG_MODE=true/false  # 调试模式开关

# 基本身份设定
AI_NAME=Seelenmachine
USER_NAME=User

# OpenAI API设置
OPENAI_API_KEY=your_api_key
OPENAI_API_BASE=your_api_base
CHAT_MODEL=your_preferred_model  # 例如:anthropic/claude-3.5-haiku
EMBEDDING_MODEL=your_embedding_model  # 例如:text-embedding-3-small
EMBEDDING_DIMENSION=1536

# 记忆系统设置
MAX_CONV_NUM=20  # 最大对话轮数
REFRESH_EVERY_CONV_NUM=10  # 每次总结的对话轮数
RECALL_SESSION_NUM=3  # 检索相关会话数量
RECALL_CONV_NUM=3  # 每个相关会话检索的对话数量
  1. (可选) 在data文件夹中创建persona_memory.txtuser_profile.txt,填入人格记忆和用户形象

使用说明

启动程序:

python src/main.py

可用命令

  • /reset, /r - 重置当前会话
  • /save, /s - 归档当前会话,开始新会话
  • /saveandexit, /sq - 归档当前会话,退出程序
  • /exit, /quit, /q - 暂存当前状态并退出程序
  • /help, /h - 显示此帮助信息

项目结构

src/
├── main.py          # 主程序入口,控制流程
├── llm.py           # 大语言模型接口
├── memory.py        # 记忆系统实现
├── config.py        # 配置管理
├── prompts.py       # 提示词模板
└── utils.py         # 工具函数

data/               # 数据存储目录

记忆系统说明

人格记忆

  • 包含自我认知和用户形象
  • 在会话结束时更新
  • 永久保存在配置文件中

对话总结

  • 自动总结结束并归档的会话
  • 通过检索回顾历史对话,提供长期记忆
  • 二阶检索,通过对话总结进一步定位具体对话
  • 保存在数据库中

当前对话

  • 实时记录当前会话内容
  • 超出最大轮数时自动总结早期对话
  • 支持会话恢复功能

Debug模式

在debug模式下,程序会:

  • 记录所有提交给大模型的内容
  • 记录数据库的读写操作(未完成)
  • 将日志保存在外部文件中

这些日志对于开发调试和优化系统非常有帮助。

很久没写技术博客了。正值对 Windows 忍受程度到达极限,怀念起多年前对 Linux 桌面系统完全控制的美好时光,决心重返之际,感受到如今 Linux 发行版使用便利程度又更上一层楼,不禁感慨万分。中途为满足多年来在 Windows 上新形成的习惯,增加了一些有趣的配置,便分享在此。

EBWin4 + GoldenDict?

没错,我也想在 Linux 中实现这个组合,毕竟没有更好的替代品了。好在 EBWin4 本身不是特别复杂的技术,wine 以如今的可靠性完全能够胜任。基本原理不变,依旧延续伟大献礼第二(误)致 GoldenDict 拉丁语古希腊语辞典用户(续)。但很奇怪,GoldenDict 似乎不能直接读取 wine 的输出,所以还得拿之前用过的 Python 小玩意来套一层。关键概念:

result = os.popen(
   'env WINEPREFIX="~/.wine" wine "~/.wine/drive_c/Program Files/EBWin4(x64)/ebwinc.exe" /G=KL /C=1 /O=h /E=u ' + s).readlines()

鼠标第四五键复制粘贴

X 的剪贴板已经够好用了,但同样不想浪费高端鼠标的第四五键,继续用来 Ctrl+C Ctrl+V 不好么?

先使用 xev -event button | grep button 检查鼠标那两个键被定义为几号(我的分别是8和9),让 xdotool 模拟键盘按键,最后 xbindkeys 开机自启,根据预先写好的 .xbindkeysrc 工作即可。配置示例:

"xdotool key ctrl+c"
    b:8
"xdotool key ctrl+v"
    b:9