110 lines
4.3 KiB
Markdown
110 lines
4.3 KiB
Markdown
# MilvusDemo
|
||
|
||
一个使用 C#(.NET 9)与 `Milvus.Client` 的极简示例项目,演示:
|
||
- 初始化集合(存在则删除并重建)
|
||
- 创建向量索引与加载集合
|
||
- 批量插入随机向量
|
||
- 执行向量相似度搜索
|
||
- 通过内置测试流程验证调用链
|
||
|
||
### 模块划分
|
||
- **App(入口层)**:`Program.cs`
|
||
- 提供交互式入口:输入 1=实际连接 Milvus 执行;输入 2=运行内置测试(无需 Milvus 实例)。
|
||
- **Core/Service(业务层)**:`MilvusService.cs`
|
||
- 封装与 Milvus 的连接、集合初始化、索引创建/加载、数据插入与搜索。
|
||
- **Test Harness(测试层)**:`TestRunner.cs`、`MilvusServiceTests.cs`
|
||
- `TestRunner` 负责编排测试流程;`MilvusServiceTests` 提供无外部依赖的模拟测试(验证调用链与参数)。
|
||
|
||
### 环境要求
|
||
- .NET SDK 9.0+
|
||
- 仅当选择“实际运行(选项 1)”时需要:可访问的 Milvus Server(默认 `localhost:19530`)。
|
||
|
||
### 快速开始
|
||
1. 构建
|
||
```powershell
|
||
dotnet build
|
||
```
|
||
2. 运行(测试模式,无需 Milvus)
|
||
- PowerShell:
|
||
```powershell
|
||
echo 2 | dotnet run
|
||
```
|
||
- Bash:
|
||
```bash
|
||
echo 2 | dotnet run
|
||
```
|
||
3. 运行(实际连接 Milvus)
|
||
- 确保本地或可达的 Milvus 实例运行在 `localhost:19530`。
|
||
- 程序启动后输入 `1`。
|
||
|
||
### 在解决方案根目录运行(多项目)
|
||
本仓库包含多个示例项目。可在解决方案根目录使用 `--project` 指定要运行的项目:
|
||
|
||
```powershell
|
||
# 运行 Milvus 示例(默认交互菜单 1/2)
|
||
dotnet run --project MilvusDemo
|
||
|
||
# 运行语音到函数示例
|
||
dotnet run --project VoiceToFunctionDemo
|
||
```
|
||
|
||
### 启动 Milvus(可选)
|
||
若需在本机快速启动 Milvus,可参考官方快速开始,或使用 Docker(示例):
|
||
|
||
```bash
|
||
# 仅供参考,建议按官方文档选择合适的版本与持久化配置
|
||
docker pull milvusdb/milvus:latest
|
||
docker run -d --name milvus-standalone -p 19530:19530 milvusdb/milvus:latest
|
||
```
|
||
|
||
文档:`https://milvus.io/docs`(查看“Get Started / Install”)。
|
||
|
||
### 主要参数(实际运行模式)
|
||
- 主机与端口:`localhost:19530`
|
||
- 集合名:`csharp_demo_collection`
|
||
- 向量维度:`8`
|
||
|
||
> 提示:若需修改连接地址或集合名,请在代码中相应位置调整(例如在连接初始化与集合定义处)。
|
||
|
||
### 文件说明
|
||
- `Program.cs`:控制台入口与菜单;调用服务或测试。
|
||
- `MilvusService.cs`:核心服务,封装 Milvus 客户端操作。
|
||
- `MilvusServiceTests.cs`:简单的模拟测试实现(不依赖 Milvus)。
|
||
- `TestRunner.cs`:运行测试流程的编排类。
|
||
- `MilvusDemo.csproj`:项目与依赖定义(包含 `Milvus.Client`)。
|
||
|
||
### 项目结构
|
||
- `MilvusDemo/`:Milvus 向量数据库最小示例,支持实际连接与模拟测试两种模式。
|
||
- `VoiceToFunctionDemo/`:语音(文本)解析为函数调用的示例,展示如何从自然语言中抽取参数并调用预定义函数。
|
||
|
||
---
|
||
|
||
## VoiceToFunctionDemo
|
||
|
||
一个将中文自然语言指令解析为函数调用的控制台示例。内置函数库包含:
|
||
- `PRODUCT(double[], double[])`:计算两列数值的逐项乘积
|
||
- `FILTER(List<User>, Func<User,bool>)`:按条件筛选用户(支持年龄阈值与姓名包含)
|
||
- `COUNTIF(double[], Func<double,bool>)`:按范围统计数量
|
||
|
||
### 运行
|
||
```powershell
|
||
dotnet run --project VoiceToFunctionDemo
|
||
```
|
||
|
||
程序内置了示例输入,启动后会依次演示:
|
||
- 计算两列数值的乘积(如 `[1,3,5]` 与 `[2,4,6]`)
|
||
- 筛选年龄大于某值且姓名包含关键字的用户
|
||
- 统计销售额处于指定区间内的订单数
|
||
|
||
如需扩展,请修改 `VoiceToFunctionDemo/Program.cs`:
|
||
- 新增函数:在 `functionLibrary` 中增加 `FunctionInfo`,定义参数类型与执行逻辑。
|
||
- 扩展解析:在 `ParseVoiceCommand` 中为新函数添加参数解析与类型校验。
|
||
|
||
---
|
||
|
||
### 常见问题(FAQ)
|
||
- 无法连接到 Milvus:请确认 Milvus 是否已启动并监听 `19530` 端口,以及本机/容器网络连通性。
|
||
- 还原/编译失败:请确认已安装 .NET 9 SDK,并允许联网下载 NuGet 依赖;必要时执行 `dotnet restore` 后再构建。
|
||
- 端口占用:如 `19530` 已被占用,请修改容器映射或程序连接端口并保持一致。
|
||
|