Pi-hole管理API服务

一个基于FastAPI和RAG系统的RESTful API服务,旨在通过自然语言处理能力增强Pi-hole设备的管理体验。

  • by NickJLange
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 NickJLange/pihole_mcp_server

使用说明

PiHole MCP服务器

亲爱的上帝,为什么?

我们正在建设这个项目,以提高Pi孔设备的管理经验。我们相信,自然语言处理功能可以让用户更容易地与他们的Pi hole设备进行交互。我们还在构建这个项目,以了解更多关于FastAPI和检索增强生成(RAG)系统的信息。

MCP服务器概述

这 MCP服务器 设计用于使用FastAPI构建的RESTful API与Pi-hole设备交互,允许通过retrieval-AugedGeneration(RAG)系统对Pi-hole统计信息进行基于查询的管理和检索。该服务旨在通过自然语言处理功能增强Pi孔管理体验。

安装
  1. 克隆存储库:

    git clone [your repository URL]
    cd mcp_server
    
  2. 设置虚拟环境:

    python -m venv venv
    source venv/bin/activate  # On Windows, use `venv\Scripts\activate`
    
  3. 安装依赖关系:

    pip install -r requirements.txt
    
  4. 配置:

    • 复制 config.toml.example 向 config.toml.
    • 根据Pi-hole设置、API密钥和Milvus数据库连接详细信息调整设置。
    • 对于像API密钥这样的秘密,请使用 .env 文件:
运行服务器
uvicorn main:app --host 0.0.0.0 --port 8000
API使用
  • 查询终结点: 使用POST请求 /query 标题包括 X-API-Key示例:

    POST /query HTTP/1.1
    Host: yourserver.com
    X-API-Key: your_api_key_here
    Content-Type: application/json
    
    {
      "query": "Block internet for 10 minutes."
    }
    
  • 功能标志: 检查 config.toml 用于控制可用功能的功能标志设置。

文档

  • 请参阅API文档,网址为 /docs 当服务器运行以获取详细的端点使用情况时。

面向开发人员的README

我们将使用LLM扫描API端点并自动生成代码。然后,我们将应用来自最后一个已知工作版本的补丁,并解决中断问题。

我们将把之前LLM生成的代码保存在一个单独的分支中以供参考,以确保基准测试是正确的。

开发指南

  • 结构:该项目使用FastAPI,并通过以下方式管理依赖关系 pyproject.toml 或 requirements.txt.
  • 日志记录:日志配置存储在 logging_config.py。确保日志清晰,不包含敏感信息。
  • 测试:使用 pytest 用于编写和运行测试。鼓励对Milvus和Pi hole等外部服务进行模仿。
代码贡献
  1. 分叉存储库:

    git clone [your fork]
    
  2. 设置和开发:

    • 按照上面的安装指南设置您的开发环境。
    • 承诺前:
      • 运行测试:
        pytest
        
      • 确保代码样式带有过梁(flake8, mypy, black, isort).
  3. 提交拉取请求:

    • 将更改推送到fork,然后对main分支打开pull请求。
错误处理
  • 为常见错误自定义和实现异常处理程序,如 PiholeConnectionError 或 RagIntentNotFoundError.
文档
  • 更新 README.md 功能或依赖关系的变化。
  • 保持 todo.md 与您的开发任务保持同步。

使用LLM和补丁构建策略

概述:

  • 我们使用LLM(语言模型)来生成初始代码库或为新功能或错误修复提供解决方案,然后通过手动代码审查和补丁应用程序进行改进。

流程:

  1. 在containers目录中启动pihole

  2. cd prompts/; ./run_plan.sh

  3. 启动新分支以比较gameplan.md的材质差异

  4. 使用gameplan.md为aider.md生成单独的提示

  5. 使用aider根据gameplan.md为特定功能或问题生成代码

  6. 处理生成的代码与以前的llm版本之间的差异

  7. 应用“工作”中的补丁来清理混乱

  8. $$$利润

  9. 集成测试:

    • 通过运行完整的集成测试,确保新代码按预期工作。
  10. 文件更新:

    • 记录新功能、修复或更改,更新用户和开发人员文档。

政策说明:

  • 未经人工审查,切勿直接提交LLM生成的代码。
  • 维护生成的代码源日志,以实现可追溯性。
  • 在审查和修补LLM生成的代码时,优先考虑安全性和效率。