linux安装milvus数据库lite版本
https://milvus.io/docs/milvus_lite.md
参考上述教程,直接安装该包即可。标准版和分布式版要运行docker。
pip install -U pymilvus
下面是官方的demo,一起看看
from pymilvus import MilvusClient # 导入库,客户端
import numpy as np #
# 创建客户端,并连接到一个名为 milvus_demo.db 的本地数据库。这个文件将用于存储 Milvus 数据库的索引和数据
client = MilvusClient("/root/RAG/milvus/milvus_demo.db")
client.create_collection(
collection_name="demo_collection",
dimension=4 # The vectors we will use in this demo has 384 dimensions
) # 创建集合,设置名称和向量维度数
# 待加入的文本,三条。
docs = [
"Artificial intelligence was founded as an academic discipline in 1956.",
"Alan Turing was the first person to conduct substantial research in AI.",
"Born in Maida Vale, London, Turing was raised in southern England.",
]
# 为这些文本构建虚拟向量
vectors = [[ np.random.uniform(-1, 1) for _ in range(4) ] for _ in range(len(docs)) ]
print(vectors)
# 构建json字典,这是真正传入数据库的东西
data = [ {"id": i, "vector": vectors[i], "text": docs[i], "subject": "history"} for i in range(len(vectors)) ]
# insert方法插入数据
res = client.insert(
collection_name="demo_collection",
data=data
)
print(data)
# 检索数据,传入Query向量,结合布尔检索
res = client.search(
collection_name="demo_collection",
data=[vectors[0]],
filter="subject == 'history'",
limit=2,
output_fields=["text", "subject"],
)
print(res)
# 查询数据,纯布尔检索
res = client.query(
collection_name="demo_collection",
filter="subject == 'history'",
output_fields=["text", "subject"],
)
print(res)
# 根据布尔条件删除记录
res = client.delete(
collection_name="demo_collection",
filter="subject == 'history'",
)
print(res)
输出:
vector:
[[-0.18993033343249377, -0.853204716673974, -0.6934232192055412, -0.7363553533144986], [0.6506801349937705, -0.5114297246706443, -0.6227428721418204, -0.4484672597247552], [0.3325751425210133, -0.5403168744637166, 0.6497994854622242, -0.7438264838676247]]
data:
[{'id': 0, 'vector': [-0.18993033343249377, -0.853204716673974, -0.6934232192055412, -0.7363553533144986], 'text': 'Artificial intelligence was founded as an academic discipline in 1956.', 'subject': 'history'}, {'id': 1, 'vector': [0.6506801349937705, -0.5114297246706443, -0.6227428721418204, -0.4484672597247552], 'text': 'Alan Turing was the first person to conduct substantial research in AI.', 'subject': 'history'}, {'id': 2, 'vector': [0.3325751425210133, -0.5403168744637166, 0.6497994854622242, -0.7438264838676247], 'text': 'Born in Maida Vale, London, Turing was raised in southern England.', 'subject': 'history'}]
search的res:
data: ["[{'id': 0, 'distance': 1.0, 'entity': {'text': 'Artificial intelligence was founded as an academic discipline in 1956.', 'subject': 'history'}}, {'id': 1, 'distance': 0.7123634815216064, 'entity': {'text': 'Alan Turing was the first person to conduct substantial research in AI.', 'subject': 'history'}}]"]
query的res:
data: ["{'id': 0, 'text': 'Artificial intelligence was founded as an academic discipline in 1956.', 'subject': 'history'}", "{'id': 1, 'text': 'Alan Turing was the first person to conduct substantial research in AI.', 'subject': 'history'}", "{'id': 2, 'text': 'Born in Maida Vale, London, Turing was raised in southern England.', 'subject': 'history'}"]
delete的res:
[0, 1, 2]
在创建集合并插入数据时,Milvus 会默认使用 FLAT(扁平)索引。
可以在插入数据之后随时创建或修改索引。
PDF解析
安装llama-index:q是指安静模式
pip install -qU llama-index llama-parse
在https://cloud.llamaindex.ai/api-key创建key
demo:
import nest_asyncio
nest_asyncio.apply()
import os
os.environ["LLAMA_CLOUD_API_KEY"] = "llx-3WKY267STksBoUy22M61zilLkzjHCno6AK6QF6LtX8oE5BNl"
from llama_parse import LlamaParse
parser = LlamaParse(
result_type="text", # markdown
language="ch_sim",
verbose=True,
num_workers=4,
)
documents = parser.load_data("/root/RAG/data/刘浩东_应届_LMM.pdf")
print(documents)
[Document(id_=‘7f37e73f-b251-4c76-9c50-1e3c0a271e8a’, embedding=None, metadata={}, excluded_embed_metadata_keys=[], excluded_llm_metadata_keys=[], relationships={}, text=’ 刘浩东\n 156-9160-4654 2272463882@qq.com\n\n 教育经历\n江苏大学 信息资源管理 硕士 2022.09 - 2025.07\n西北大学 信息资源管理 本科 2018.09 - 2022.07\n 主修课程:Python语言、信息检索、知识组织、数据挖掘\n\n 实习经历\n医者AI 研发部 大模型算法实习生 2024.06 - 2024.08\n口腔健康模型训练\n 数据工程:调研华佗、好大夫等开源医学和口腔领域对话数据集,筛选、清洗并整理数据。\n 指令微调:使用DeepSpeed和PEFT基于Qwen1.5-32B-chat进行单机多卡分布式训练,根据训练和验证集loss曲线调整超\n 参数。在测试集上计算BLEU,ROUGE等指标验证微调效果。\n 业务场景对比测试:使用vLLM部署模型,嵌入Dify工作流测试,封装为大模型竞技场,和Qwen1.5-32B-chat、Qwen2-\n 72B-Instruct和真实回复内容进行主观评价。经过10余人的共计6000次投票,微调模型elo得分高出第二名210分,验证了\n 微调模型的在口腔领域的专业性与用户接受度。\n滴滴出行 效能平台部 nlp算法实习生 2023.10 - 2024.05\n企业知识百科AI搜索框架设计和搭建,支持员工信息和公司内部文档问答\n 数据工程:对多源异构数据进行清洗和集成,确保数据的质量和一致性;构建高质量的自我认知微调数据集;基于员工信\n 息,构建监督微调数据集;使用大模型对内部文档进行语义摘要,与员工信息一起进行向量化处理,存入Milvus数据库,\n 便于高效检索。\n 模型微调:基于百川13B-chat进行自我认知微调和员工信息对话数据微调;构造相应测试集,准确率近75%;构造通用能\n 力测试集,测试模型在提升特定领域性能的同时,不影响其通用能力。\n 企业级RAG系统搭建:使用Milvus向量数据库存储员工信息和公司内部文档,建立高效的向量索引系统;通过多路召回机\n 制提高检索相关性,结合BGE进行重排,确保检索结果的高相关性和精确度;设计并优化提示词,提升模型回复的质量和连\n 贯性。在测试集上进行端到端的效果评测,整体准确率提升了近20%。\n\n 项目经历\n舆情评论情感细粒度分析 负责人 2023.12 - 2024.02\n改进含表情符号评论的细粒度情感分析能力\n 数据处理:基于SMP2020开源数据集构造包含评论和表情符号的图文多模态数据集。\n 模型构建:利用CLIP和BERT对表情图像和文本进行特征提取,通过交叉注意力机制实现两者的有效融合。\n 研究成果:模型在测试集上的表现优越,六分类任务的F1得分达到75.31%,准确率为75.99%。论文正在审稿中。\n微博舆情主题及情感演化的时空分析 负责人 2021.05 - 2021.07\n分析新冠疫苗微博舆情主题和情感的时空变化\n 数据采集与预处理:使用 Python 爬虫采集近2万微博和20万评论数据,并进行去重和清洗。\n 分析框架搭建:使用Python实现LDA主题模型,采用飞桨训练BI-LSTM模型用于情感分类。\n 研究成果:研究被提交至全国高校数据创新大赛并获优秀奖。此研究为公共卫生机构和医药公司提供了可复用的社交网络\n 分析流程和有价值的公众情感洞察。代码在GitHub开源,已有543个star。\n\n 技能描述\n LLM微调和应用:熟悉Linux,DeepSpeed分布式训练,PEFT参数高效微调,RAG系统构建及优化,实践经验丰富。\n pytorch和SQL:熟悉pytorch模型开发全流程,擅长高效的数据查询和管理。\n CET-6:具备良好的英文读写和沟通能力。\n\n 自我评价\n 熟悉大模型微调应用全流程:从数据采集、预处理、构造到大模型微调和 RAG 系统搭建,都有深入的参与和实践。\n 较强的自驱力及团队协作能力:能够积极探索新技术,与团队成员顺利协作,推进项目进展。‘, mimetype=‘text/plain’, start_char_idx=None, end_char_idx=None, text_template=’{metadata_str}\n\n{content}‘, metadata_template=’{key}: {value}‘, metadata_seperator=’\n’)]
向量化
https://docs.llamaindex.ai/en/stable/examples/embeddings/huggingface/
采用本地的,直接用抱抱脸的接口
数据库
集合实例化,字段设置
https://milvus.io/docs/schema.md#Field-schema
https://blog.csdn.net/qq_43814415/article/details/134446263
数据搜索:
https://milvus.io/docs/index.md?tab=floating
实践教程
https://docs.llamaindex.ai/en/stable/use_cases/q_and_a/
rag的prompt:
https://docs.llamaindex.ai/en/stable/examples/prompts/prompts_rag/