具体什么是向量数据库我这就不过多介绍了,下面我们只讲在c#中如何实现。
具体实现方法如下
- 需先申请腾讯向量数据库,目前是公测阶段不收取费用。但是需要申请审核。

讯享网 - 开通Embedding功能,此功能是根据模型数据向量化。
- 可以直接登录在腾讯数据库控制台创建db也可以通过接口创建
- 创建一个collection用于存放数据
- 选择插入数据,此时我们并不知道需要插入的数据的向量值是多少,此功能插入会自动转化向量

- 然后我们就可以通过查询接口查询到数据了
下面是c#中实现的代码
/// <summary> /// 腾讯向量数据库api /// </summary> [Route("[controller]/[action]")] public class API_TencentVectorDBController : Controller {
/// <summary> /// 创建库 /// </summary> /// <param name="database"></param> /// <returns></returns> [HttpPost] public IActionResult DataBaseCreate(string database) {
var ret = DataBase_Handle.Create(database); return Json(ret); } /// <summary> /// 删除库 /// </summary> /// <param name="database"></param> /// <returns></returns> [HttpPost] public IActionResult DataBaseDrop(string database) {
var ret = DataBase_Handle.Drop(database); return Json(ret); } /// <summary> /// 获取库 /// </summary> /// <returns></returns> [HttpPost] public IActionResult DataBaseGetList() {
var ret = DataBase_Handle.GetList(); return Json(ret); } /// <summary> /// 创建集合 /// </summary> /// <param name="createEntity">集合基本对象,创建时indexes为空即可</param> /// <param name="embedding">向量对象</param> /// <param name="indexType">向量指定索引类型</param> /// <param name="dimension">指定向量维度[1,4096],如果配置Embedding则为空</param> /// <param name="metricType">指定向量之间距离度量的算法L2,IP,COSINE</param> /// <param name="fileds">其他字段</param> /// <param name="nlist">指索引中的聚类中心数量。取值类型:uint64。取值范围:[1,65536]</param> /// <param name="M">indexType类型为HNSW时为每个节点在检索构图中可以连接多少个邻居节点一般可是只为16,其余的则为 指乘积量化中每个子向量的维度</param> /// <param name="efConstruction">搜索时,指定寻找节点邻居遍历的范围。数值越大构图效果越好,构图时间越长一般可设置为200</param> /// <returns></returns> [HttpPost] public IActionResult CollectionCreate(Collection_Entity.CollectionEntity createEntity,string embedding, string indexType, int? dimension, string metricType, string fileds, int? nlist = null, int? M = 16, int? efConstruction = 200) {
//向量信息 if (!string.IsNullOrEmpty(embedding)) {
createEntity.embedding = JsonConvert.DeserializeObject<Collection_Entity.Embedding>(embedding); } //字段信息 List<string> _fileds = new List<string> {
}; if (!string.IsNullOrEmpty(fileds)) {
_fileds = JsonConvert.DeserializeObject<List<string>>(fileds); } //创建向量集合 var ret = Collection_Handle.Create(createEntity, indexType, dimension, metricType, _fileds, nlist, M, efConstruction); return Json(ret); } /// <summary> /// 删除集合 /// </summary> /// <param name="entity"></param> /// <returns></returns> [HttpPost] public IActionResult CollectionDrop(MySQLCommon.MC_VectorDb.Tencent.Common.BaseEntity entity) {
var ret = Collection_Handle.Drop(entity); return Json(ret); } /// <summary> /// 查询指定的库包含的所有集合 /// </summary> /// <param name="database"></param> /// <returns></returns> [HttpPost] public IActionResult CollectionList(string database) {
var ret = Collection_Handle.List(database); return Json(ret); } /// <summary> /// 获取集合信息 /// </summary> /// <param name="entity"></param> /// <returns></returns> [HttpPost] public IActionResult CollectionDescribe(MySQLCommon.MC_VectorDb.Tencent.Common.BaseEntity entity) {
var ret = Collection_Handle.Describe(entity); return Json(ret); } /// <summary> /// 清空指定集合的数据与索引 /// </summary> /// <param name="entity"></param> /// <returns></returns> [HttpPost] public IActionResult CollectionTruncate(MySQLCommon.MC_VectorDb.Tencent.Common.BaseEntity entity) {
var ret = Collection_Handle.Truncate(entity); return Json(ret); } /// <summary> /// 清空指定集合的数据与索引 /// </summary> /// <param name="entity"></param> /// <returns></returns> [HttpPost] public IActionResult AliasSet(Alias_Entity.AliasBaseEntity entity) {
var ret = Alias_Handle.Set(entity); return Json(ret); } /// <summary> /// 删除集合的别名 /// </summary> /// <param name="entity"></param> /// <returns></returns> [HttpPost] public IActionResult AliasDelete(Alias_Entity.AliasBaseEntity entity) {
var ret = Alias_Handle.Delete(entity); return Json(ret); } /// <summary> /// 给 Collection 中插入向量数据。如果 Collection 在创建时,已配置 Embedding 参数,则仅需要插入文本信息,Embedding 服务会自动将文本信息转换为向量数据,存入数据库 /// </summary> /// <param name="insert"></param> /// <returns></returns> [HttpPost] public IActionResult DocumentInsert(Document_Entity.InsertDocumentsEntity insert) {
var ret = Document_Handle.Insert(insert); return Json(ret); } /// <summary> /// 精确查找与查询条件完全匹配的向量 /// </summary> /// <param name="query"></param> /// <param name="filter"></param> /// <param name="limit"></param> /// <param name="offset"></param> /// <param name="retrieveVector"></param> /// <returns></returns> [HttpPost] public IActionResult DocumentQuery(Document_Entity.QueryResponDocumentEntity query,string filter, int limit = 100, int offset = 1,bool? retrieveVector=false) {
if (query.query == null) {
query.query = new Document_Entity.QueryResponDocumentEntity.Query {
limit = limit, filter= filter, offset = offset, retrieveVector = retrieveVector }; } var ret = Document_Handle.Query(query); return Json(ret); } /// <summary> /// 向量检索 /// </summary> /// <param name="seach"></param> /// <param name="embeddingItems"></param> /// <param name="outputFields"></param> /// <param name="filter"></param> /// <param name="limit"></param> /// <param name="retrieveVector"></param> /// <returns></returns> [HttpPost] public IActionResult DocumentSeach(Document_Entity.SeachResponDocumentEntity seach, string embeddingItems, string filter, string outputFields="[]", int limit = 10, bool? retrieveVector = false) {
if (seach.search == null) {
seach.search = new Document_Entity.SeachResponDocumentEntity.Search {
embeddingItems = JsonConvert.DeserializeObject<List<string>>(embeddingItems), outputFields= JsonConvert.DeserializeObject<List<string>>(outputFields), limit = limit, filter = filter, retrieveVector= retrieveVector }; } var ret = Document_Handle.Seach(seach); return Json(ret); } /// <summary> /// 删除指定 id(Document ID)的文档 /// </summary> /// <param name="delete"></param> /// <returns></returns> [HttpPost] public IActionResult DocumentDelete(Document_Entity.DeleteResponDocumentEntity delete) {
var ret = Document_Handle.Delete(delete); return Json(ret); } /// <summary> /// 字段更新 /// </summary> /// <param name="u"></param> /// <returns></returns> [HttpPost] public IActionResult DocumentUpdate(Document_Entity.UpdateResponDocumentEntity u) {
var ret = Document_Handle.Update(u); return Json(ret); } /// <summary> /// 重建索引 /// </summary> /// <param name="rebuild"></param> /// <returns></returns> [HttpPost] public IActionResult IndexRebuild(Index_Entity.RebuildEntity rebuild) {
var ret = Index_Handle.Rebuild(rebuild); return Json(ret); } /// <summary> /// 测试插入数据 /// </summary> /// <returns></returns> [HttpPost] public IActionResult TestInsert() {
//int total = 0; //int totalZS = 0; //var goods = MC_Goods.GoodsHandle.Get_Goods_List(new MySQLCommon.WFHXNEW_MSQL.MC_Goods.GoodsHandle.Request_Goods_PageList { bid = 036672, isShelves = true }, ref total, ref totalZS); //先根据平台获取商品 var resultStr = Common.NewRedis(Emun.redisEumn.商品信息).GetEntity<string>( + "_Goods_Type_Group_Show"); var groups_Goods = JsonConvert.DeserializeObject<List<Goods_Type_Group_Show_Class>>(resultStr); List<long?> _gids = new List<long?> {
}; //获取商品 foreach (var item in groups_Goods) {
foreach (var _item in item.goodList) {
_gids.Add(_item.gid); } } //获取可显示的数据 var goods = MySQLCommon.WFHXNEW_MSQL.MC_Goods.GoodsHandle.Get_Goods_List_ByRdis(_gids); //插入数据 Document_Entity.InsertDocumentsEntity insert = new Document_Entity.InsertDocumentsEntity {
database = "goods", collection = "seach", buildIndex = true }; List<object> documents = new List<object> {
}; foreach (var item in goods) {
if (item.gtName != "测试") {
documents.Add(new {
id = item.id.ToString(), text = item.title, title = item.title, short_title = item.short_title, gtName = item.gtName, imgs = item.list_imgs }); } } insert.documents = documents; //调用接口 var ret = Document_Handle.Insert(insert); return Json(ret); } }
讯享网
查询结果

猜你喜欢(商品相似度)查询时传入商品名称即可返回需要的相似商品。
用户行为分析得到用户的标签,然后根据标签返回相似的商品。、
本文章参考腾讯向量数据库有兴趣的同学可以共同研究下。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/32485.html