Skip to content

Ayanami1314/propilot

Repository files navigation

ProPilot: 「思源」科研智能写作伴侣

Quick Start

环境配置(uv is recommended), tested in torch2.7+cu126:

uv add -r requirements.txt
uv pip install -U FlagEmbedding
uv pip install -U "mineru[core]" -i https://mirrors.aliyun.com/pypi/simple

Optional, to speed up vllm inference, might cause some dependency issues also:

uv pip install flashinfer-python -i https://flashinfer.ai/whl/cu126/torch2.7/

运行:

  1. 创建.env文件, 根据model-config.yaml和config.yaml中用到的配置填写参数, 如
  • DASHSCOPE_API_KEY
  • OPENAI_API_KEY
  • ...

model-config.yaml 兼容 litellm 格式的参数 config.yaml 为其他可选择参数, 如embedder/reranker模型参数等, 具体见注释

  1. 如果不需要本地运行模型, 修改model-config.yamlprivate-系列模型的配置同public-系列模型配置后直接启动即可
chmod +x run.sh && ./run.sh
  1. 如果需要本地运行private模型, 请先启动vLLM模型服务, 如
 vllm serve stelterlab/Mistral-Small-3.2-24B-Instruct-2506-FP8 \
  --tokenizer-mode mistral \
  --config-format mistral \
  --load-format mistral \
  --tool-call-parser mistral \
  --enable-auto-tool-choice \
  --max-model-len 8192 \
  --gpu-memory-utilization 0.7

再运行

chmod +x run.sh && ./run.sh

可视化界面

  • Typesense 可视化界面: cd typesense/simple-ui/ && uvicorn main:app --reload --port 2245
  • Milvus 可视化界面: 推荐使用Attu, 图形化配置地址即可
  • 文档: 启动FastAPI服务,并访问http://127.0.0.1:8000/docs
  • langfuse: 本地启动
cd langfuse
docker compose up -d

在可视化页面中配置用户信息之后, 在根目录的.env文件下配置

LANGFUSE_PUBLIC_KEY=""
LANGFUSE_SECRET_KEY=""
LANGFUSE_HOST=""

即可追踪后续的LLM调用

测试

测试系统分成几种测试类型

  • 普通单元测试
  • benchmark测试
  • llm测试, 主要用来测试llm模型, 会有一定的耗时和api开销, 推荐手动调用
  • external测试, 主要用来测试外部依赖, 如数据库、搜索引擎、embedding模型、外部api服务等, 有些还需要自行生成测试集, 推荐手动调用

运行单元测试

python -m pytest -m "not benchmark and not external and not llm"

运行benchmark测试

python -m pytest -m "benchmark"

推理性能测试

cargo install --git https://github.com/huggingface/inference-benchmarker/
uv run vllm serve stelterlab/Mistral-Small-3.2-24B-Instruct-2506-FP8 \
  --tokenizer-mode mistral \
  --config-format mistral \
  --load-format mistral \
  --tool-call-parser mistral \
  --enable-auto-tool-choice \
  --max-model-len 8192 \
  --gpu-memory-utilization 0.8

# 由于mistral的模型使用tekken的自定义tokenizer, 与inference不兼容, 采用社区版本的tokenizer替代
inference-benchmarker \                                 
  --tokenizer-name "unsloth/Mistral-Small-3.2-24B-Instruct-2506-unsloth-bnb-4bit" \
  --url http://localhost:8000 \
  --profile chat --model-name "stelterlab/Mistral-Small-3.2-24B-Instruct-2506-FP8"  

在单张NVIDIA L40(48G)上的示例吞吐如下

项目概览

在学术研究的征途上,撰写项目申请书是每位科研人无法回避的挑战。我们不仅要在海量文献与内部资料中挣扎,还要应对内容填充的时间窘境。而传统的AI工具因"幻觉"与结构化能力缺失,难以胜任这项严肃而复杂的工作。

为了终结这场效率与质量的拉锯战,我们带来了「思源」——一个深度融合**"高效率、低幻觉、结构化、多模态"**核心价值的AI研究伙伴,旨在将科研人员从繁重的案头工作中解放出来,回归创新的本质。

