内容

<p align="center">
<a href="./LICENSE">
<img src="https://img.shields.io/github/license/lkimuk/Wuwe.svg" alt="许可证">
</a>
<img src="https://img.shields.io/github/languages/top/lkimuk/Wuwe.svg" alt="语言">
<img src="https://img.shields.io/github/last-commit/lkimuk/Wuwe.svg" alt="最后提交">
</p>
<p align="center">
<strong>文档:</strong>
<a href="https://lkimuk.github.io/Wuwe/">https://lkimuk.github.io/Wuwe/</a>
</p>
# Wuwe
Wuwe 是一个 C++20 框架,用于在原生应用程序、服务和命令行程序中构建可使用工具、具有状态和审计功能的 AI 代理。
它提供了独立可用的模块,包括模型访问、类型化工具、推理、反射、规划、编排、内存、检索增强生成、MCP、网络、策略、审批、审计、观测性和受控执行。
## 版本支持
0.1.0 版本已在以下平台验证:
| 平台 | 软件包 | 状态 |
| --- | --- | --- |
| Windows x64 / Visual Studio 2022 | `wuwe-0.1.0-windows-x64.zip` | 认证发布配置文件 |
| Ubuntu 24.04 Linux x64 | `wuwe-0.1.0-linux-x64.tar.gz` | 认证发布配置文件 |
代码库保持可移植,但 macOS 不包含在 0.1.0 认证矩阵中。默认的 `controlled_process` 后端是跨平台的;可选的 `restricted_process` 后端仅在 Windows 上可用。
## 功能
| 领域 | 包含的功能 |
| --- | --- |
| 模型和工具 | OpenAI 兼容、Anthropic、Gemini 和 Ollama 客户端;流式传输;类型化模式和调度 |
| 代理运行时 | 工具循环、回调、取消、类型化编排、推理模式、反射、计划和跟踪 |
| 状态和知识 | 作用域内存、文件和 SQLite 持久性、嵌入、检索、重新排序、接地和引用 |
| MCP | 服务器、客户端、子进程主机、网关、stdio、HTTP、访问策略、审计和遥测 |
| 操作和治理 | 能力决策、主机审批、审计事件、通用观测性接收器和模块遥测 |
| 受控执行 | 策略绑定的 Python 子进程、审批、资源限制、后端合约和审计事件 |
| 网络 | 使用 cpr/libcurl 和 cpp-httplib 后端的通用 HTTP API |
完整的模块映射和发布边界在 [文档概述](https://lkimuk.github.io/Wuwe/docs/) 中。
## 构建
要求:
- CMake 3.25 或更新版本,用于包含的预设
- Git
- C++20 编译器
- 通过 `VCPKG_ROOT` 引用的 vcpkg
Windows:
```powershell
$env:VCPKG_ROOT = "D:\tools\vcpkg"
cmake --preset windows-vcpkg
cmake --build --preset windows-vcpkg-release
ctest --preset windows-vcpkg-release
```
Linux:
```bash
export VCPKG_ROOT="$HOME/vcpkg"
cmake --preset linux-vcpkg
cmake --build --preset linux-vcpkg-release
ctest --preset linux-vcpkg-release
```
官方 Windows 配置文件使用 Schannel 和 SQLite。Linux 配置文件使用 OpenSSL 和 SQLite。从固定的 vcpkg 清单中恢复依赖项到构建树中。
参见 [入门](https://lkimuk.github.io/Wuwe/docs/getting-started/) 和 [依赖项](https://lkimuk.github.io/Wuwe/docs/dependencies/)。
## 最小客户端
```cpp
#include <iostream>
#include <wuwe/wuwe.h>
int main() {
wuwe::llm_config config {
.model = "gpt-4.1-mini",
};
auto client = wuwe::make_llm_client("OpenAI", config);
const auto response = client->complete("Explain RAII in one paragraph.");
if (!response) {
std::cerr << response.error_code.message() << '\n';
return 1;
}
std::cout << response.content << '\n';
}
```
在运行程序之前设置 `OPENAI_API_KEY`。其他内置提供程序使用相同的 `llm_client` 接口。
## 使用已安装的 SDK
```cmake
cmake_minimum_required(VERSION 3.20)
project(my_agent LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(wuwe CONFIG REQUIRED)
add_executable(my_agent main.cpp)
target_link_libraries(my_agent PRIVATE wuwe::wuwe)
```
根据需要将 Wuwe 安装前缀添加到 `CMAKE_PREFIX_PATH`。导出的软件包请求在该构建中启用的公共依赖项。
## 软件包
构建和测试后:
```powershell
.\tools\package-wuwe.ps1 -BuildDir build-vcpkg -Configuration Release
```
```bash
bash ./tools/package-wuwe.sh --build-dir build-linux-vcpkg --configuration Release
```
每个存档包含静态 SDK、CMake 软件包文件、示例、文档、`manifest.json`、校验和、Apache Tika 和与平台匹配的 Temurin 21 JRE。当启用时,SQLite 和 OpenSSL 仍为公共链接依赖项。
参见 [打包](https://lkimuk.github.io/Wuwe/docs/packaging/)。
## 生产边界
- `controlled_process` 是一个有界子进程后端,而不是一个强沙箱。
- SQLite 用于本地持久性。SQLite 知识索引使用 C++ 线性扫描,而不是 ANN 搜索。
- Qdrant 和其他远程索引是由主机管理的外部服务。
- 主机拥有身份、秘密、用户同意、审批、保留和部署策略。
- 检查软件包元数据和后端强制合约,而不是推断功能。
## 许可证
Wuwe 根据 [LICENSE](LICENSE) 中的条款分发。