namespace NewLife.Data;
/// <summary>å‘é‡å˜å‚¨æŽ¥å£ã€‚管ç†å¤šä¸ªå‘é‡é›†åˆï¼Œæ”¯æŒ Top-K 相似度检索</summary>
/// <remarks>
/// å¯¹æ ‡ Microsoft.Extensions.VectorData.VectorStore(å˜å‚¨çº§ï¼‰ï¼Œåšéžæ³›åž‹ç®€åŒ–:
/// <list type="bullet">
/// <item>集åˆï¼ˆCollection)隔离:ä¸åŒçŸ¥è¯†åº“/用户å¯ä½¿ç”¨ç‹¬ç«‹é›†åˆï¼Œæ£€ç´¢ä»¥é›†åˆä¸ºè¾¹ç•Œ</item>
/// <item>记录固定为 <see cref="VectorRecord"/>,ä¸å¼•å…¥ TKey/TRecord 泛型</item>
/// <item>å‘é‡ç”±å¤–部生æˆåŽä¼ 入,ä¸ä¾èµ–具体 Embedding 实现</item>
/// <item>集åˆè®°å½•æ“ä½œè§ <see cref="IVectorStoreCollection"/>,本接å£åªè´Ÿè´£èŽ·å–集åˆä¸Žé›†åˆç”Ÿå‘½å‘¨æœŸ</item>
/// </list>
/// </remarks>
public interface IVectorStore
{
/// <summary>èŽ·å–æŒ‡å®šé›†åˆã€‚集åˆä¸å˜åœ¨æ—¶æ‡’创建空集åˆ</summary>
/// <param name="name">集åˆåç§°</param>
/// <returns>集åˆå¯¹è±¡ï¼Œå¯åå¤ä½¿ç”¨</returns>
IVectorStoreCollection GetCollection(String name);
/// <summary>列出å˜å‚¨ä¸å…¨éƒ¨é›†åˆåç§°</summary>
/// <param name="cancellationToken">å–æ¶ˆä»¤ç‰Œ</param>
/// <returns>集åˆå称列表</returns>
Task<IList<String>> ListCollectionNamesAsync(CancellationToken cancellationToken = default);
/// <summary>åˆ é™¤æ•´ä¸ªé›†åˆåŠå…¶å…¨éƒ¨è®°å½•。集åˆä¸å˜åœ¨æ—¶é™é»˜æˆåŠŸ</summary>
/// <param name="name">集åˆåç§°</param>
/// <param name="cancellationToken">å–æ¶ˆä»¤ç‰Œ</param>
Task RemoveCollectionAsync(String name, CancellationToken cancellationToken = default);
}
/// <summary>å‘é‡é›†åˆæŽ¥å£ã€‚管ç†åŒä¸€é›†åˆå†…的高维å‘é‡è®°å½•ï¼Œæ”¯æŒ Top-K 相似度检索</summary>
/// <remarks>
/// å¯¹æ ‡ Microsoft.Extensions.VectorData.VectorStoreCollection,åšéžæ³›åž‹ç®€åŒ–:
/// <list type="bullet">
/// <item>集åˆå†…记录共享åŒä¸€å‘é‡ç»´åº¦ä¸Žè·ç¦»åº¦é‡ï¼Œæ£€ç´¢ä»¥é›†åˆä¸ºè¾¹ç•Œ</item>
/// <item>记录固定为 <see cref="VectorRecord"/>,ä¸å¼•å…¥ TKey/TRecord 泛型</item>
/// <item>æ‰¹é‡æ“作用åŒå方法é‡è½½å®žçŽ°ï¼ˆä¸Žå®˜æ–¹ UpsertAsync/DeleteAsync é‡è½½ä¸€è‡´ï¼‰</item>
/// <item>å‘é‡ç”±å¤–部生æˆåŽä¼ 入,ä¸ä¾èµ–具体 Embedding 实现</item>
/// </list>
/// </remarks>
public interface IVectorStoreCollection
{
/// <summary>集åˆåç§°</summary>
String Name { get; }
/// <summary>新增或更新记录。若 Id å·²å˜åœ¨åˆ™è¦†ç›–</summary>
/// <param name="record">å‘é‡è®°å½•</param>
/// <param name="cancellationToken">å–æ¶ˆä»¤ç‰Œ</param>
Task UpsertAsync(VectorRecord record, CancellationToken cancellationToken = default);
/// <summary>æ‰¹é‡æ–°å¢žæˆ–更新。忽略 null 与空 Id 记录</summary>
/// <param name="records">å‘é‡è®°å½•列表</param>
/// <param name="cancellationToken">å–æ¶ˆä»¤ç‰Œ</param>
Task UpsertAsync(IEnumerable<VectorRecord> records, CancellationToken cancellationToken = default);
/// <summary>按 Id 获å–记录</summary>
/// <param name="id">记录 Id</param>
/// <param name="cancellationToken">å–æ¶ˆä»¤ç‰Œ</param>
/// <returns>找到则返回记录,å¦åˆ™è¿”回 null</returns>
Task<VectorRecord?> GetAsync(String id, CancellationToken cancellationToken = default);
/// <summary>Top-K 相似度检索。返回å‘釿œ€æŽ¥è¿‘查询å‘é‡çš„å‰ top æ¡</summary>
/// <param name="queryVector">查询å‘é‡</param>
/// <param name="top">è¿”å›žæ¡æ•°ï¼ˆé»˜è®¤ 5,0 表示返回全部)</param>
/// <param name="minScore">最低相似度门槛(0–1,默认 0)</param>
/// <param name="cancellationToken">å–æ¶ˆä»¤ç‰Œ</param>
/// <returns>按相似度é™åºæŽ’列的检索结果</returns>
Task<IList<VectorSearchResult>> SearchAsync(Single[] queryVector, Int32 top = 5, Double minScore = 0, CancellationToken cancellationToken = default);
/// <summary>åˆ é™¤æŒ‡å®šè®°å½•ã€‚ä¸å˜åœ¨æ—¶é™é»˜æˆåŠŸ</summary>
/// <param name="id">记录 Id</param>
/// <param name="cancellationToken">å–æ¶ˆä»¤ç‰Œ</param>
Task DeleteAsync(String id, CancellationToken cancellationToken = default);
/// <summary>批é‡åˆ 除记录。忽略ä¸å˜åœ¨çš„ Id</summary>
/// <param name="ids">记录 Id 列表</param>
/// <param name="cancellationToken">å–æ¶ˆä»¤ç‰Œ</param>
Task DeleteAsync(IEnumerable<String> ids, CancellationToken cancellationToken = default);
/// <summary>获å–集åˆå†…记录总数</summary>
/// <param name="cancellationToken">å–æ¶ˆä»¤ç‰Œ</param>
Task<Int64> CountAsync(CancellationToken cancellationToken = default);
}
|