LlamaFS是一个自组织文件管理器。它可以基于文件内容和修改时间等属性自动重命名和组织您的文件。它能让你不把时间花在对文件的复制、粘贴、重命名、拷贝、排序等简单操作上。有幸在Github上看到LlamaFS这个repo,感慨万千。

技术简介

LlamaFS以批处理模式和监视模式两种模式运行。在批处理模式下,您可以向LlamaFS发送目录,它将返回建议的文件结构并组织您的文件。在监视模式下,LlamaFS启动一个监视目录的守护进程。它拦截所有文件系统操作,使用您最近的修改记录来重命名文件。

从源码上看,LlamaFS像一个Agent,通过prompt使LLM输出指定格式的json,再根据LLM生成的json进行文件处理操作。给的prompt像这样:

You will be provided with list of source files and a summary of their contents. For each file, propose a new path and filename, using a directory structure that optimally organizes the files using known conventions and best practices.

If the file is already named well or matches a known convention, set the destination path to the same as the source path.

Your response must be a JSON object with the following schema:
```json
{
"files": [
{
"src_path": "original file path",
"dst_path": "new file path under proposed directory structure with proposed file name"
}
]
}

比如移动文件的功能,是这样实现的,下面函数的request参数就是模型返回的json:

@app.post("/commit")
async def commit(request: CommitRequest):
src = os.path.join(request.base_path, request.src_path)
dst = os.path.join(request.base_path, request.dst_path) if not os.path.exists(src):
raise HTTPException(
status_code=400, detail="Source path does not exist in filesystem"
) # Ensure the destination directory exists
dst_directory = os.path.dirname(dst)
os.makedirs(dst_directory, exist_ok=True) try:
# If src is a file and dst is a directory, move the file into dst with the original filename.
if os.path.isfile(src) and os.path.isdir(dst):
shutil.move(src, os.path.join(dst, os.path.basename(src)))
else:
shutil.move(src, dst)
except Exception as e:
raise HTTPException(
status_code=500,
detail=f"An error occurred while moving the resource: {e}"
) return {"message": "Commit successful"}

感觉LlamaFS像一个“中间件”,只负责发HTTP Request给LLM server获取Respose并采取对应的行动。

展望

未来的文件管理

LlamaFS现在看起来只是个基于LLM的大号桌面助手或者文件夹助手,但是它后面关于操作系统文件管理逻辑的更迭是巨大的。它提供了一种全新的用户体验:如果你有对文件操作的需求,那么可以告诉AI,让它理解你的指令并帮你完成这些繁琐的文件和文件夹的新建、删除、修改、查找操作,尽管它现在的宣传“让LLM帮你完成计算机科学里最困难的事——命名”有玩梗的意味。因为,作为普通操作系统用户,我们根本就没有必要关心这份文件的文件名和存储的具体位置是什么,我们只关心文件里面是什么东西、有什么用,我们只要求在我们需要的时候能把它翻出来。借助LLM,我们能够更加方便地对文件和目录进行增删改查

未来的操作系统会在现有的API(lscdtouch)等命令上添加一层由大模型包装的高阶API。如果你需要查找某个文件,你只需要向大模型描述你的文件就行。这个描述可以是“昨天关机前关闭的那份文档”,也可以是文件内容的一部分,让LLM通过向量数据库等技术帮你查找文件。

下一代操作系统的文件管理,理念会像当年胎死腹中的WinFS的理念一样,目录结构不再重要,能让用户找到自己保存的文件就行。文件名、目录等概念完全多余,而这会推动新的数据标准建立、新的结构化的底层数据存储范式形成。这些改动对于增加、删除、修改的方式变化不会很明显,但是对于文件查找来说,变化可就太大了。

基于大模型的操作系统

最后再提一嘴AI系统。虽然我不是很清除现在某些厂商吹捧的AI系统到底是什么样子的,但是如果只是像Windows那样加个copilot,我觉得远远不够。我觉得未来的操作系统会有一个模型提供底层智能支持,在这个模型上面,有各种各样的操作系统相关的agent。LlamaFS可以看作一个文件管理的agent,然后还有负责进程调度、内存管理等的agent,这些agent通过prompt等方式使LLM做出合适的应答,而LLM又可以收集到整个设备的信息做出更符合当前情况的回答。这些agent提供一套更符合常人直觉的高层API给用户使用,又向下通过Python间接调用了操作系统的cp mv等指令。这才是基于大模型的操作系统。

LlamaFS自组织文件管理器的更多相关文章

  1. 【原】iOS学习之文件管理器(NSFileManager)和文件对接器(NSFileHandle)

    1.文件管理器(NSFileManager) 1> 主要作用及功能方法 主要作用:此类主要是对文件进行的操作(创建/删除/改名等)以及文件信息的获取. 功能方法: 2> 创建文件夹 创建所 ...

  2. atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php

    atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 .打开浏览服务器文件夹java .net php 1. 环境:::项目java web,需要打开浏览服 ...

  3. Web 在线文件管理器学习笔记与总结(19)上传文件

    dir.func.php 中添加方法: /* 上传文件 */ function uploadFile($fileInfo,$path,$allowExt = array('jpg','jpeg','p ...

  4. Web 在线文件管理器学习笔记与总结(17)复制文件 (18)剪切文件

    (17)复制文件 ① 复制文件通过copy($src,$dst) 来实现 ② 检测目标目录是否存在,如果存在则继续检测目标目录中是否存在同名文件,如果不存在则复制成功 file.func.php 中添 ...

  5. Web 在线文件管理器学习笔记与总结(15)剪切文件夹 (16)删除文件夹

    (15)剪切文件夹 ① 通过rename($oldname,$newname) 函数实现剪切文件夹的操作 ② 需要检测目标文件夹是否存在,如果存在还要检测目标目录中是否存在同名文件夹,如果不存在则剪切 ...

  6. Web 在线文件管理器学习笔记与总结(13)重命名文件夹(14)复制文件夹

    (13)重命名文件夹 ① 重命名文件夹通过 rename($oldname,$newname) 实现 ② 检测文件夹名是否符合规范 ③ 检测当前目录中是否存在同名文件夹名称,如果不存在则重命名成功 i ...

  7. Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作

    (11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require ...

  8. Web 在线文件管理器学习笔记与总结(10)查看文件夹中的内容

    ① 读取文件夹大小 a. 封装计算文件夹大小的函数 b.  打开文件夹 c. 循环判断文件夹下的内容是文件还是文件夹,如果是文件,则累积相加文件的大小:如果是文件夹,则递归调用该函数 注意两个问题: ...

  9. Web 在线文件管理器学习笔记与总结(9)下载文件

    ① 普通形式的文件可以使用超链接形式下载 <a href = '下载文件名'>点击下载</a> ② 如果下载图片.html 等类型的文件,使用header() 函数发送网页头信 ...

  10. Web 在线文件管理器学习笔记与总结(8)删除文件

    unlink($filename) 删除文件 index.php: <?php require 'dir.func.php'; require 'file.func.php'; require ...

随机推荐

  1. 重新点亮shell————sed的替换[十]

    前言 简单介绍一下sed 和 awk. 正文 这两个和vim的区别: vim 是交互式和 他们是非交互式 vim是文件操作模式与他们是行交互模式 sed sed 的 模式空间. sed的基本工作方式是 ...

  2. CentOS 7.9编译安装Python-3.10.13

    目录 查看CentOS版本.系统默认gcc版本.Python版本和pip版本 部署Python-3.10.13 测试 将yum中的Python版本修改为系统原来的2.7.5版本 查看CentOS版本. ...

  3. etcd 集群安装

    1.环境准备 下载安装包:https://github.com/etcd-io/etcd/releases/ 这里下载的安装包为:etcd-v3.5.9-linux-amd64.tar.gz,即我们当 ...

  4. Crazy Excel:Excel中的泥石流

    Crazy Excel又名:疯狂Excel.是一款PC端的Excel软件工具,该软件支持windows, mac os等主流操作系统. 正如其名,作者在设计之初就加入了一些疯狂的设计,目的是创作出更加 ...

  5. 剑指offer51(Java)-数组中的逆序对(困难)

    题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例1: 输入: [7,5,6,4] 输出: 5 限制: 0 &l ...

  6. Serverless 时代下微服务应用全托管解决方案

    简介: 本文介绍了 Serverless 时代下微服务的发展以及过程中遇到的相对较复杂的需求,面对这些,阿里云 Serverless 应用引擎 SAE 将"Serverless"的 ...

  7. 走进RDS|说说关系型数据库与Serverless

    ​简介:看到如今Serverless在云计算行业喷薄欲出的态势,像极了<星星之火,可以燎原>中的描述:虽然不能预测未来的发展和变化,但对于云计算来说这是个相对确定的方向.本文将和大家说说关 ...

  8. 阿里的 RocketMQ 如何让双十一峰值之下 0 故障?

    简介: 2020 年双十一交易峰值达到 58.3 W 笔/秒,消息中间件 RocketMQ 继续数年 0 故障丝般顺滑地完美支持了整个集团大促的各类业务平稳. 作者 | 愈安来源 | 阿里巴巴云原生公 ...

  9. Fiddler 将插件放在独立子文件夹

    我的 Fiddler 安装了许多插件,有一些插件存在 DLL 名冲突问题,比如多个不同的插件都存在名为 PluginCore.dll 但实际实现逻辑完全不相同的程序集.这就导致了多个插件的安装之间,如 ...

  10. dotnet core 和 .NET 5 不支持 Prefer32Bit 首选 32 位的功能

    我尝试在 dotnet core 和 dotnet 5 的应用上,右击项目属性,在生成界面勾选首选 32 位的功能,然而在 x64 下没有生成 PE32+ 的应用 这是 .NET Core 以及以上版 ...