一、据实践要求.net8环境,则需要安装VS2022以支持.net8环境

二、创建控制台应用程序(可参考文章JieBaTokenize使用

并将Milvus.Client(2.3.0-preview.1)引入

三、代码

using Milvus.Client;
internal class Program
{

    static async Task Main(string[] args)
    {
        //AIService ai = new AIService();

        //ai.TestA();
        var result = QueryData().GetAwaiter().GetResult();
        //var result = InsertData().Result;
        Console.WriteLine(result.ToString());

    }

    public static async Task<MutationResult> InsertData()
    {
        //创建客户端
        MilvusClient milvusClient = new MilvusClient("192.168.0.238");


        MilvusCollection collection = milvusClient.GetCollection("cs");

        var movieIds = new[] { 9L, 10L };
        var movieNames = new[] { "The 1", "I2" };
        var movieDescriptions = new ReadOnlyMemory<float>[] {
                    new [] { 0.20022575f, 0.23998135f },
                    new [] { 0.20327095f, -0.2563685f }
                };

        var results = await collection.InsertAsync(new FieldData[]
        {
                FieldData.Create("movie_id", movieIds),
                FieldData.Create("movie_name", movieNames),
                FieldData.CreateFloatVector("movie_description", movieDescriptions)
        });


        //await collection.CreateIndexAsync(
        //     fieldName: "movie_description",
        //     indexType: IndexType.Flat,
        //     metricType: SimilarityMetricType.L2,
        //     indexName: "movie_idx");


        //await collection.LoadAsync();
        //await collection.WaitForCollectionLoadAsync();


        //var parameters = new SearchParameters
        //{
        //    OutputFields = { "movie_name" },
        //    ConsistencyLevel = ConsistencyLevel.Strong,
        //    ExtraParameters = { ["nprobe"] = "1024" }
        //};


        //var results = await collection.SearchAsync(
        //    vectorFieldName: "movie_description",
        //    vectors: new ReadOnlyMemory<float>[] { new[] { 0.12217915f, -0.034832448f } },
        //    SimilarityMetricType.L2,
        //    limit: 3,
        //    parameters);

        return results;
    }


    public static async Task<SearchResults> QueryData()
    {
      
        
        ////创建客户端
        MilvusClient milvusClient = new MilvusClient("192.168.0.238");

        var schema = new CollectionSchema
        {
            Fields =
                    {
                        FieldSchema.Create<long>("movie_id", isPrimaryKey: true),
                        FieldSchema.CreateVarchar("movie_name", maxLength: 200),
                        FieldSchema.CreateFloatVector("movie_description", dimension: 2)
                    }
        };

        var collection = await milvusClient.CreateCollectionAsync(collectionName: "hh", schema: schema, shardsNum: 2);

        var movieIds = new[] { 1L, 2L, 3L, 4L, 5L };
        var movieNames = new[] { "The Lion King", "Inception", "Toy Story", "Pulp  Fiction", "Shrek" };
        var movieDescriptions = new ReadOnlyMemory<float>[] {
                    new [] { 0.10022575f, 0.23998135f },
                    new [] { 0.10327095f, -0.2563685f },
                    new [] { 0.095857024f, 0.201278f },
                    new [] { 0.106827796f, -0.21676421f },
                    new [] { 0.09568083f, 0.21177962f }
                };

        await collection.InsertAsync(new FieldData[]
        {
                FieldData.Create("movie_id", movieIds),
                FieldData.Create("movie_name", movieNames),
                FieldData.CreateFloatVector("movie_description", movieDescriptions)
        });


        await collection.CreateIndexAsync(
             fieldName: "movie_description",
             indexType: IndexType.Flat,
             metricType: SimilarityMetricType.L2,
             indexName: "movie_idx");


        await collection.LoadAsync();
        await collection.WaitForCollectionLoadAsync();


        var parameters = new SearchParameters
        {
            OutputFields = { "movie_name" },
            ConsistencyLevel = ConsistencyLevel.Strong,
            ExtraParameters = { ["nprobe"] = "1024" }
        };


        var results = await collection.SearchAsync(
            vectorFieldName: "movie_description",
            vectors: new ReadOnlyMemory<float>[] { new[] { 0.12217915f, -0.034832448f } },
            SimilarityMetricType.L2,
            limit: 3,
            parameters);

        return results;

        ////定义集合名称和向量维度
        //string collectionName = "test";
        //int dimension = 128;

        //MilvusCollection collection = milvusClient.GetCollection(collectionName);


        //// 执行查询
        //string expr = "id in [0,1]";

        //SearchParameters queryParameters = new SearchParameters();
        //queryParameters.OutputFields.Add("fileName");
        //queryParameters.OutputFields.Add("knowType");
        //queryParameters.OutputFields.Add("content");
        //queryParameters.OutputFields.Add("desc");

        //float[] fr = { 0.1f, 0.2f };

        //ReadOnlyMemory<float> memory = fr.AsMemory<float>();


        //var parameters = new SearchParameters
        //{
        //    OutputFields = { "knowType" },
        //    ConsistencyLevel = ConsistencyLevel.Strong,
        //    ExtraParameters = { ["nprobe"] = "1024" }
        //};

        //var result = await collection.SearchAsync("vector", vectors: new ReadOnlyMemory<float>[] { new[] { 0.12217915f, -0.034832448f } }, SimilarityMetricType.L2, limit: 2, queryParameters);

        //return result;

        //关闭连接
        //milvusClient.Dispose();
    }
}

四、测试代码

五、测试成功,则将Milvus引入到AI项目中实际应用

①引入Milvus.Client(2.3.0-priview.1)

②由于AI项目不是控制台应用程序,所以在其运行环境中不会自己生成这些外部引用的dll,比如这里的Milvus.Client应用时就不会生成需要的dll,这里的解决办法就是将一开始创建的Ares.AI.Test项目运行后产生的dll,手动放置到AI项目运行环境下,再重启服务,具体如下:

选中Ares.AI.Test,右键在文件资源管理器中打开文件夹

找到该目录下,将红色√的dll拷贝到AI项目运行环境中去

也即拷贝到如下路径下,注意要(.net8的)

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