GeoAgent 是一个基于Retrieval-Augmented Generation (RAG) 技术的地理信息问答系统,提供文档管理、向量数据库管理以及智能问答功能。
- 文档管理:支持CSV、JSON、TXT格式文件的上传、下载和删除
- 向量数据库管理:支持创建、添加文件、删除和查询向量数据库
- 智能问答:基于RAG技术,结合向量检索和生成模型,提供准确的地理信息问答服务
- 多模型支持:支持多种嵌入模型和聊天模型,可根据需求灵活配置
- 对话记忆:支持多轮对话和会话管理
- MCP工具集成:支持外部工具调用
- 确保已安装Python 3.9+,建议版本 3.11
- 克隆本项目:
git clone https://github.com/Orangon/GeoAgent.git
- 安装依赖:
pip install -r requirements.txt
- 通过命令行或者添加.env文件配置环境变量:
export OPENAI_API_KEY=your_api_key export OPENAI_API_BASE=your_api_base export EMBEDDING_API_URL=your_embedding_api_url
- 启动服务:
python run.py
OPENAI_API_KEY: OpenAI API密钥(或兼容OpenAI API格式的密钥)OPENAI_API_BASE: OpenAI API基础URLEMBEDDING_API_URL: 嵌入模型API URL
嵌入模型:
- llama3.3-70b-instruct
- llama3.1-70b-instruct
- text-embedding-v3
聊天模型:
- qwen-turbo
- deepseek-v3
- 方法:POST
- 路径:/create_db
- 参数:
- model_name: 嵌入模型名称
- db_name: 数据库名称
- files: 要上传的文件列表(可选)
- 方法:POST
- 路径:/databases/add
- 参数:
- db_name: 数据库名称
- files: 要添加的文件列表
- 方法:DELETE
- 路径:/databases/{db_name}
- 参数:
- db_name: 数据库名称
- 方法:GET
- 路径:/databases
- 方法:POST
- 路径:/databases/add
- 参数:
- files: 要上传的文件列表
- 方法:GET
- 路径:/documents/download/{filename}
- 参数:
- filename: 文件名
- 方法:DELETE
- 路径:/documents/delete/{filename}
- 参数:
- filename: 文件名
- 方法:GET
- 路径:/documents
- 方法:POST
- 路径:/ask
- 参数:
- query: 用户查询
- db_name: 数据库名称
- embed_model_name: 嵌入模型名称(可选)
- chat_model_name: 聊天模型名称(可选)
- use_api: 是否使用API(可选,默认True)
- 方法:POST
- 路径:/chat
- 参数:
- prompt: 系统提示词
- query: 用户查询
- session_id: 会话ID(可选)
- chat_model_name: 聊天模型名称(可选)
- use_memory: 是否使用记忆功能(可选,默认True)
- 方法:GET
- 路径:/chat/sessions
- 方法:DELETE
- 路径:/chat/sessions/{session_id}
- 参数:
- session_id: 会话ID
GeoAgent/
├── .gitignore
├── Dockerfile
├── GeoRAGApp.py # 主应用程序入口文件
├── models.yaml # 模型配置文件,定义了可用的嵌入模型和聊天模型
├── README.md
├── requirements.txt # 依赖包列表
├── run_docker.sh # 运行Docker容器的脚本
├── app/ # 应用程序主目录
│ ├── __init__.py
│ ├── dao/ # 数据访问层
│ │ ├── __init__.py
│ │ ├── DataBase.py # 数据库操作
│ │ ├── FlexibleVectorDB.py # 灵活的向量数据库实现
│ │ ├── LocalVectorDB.py # 本地向量数据库实现(Ollama)
│ │ └── VectorDB.py # 向量数据库抽象基类
│ ├── routers/ # API路由
│ │ ├── __init__.py
│ │ ├── chat.py # 聊天相关路由
│ │ ├── databases.py # 数据库管理路由
│ │ ├── documents.py # 文档管理路由
│ │ ├── health.py # 健康检查路由
│ │ └── models.py # 模型管理路由
│ ├── services/ # 业务逻辑层
│ │ ├── __init__.py
│ │ ├── base_service.py # 基础服务类
│ │ ├── chat_service.py # 聊天服务
│ │ ├── database_service.py # 数据库管理服务
│ │ ├── document_service.py # 文档管理服务
│ │ ├── mcp_service.py # MCP工具服务
│ │ ├── model_service.py # 模型管理服务
│ │ └── rag_service.py # RAG问答服务
│ └── utils/ # 工具类
│ ├── __init__.py
│ ├── config.py # 配置管理
│ ├── dependencies.py # 依赖注入
│ ├── exceptions.py # 异常处理
│ ├── models.py # 数据模型
│ └── response.py # 响应格式化
└── database/ # 数据库存储目录
└── documents/ # 文档存储目录
负责向量数据库的创建、删除、查询和文件管理:
- 创建向量数据库
- 向已有数据库添加文件
- 删除数据库
- 获取数据库列表
- 管理已加载的向量数据库实例
负责文档的上传、下载和删除等管理功能:
- 获取文档列表
- 下载文档
- 删除文档
- 管理上传目录
负责RAG智能问答和纯对话功能:
- 基于向量数据库的智能问答
- 支持API和本地模型
- 支持多种聊天模型
负责聊天会话管理和对话记忆功能:
- 会话创建和管理
- 对话历史记录维护
- 会话清理机制
- 多轮对话支持
负责管理嵌入模型和聊天模型:
- 获取可用模型列表
- 验证模型有效性
- 提供默认模型配置
负责MCP工具的初始化和管理:
- MCP工具加载
- 外部工具集成
- 工具调用支持
- VectorDB: 向量数据库抽象基类
- FlexibleVectorDB: 灵活的向量数据库实现
- LocalVectorDB: 本地向量数据库实现
- DataBase: 数据库操作接口
- config: 配置管理
- dependencies: 依赖注入
- exceptions: 异常处理
- models: 数据模型定义
- response: 响应格式化
- Python 3.11
- FastAPI
- LangChain (langchain, langchain-chroma, langchain-openai等)
- 向量数据库:Chroma
- 嵌入模型:llama3.3-70b-instruct, llama3.1-70b-instruct, text-embedding-v3
- 聊天模型:qwen-turbo, deepseek-v3