Files
dstalk/README.md
2026-05-26 09:28:42 +08:00

316 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# dstalk
> 基于 DeepSeek V4 大模型、兼容 OpenAI / Anthropic API 的 AI 编程 CLI
>
> 官网: [dstalk.top](https://dstalk.top)
---
## 这是什么?
dstalk 是一款 AI 编程助手命令行工具。通过调用 DeepSeek V4 大模型(兼容 OpenAI 和 Anthropic API在终端里用自然语言完成代码编写、重构、调试和文件操作。功能对标 Claude Code、OpenCode、KiloCode。
核心设计为 **CDLL + 多前端解耦**
```text
┌───────────────────────────────────────────────────────────┐
│ 前端层 (Frontends) │
│ ┌──────────────────┐ ┌──────────────────────────┐ │
│ │ dstalk-cli │ │ dstalk-gui │ │
│ │ ANSI 终端 UI │ │ SDL3 图形化 UI │ │
│ │ exe → dstalk.dll│ │ exe → dstalk.dll │ │
│ └────────┬─────────┘ └─────────────┬─────────────┘ │
│ │ │ │
│ └──────────────┬───────────────┘ │
│ │ C ABI │
└──────────────────────────┼─────────────────────────────────┘
┌──────────────────────────▼─────────────────────────────────┐
│ 核心层 (dstalk-core.dll) │
│ ┌────────────┐ ┌────────────┐ ┌──────────────────────┐ │
│ │ 网络通讯 │ │ 文件读写 │ │ AI 接口适配 │ │
│ │ Boost.Asio │ │ C++ 标准库 │ │ DeepSeek / OpenAI │ │
│ │ + OpenSSL │ │ │ │ / Anthropic │ │
│ └────────────┘ └────────────┘ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
- **`dstalk-core`** —— C11/C++20 高性能核心 DLL负责网络通信、AI 接口调用、文件 I/O。
- **`dstalk-cli`** —— 命令行前端ANSI 转义码实现,调用 `dstalk.dll`
- **`dstalk-gui`** —— 图形化前端SDL3 跨平台窗口,调用 `dstalk.dll`
核心与界面完全解耦,可以轻松编写自己的前端,或把 AI 能力嵌入到现有工具中。
---
## 为什么用 C/C++ 实现?
| 维度 | dstalk (C/C++) | 典型竞品 (TypeScript/Node.js) |
|------|----------------|------------------------------|
| 启动速度 | 毫秒级 | 秒级 |
| 内存占用 | 数十 MB | 数百 MB 起 |
| 运行时依赖 | 零(单文件 DLL | 需要 Node.js 运行时 |
| 嵌入能力 | 任意语言通过 C ABI 调用 | 困难 |
| GC 影响 | 无 GC 停顿 | 可能内存膨胀 |
AI 编程助手需要长期驻留、频繁交互,性能特征值得用系统级语言重新思考。
---
## 与竞品的差异化
| 特性 | dstalk | Claude Code | OpenCode | KiloCode |
|------|--------|-------------|----------|----------|
| 实现语言 | C11 / C++20 | TypeScript | TypeScript | TypeScript |
| 运行时 | 零依赖 CDLL | Node.js | Node.js | Node.js |
| 前端形态 | CLI + GUI 双前端 | 终端集成 | VS Code 插件 | VS Code 插件 |
| 模型 | DeepSeek / OpenAI / Anthropic | Claude | 多模型 | 多模型 |
| 嵌入第三方 | C ABI极易 | 困难 | 困难 | 困难 |
### DLL 架构优势
- **语言无关** —— C ABI 意味着 C/C++、Python、Rust、C#、Go 都能直接调用
- **进程内集成** —— 无需 HTTP 通信、零 IPC 开销,直接函数调用
- **前端零状态** —— CLI 和 GUI 不持有业务逻辑,只负责渲染和输入
---
## 快速开始
### 1. 安装工具链(全自动,存入 tools\,需系统已安装 Python 3.10+
```bash
cd tools
setup.bat # 下载 CMake + Ninja + LLVM/Clang并在 tools/.venv 安装 Conan2
```
> 网络不畅时可手动下载放入对应目录:[Ninja](https://github.com/ninja-build/ninja/releases) | [CMake](https://cmake.org/download/) | [LLVM](https://github.com/llvm/llvm-project/releases)
>
> 目录结构要求: `tools/cmake/bin/cmake.exe` / `tools/ninja/ninja.exe` / `tools/llvm/bin/clang.exe` / `tools/.venv/Scripts/conan.exe`
### 2. 编译
```bash
build.bat # 一键: Conan拉依赖 → CMake配置 → Ninja编译
```
### 3. 运行
```bash
build/dstalk-cli/dstalk-cli.exe # 命令行模式
build/dstalk-gui/dstalk-gui.exe # 图形模式(默认启用,可用 -DDSTALK_BUILD_GUI=OFF 关闭)
```
---
## 使用示例
```text
$ dstalk-cli
dstalk v0.1.0 | 模型: deepseek-v4 | /help 查看帮助
> 帮我写一个读取 CSV 并计算平均值的 C 程序
[dstalk] 正在思考...
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
fprintf(stderr, "用法: %s <csv文件>\n", argv[0]);
return 1;
}
FILE *fp = fopen(argv[1], "r");
if (!fp) { perror("fopen"); return 1; }
double sum = 0.0;
int count = 0;
char line[1024];
while (fgets(line, sizeof(line), fp)) {
sum += atof(line);
count++;
}
fclose(fp);
printf("平均值: %.2f (共 %d 行)\n", sum / count, count);
return 0;
}
已写入 csv_avg.c。需要我帮你编译测试吗
> 把这段代码改成支持表头的
[dstalk] 已更新 csv_avg.c——跳过第一行表头增加列选择功能。
> /file show csv_avg.c
[dstalk] 已显示 csv_avg.c 内容。
```
### 常用命令
| 命令 | 说明 |
|------|------|
| `/file list [path]` | 列出目录内容 |
| `/file show <path>` | 查看文件内容 |
| `/file read <path>` | 读取文件内容 |
| `/file write <path> <content>` | 写入文件 |
| `/model <name>` | 切换 AI 模型 |
| `/clear` | 清空会话上下文 |
| `/save <path>` | 保存会话 |
| `/load <path>` | 恢复会话 |
| `/help` | 显示帮助 |
---
## 工程结构
```text
dstalk/
├── deps/
│ └── conanfile.txt # Conan2 依赖声明
├── dstalk-core/ # 核心 DLL
│ ├── include/dstalk/
│ │ └── dstalk_api.h # 公开 C API 头文件
│ ├── src/
│ │ ├── api.cpp # API 实现
│ │ ├── net/ # 网络通信 (HTTP/HTTPS)
│ │ ├── ai/ # AI 接口适配
│ │ └── file/ # 文件读写
│ └── CMakeLists.txt
├── dstalk-cli/ # 命令行前端 (ANSI)
│ ├── src/main.cpp
│ └── CMakeLists.txt
├── dstalk-gui/ # 图形化前端 (SDL3)
│ ├── src/main.cpp
│ └── CMakeLists.txt
├── tests/ # 单元测试
│ └── CMakeLists.txt
├── CMakeLists.txt # 根 CMake
└── README.md
```
---
## 公开 API
头文件: [dstalk-core/include/dstalk/dstalk_api.h](dstalk-core/include/dstalk/dstalk_api.h)
```c
/* 初始化与销毁 */
int dstalk_init(const char* config_path);
void dstalk_destroy(void);
/* AI 对话 */
int dstalk_chat(const char* input, char** output);
void dstalk_free_string(char* str);
/* 文件操作 */
int dstalk_file_read(const char* path, char** content);
int dstalk_file_write(const char* path, const char* content);
```
**调用约定:**
- 所有字符串均为 UTF-8 编码
- `dstalk_chat` / `dstalk_file_read` 分配的内存由调用方通过 `dstalk_free_string` 释放
- 返回 `0` 成功,负数表示错误码
**跨语言调用示例:**
```c
#include "dstalk/dstalk_api.h"
#include <stdio.h>
int main(void) {
if (dstalk_init("config.json") != 0) {
fprintf(stderr, "初始化失败\n");
return 1;
}
char* reply = NULL;
if (dstalk_chat("解释这段代码", &reply) == 0) {
printf("AI: %s\n", reply);
dstalk_free_string(reply);
}
dstalk_destroy();
return 0;
}
```
---
## FAQ
**Q: 为什么不用 Rust**
A: 团队对 C/C++ 生态更熟悉C++20 的现代特性已能让我们写出安全高效的代码。且 CDLL 需要稳定的 C ABIC/C++ 最直接。
**Q: 支持哪些模型?**
A: 主要支持 DeepSeek V4同时兼容 OpenAI GPT 系列和 Anthropic Claude 系列的 API。通过配置文件切换 API 基地址和密钥即可。
**Q: 为什么同时做 CLI 和 GUI**
A: CLI 适合终端/SSH/CI 环境GUI 适合需要富文本和鼠标交互的场景。两者共享同一核心 DLL功能一致。
**Q: 如何配置 API Key**
A: 首次运行前,手动创建项目目录下的 `config.toml`
```toml
[api]
provider = "deepseek"
base_url = "https://api.deepseek.com/v1"
api_key = "sk-xxxxxxxx"
model = "deepseek-v4"
```
---
## 路线图
| 阶段 | 内容 |
|------|------|
| **Phase 1** | 项目骨架、CMake 构建、DLL 导出、CLI 前端主循环 |
| **Phase 2** | HTTPS 网络层、DeepSeek API 对接、基本对话 |
| **Phase 3** (当前) | 流式输出、多轮会话、文件读写工具、CLI 体验对齐 |
| **Phase 4** | SDL3 GUI 完善、插件系统、LSP 集成 |
---
## 贡献指南
1. Fork 仓库并克隆到本地
2. 创建分支: `git checkout -b feature/功能名`
3. 编码: C 代码 K&R 风格C++ 代码 LLVM 风格
4. 确保 `cmake --build build` 通过
5. 提交 PR描述改动内容和动机
### 代码规范
- C: C11 标准,头文件 `#pragma once`
- C++: C++20 标准,优先标准库,必要时引入 Boost
- 内存: C++ 优先 RAIIC 代码显式管理
- 对外接口: `extern "C"` 纯 C 函数,不抛异常
---
## 技术风险与对策
| 风险 | 对策 |
|------|------|
| C++ 开发效率低于脚本语言 | Boost 库弥补;核心 API 稳定后开发速度不会慢于竞品 |
| OpenSSL 跨版本兼容性 | Conan2 锁定版本,消除环境差异 |
| SDL3 仍在迭代 | 锁定具体版本 (3.2.14),升级前充分测试 |
| AI API 协议变更 | 适配层独立模块,变更时只改一处 |
---
## 许可证
GNU General Public License v3. Copyright (c) 2026 dstalk contributors.
---
[dstalk.top](https://dstalk.top) | [GitHub](https://github.com/dstalk/dstalk) | [Issue 反馈](https://github.com/dstalk/dstalk/issues)