首页 > 其他分享 >milvus调用阿里云大模型例子

milvus调用阿里云大模型例子

时间:2024-08-14 16:52:51浏览次数:10  
标签:__ 调用 name collection 阿里 import path os milvus

环境:
OS:Windows
pycharm:2022.1
python:3.11.9

 

1.安装依赖模块
pip install pymilvus tqdm dashscope
或是分别单独安装
pip install dashscope --timeout=100
pip install tqdm --timeout=100
pip install pymilvus --timeout=100

 

2.导入文本报道内容
将如下文本文件解压到项目的当前目录
通过百度网盘分享的文件:allSourceText.rar
链接:https://pan.baidu.com/s/1HjMXJHrnvOWFN7za6moPBA
提取码:aqc3

如下:

 

 

 

3.文本内容向量化
embedding.py

#!/usr/bin/env python
#coding=utf-8

import os
import time
from tqdm import tqdm
import dashscope
from dashscope import TextEmbedding
from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection, utility

def prepareData(path, batch_size=25):
    batch_docs = []
    for file in os.listdir(path):
        with open(path + '/' + file, 'r', encoding='utf-8') as f:
            batch_docs.append(f.read())
            if len(batch_docs) == batch_size:
                yield batch_docs
                batch_docs = []

    if batch_docs:
        yield batch_docs

def getEmbedding(news):
    model = TextEmbedding.call(
        model=TextEmbedding.Models.text_embedding_v1,
        input=news
    )

    embeddings = [record['embedding'] for record in model.output['embeddings']]

    return embeddings if isinstance(news, list) else embeddings[0]


if __name__ == '__main__':
    current_path = os.path.abspath(os.path.dirname(__file__))  # 当前目录
    print(current_path)

    root_path = os.path.abspath(os.path.join(current_path, '..'))  # 上级目录
    data_path = f'{current_path}/allSourceText'  # 数据下载git clone https://github.com/shijiebei2009/CEC-Corpus.git
    print(data_path)

    # 配置Dashscope API KEY,这个需要开通阿里云账号,在Dashscope产品控制台开通
    dashscope.api_key = "XXXXXXXX"

    # 配置Milvus参数
    COLLECTION_NAME = 'CEC_Corpus'
    DIMENSION = 1536
    MILVUS_HOST = '192.168.1.135'
    MILVUS_PORT = '19530'
    USER = 'root'
    PASSWORD = 'Milvus'

    connections.connect(host=MILVUS_HOST, port=MILVUS_PORT, user=USER, password=PASSWORD)

    # Remove collection if it already exists
    if utility.has_collection(COLLECTION_NAME):
        utility.drop_collection(COLLECTION_NAME)

    # Create collection which includes the id, title, and embedding.
    fields = [
        FieldSchema(name='id', dtype=DataType.INT64, descrition='Ids', is_primary=True, auto_id=False),
        FieldSchema(name='text', dtype=DataType.VARCHAR, description='Text', max_length=4096),
        FieldSchema(name='embedding', dtype=DataType.FLOAT_VECTOR, description='Embedding vectors', dim=DIMENSION)
    ]
    schema = CollectionSchema(fields=fields, description='CEC Corpus Collection')
    collection = Collection(name=COLLECTION_NAME, schema=schema)

    # Create an index for the collection.
    index_params = {
        'index_type': 'IVF_FLAT',
        'metric_type': 'L2',
        'params': {'nlist': 1024}
    }
    collection.create_index(field_name="embedding", index_params=index_params)

    id = 0
    for news in tqdm(list(prepareData(data_path))):
        ids = [id + i for i, _ in enumerate(news)]
        id += len(news)

        ##print(news)

        vectors = getEmbedding(news)
        # insert Milvus Collection
        for id, vector, doc in zip(ids, vectors, news):
            insert_doc = (doc[:498] + '..') if len(doc) > 500 else doc
            ins = [[id], [insert_doc], [vector]]  # Insert the title id, the text, and the text embedding vector
            collection.insert(ins)
            time.sleep(2)

 

4.提问ai

answer.py

#!/usr/bin/env python
#coding=utf-8

import os
import dashscope
from dashscope import Generation
from pymilvus import connections, FieldSchema, CollectionSchema, DataType, Collection
from embedding import getEmbedding


def getAnswer(query, context):
    prompt = f'''请基于```内的报道内容,回答我的问题。
          ```
          {context}
          ```
          我的问题是:{query}。
       '''

    rsp = Generation.call(model='qwen-turbo', prompt=prompt)
    return rsp.output.text


def search(text):
    # Search parameters for the index
    search_params = {
        "metric_type": "L2"
    }

    results = collection.search(
        data=[getEmbedding(text)],  # Embeded search value
        anns_field="embedding",  # Search across embeddings
        param=search_params,
        limit=1,  # Limit to five results per search
        output_fields=['text']  # Include title field in result
    )

    ret = []
    for hit in results[0]:
        ret.append(hit.entity.get('text'))
    return ret


