使用说明
BIP MCP服务器项目
该项目与BIT信息门户(BIP)集成,提供一个能够回答有关BIP数据的自然语言问题的人工智能助手。它由模型上下文协议(MCP)服务器、用于会话管理的Chrome浏览器扩展程序和web应用程序前端的占位符组成。
项目结构
该项目以单仓库的形式组织,主要由以下部分组成:
packages/mcp_server/:基于FastAPI的核心MCP服务器。此服务器与BIP API交互,并使用语言模型(LLM)来处理用户查询。packages/bip-extension/:Chrome浏览器扩展程序,用于捕获活动的BIP会话Cookie并将其安全地传输到MCP服务器。apps/web/:一个React/Vite前端应用程序(目前是一个占位符,用于用户与助手的交互)。apps/api/:与此项目相关的潜在未来独立API的占位符。memory_bank:用于存储长期项目背景、指导方针和架构决策的概念文件。
特性
1.MCP服务器(packages/mcp_server)
- FastAPI框架:使用现代高性能FastAPI框架构建。
- BIP集成:通过利用通过Chrome扩展程序获得的会话Cookie,安全地连接到实时BIP门户。
- 人工智能助手(
/assistant/ask端点):- 自然语言理解:接受用户以自然语言提出的问题。
- API智能路由:使用LLM(Google Gemini)根据用户的问题确定要查询的最相关的BIP API端点。目前支持:
/nova-api/students(学生简介)/nova-api/departments(部门列表)/nova-api/academic-feedbacks(给用户的学术反馈)/nova-api/student-activity-masters(大学活动一览表)/nova-api/student-achievement-loggers(登录学生的个人成就/参与情况)/nova-api/academic-course-faculty-mappings(教师对课程的分配)
- 上下文查询参数化:使用LLM从用户的问题中提取实体(如学生姓名、事件名称、部门名称、地点、关键字)。这些用于构造具有的目标API调用
search和filters参数。 - 优化数据获取:
- 对于特定的实体查询,获取最少的数据。
- 对于更广泛的列表查询,使用分页(
perPage=150)并根据需要获取多个页面(达到安全限制)。
- 数据解析和规范化:将来自BIP API的复杂JSON响应解析为更统一的格式。
- LLM生成的答案:使用LLM根据检索到的数据合成自然语言答案。
- 组块:通过将大型数据集拆分为更小的块供LLM处理来处理,同时尊重令牌限制。
- 提前退出:对于特定的实体查询,如果在早期块中找到答案,则停止进一步处理以提高效率。
- 音调定制提示旨在为助手提供一种乐于助人、略带诙谐和人性化的语气。
- 拼写错误容忍度:查询理解LLM对用户问题中的轻微拼写有一定的内置容忍度。
- 用户上下文查询:可以通过首先获取登录学生的详细信息(部门、学期),然后使用该上下文查询相关课程-教师映射来处理“Faculties teaching me”等查询。
- 会话管理:
- 接收BIP会话Cookie(
bip_session,XSRF-TOKEN,wiki_wiki_UserID,wiki_wiki_UserName)通过专用端点从Chrome扩展程序(/bip/session/bip). - 将这些Cookie安全地存储在服务器端会话中(使用
starlette.middleware.sessions). - 将这些存储的Cookie用于对BIP的所有后续身份验证请求。
- 接收BIP会话Cookie(
- 缓存:实现部门数据缓存,以减少冗余的API调用。
- 配置:使用a
.env用于管理敏感信息的文件,如GOOGLE_API_KEY.
2.BIP Chrome扩展程序(packages/bip-extension)
- 目的:从用户浏览器中的活动BIP会话中安全地捕获必要的会话Cookie。
- 功能:
- 弹出式UI允许用户触发cookie捕获。
- 后台脚本读取Cookie
bip.bitsathy.ac.in域。 - 将捕获的Cookie发送到MCP服务器
/bip/session/bip终点。
3.Web应用程序(apps/web)
- 技术:使用React和Vite构建。
- 目的:旨在作为与AI助手交互的主要用户界面。
- 当前状态:基础Vite/React模板。与MCP服务器集成
/assistant/ask端点是未来的任务。
设置和运行
先决条件
- Python 3.10+
- Node.js和npm(用于开发web应用程序)
- 访问Google Gemini API(需要
GOOGLE_API_KEY) - BIP门户上的活动帐户和会话。
1.MCP服务器(packages/mcp_server)
- 导航到项目根目录(例如。,
bip-mcp-server): 确保您的终端位于主项目目录中,而不是内部packages/mcp_server. - 创建并激活虚拟环境(最好在项目根目录中或
packages/mcp_server): 如果创建于packages/mcp_server:如果在项目根目录中创建:cd packages/mcp_server python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate cd ../.. # Go back to project rootpython -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate - 安装Python依赖项(确保您的虚拟环境处于活动状态):
pip install -r packages/mcp_server/requirements.txt - 配置环境变量:
创建一个
.env文件在packages/mcp_server目录(即。,packages/mcp_server/.env)使用您的Google API密钥:GOOGLE_API_KEY="YOUR_GOOGLE_API_KEY_HERE" # Optional: Define a custom MCP_SERVER_SESSION_SECRET_KEY for Starlette sessions # MCP_SERVER_SESSION_SECRET_KEY="your_strong_random_secret_key" - 运行MCP服务器(从项目根目录):服务器将在以下时间可用
uvicorn packages.mcp_server.main:app --reload --port 8000http://localhost:8000.API文档(Swagger UI)将在http://localhost:8000/docs.
2.BIP Chrome扩展程序(packages/bip-extension)
- 打开谷歌Chrome浏览器并导航到
chrome://extensions. - 启用“开发人员模式”(通常是右上角的切换)。
- 单击“加载解包”。
- 选择
packages/bip-extension这个项目的目录。 - 扩展程序图标应出现在Chrome工具栏中。
3.使用系统
-
登录BIP门户(
https://bip.bitsathy.ac.in)在您的Chrome浏览器中。 -
点击“BIP会话同步”Chrome扩展程序图标。
-
单击扩展弹出窗口中的“将BIP会话与MCP服务器同步”按钮。这将把您的BIP Cookie发送到在上运行的MCP服务器
http://localhost:8000. -
现在,您可以将查询发送到MCP服务器
/assistant/ask端点(例如,使用Postman、curl或最终使用web应用程序)。示例
curl为了/assistant/ask:curl -X POST http://localhost:8000/assistant/ask \ -H "Content-Type: application/json" \ -b "mcp_server_session=YOUR_MCP_SERVER_SESSION_COOKIE_FROM_BROWSER_DEVTOOLS_AFTER_SYNC" \ -d '{ "user_question": "Who teaches Business Analytics and Intelligence?", "item_id": null }'(注:
mcp_server_sessioncookie由MCP服务器在初始同步后自行设置。通常,在与设置会话的服务器首次交互后,您会从浏览器的开发人员工具中获取此信息,或者依赖HTTP客户端来管理Cookie。)
4.Web应用程序(apps/web)(可选开发)
- 导航到web应用程序目录:
cd apps/web - 安装Node.js依赖项:
npm install - 运行开发服务器:
npm run dev
关键技术
- 后端(MCP服务器):Python、FastAPI、Uvicorn、HTTPX、Pydantic
- AI/LLM:Google Gemini API
- 浏览器扩展:JavaScript、HTML、CSS(标准Chrome扩展技术)
- 前端(Web应用程序):React、Vite、TypeScript(目前为占位符)
- Monorepo管理:隐式(手动目录结构)
未来的改进/工作领域
- 精炼LLM提示:不断改进路径选择、查询理解和答案生成的提示,以提高准确性和语气。
- 高级迭代推理:对需要顺序信息收集的查询实施更复杂的多步骤推理(例如,“本学期教授我特定选修课的学院”)。
- 错误处理和稳健性:增强对API故障、意外数据结构和LLM问题的错误处理。
- 过滤器结构:开发更复杂的逻辑来构建精确的
filtersBIP API的参数基于提取的查询详细信息,而不是仅依赖于search某些情况下的参数。 - Web应用程序开发:充分开发
apps/web前端为助手提供用户友好的界面。 - 安全:审查和增强安全方面,尤其是会话管理和API密钥处理方面。
- 测试:添加全面的单元和集成测试。
- 内存库集成:开发一个系统来利用
memory_bank用于持久的项目上下文。 - 配置管理:如果需要,可以将更多配置(例如,API路径、默认参数)移动到更结构化的配置系统。
