AI助手API

基于FastAPI和MCP协议的AI助手服务,提供实时数据访问和交互式API文档。

  • by anichkay-yyy
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 anichkay-yyy/pid-mcp

使用说明

带MCP的人工智能助理API

基于FastAPI的AI助手,使用Pydantic AI与GPT-4o和MCP(模型上下文协议)服务器。

特性

  • 🤖 AI助手 通过MCP访问安全检查系统数据
  • 📚 Swagger 用户界面 用于交互式API文档(可用于生产)
  • 🔌 MCP集成 用于实时数据访问
  • 🐳 Docker支持 便于部署
  • 🚀 快速API 用于高性能异步API

先决条件

安装

  1. 安装所有依赖项:
    uv sync
    

环境变量

创建一个 .env 项目根目录中的文件包含以下内容:

# OpenAI API Key (required)
OPENAI_API_KEY=your_openai_api_key_here

# MCP Server URL
MCP_SERVER_URL=https://backend-pid-production.up.railway.app/mcp/sse

运行项目

选项1:运行API服务器(生产版)

要运行FastAPI服务器:

uv run uvicorn api:app --reload --port 8000

API将在以下网址提供:

  • API根: http://localhost:8000
  • Swagger 用户界面: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc
  • 健康检查: http://localhost:8000/health

选项2:运行Streamlit应用程序(开发/测试)

要运行Streamlit应用程序,请执行以下操作:

uv run streamlit run streamlit.py

该应用程序将在 http://localhost:8501 默认情况下。

Docker部署

快速入门脚本(推荐!)

使用提供的启动脚本:

# Make executable (first time only)
chmod +x docker-start.sh

# Run
./docker-start.sh

此脚本将:

  • ✅ 检查Docker是否已安装并正在运行
  • ✅ 验证 .env 文件存在
  • ✅ 构建Docker镜像
  • ✅ 启动容器
  • ✅ 等待API准备就绪
  • ✅ 在浏览器中打开Swagger UI

手动Docker命令

  1. 塑造形象:

    docker build -t pid-mcp-api .
    
  2. 运行容器:

    docker run -d \
      -p 8000:8000 \
      --env-file .env \
      --name pid-mcp-api \
      --restart unless-stopped \
      pid-mcp-api
    
  3. 访问API:

    • Swagger 用户界面: http://localhost:8000/docs
    • API根: http://localhost:8000
    • 健康检查: http://localhost:8000/health
  4. 查看日志:

    docker logs -f pid-mcp-api
    
  5. 停止并删除:

    docker stop pid-mcp-api && docker rm pid-mcp-api
    

API使用示例

使用curl

curl -X POST "http://localhost:8000/ask" \
  -H "Content-Type: application/json" \
  -d '{
    "question": "Какие есть департаменты?",
    "model": "openai:gpt-4o"
  }'

使用Python

import requests

response = requests.post(
    "http://localhost:8000/ask",
    json={
        "question": "Покажи статистику системы",
        "model": "openai:gpt-4o"
    }
)

result = response.json()
print(result["answer"])

文档