「思源」如何重塑您的科研写作流程?

  1. 构建您的专属知识大脑: 「思源」允许您轻松导入私有研究成果与公开学术论文,通过元数据管理,构建一个结构清晰、可随时调用的项目专属知识大脑
  2. 成为您的全流程AI写作副驾:「思源」将全程陪伴,赋能从构思到定稿的每一个环节:
    • 灵感构思时的对话风暴与"持久记忆"形成;
    • 框架起草时,一键补全"研究目标"、"技术方案"等结构化章节;
    • 再到内容撰写时,它提供两种杜绝幻觉的模式:基于私库的**"查找式补全"与精准定位原文的"照引式补全"**,并自动标注引用来源;
  3. 保证您的数据绝对安全:我们深知科研数据的高度敏感性。「思源」将您的私有知识库与生成内容严格留存于本地,杜绝任何云端上传与数据外泄风险,为您的核心成果保驾护航。

「思源」最大的创新在于,它建立了一套**"先检索、后生成、再溯源"**的严谨工作流,从根本上解决了通用AI在严肃学术写作中的"幻觉"和"空洞"问题。同时,「思源」致力做到用户无感知,以实时补全的方式,让您能做到"心有所想,笔有所成"。

选择「思源」,让我们一起迎接一个更加专注、高效、充满创造力的科研新范式。

技术架构

整体架构设计

「思源」采用微服务架构,由多个独立服务协同工作,确保系统的可扩展性、可维护性和高可用性:

┌──────────────────┐  ┌─────────────────┐  ┌─────────────────┐
│    Frontend UI   │  │   API Service   │  │   Task Queue    │
│VSCode/Word(React)│◄─┤     FastAPI     │◄─┤     Celery      │
└──────────────────┘  └─────────────────┘  └─────────────────┘
                             │
        ┌────────────────────┼────────────────────┐
        ▼                    ▼                    ▼
┌─────────────┐       ┌─────────────┐     ┌──────────────────┐
│  Doc Search │       │  Vector DB  │     │   Image Search   │
│  Typesense  │       │  Milvus     │     │ BGE-VL embedding │
└─────────────┘       └─────────────┘     └──────────────────┘
        │                    │                    │
        └────────────────────┼────────────────────┘
                             ▼
                     ┌──────────────┐
                     │     LLM      │
                     │  vLLM / API  │
                     └──────────────┘

核心技术栈

  • 后端框架: FastAPI + SQLModel + Pydantic
  • 数据库: SQLite (用户管理) + Milvus (向量存储) + Typesense (文档搜索)
  • 任务队列: Celery + Redis
  • 文档处理: MinerU (PDF解析) + Stanza (NLP)
  • 向量化: BGE-M3 (文本) + BGE-VL (图像)
  • 监控: Langfuse (LLM调用链路追踪)
  • 部署: Docker Compose

核心功能

1. 智能文档管理

文档上传与解析

  • 多格式支持: PDF、DOCX、Markdown、TXT等主流格式
  • 智能解析: 利用MinerU进行高质量PDF文档解析,保留格式和结构信息
  • 权限控制: 支持公开/私有文档分类管理
  • 元数据提取: 自动提取作者、发表日期、关键词等元信息

智能文档切块

  • 语义感知切块: 基于语义边界进行文档分块,而非简单字符截断
  • 多语言支持: 中英文智能分句处理
  • 上下文保持: 保留段落间的逻辑关系

2. 多模态检索系统

文档语义搜索

  • 混合检索: 结合Typesense的关键词检索和Milvus的向量检索
  • 语义理解: 基于BGE-M3模型的深度语义匹配
  • 精确定位: 支持段落级精确定位和引用溯源

图像内容搜索

  • 图文跨模态: 支持用文本查询图像内容
  • 视觉语义理解: 基于BGE-VL模型的图像语义编码
  • 相似度匹配: 高精度图像相似度计算

3. AI智能补全

前缀补全策略

  • 上下文感知: 基于当前编辑位置的上下文进行智能补全
  • 引用式生成: 确保生成内容有明确的文献来源
  • 实时响应: 毫秒级响应速度,无感知体验

LLM 补全策略

  • 多模态: 支持多种输入模式,如文本、图片、音频、视频等
  • 结构化: 确保生成的内容结构清晰、一致

多种补全模式

  1. 查找式补全: 从知识库中检索相关内容进行补全
  2. 照引式补全: 基于特定文献段落进行精确引用补全
  3. 结构化补全: 针对特定章节(如研究目标、技术方案)的结构化生成

4. 用户权限与安全

身份认证

  • JWT Token: 基于JWT的无状态身份认证
  • 会话管理: 支持多设备登录管理
  • 权限控制: 细粒度的API访问权限控制

