跳转至

对话历史导入 (RiverHistory)

RiverHistory 是河流算法的特别版,专注于从你的 ChatGPT、Claude 和 Gemini 对话历史中批量提取个人画像。它不需要实时对话,而是回溯分析你过去的 AI 聊天记录,构建出同样丰富的画像 — 性格特征、人生时间线、人际关系、职业变迁等。

RiverHistory 与 JKRiver 主项目共享同一个 PostgreSQL 数据库(Riverse)。从历史记录中提取的画像和通过实时对话构建的画像存储在一起,提供统一的视图。

源代码: https://github.com/wangjiake/RiverHistory

演示数据集

内置三个演示角色,无需导入自己的数据即可测试系统:

参数 角色 语言 会话数 说明
--demo 林雨桐 中文 50 一位经历职业变迁、感情纠葛和城市生活的年轻女性 — 测试算法处理矛盾和态度演变的能力
--demo2 沈一帆 中文 15 一位有艺术追求的建筑师 — 较短的数据集,适合快速测试
--demo3 Jake Morrison 英文 20 旧金山的软件工程师 — 英文演示

Note

--demo2--demo3 导入前会清空 demo 表。这意味着它们会替换之前加载的演示数据。--demo 则是追加导入,不会清空。

前置要求

依赖 说明
Python 3.11+ 运行环境
PostgreSQL 16+ 数据存储(与 JKRiver 共享)
LLM API 密钥 Ollama 用于画像提取的 AI 模型

快速开始(从源码)

# 1. 克隆仓库
git clone https://github.com/wangjiake/RiverHistory.git
cd RiverHistory

# 2. 创建虚拟环境
python3 -m venv .venv
source .venv/bin/activate        # macOS / Linux
# .venv\Scripts\activate         # Windows

# 3. 安装依赖
pip install -r requirements.txt

# 4. 配置设置
cp settings.yaml settings.yaml   # 编辑此文件 — 设置数据库凭据和 LLM 配置
#    database.user: 你的 PostgreSQL 用户名(macOS/Linux 终端运行 whoami 查看)
#    llm_provider: "openai" 使用远端 API,"local" 使用 Ollama
#    openai.api_key: 你的 API 密钥(使用远端 API 时需要)
#    language: "zh" / "en" / "ja"

# 5. 初始化数据库(创建 Riverse 数据库和所有表)
python setup_db.py

# 6. 导入演示数据
python import_data.py --demo

# 7. 用河流算法处理
python run.py demo max

# 8. 查看提取的画像
python web.py

打开 http://localhost:2345 查看网页画像查看器。

导出你的对话数据

导入之前,需要先从各平台导出数据:

平台 导出方式
ChatGPT Settings → Data controls → Export data → 等邮件 → 下载解压 → 得到 conversations.json
Claude Settings → Account → Export Data → 等邮件 → 下载解压 → 得到 conversations.json
Gemini Google Takeout → 只选择 "Gemini Apps" → 下载解压

将导出的文件放入 data/ 目录:

RiverHistory/
├── settings.yaml
├── run.py
└── data/
    ├── ChatGPT/               ← 把 conversations.json 放这里
    ├── Claude/                ← 把 conversations.json 放这里
    └── Gemini/                ← 把 Takeout 文件放这里

导入命令

# 从各平台导入(选一个或多个)
python import_data.py --chatgpt data/ChatGPT/conversations.json
python import_data.py --claude data/Claude/conversations.json
python import_data.py --gemini "data/Gemini/我的活动记录.html"

# 导入演示数据集
python import_data.py --demo       # 林雨桐(50 段会话,中文)
python import_data.py --demo2      # 沈一帆(15 段会话,中文 — 导入前清空 demo 表)
python import_data.py --demo3      # Jake Morrison(20 段会话,英文 — 导入前清空 demo 表)

# 可以在一条命令中组合多个来源
python import_data.py --chatgpt data/ChatGPT/conversations.json --claude data/Claude/conversations.json

导入是幂等的 — 重复的对话会根据校验和自动跳过。

处理命令

导入完成后,运行河流算法提取画像:

python run.py <来源> <数量>
参数 可选值 说明
来源 chatgptclaudegeminidemoall 处理哪个数据源。all 合并处理 chatgpt + claude + gemini(不含 demo)。
数量 数字或 max 处理多少条对话。按时间顺序(最早优先)。max 处理所有待处理的。

示例:

python run.py demo max          # 处理所有演示对话
python run.py chatgpt 50        # 处理最早的 50 条 ChatGPT 对话
python run.py claude max        # 处理所有 Claude 对话
python run.py gemini 100        # 处理最早的 100 条 Gemini 对话
python run.py all max           # 处理全部(chatgpt + claude + gemini,按时间混合排序)
python run.py all 200           # 所有来源混合,处理最早的 200 条

处理过程可以随时中断 — 下次运行会自动跳过已处理的对话。

重置

清空所有提取的画像和记忆,但保留原始导入的对话数据:

python reset_db.py

这会重置画像相关表(user_profileobservationshypothesestrajectory_summaryrelationships 等),但不会动来源数据表(chatgptclaudegeminidemo)。你可以重新运行 run.py 从头处理。

网页查看器

python web.py

http://localhost:2345 打开网页仪表盘,浏览提取的画像 — 性格维度、人生时间线、人际关系、职业经历等。

Docker 方式

如果不想手动安装 Python 和 PostgreSQL,可以通过 Docker 运行 RiverHistory。参见 Docker 指南,一条 docker compose up 命令即可同时启动 RiverHistory 和 JKRiver。

费用提醒

Token 费用(远端 LLM API)

每条对话在处理时都会消耗 token。包含大量代码或超长消息的对话会消耗更多。

  • 更智能的模型(如 GPT-4o)画像质量更好,但费用更高。
  • 便宜的模型(如 GPT-4o-mini、DeepSeek)更快更省,但可能遗漏细节。
  • 本地 Ollama 模型 完全免费,只是速度较慢。

处理前建议检查导出数据,删除不需要的对话(如纯编程会话)。请关注你的 API 账单。

先用少量数据试试(如 python run.py chatgpt 10),估算费用后再处理全部。

准确性说明

LLM 的局限性

画像提取依赖 LLM 对对话的理解。结果可能存在不准确之处:

  • LLM 可能将讽刺、玩笑或假设性陈述误解为事实。
  • 模糊或矛盾的表述可能被错误解读。
  • 不同模型产生不同质量的结果 — 可以尝试找到最适合你数据的模型。
  • 河流算法专门设计来处理矛盾和演变中的信息,但没有系统是完美的。

请务必检查提取的画像是否准确。如有需要,可以重置后换一个模型重新处理。