Metadata-Version: 2.5
Name: doorcore
Version: 0.2.2
Summary: door-Core v2: a lightweight offline Chinese AI engine with Markov generation and cosine retrieval
Project-URL: Homepage, https://github.com/door-studio/doorcore
Author-email: door 工作室 <doornb666@outlook.com>
License: MIT
Keywords: ai,chatbot,chinese,markov,offline
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.9
Description-Content-Type: text/markdown

# doorcore

door-Core v2 本地 AI 引擎，纯 Python 标准库、零第三方依赖。

特性：
- 中文关键词知识库检索（余弦相似）
- 字符级马尔可夫生成
- 中文/口语算式安全计算：支持「二乘四」「2的10次方」「根号2」「5的平方」等
- 报时、讲笑话、简单角色扮演
- **可造“自己的 AI”**：人设可配、现教现学、自定义工具/插件、多轮记忆、一键打包
- OpenAI 兼容 API（`/v1/chat/completions`）

## 安装

```bash
pip install -U doorcore
```

## 编程使用

### 开箱即用

三种写法都行，挑顺手的：

```python
import doorcore

# 写法一：模块直接当函数调（最省事，内部懒加载一个默认实例）
print(doorcore("1+1等于几"))   # 计算
print(doorcore("雷军是谁"))    # 知识库
print(doorcore("讲个笑话"))    # 笑话

# 写法二：等价的模块级函数
print(doorcore.ask("你好"))

# 写法三：自己 new 一个实例（可多实例 / 自定义 n-gram 阶数 / 自己的语料）
from doorcore import DoorCore
ai = DoorCore()
ai.load_or_train()
print(ai("2的10次方"))         # 实例也能当函数调
```

### 造一个属于你自己的 AI

```python
import doorcore

# 1) 配置人设
ai = doorcore.build(
    name="店小二",
    persona="你是淘宝客服，说话简短亲切",
    suffix="~",                      # 每句自动加「~」
)

# 2) 现教现学：往知识库加 Q===A
ai.teach("营业时间？", "早9晚9哦~")

# 3) 注册自己的本领（工具）：AI 命中触发词会自动调用
@ai.tool(triggers=["天气", "气温"])
def 查天气(问句):
    # 工具自己从问句里解析参数（这里演示直接返回）
    return "北京今天 25 度，晴~"

# 4) 对话（带多轮记忆）
ai("你好")              # 用自定义名字寒暄
ai("你们几点开门")      # -> 早9晚9哦~
ai("北京天气咋样")      # -> 自动调「查天气」

# 5) 打包成“我的 AI”，发给别人 / 下次直接加载
ai.save_pack("店小二")
# 别人拿到目录后：
# me = doorcore.load_pack("店小二"); me.load_or_train()
# 注：工具是函数无法序列化，需在你的代码里重新 @me.tool 注册
```

`tool` 装饰器两种写法都支持：`@ai.tool` 或 `@ai.tool(triggers=["天气"])`。
工具函数接收完整问句字符串、返回 str 即作为回复；没设 `triggers` 时，问句里出现工具名才触发。

## 命令行

```bash
doorcore          # 启动交互式聊天
doorcore-api      # 启动 OpenAI 兼容 API 服务
```

API 默认监听 `http://localhost:8765/v1`，模型名 `door-core`。
可在任何支持自定义 OpenAI 兼容模型的客户端里填入：
- Base URL: `http://localhost:8765/v1`
- Model: `door-core`
- API Key: 任意填（不校验）

## 许可证

MIT


## 命令行

```bash
doorcore          # 启动交互式聊天
doorcore-api      # 启动 OpenAI 兼容 API 服务
```

API 默认监听 `http://localhost:8765/v1`，模型名 `door-core`。
可在任何支持自定义 OpenAI 兼容模型的客户端里填入：
- Base URL: `http://localhost:8765/v1`
- Model: `door-core`
- API Key: 任意填（不校验）

## 许可证

MIT
