AnythingLLM 私有知识库¶
为什么要学 AnythingLLM¶
AnythingLLM 是一个全栈的私有 AI 知识库解决方案,让你能够将文档(PDF、Word、网页、代码等)转化为可对话的知识库。与单纯的 RAG 框架不同,AnythingLLM 提供了完整的桌面/Web 应用界面、内置向量数据库、多用户管理和 Agent 功能,真正做到开箱即用。对于需要在企业内部搭建知识问答系统而不想写代码的团队来说,这是最低门槛的选择。
核心概念¶
| 概念 | 白话解释 | 用途 |
|---|---|---|
| Workspace | 工作空间 | 隔离的知识库单元,可独立配置模型和文档 |
| Document | 文档 | 上传的各类文件,被切片后存入向量库 |
| Embedding | 向量嵌入 | 将文本转为数字向量便于语义搜索 |
| Vector DB | 向量数据库 | 存储和检索文档的语义向量 |
| Agent | 智能体 | 可调用工具(搜索、计算等)的 AI |
| Thread | 对话线程 | 单个对话的上下文历史 |
| Workspace Settings | 工作空间设置 | 每个空间独立的模型、温度、提示词配置 |
安装配置¶
桌面版安装¶
从 GitHub Releases 下载对应系统的安装包: - Windows: .exe 安装器 - macOS: .dmg - Linux: .AppImage
Docker 部署(生产推荐)¶
docker pull mintplexlabs/anythingllm
docker run -d \
--name anythingllm \
-p 3001:3001 \
-v $PWD/anythingllm-storage:/app/server/storage \
-v $PWD/anythingllm-env:/app/server/.env \
--env-file .env \
mintplexlabs/anythingllm
环境变量配置¶
# .env 文件
# LLM 提供者配置
LLM_PROVIDER=ollama
OLLAMA_BASE_PATH=http://host.docker.internal:11434
OLLAMA_MODEL_PREF=llama3
# 向量数据库
VECTOR_DB=lancedb # 内置,无需额外部署
# 或使用外部向量库
# VECTOR_DB=chroma
# CHROMA_ENDPOINT=http://localhost:8000
# Embedding 模型
EMBEDDING_ENGINE=ollama
EMBEDDING_MODEL_PREF=nomic-embed-text
# 认证
AUTH_TOKEN=your-secret-token
JWT_SECRET=your-jwt-secret
对接 LLM 后端¶
支持的 LLM 提供者: - Ollama(本地推荐) - OpenAI / Azure OpenAI - Anthropic - LocalAI - LM Studio - text-generation-webui - Mistral API
快速上手¶
初始设置流程¶
- 启动后访问
http://localhost:3001 - 创建管理员账户
- 选择 LLM 提供者(如 Ollama)
- 选择 Embedding 模型
- 选择向量数据库(默认 LanceDB 无需配置)
- 创建第一个 Workspace
上传文档¶
支持的格式: - PDF、DOCX、TXT、CSV - 网页 URL(自动抓取) - YouTube 链接(提取字幕) - GitHub 仓库 - Confluence 页面
# 也可通过 API 上传
curl -X POST http://localhost:3001/api/v1/document/upload \
-H "Authorization: Bearer your-token" \
-F "file=@document.pdf"
开始对话¶
上传文档并嵌入后,在 Workspace 中直接提问: - "这份文档的主要结论是什么?" - "第三章讨论了哪些技术方案?" - "帮我总结所有关于性能优化的建议"
API 使用¶
import requests
BASE_URL = "http://localhost:3001/api/v1"
HEADERS = {"Authorization": "Bearer your-token"}
# 发送消息
response = requests.post(
f"{BASE_URL}/workspace/my-workspace/chat",
headers=HEADERS,
json={
"message": "总结文档的核心观点",
"mode": "chat" # chat 或 query
}
)
print(response.json()["textResponse"])
进阶用法¶
多工作空间策略¶
├── 技术文档空间
│ ├── API 文档
│ ├── 架构设计文档
│ └── 配置: CodeLlama + 低温度
├── 产品知识空间
│ ├── PRD 文档
│ ├── 用户反馈
│ └── 配置: GPT-4 + 中温度
└── HR 政策空间
├── 员工手册
├── 制度文件
└── 配置: 严格提示词 + 高精度
自定义提示词¶
在每个 Workspace 的设置中可以自定义系统提示词:
"你是公司内部技术知识库助手。基于提供的文档内容回答问题。
规则:
1. 只基于文档内容回答,不要编造信息
2. 如果文档中没有相关信息,明确说明
3. 引用时标注文档来源
4. 使用中文回答"
Agent 配置¶
{
"agent": {
"provider": "ollama",
"model": "llama3",
"tools": [
"web-search",
"web-scraper",
"sql-query",
"chart-generation",
"save-to-file"
]
}
}
细粒度权限管理¶
# 创建多级用户
# Admin → 完全控制
# Manager → 管理特定工作空间
# User → 只能在分配的工作空间中对话
# 通过 API 管理用户
curl -X POST http://localhost:3001/api/v1/admin/users/new \
-H "Authorization: Bearer admin-token" \
-d '{
"username": "developer1",
"password": "secure-pass",
"role": "default"
}'
嵌入式集成¶
<!-- 在网页中嵌入聊天窗口 -->
<script
data-embed-id="your-embed-id"
data-base-api-url="http://localhost:3001/api/embed"
src="http://localhost:3001/embed/anythingllm-chat-widget.min.js">
</script>
定时同步文档¶
#!/bin/bash
# sync-docs.sh - 定时同步目录文档到 AnythingLLM
DOCS_DIR="/path/to/docs"
API_URL="http://localhost:3001/api/v1"
TOKEN="your-token"
find "$DOCS_DIR" -name "*.md" -newer /tmp/last-sync | while read file; do
curl -X POST "$API_URL/document/upload" \
-H "Authorization: Bearer $TOKEN" \
-F "file=@$file"
done
touch /tmp/last-sync
# 添加到 crontab
# 0 */6 * * * /path/to/sync-docs.sh
常见问题¶
Q: 文档切片效果不好,回答不准确?¶
- 调整 chunk size(默认 1000 字符,技术文档可改为 1500)
- 调整 chunk overlap(默认 20%,可增加到 30%)
- 对 PDF 进行预处理,去除页眉页脚
Q: 向量搜索返回的结果不相关?¶
- 尝试不同的 Embedding 模型(nomic-embed-text 比较平衡)
- 增加 topK 值获取更多候选结果
- 在 Workspace 中调整相似度阈值
Q: 如何处理中文文档效果不好的问题?¶
- 使用支持中文的 Embedding 模型(如 bge-base-zh-v1.5)
- 确保 LLM 本身支持中文(如 Qwen、ChatGLM)
- 检查文档编码是否为 UTF-8
Q: 能否对接多个 LLM?¶
可以。每个 Workspace 可以独立设置不同的 LLM 提供者和模型,实现: - 编码问题用 CodeLlama - 通用问答用 GPT-4 - 中文场景用 Qwen
参考资源¶
- GitHub:https://github.com/Mintplex-Labs/anything-llm
- 文档:https://docs.anythingllm.com/
- API Reference:https://docs.anythingllm.com/api-reference
- Docker Hub:https://hub.docker.com/r/mintplexlabs/anythingllm
- Discord:https://discord.gg/6UyHPeGZAC