Skip to main content

Ilina Engine 是一个以对话树为核心的 AI 聊天后端系统。支持树状对话、读写文件、MCP 和 Skills

Project description

IlinaEngine

Ilina Engine 是一个以对话树为核心的 AI 聊天后端系统。支持树状对话、读写文件、MCP 和 Skills

重要说明

当前版本 (0.8.x) 还是一个开发中版本,许多功能也许不稳定,也有可能会增删接口,请务必注意。

关于版本更新的详细内容请见后文。

安装方法

Ilina Engine 已经发布到 PyPI,你可以使用下面的命令安装:

pip install IlinaEngine

你也可以前往这个页面,看看我为 Ilina Engine 开发的 GUI,然后直接使用。 https://github.com/Foves7017/IlinaGUI

本项目的地址: https://github.com/Foves7017/IlinaEngine

配置 IlinaEngine

首次启动后,IlinaEngine会使用默认配置创建 ./configs/ai.json,你可以在启动前手动创建它,也可以启动后手动修改,但之后可能需要重新运行程序。 这里介绍了所有的配置项。

请首先至少配置可用的主要模型和辅助模型。

对话引擎

对于对话树的操作全部可以通过 Engine 模块实现,Engine 模块同时也提供了直接调用 API 生成回复的能力。 这里记录了所有引擎可以调用的接口,上述的 GUI 则是使用这些接口的示例。

对话树(Conversation Tree)

与传统聊天软件的线性消息列表不同,IlinaEngine 使用**树结构(Tree)**存储整个对话。

每一条消息都是一个节点(Node),节点之间通过父子关系连接,形成一棵完整的对话树。

基本结构

System
└── User:你好
    └── Assistant:你好,请问有什么可以帮助你?
        ├── User:介绍一下 Python
        │   └── Assistant:Python 是一种...
        │
        └── User:介绍一下 C++
            └── Assistant:C++ 是一种...

每个节点都可以是:

  • User(用户消息)
  • Assistant(模型回复)
  • Tool(工具调用结果)
  • System(系统提示词)
  • Error(错误节点)

树中的每一条路径都代表一次完整的对话上下文。


分支机制

在任意节点上:

  • 修改消息
  • 重新生成回答
  • 从历史节点继续对话

都不会覆盖原有内容。

系统会创建一个新的子节点作为新的分支。

例如:

User:推荐一本书
└── Assistant:推荐《三体》
    ├── User:为什么?
    │   └── Assistant:因为...
    │
    └── User:换一本
        └── Assistant:推荐《银河帝国》

原始对话会被完整保留。

你可以随时切换到任意分支继续对话。


当前分支

每个节点都记录一个指向子节点的指针(Pointer)。

Pointer 用来标记:

“当前正在使用哪一条分支”。

例如:

User
└── Assistant
    ├── User A
    │   └── Assistant A
    │
    └▶ User B
        └▶ Assistant B

带有 标记的路径就是当前活跃分支。

当模型生成回复时,系统会沿着这条路径向下收集消息,构造发送给模型的上下文。


修改历史

由于所有旧节点都会被保留,因此:

  • 可以查看任意历史版本
  • 可以比较不同回答
  • 可以回到过去的任意时间点
  • 可以从任意节点创建新的对话路线

整个对话过程类似于 Git 的提交树:

A
└── B
    ├── C
    │   └── D
    │
    └── E
        └── F

不同的是,这里的节点不是代码提交,而是一次次对话消息。


优势

相比传统线性聊天记录,对话树能够:

  • 保留所有历史版本
  • 支持无限分支探索
  • 支持多次重新生成而不丢失旧结果
  • 支持修改任意历史消息
  • 支持从任意节点继续对话
  • 为 AI Agent、工具调用与长期记忆提供更灵活的上下文管理能力

对话不再是一条线,而是一张不断生长的思维树。

更新日志

v0.8.9

  • 添加 replace 在替换前后相等时报错
  • 修复了 search_in_file 工具会在二进制文件中查找的BUG
  • 优化了 MCP Loader,现在可以指定环境,并会自动将 cwd 设置为工作目录。而且还可以在配置文件中设置禁用的mcp

v0.8.8

  • MCP 遇到错误时现在会跳过添加
  • 给 engine 添加了 .warning_list 属性,类型是 list[str], 用来保存引擎初始化过程中的警告消息(如跳过MCP加载)

v0.8.5

  • 修复了系统路径的问题

v0.8.4

  • 修复了弹窗工具的错误

v0.8.3

  • 修复了修改根节点是产生的“没有找到父节点”的错误,现在可以正常编辑根节点了。
  • 添加了一系列工具

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ilinaengine-0.8.9.tar.gz (25.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ilinaengine-0.8.9-py3-none-any.whl (25.6 kB view details)

Uploaded Python 3

File details

Details for the file ilinaengine-0.8.9.tar.gz.

File metadata

  • Download URL: ilinaengine-0.8.9.tar.gz
  • Upload date:
  • Size: 25.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for ilinaengine-0.8.9.tar.gz
Algorithm Hash digest
SHA256 d7b269d15516e678863f8a1993cbd6e8ae2b2013149f9d0dfd53136f366845ed
MD5 c9bf5a6946e8e21273bf6fd0a865fbcd
BLAKE2b-256 e1849bed83c72f98138fd79b65c73ffaee35ed165743d96292c92d56a282ba1b

See more details on using hashes here.

File details

Details for the file ilinaengine-0.8.9-py3-none-any.whl.

File metadata

  • Download URL: ilinaengine-0.8.9-py3-none-any.whl
  • Upload date:
  • Size: 25.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for ilinaengine-0.8.9-py3-none-any.whl
Algorithm Hash digest
SHA256 d73b8bd4873bda38d6ea7cdbb6ab200850e39b030bd0c4f2914632cf8d91b05e
MD5 cecfc856d259054f7d1e437f60f0b825
BLAKE2b-256 4bbcc9e2f8892acba5142e43beaa1c38c9daa7c68b1daefc4348fd493d9d56f5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page