大模型开发必备:Dify知识库迁移全流程指南,收藏不迷路!
Dify知识库迁移全流程指南,涵盖数据导出SQL编写、目标库数据更新、文档文件迁移及向量库同步等技术细节。提供完整的PostgreSQL操作命令,帮助开发者实现不同Dify环境间的知识库迁移,确保数据完整性和功能可用性。
简介
Dify知识库迁移全流程指南,涵盖数据导出SQL编写、目标库数据更新、文档文件迁移及向量库同步等技术细节。提供完整的PostgreSQL操作命令,帮助开发者实现不同Dify环境间的知识库迁移,确保数据完整性和功能可用性。
Dify 知识库迁移
迁移 Dify 中单个知识库的参考方案,不同 Dify 版本表结构可能略有差异。
从源数据库中获取知识库及租户 ID
# 待迁移的知识库 id
dataset_id = 'xxxxxx'
# 源数据库租户
# select tenant_id, created_by, embedding_model_provider, embedding_model from datasets where id='{dataset_id}';
source_tenant_id = 'xxxxxx'
源数据库需导出的数据
通过 sql 生成 insert 语句,在目标数据库中执行。
source_data_sql = f'''
-- 知识库
select * from datasets where id='{dataset_id}';
-- select tenant_id, created_by, embedding_model_provider, embedding_model from datasets where id='{dataset_id}';
select * from dataset_permissions where id='{dataset_id}';
select * from external_knowledge_bindings where id='{dataset_id}';
select * from external_knowledge_apis where id=(select external_knowledge_api_id from external_knowledge_bindings where dataset_id='{dataset_id}');
select * from dataset_collection_bindings where id=(select collection_binding_id from datasets where id='{dataset_id}');
-- 文档
select * from documents where dataset_id='{dataset_id}';
select * from dataset_process_rules where dataset_id='{dataset_id}';
-- 文件路径带租户信息
select * from upload_files where id::text=(select data_source_info::json->>'upload_file_id' from documents where dataset_id='{dataset_id}');
-- 文档分段
select * from document_segments where dataset_id='{dataset_id}';
select * from embeddings where hash in (select index_node_hash from document_segments where dataset_id='{dataset_id}');
select * from dataset_keyword_tables where dataset_id='{dataset_id}';
select * from child_chunks where dataset_id='{dataset_id}';
-- select * from dataset_auto_disable_logs where dataset_id='{dataset_id}';
-- select * from dataset_queries where dataset_id='{dataset_id}';
-- select * form dataset_retriever_resources where dataset_id='{dataset_id}';
-- select * from dataset_metadatas where dataset_id='{dataset_id}';
-- select * form dataset_metadata_bindings where dataset_id='{dataset_id}';
'''
print(source_data_sql)
导入后根据目标库中租户、嵌入模型等更新数据
# 目标数据库租户
# select tenant_id, created_by, embedding_model_provider, embedding_model from datasets;
target_tenant_id = 'xxxxxx'
# 目标数据库创建人
target_created_by = 'xxxxxx'
# 目标数据库嵌入模型
target_embedding_model_provider = 'xxxxxx'
target_embedding_model_name = 'xxxxxx'
target_update_sql = f'''
update datasets set tenant_id='{target_tenant_id}', created_by='{target_created_by}', embedding_model='{target_embedding_model_name}', embedding_model_provider='{target_embedding_model_provider}' where id='{dataset_id}';
update dataset_permissions set tenant_id='{target_tenant_id}' where id='{dataset_id}';
update external_knowledge_bindings set tenant_id='{target_tenant_id}', created_by='{target_created_by}' where id='{dataset_id}';
update external_knowledge_apis set tenant_id='{target_tenant_id}', created_by='{target_created_by}', updated_by='{target_created_by}' where id=(select external_knowledge_api_id from external_knowledge_bindings where dataset_id='{dataset_id}');
update dataset_collection_bindings set model_name='{target_embedding_model_name}', provider_name='{target_embedding_model_provider}' where id=(select collection_binding_id from datasets where id='{dataset_id}');
update documents set tenant_id='{target_tenant_id}', created_by='{target_created_by}' where dataset_id='{dataset_id}';
update dataset_process_rules set created_by='{target_created_by}' where dataset_id='{dataset_id}';
update upload_files set tenant_id='{target_tenant_id}', created_by='{target_created_by}', key=REPLACE(key, '{source_tenant_id}', '{target_tenant_id}') where id::text=(select data_source_info::json->>'upload_file_id' from documents where dataset_id='{dataset_id}');
update document_segments set tenant_id='{target_tenant_id}', created_by='{target_created_by}' where dataset_id='{dataset_id}';
update embeddings set model_name='{target_embedding_model_name}', provider_name='{target_embedding_model_provider}' where hash in (select index_node_hash from document_segments where dataset_id='{dataset_id}');
update child_chunks set tenant_id='{target_tenant_id}', created_by='{target_created_by}' where dataset_id='{dataset_id}';
-- update dataset_auto_disable_logs set tenant_id='{target_tenant_id}' where dataset_id='{dataset_id}';
-- update dataset_queries set created_by='{target_created_by}' where dataset_id='{dataset_id}';
-- update dataset_retriever_resources set created_by='{target_created_by}' where dataset_id='{dataset_id}';
-- update dataset_metadatas set tenant_id='{target_tenant_id}', created_by='{target_created_by}' where dataset_id='{dataset_id}';
-- update dataset_metadata_bindings set tenant_id='{target_tenant_id}', created_by='{target_created_by}' where dataset_id='{dataset_id}';
'''
print(target_update_sql)
文档迁移
将上传到知识库中的源文件,从源环境的文件系统迁移至目标环境的文件系统。源文件和目标文件路径可从下面 SQL 中获得。
源文件也可通过 Dify 知识库接口获取:
curl --request GET \
--url http://host:port/v1/datasets/{dataset_id}/documents/{document_id}/upload-file \
--header 'authorization: Bearer {dataset-api-key}'
file_sql = f'''
-- 分别在源环境和目标环境库中执行,获得源文件路径和目标文件路径
select '/app/api/storage/' || key from upload_files where id::text=(select data_source_info::json->>'upload_file_id' from documents where dataset_id='{dataset_id}');
'''
print(file_sql)
更新向量库
因 Dify 可使用不同类型的向量库,且向量库迁移方式不同,可在完成数据迁移后,在 Dify 知识库界面中,将新迁移的知识库中文档进行禁用后再启用操作,使 Dify 自动完成向量库的同步更新(分段和嵌入向量均存储在数据库中)。等待所有文档及分段的状态恢复可用后,可通过召回测试验证迁移效果。
AI大模型从0到精通全套学习大礼包
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
只要你是真心想学AI大模型,我这份资料就可以无偿共享给你学习。大模型行业确实也需要更多的有志之士加入进来,我也真心希望帮助大家学好这门技术,如果日后有什么学习上的问题,欢迎找我交流,有技术上面的问题,我是很愿意去帮助大家的!
如果你也想通过学大模型技术去帮助就业和转行,可以扫描下方链接👇👇
大模型重磅福利:入门进阶全套104G学习资源包免费分享!
01.从入门到精通的全套视频教程
包含提示词工程、RAG、Agent等技术点
02.AI大模型学习路线图(还有视频解说)
全过程AI大模型学习路线
03.学习电子书籍和技术文档
市面上的大模型书籍确实太多了,这些是我精选出来的
04.大模型面试题目详解
05.这些资料真的有用吗?
这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。
所有的视频由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势,构建起"前沿课程+智能实训+精准就业"的高效培养体系。
课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!
应届毕业生:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能 突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
更多推荐
所有评论(0)