一个功能强大的 Telegram 聊天记录搜索工具,支持向量搜索和语义匹配。基于 OpenAI 的语义向量技术,让你的 Telegram 消息检索更智能、更精准。
- 使用 UserBot 可能存在封号风险,请谨慎使用。
- 由于项目处于快速迭代阶段,可能会出现数据库不兼容的情况,建议定期备份数据。
- 实时监听:通过 watch 命令实时监听指定会话的消息
- 会话同步:使用 sync 命令同步文件夹和会话信息
- 历史导入:支持导入 Telegram 导出的 HTML 格式历史记录
- 数据导出:导出消息记录,方便备份和迁移
- 向量搜索:基于 OpenAI 的文本嵌入模型实现语义搜索
- 多维过滤:支持按时间范围、消息类型、会话等维度过滤
- 相似度排序:根据语义相似度对搜索结果进行排序
- 多媒体支持:支持文本、图片、视频、文档、贴纸等多种媒体类型
- 媒体预览:在搜索结果中直接预览媒体内容
- Node.js >= 20
- PostgreSQL >= 15(需要 pgvector 扩展)
- OpenAI API Key
- Telegram API 凭据(API ID 和 API Hash)
- 克隆仓库:
git clone https://github.com/luoling8192/telegram-search.git
cd telegram-search
- 安装依赖:
pnpm install
pnpm run stub
- 配置环境:
cp config/config.example.yaml config/config.yaml
- 启动数据库容器:
docker compose up -d
- 初始化数据库:
pnpm run db:migrate
- 启动服务:
# 启动后端服务
pnpm run dev:server
# 启动前端界面
pnpm run dev:frontend
访问 http://localhost:3333
即可打开搜索界面。
# 同步文件夹和会话信息
pnpm run dev:cli sync
# 监听指定会话的消息
pnpm run dev:cli watch
- 导入历史记录:
# 导入 HTML 格式的消息记录
pnpm run dev:cli import -p <path_to_html_files>
# 跳过向量嵌入
pnpm run dev:cli import -p <path_to_html_files> --no-embedding
- 导出消息:
# 导出消息(支持 database 格式)
pnpm run dev:cli export
# 处理所有消息的向量嵌入
pnpm run dev:cli embed
# 启动搜索服务
pnpm run dev:cli search
本项目使用 OpenAI 的 text-embedding-3-small 模型将文本转换为 1536 维的向量,并使用余弦相似度计算语义相似度。主要实现流程:
- 通过 EmbeddingService 将消息文本转换为向量表示
- 使用 PostgreSQL 的 pgvector 扩展存储和检索向量数据
- 查询时计算输入查询与存储消息之间的余弦相似度
- 根据相似度对结果进行排序,返回最相关的消息
// 向量搜索示例
const queryEmbedding = await embedding.generateEmbeddings([query])
const results = await findSimilarMessages(queryEmbedding[0], options)
使用 gram.js 与 Telegram API 交互,实现消息的采集和同步:
- 使用 Telegram API 获取会话列表和消息历史
- 对消息内容进行处理和格式化
- 生成消息的向量表示并保存到数据库
- 定期同步更新消息内容变化
采用 PostgreSQL 数据库进行存储,主要表结构:
messages
:存储消息内容、元数据和向量表示chats
:存储会话信息folders
:存储文件夹信息和配置
使用分区表和适当的索引优化查询性能:
- 按 chat_id 分区提升查询性能
- 使用 ivfflat 索引加速向量搜索
- 使用全文索引优化关键词搜索
我们计划开发一个灵活的 Agent 框架,支持:
- 多模型集成:对接多种 LLM 模型,包括 OpenAI、Claude、本地部署模型等
- Agent 管道:构建复杂的 Agent 协作流程,实现复杂任务的拆分和处理
- 自定义 Agent 能力:允许用户定义专用 Agent,执行特定任务
基于向量数据库和大语言模型,提供更深入的聊天记录分析能力:
- 对话摘要生成:自动总结长对话内容,提取关键信息
- 话题聚类:识别和归类对话中的主要话题和讨论点
- 知识图谱构建:从对话中提取实体和关系,构建知识网络
- 用户性格分析:基于消息内容分析用户的表达风格、情绪倾向和兴趣偏好
- 社交关系网络:可视化群组内用户之间的互动关系和亲密度
- 情感趋势追踪:分析对话中的情感变化趋势,识别重要情绪转折点
- 时间线视图:以时间轴方式展示对话发展脉络
- 主题热度图:可视化不同时期讨论主题的热度变化
- 关键词云:动态展示对话中的高频关键词
这些规划将逐步实现,并根据用户反馈持续优化和调整。我们期待通过这些功能,将 Telegram Search 打造成为一个集数据挖掘、知识管理和社交分析于一体的强大工具。
MIT License © 2025