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. SEO — 搜索引擎优化

    一.多词排名标题设置 SEO(Search Engine Optimization)是指搜索引擎优化,即利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名 优化目的是:让网站在搜索引擎上的曝光率达到 ...

  2. Pytorch-tensor维度的扩展,挤压,扩张

    数据本身不发生改变,数据的访问方式发生了改变 1.维度的扩展 函数:unsqueeze() # a是一个4维的 a = torch.randn(4, 3, 28, 28) print('a.shape ...

  3. .Net core 3.0 SignalR+Vue 实现简单的IM(无jq依赖)

    .Net core 中的SignalR JavaScript客户端已经不需要依赖Jquery了 一.服务端 1.nuget安装 Microsoft.AspNetCore.SignalR2.在start ...

  4. 6980. 【2021.02.03冬令营模拟】你的世界(world) Another Solution

    Problem Description Input 从文件 world.in 中读入数据. Output 输出到文件 world.out 中. 输出共 T 行,第 i 行表示第 i 组测试数据的答案, ...

  5. 谢老师2024春 - Day2:期望DP

    Day2:期望DP​​ A - CF148D Bag of mice 设 \(dp_{i,j}\) 表示还剩下 \(i\) 只白鼠,\(j\) 只黑鼠 A 的胜率. 大家都没有拿到白鼠,那么 B 赢, ...

  6. 【ASPLOS 2022】机器学习访存密集计算编译优化框架AStitch,大幅提升任务执行效率

    简介: 近日,关于机器学习访存密集计算编译优化框架的论文<AStitch: Enabling A New Multi-Dimensional Optimization Space for Mem ...

  7. 快手基于RocketMQ的在线消息系统建设实践

    简介: 快手需要建设一个主要面向在线业务的消息系统作为 Kafka 的补充,低延迟.高并发.高可用.高可靠的分布式消息中间件 RocketMQ 正是我们所需的. 作者:黄理 黄理,10多年软件开发和架 ...

  8. 殷浩详解DDD:领域层设计规范

    简介: 在一个DDD架构设计中,领域层的设计合理性会直接影响整个架构的代码结构以及应用层.基础设施层的设计.但是领域层设计又是有挑战的任务,特别是在一个业务逻辑相对复杂应用中,每一个业务规则是应该放在 ...

  9. 使用MaxCompute LOAD命令批量导入OSS数据最佳实践—STS方式LOAD开启KMS加密OSS数据

    简介: MaxCompute使用load overwrite或load into命令将外部存储的数据(如:oss)导入到MaxCompute前的授权操作. MaxCompute使用load overw ...

  10. 凭证管理揭秘:Cookie-Session 与 JWT 方案的对决

    概述 在上一篇文章我们聊完了授权的过程,在服务器对客户端完成授权之后,服务器会给客户端颁发对应的凭证,客户端持有该凭证访问服务端,服务器便能知道你是谁,你有什么权限等信息.这一章我们具体聊聊常见的凭证 ...