LLM
如何更新 Ollama 呢?
How can I specify the context window size?
其中的“上下文窗口”是什么概念?上下文是什么概念?
prompt 提示词又会带来什么?
Ollama 会动态地加载(或卸载)其中的大语言模型,DeepSeek 等大模型并非一直在运行的。
AnythingLLM
参考其 github 的 README 文件
这个单库由三个主要部分组成:frontend / server / collector
通过 yarn 分别启动三个服务时,端口占用 3000 / 3001 / 8888 ,可以通过 nmap 扫描到这三个端口。
直接启动 Desktop 桌面软件时,只监听了 localhost (无法通过局域网地址访问),telnet 3001 / 8888 能够访问,telnet 3000 失败。
- Desktop 桌面软件如何打包这三个服务的?
- 针对 fronted ,和其他两个服务有什么区别?
使用 Desktop 版本提供 AnythingLLM 服务:设置-管理员-系统-Enable network discovery ,局域网内能够访问 3001 端口。
方案:只定制前端项目,保留最小的功能集合。后端服务由 Desktop 桌面软件提供,同时也用于配置 LLM 等管理功能。
——前端项目配置文件 .env
修改变量 VITE_API_BASE='http://${desktop}:3001/api'
Docker vs Desktop
如果你不需要多用户支持,你可以安装桌面版本。Docker 版本,是通过浏览器以网页形式访问。
系统设置上,容器版本比桌面版本多出以下选项:
- 用户与安全:启用多用户模式、密码保护等(在启用多用户模式后,此入口消失。即,无法关闭多用户模式)
- 外观:自定义图标、自定义页脚图标、站点名称、站点图标等
- 管理员:在启用多用户模式之后,会增加用户、邀请两个入口,用于用户管理等
通过网页“设置-用户与安全-启用多用户模式”:
- 访问桌面版软件的 3001 服务,启用多用户模式失败!报错 “ Internal Server Error”
- 访问 Docker 或
npm run dev:server
服务,启用多用户模式成功。
Desktop 只是单用户版本;Docker 版本才支持多用户(独立部署也可以,但官方不推荐也不维护)。
在 Arm + Linux 上没有 Desktop 版本;只能通过浏览器 http://x.x.x:3000
访问独立部署的服务。
Desktop 版本是如何将网页(严格来说是三个服务)打包成独立软件,我并不清楚。
三级用户
官方手册 Security and Access
Once in multi-user mode, you cannot revert back to single-user mode.
用户有三类:Default / Manager / Admin
- 普通用户:只能发送聊天,不能上传文件。
- 管理账户:管理所有工作区,但不能设置 LLM 以及有关的向量数据库等。
问题
新建对话时,设置的 name
属性不生效!
新增的对话的名称总是 “Thread” ,虽然请求 /api/workspace/test1/thread/new
接口时指定了 {"name":"未命名"}
数据库 sqlite
了解 prisma 和 ORM 工具的概念。
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
ORM框架是连接数据库的桥梁,只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。
以下命令会在 server\storage\
创建 anythingllm.db 数据库文件(sqlite),并完成数据表的创建。
cd server && npx prisma migrate deploy --schema=./prisma/schema.prisma
删掉此 .db
文件并重建,即可关闭多用户模式(系统的配置和用户等信息也会丢失)。
Run AnythingLLM in production without Docker
AnythingLLM 核心团队不支持这种部署方式,仅仅作为参考。
Run AnythingLLM in production without Docker
以下目录需要指向 ./anything-llm/server/storage
的绝对路径,不能随意指定:
1 | STORAGE_DIR="/your/absolute/path/to/server/storage" |
因为 server 项目将上传的文件放到了 ${STORAGE_DIR}/../../collector/hotdir
,而 collector 项目监视 ./anything-llm/collector/hotdir
。
如果随意配置 STORAGE_DIR
变量,在上传文件时就会报错。
开发语言
我熟悉 http api 调用。使用 Qt 开发的话还要面对 Markdown 渲染:
Markdown Editor demonstrates how to use
QWebChannel
and JavaScript libraries to provide a rich text preview tool for a custom markup language.
试验在 Qt 5.14 引入的 QTextEdit::setMarkdown()
接口 能否满足目前的渲染需求。
具体过程
- 部署 LLM、Ollama 、向量数据库等服务,主要由同事完成 @lix
- 定制 AnythingLLM 前端页面 @niel
- 了解、学习 AnythingLLM 使用流程和相关概念
- 学习、试验 AnythingLLM api ,开发 Qt 桌面软件 @sunlb
前端开发环境
JavaScript 框架和库,提供了结构化的方式来组织代码,提高了开发效率和代码可维护性。
推荐 React
构建工具,现代前端项目通常需要经过构建工具的处理,才能在浏览器中高效运行。
推荐 Vite
包管理器,前端项目会依赖各种第三方库和工具(例如 React 本身,以及各种 UI 组件库、工具库等)
推荐 npm 或 yarn
React 文档?
1 | npm install -g create-react-app |
离线环境
1 | npm install -g yarn |
离线镜像的目录是相对路径:
./npm-packages-offline-cache
is an example location relative to home folder where all the source.tar.gz
files will be downloaded to from the registry.