if __name__ == '__main__':
    current_path = os.path.abspath(os.path.dirname(__file__))  # 当前目录
    root_path = os.path.abspath(os.path.join(current_path, '..'))  # 上级目录
    data_path = f'{root_path}/CEC-Corpus/raw corpus/allSourceText'

    # 配置Dashscope API KEY
    dashscope.api_key = "XXXXXXXXXXXXXXXXXXXXXX"

    # 配置Milvus参数
    COLLECTION_NAME = 'CEC_Corpus'
    DIMENSION = 1536
    MILVUS_HOST = '192.168.1.135'
    MILVUS_PORT = '19530'
    USER = 'root'
    PASSWORD = 'Milvus'

    connections.connect(host=MILVUS_HOST, port=MILVUS_PORT, user=USER, password=PASSWORD)

    fields = [
        FieldSchema(name='id', dtype=DataType.INT64, descrition='Ids', is_primary=True, auto_id=False),
        FieldSchema(name='text', dtype=DataType.VARCHAR, description='Text', max_length=4096),
        FieldSchema(name='embedding', dtype=DataType.FLOAT_VECTOR, description='Embedding vectors', dim=DIMENSION)
    ]
    schema = CollectionSchema(fields=fields, description='CEC Corpus Collection')
    collection = Collection(name=COLLECTION_NAME, schema=schema)

    # Load the collection into memory for searching
    collection.load()

    question = '北京中央电视台工地发生大火,发生在哪里?出动了多少辆消防车?人员伤亡情况如何?'
    context = search(question)
    answer = getAnswer(question, context)
    print(answer)

 

运行answer.py效果如下

 

标签:__,调用,name,collection,阿里,import,path,os,milvus
From: https://www.cnblogs.com/hxlasky/p/18359312

相关文章

  • 阿里云矢量图标库的使用
    关于图标,前端工程师接触的不算少的了。虽然不少公司都会有自己的前端ui工程师设计图标,各类ui库也会有自己的图标库,但如果你是个人开发或者是学校的同学,再或者你们没有ui设计图标,那么你就能运用到我的方案。官网地址:iconfont-阿里巴巴矢量图标库这个不用担心,注册就能免费使用,......
  • 方法在其他类中的调用
    方法在其它类的调用在Java中,如果你在一个类中定义了一个方法,并想在另一个与之相关的类中调用这个方法,你有几种不同的选项,具体取决于这两个类的关系以及方法的性质(是否为静态方法)。以下是一些基本的指导原则和方法调用的示例:1.实例方法调用如果你想调用的方法是一个实例方法(非......
  • 参加阿里云云消息队列 RabbitMQ 版动手操作,赠送博客园T恤
    这是8月份园子和阿里云的第3期推广合作,招募100人参加云消息队列RabbitMQ版动手操作,有效完成动手操作的前100人赠送1件原价79元的博客园T恤,如果不需要T恤,也可以选原价不高于79元的其他周边。活动官网:https://developer.aliyun.com/special/yunduanwendao/rabbitmq01参与步骤:1......
  • 视频汇聚/安防综合管理系统EasyCVR非管理员账户能调用分配给其他用户的通道是什么原因
    视频汇聚/安防综合管理系统EasyCVR视频监控平台,作为一款智能视频监控综合管理平台,凭借其强大的视频融合汇聚能力和灵活的视频能力,在各行各业的应用中发挥着越来越重要的作用。平台不仅具备视频资源管理、设备管理、用户管理、网络管理和安全管理等功能,还支持多种主流标准协议,如GB2......
  • 参加阿里云实时数仓Hologres动手操作,赠送博客园T恤
    这是8月份园子和阿里云的第2期推广合作,招募100人参加阿里云实时数仓Hologres动手操作,有效完成动手操作的前100人赠送1件原价79元的博客园T恤,如果不需要T恤,也可以选原价不高于79元的其他周边。活动官网:https://developer.aliyun.com/topic/yunduanwendao/hologres_internal参......
  • Nginx:Centos-7安装Nginx并配置阿里的SSL证书
    1.安装编译工具在线安装yum-yinstallmakezlibzlib-develgcc-c++libtoolopensslopenssl-devel2.安装PCRE依赖库说明PCRE(PerlCompatibleRegularExpressions)是一个重要的依赖库,它提供了对正则表达式的支持。在Nginx的配置中,正则表达式用于匹配和处理URL、请求......
  • Milvus向量数据库-BM25稀疏嵌入
    milvus向量数据库milvus支持混合搜索,多个向量同时检索,然后进行重排序最终返回结果。多向量包括(多个密集向量或稀疏向量)Embedding嵌入它是一种机器学习概念,用于将数据映射到高维空间,其中具有相似语义的数据被放置在一起。通常是来自BERT或其他Transformer家族的深度神经......
  • 阿里云ECS问题
    我们在ecs上自建的数据库和Elasticsearch,最近频繁死机。提交工单发现有硬盘竟然有限制,按照下面的这张图,这个其实在esc上部署这类的应用,性能非常一般(云盘的读取和写入速度都有严格的限制)。关键是内网带宽大也有限制。结论就是如果是在阿里云自建高性能的应用根本不划算,还不如自己租......
  • 阿里云Centos7搭建邮件服务器端口使用465
    1.申请一个域名指向这台服务器   2.下面是如果安装了postifx和dovecot有配置问题错误可以卸载重装                                  ......
  • 22:函数作用域、匿名函数、高阶函数、尾调用优化
    deftest1():print('inthetest1')deftest():print('inthetest')returntest1res=test()print(res())#1.函数的定义:#1.test1是一个函数,当它被调用时,会打印出'inthetest1'。#2.test是另一个函数,当它被调用时,会先打印出'inthetest......