askRAG 把文档问答、任务记忆和可选联网放在同一条对话里,回答先依赖本地证据,再按需补充外部信息。
演示素材来自本地真实运行快照。
| 首页 | 知识库 | 记忆页 |
|---|---|---|
![]() |
![]() |
![]() |
三个页面都来自本地真实运行快照。
flowchart TB
U[用户输入] --> G[路由判断]
G -->|文档总结 / 文档问答| D[本地文档检索]
G -->|明确联网 / 强制联网| W[直接联网搜索]
G -->|任务 / 事实 / 偏好| M[记忆召回]
D -->|证据足够| A[答案生成]
D -->|证据不足| W
M --> A
W --> A
A --> S[流式输出]
A --> R[记忆写回]
R --> M
文档回答看文件本身,记忆回答看用户的稳定状态。分开之后,系统才能判断一个问题是在查资料,还是在接着上次的任务继续聊。两者混在一起,最后只会让答案又慢又飘。
最常见、最明确的情况先分流,不让每个问题都压到完整检索和模型决策上。这样做不是为了“更聪明”,而是为了让对话更快、更稳。
判断标准不是“说过没有”,而是“下一轮还用不用得上”。任务、事实、偏好优先保留;重复内容、噪音、临时信息不进长期层。记忆不筛选,只会越积越乱。
用户说“记住……”是明确写入;对话结束后的自动抽取更保守,也更容易回滚。两条路分开,系统才不会把“顺手整理”和“用户主动确认”混成一件事。
会话删掉后,相关的会话记忆应该一起清;但长期事实和偏好不能因为一条会话被误删。这个边界不说清楚,记忆越用越不可信。
volcengine/OpenViking#1190 一个最小集成示例方案:Chroma 负责静态检索,OpenViking 负责 session context 和 archive memory
无需部署,直接体验预制对话展示:
GitHub Pages: https://zoean-z.github.io/askRAG/
本地 Demo: http://127.0.0.1:8001/demo
GitHub Pages 版本使用和真实前端完全一致的界面结构,包含三段预制对话(文档问答、记忆系统、联网搜索),零 token 消耗。
# 1. 准备环境变量
cp .env.example .env
# 编辑 .env,填入你的 API Key
# 2. 启动(首次会自动构建索引)
docker-compose up --build
# 3. 打开
# 应用: http://localhost:8001
# Demo: http://localhost:8001/demo容器启动时会自动检测 data/chroma 目录,如果为空则执行索引构建。
关于记忆功能:Docker 镜像不包含 OpenViking。文档问答和联网搜索可以正常运行;记忆功能会降级为本地 JSON 存储 — 用户主动说"记住 xxx"仍然有效,但缺少 OpenViking 的向量语义搜索,模糊回忆能力较弱。如果需要完整记忆体验,请参考下方本地开发启动中的 OpenViking 安装步骤。
当前文档的命令示例以 Windows PowerShell 为例。如果你在 macOS 或 Linux 上运行,需要把
.\.venv\Scripts\...替换成对应环境下的虚拟环境可执行路径。
.\.venv\Scripts\python.exe -m pip install -r requirements.txt.\.venv\Scripts\python.exe -m app.rag index.\.venv\Scripts\python.exe app\main.pyChat: http://127.0.0.1:8001/
Demo: http://127.0.0.1:8001/demo
Library: http://127.0.0.1:8001/library
展开查看 OpenViking 的完整安装与启动步骤
当前仓库里的文档问答可以单独跑;只有想体验长期记忆、任务状态回忆和 OpenViking-backed memory search 时,才需要把 OpenViking 一起装起来。
OpenViking 不在 requirements.txt 里,需要单独安装。最直接的做法是在当前虚拟环境里安装:
.\.venv\Scripts\python.exe -m pip install -U openviking安装完成后,下面两个命令应该能找到:
.\.venv\Scripts\openviking-server.exe --help
.\.venv\Scripts\ov.exe --help如果你的环境里生成的是无扩展名命令,也可以改用:
openviking-server --help
ov --help先创建 OpenViking 的默认配置目录:
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.openviking" | Out-Null
New-Item -ItemType Directory -Force -Path ".\data\openviking_workspace" | Out-Null推荐先尝试官方初始化向导:
.\.venv\Scripts\openviking-server.exe init这个命令会交互式生成 ov.conf。如果你的版本没有 init,就手动创建下面两个文件。
ov.conf 至少要告诉 OpenViking 工作目录放在哪里。最小示例可以是:
{
"storage": {
"workspace": "D:/path/to/askRAG/data/openviking_workspace"
}
}把它保存到:
$env:USERPROFILE\.openviking\ov.conf
然后创建 CLI 连接配置 $env:USERPROFILE\.openviking\ovcli.conf:
{
"url": "http://127.0.0.1:1933",
"timeout": 60.0,
"output": "table"
}如果你已经用 openviking-server init 生成过 ov.conf,这里只需要确认里面的 storage.workspace 指向你当前仓库下的 data/openviking_workspace。
$env:OPENVIKING_CONFIG_FILE = "$env:USERPROFILE\.openviking\ov.conf"
$env:OPENVIKING_CLI_CONFIG_FILE = "$env:USERPROFILE\.openviking\ovcli.conf"
.\.venv\Scripts\openviking-server.exe如果你想显式指定配置文件,也可以这样启动:
.\.venv\Scripts\openviking-server.exe --config $env:OPENVIKING_CONFIG_FILE另开一个终端,执行:
$env:OPENVIKING_CLI_CONFIG_FILE = "$env:USERPROFILE\.openviking\ovcli.conf"
.\.venv\Scripts\ov.exe health看到类似下面的结果,说明 OpenViking 已经可用:
status: okhealthy: true
然后再启动 askRAG 主服务:
.\.venv\Scripts\python.exe app\main.py如果只想先验证本地文档问答,也可以先不启 OpenViking;/library 和聊天页本身仍然可以跑。
- 文档证据和记忆上下文是分开的。
- 记忆写回是可控的,不是把每轮对话都当成长期事实。
- 联网是补充,不是默认主路由。
- 如果你只需要先验证本地文档问答,不必先把所有记忆相关服务都准备好。



