- 添加HNSW向量索引提升检索性能 - 实现Hybrid检索模式支持向量和关键词双路召回 - 采用RRF算法融合多路召回结果 - 支持ParentChild分块模式的上下文回填 - 优化向量写入采用批量SQL操作提升性能 - 添加RAG PostgreSQL连接字符串配置 - 更新部署脚本增加PGVector集成测试 - 修正表名引用从document_chunks到b_document_chunks - 重构RagRetrievalService实现完整的检索流程 - 增加重排策略支持关键词和LLM重排 - 修改服务器部署地址配置
73 lines
2.3 KiB
C#
73 lines
2.3 KiB
C#
using BuildFlow.Application.AiModel.Handlers;
|
|
using BuildFlow.Application.AiModel.Queries;
|
|
using BuildFlow.Domain.Entities.AiModel;
|
|
using BuildFlow.Domain.Enums;
|
|
using BuildFlow.Infrastructure.Persistence;
|
|
using FluentAssertions;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Xunit;
|
|
|
|
namespace BuildFlow.Rag.Tests;
|
|
|
|
/// <summary>
|
|
/// 查询 AI 模型列表处理器测试。覆盖全量返回与按类型筛选。
|
|
/// </summary>
|
|
public class GetAiModelsQueryHandlerTests
|
|
{
|
|
[Fact]
|
|
public async Task Handle_ReturnsAllModelsOrdered()
|
|
{
|
|
await using var db = CreateDb();
|
|
SeedModel(db, Guid.NewGuid(), "Chat-A", ModelTypeEnum.Chat);
|
|
SeedModel(db, Guid.NewGuid(), "Embed-B", ModelTypeEnum.Embedding);
|
|
await db.SaveChangesAsync();
|
|
|
|
var handler = new GetAiModelsQueryHandler(db);
|
|
var result = await handler.Handle(new GetAiModelsQuery(null), CancellationToken.None);
|
|
|
|
result.Should().HaveCount(2);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Handle_FiltersByModelType()
|
|
{
|
|
await using var db = CreateDb();
|
|
SeedModel(db, Guid.NewGuid(), "Chat-A", ModelTypeEnum.Chat);
|
|
SeedModel(db, Guid.NewGuid(), "Embed-B", ModelTypeEnum.Embedding);
|
|
await db.SaveChangesAsync();
|
|
|
|
var handler = new GetAiModelsQueryHandler(db);
|
|
var result = await handler.Handle(new GetAiModelsQuery((int)ModelTypeEnum.Chat), CancellationToken.None);
|
|
|
|
result.Should().HaveCount(1);
|
|
result[0].ModelType.Should().Be((int)ModelTypeEnum.Chat);
|
|
}
|
|
|
|
private static void SeedModel(RagDbContext db, Guid id, string name, ModelTypeEnum type)
|
|
{
|
|
db.AiModels.Add(new AiModelEntity
|
|
{
|
|
Id = id,
|
|
Name = name,
|
|
Provider = ModelProviderEnum.LMStudio,
|
|
ModelId = name,
|
|
BaseUrl = "http://localhost:1234/v1",
|
|
ApiKey = "lm-studio",
|
|
ModelType = type,
|
|
CreatedBy = "test",
|
|
UpdatedBy = "test",
|
|
OperatorIP = "127.0.0.1",
|
|
});
|
|
}
|
|
|
|
private static RagDbContext CreateDb()
|
|
{
|
|
var options = new DbContextOptionsBuilder<RagDbContext>()
|
|
.UseInMemoryDatabase($"rag-get-aimodels-{Guid.NewGuid():N}")
|
|
.Options;
|
|
var db = new RagDbContext(options);
|
|
db.SavingChanges += (_, _) => RagTestDb.FillAudit(db);
|
|
return db;
|
|
}
|
|
}
|