PiHole MCP服务器
亲爱的上帝,为什么?
我们正在建设这个项目,以提高Pi孔设备的管理经验。我们相信,自然语言处理功能可以让用户更容易地与他们的Pi hole设备进行交互。我们还在构建这个项目,以了解更多关于FastAPI和检索增强生成(RAG)系统的信息。
MCP服务器概述
这 MCP服务器 设计用于使用FastAPI构建的RESTful API与Pi-hole设备交互,允许通过retrieval-AugedGeneration(RAG)系统对Pi-hole统计信息进行基于查询的管理和检索。该服务旨在通过自然语言处理功能增强Pi孔管理体验。
安装
- 克隆存储库:
git clone [your repository URL]
cd mcp_server- 设置虚拟环境:
python -m venv venv
source venv/bin/activate # On Windows, use `venv\Scripts\activate`- 安装依赖关系:
pip install -r requirements.txt- 配置:
- 复制 config.toml.example 向 config.toml. - 根据Pi-hole设置、API密钥和Milvus数据库连接详细信息调整设置。 - 对于像API密钥这样的秘密,请使用 .env 文件:
运行服务器
uvicorn main:app --host 0.0.0.0 --port 8000API使用
- 查询终结点: 使用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等外部服务进行模仿。
代码贡献
- 分叉存储库:
git clone [your fork]- 设置和开发:
- 按照上面的安装指南设置您的开发环境。 - 承诺前: - 运行测试:
pytest- 确保代码样式带有过梁(flake8, mypy, black, isort).
- 提交拉取请求:
- 将更改推送到fork,然后对main分支打开pull请求。
错误处理
- 为常见错误自定义和实现异常处理程序,如
PiholeConnectionError或RagIntentNotFoundError.
文档
- 更新
README.md功能或依赖关系的变化。 - 保持
todo.md与您的开发任务保持同步。
______________________________________________________________________
使用LLM和补丁构建策略
概述:
- 我们使用LLM(语言模型)来生成初始代码库或为新功能或错误修复提供解决方案,然后通过手动代码审查和补丁应用程序进行改进。
流程:
- 在containers目录中启动pihole
cd prompts/; ./run_plan.sh
- 启动新分支以比较gameplan.md的材质差异
- 使用gameplan.md为aider.md生成单独的提示
- 使用aider根据gameplan.md为特定功能或问题生成代码
- 处理生成的代码与以前的llm版本之间的差异
- 应用“工作”中的补丁来清理混乱
- $$$利润
- 集成测试:
- 通过运行完整的集成测试,确保新代码按预期工作。
- 文件更新:
- 记录新功能、修复或更改,更新用户和开发人员文档。
政策说明:
- 未经人工审查,切勿直接提交LLM生成的代码。
- 维护生成的代码源日志,以实现可追溯性。
- 在审查和修补LLM生成的代码时,优先考虑安全性和效率。
