分类 赛博艺术 下的文章

logo

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

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

⚠️ 高强度AI编程警告!

主要特性

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

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

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

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

技术架构

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

快速开始

  1. 确保已安装好Python
  2. 克隆项目仓库

    git clone https://github.com/fluviusmagnus/Seelenmaschine.git
  3. 按下文说明配置好.env文件
  4. 运行

    • Windows: start.batstart-webui.bat
    • Linux:

      1. 赋予权限

        chmod +x start.sh start-webui.sh
      2. 执行 start.shstart-webui.sh

        ./start.sh

        或者

        ./start-webui.sh
  5. (WebUI的情况下)浏览器访问http://localhost:7860即可

手动安装说明

  1. 克隆项目仓库
  2. 建立虚拟环境(可选)
  3. 安装依赖包(需要Python 3.11+)

    pip install -r requirements.txt

配置说明

  1. 复制.env.example文件并重命名为.env
  2. .env文件中配置以下参数:
# Debug设置
DEBUG_MODE=false  # 调试模式开关 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
TOOL_MODEL=your_tool_model  # 用于记忆管理。建议使用推理模型,例如:deepdeek/deepseek-r1
EMBEDDING_MODEL=your_embedding_model  # 例如:text-embedding-3-small
EMBEDDING_DIMENSION=1536

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

更多配置建议和使用技巧请参考项目 Wiki.

使用说明

直接在终端中进入CLI模式:

python src/main.py

或者,启动WebUI提供的网页应用:

python src/main.py --webui [--host HOST] [--port PORT]

参数说明:

--webui: 启动Web界面
--host: 指定主机地址(默认: 127.0.0.1)
--port: 指定端口号(默认: 7860)

CLI模式可用命令

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

项目结构

src/
├── main.py          # 主程序入口,控制流程
├── chatbot.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

Ⅰ.
Die andern zogen längſt davon,
Ich bleib' zurück, verlaſſen, ſtill.
Am Rande dieſer Welt, wo ſchon
Ich warte auf des Schickſals Will'.

Ⅱ.
Die Sonne ſteigt am Morgen auf,
Der Wieſen Blumenſchmuck im Lauf.
Ein Ort, den Träume nicht erreichen,
Wo Wirklichkeit und Wunder gleichen.

Ⅲ.
Erinn'rungen entführten ſie,
Entriſſen mir Melancholie.
Die Welt zerſtörte ſich geſchwind,
Verfiel urplötzlich, wie im Wind.

Ⅳ.
Doch künde ich von neuer Zeit:
Aus Blut und Tränen, Streit und Pein
Erſteht die Welt in neuem Schein.
Dann endet alle Einſamkeit.

(Hierbei handelt es ſich um K.I.-generierte Inhalte, die manuell überprüft wurden.)