build-flow.api/tests/BuildFlow.Rag.Tests/Stub/StubEmbeddingService.cs
xiangning 7479521546 feat(rag): 实现RAG模块的Hybrid检索和向量索引优化
- 添加HNSW向量索引提升检索性能
- 实现Hybrid检索模式支持向量和关键词双路召回
- 采用RRF算法融合多路召回结果
- 支持ParentChild分块模式的上下文回填
- 优化向量写入采用批量SQL操作提升性能
- 添加RAG PostgreSQL连接字符串配置
- 更新部署脚本增加PGVector集成测试
- 修正表名引用从document_chunks到b_document_chunks
- 重构RagRetrievalService实现完整的检索流程
- 增加重排策略支持关键词和LLM重排
- 修改服务器部署地址配置
2026-08-11 10:59:09 +08:00

46 lines
1.5 KiB
C#

using BuildFlow.Domain.Interfaces;
namespace BuildFlow.Rag.Tests.Stub;
/// <summary>
/// Stub IEmbeddingService:返回固定维度(768)的向量,与 DB vector(768) 列匹配。
/// 维度由 embeddinggemma-300m 决定。所有文本返回相同向量(测试场景下足够)。
/// </summary>
public sealed class StubEmbeddingService : IEmbeddingService
{
/// <summary>向量维度,匹配 document_chunks.embedding vector(768)。</summary>
public const int Dimensions = 768;
/// <summary>是否返回空向量(用于测试零分块路径)。</summary>
public bool ReturnEmpty { get; init; }
private static float[] BuildVector()
{
var v = new float[Dimensions];
for (var i = 0; i < Dimensions; i++)
v[i] = (i % 10) / 10f;
return v;
}
/// <summary>返回与 EmbedAsync 相同的向量,供集成测试构建"最相似" chunk 用。</summary>
public static float[] BuildVectorLike()
{
var v = new float[Dimensions];
for (var i = 0; i < Dimensions; i++)
v[i] = (i % 10) / 10f;
return v;
}
public Task<float[]> EmbedAsync(string text, CancellationToken ct = default)
=> Task.FromResult(ReturnEmpty ? [] : BuildVector());
public Task<List<float[]>> EmbedBatchAsync(List<string> texts, CancellationToken ct = default)
{
if (ReturnEmpty)
return Task.FromResult(new List<float[]>());
var vector = BuildVector();
return Task.FromResult(texts.Select(_ => vector).ToList());
}
}