数据安全

  • 本地存储: 所有数据严格保存在本地,不上传云端
  • 访问隔离: 用户间数据完全隔离
  • 传输加密: API通信支持HTTPS加密

API接口文档

认证相关

  • POST /api/v1/users/register - 用户注册
  • POST /api/v1/users/login - 用户登录
  • GET /api/v1/users/me - 获取当前用户信息

文档管理

  • POST /api/v1/propilot/doc/upload - 文档上传
  • POST /api/v1/propilot/doc/search - 文档搜索

图像管理

  • POST /api/v1/propilot/image/upload - 图像上传
  • POST /api/v1/propilot/image/search - 图像搜索

AI服务

  • POST /api/v1/propilot/completion - 智能补全
  • POST /api/v1/propilot/summarize - 文段总结
  • POST /api/v1/propilot/refine - 文字润色

系统管理

  • GET /api/v1/utils/health - 健康检查
  • GET /api/v1/utils/resources - 系统资源监控
  • GET /api/v1/milvus/collections - 向量集合管理

完整的API文档可通过访问 http://localhost:1145/docs 查看。

配置说明

环境配置文件

系统使用 config.yaml 进行统一配置管理

环境变量

创建 .env 文件并配置以下环境变量:

# -*- coding: utf-8 -*-
OPENAI_API_BASE=https://api.chatgptsb.com/v1
OPENAI_API_KEY=replace
DASHSCOPE_API_KEY=replace
DASHSCOPE_API_BASE=https://dashscope.aliyuncs.com/compatible-mode/v1

HF_API_KEY=replace

LANGFUSE_PUBLIC_KEY=replace
LANGFUSE_SECRET_KEY=replace
LANGFUSE_HOST="http://localhost:3333"

开发指南

项目结构

propilot/
├── api/                   # FastAPI应用
│   ├── routes/            # API路由
│   ├── services/          # 业务逻辑服务
│   ├── dto/               # 数据传输对象
│   ├── models.py          # 数据模型
│   ├── auth.py            # 认证逻辑
│   └── config.py          # 配置管理
├── milvus/                # Milvus向量数据库操作
├── search/                # Typesense搜索引擎
├── utils/                 # 工具函数
├── tests/                 # 测试用例
├── finetune/              # 模型微调相关
├── documents/             # 文档存储
└── images/                # 图像存储

开发环境搭建

  1. 克隆项目
git clone git@github.com:Ayanami1314/propilot.git
cd propilot
  1. 安装依赖
# 使用uv (推荐)
uv sync

# 或使用pip
pip install -r requirements.txt
  1. 启动依赖服务
# 启动所有Docker服务
docker-compose up -d

# 或分别启动
cd typesense && docker compose up -d
cd langfuse && docker compose up -d  
cd milvus && docker compose up -d
cd mineru && docker compose up -d
  1. 启动应用服务
# 启动API服务
uvicorn api.main:app --port 1145 --reload

# 启动Celery工作进程
celery -A api.mq worker --loglevel=INFO --pool=threads

# 启动文档搜索UI (可选)
cd typesense/simple-ui && uvicorn main:app --reload --port 2245

测试

运行测试套件:

# 运行所有测试
pytest

# 运行特定测试
pytest tests/test_search.py

# 运行覆盖率测试
pytest --cov=api tests/

系统监控

Langfuse监控面板

访问 http://localhost:3333 查看LLM调用链路追踪,包括:

  • 请求响应时间
  • Token使用量统计
  • 错误率监控
  • 成本分析

系统资源监控

访问 /api/v1/utils/resources 获取实时系统资源使用情况:

{
  "cpu_percent": "15.2%",
  "memory": {
    "total": "32.00 GB",
    "available": "18.45 GB", 
    "used": "13.55 GB",
    "percent": "42.3%"
  },
  "disk": {
    "total": "500.00 GB",
    "used": "245.67 GB",
    "free": "254.33 GB", 
    "percent": "49.1%"
  }
}

许可证

本项目采用 MIT 许可证,详见 LICENSE 文件。

问题反馈

如遇到问题或有功能建议,请通过以下方式联系我们:

  • 提交 GitHub Issue
  • 发送邮件至项目维护者

「思源」团队致力于为科研工作者提供最优质的AI写作辅助工具,让科研创作回归本质,让创新思维自由飞翔。

注1: 此仓库同时为上海交通大学SE2303软件工程原理的开发大作业仓库

注2: 此仓库同时为上海交通大学2025AI应用创新大赛的代码仓库

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6

Languages