🚀 NiFi MCP(模型上下文协议)
NiFi MCP项目旨在提供一个聊天界面,使用户能够通过自然语言查询与Apache NiFi实例进行交互。该系统集成了大型语言模型(LLM)和自定义工具(MCP工具),可通过NiFi API检索信息、记录流程,并创建和执行对NiFi组件的操作。
已对NiFi版本1.23和1.28进行了测试,若NiFi REST Api保持一致,其他版本也可能适用。不过,使用的LLM模型类型会显著影响系统遵循指令的能力,经测试,o4 - mini和gpt - 4.1表现良好。
该系统在记录现有流程方面表现出色,创建新流程和修改现有流程的能力尚可,通常需要多次迭代和一定的用户帮助。未来计划完善工具以提升这方面的性能,还可能引入辅助调试流程的工具。
🚀 快速开始
环境设置
若你想设置开发环境并安装所有依赖项,请按照以下步骤操作:
- 克隆仓库:
git clone git@github.com:ms82119/NiFiMCP.git
cd NiFiMCP
- 设置虚拟环境:
建议使用虚拟环境管理依赖,可使用
venv
创建:
python3 -m venv .venv
- 激活虚拟环境:
source .venv/bin/activate
- **Windows**:
.venv\Scripts\activate
- 安装依赖项:
使用
uv
根据pyproject.toml
和uv.lock
安装依赖:
uv sync
- 更新配置文件:
更新
config.yaml
文件,使用你的NiFi详细信息和LLM API密钥,可参考config.example.yaml
的格式和结构。
- 运行MCP服务器:
使用以下命令启动MCP服务器:
uvicorn nifi_mcp_server.server:app --reload --port 8000
- 运行Streamlit客户端:
使用以下命令启动Streamlit客户端:
python -m streamlit run nifi_chat_ui/app.py
运行自动化测试
从项目根目录执行以下命令以运行测试脚本:
python -m tests.test_nifi_tools
该脚本将在目标NiFi实例上创建并清理名为mcp-auto-test-pg-...
的流程组。
✨ 主要特性
- 自然语言交互:提供聊天界面,支持用户通过自然语言查询与Apache NiFi实例交互。
- 模型集成:集成大型语言模型(LLM)和自定义工具(MCP工具),可通过NiFi API检索信息、记录流程并操作NiFi组件。
- 流程记录与创建:能出色记录现有流程,具备创建新流程和修改现有流程的能力。
💻 使用示例
基础用法
在聊天界面输入自然语言查询,系统将根据LLM和MCP工具进行响应。例如,你可以询问关于NiFi流程的信息。
高级用法
- 设置整体目标:在顶部文本框“定义此会话的整体目标”中添加内容,它将附加到每个LLM请求的系统提示中,可用于包含流程组ID或保持目标对LLM可见。
- 关注令牌计数:每次LLM响应后的令牌计数需密切关注,因对话历史记录不断增长,可能需定期重置对话历史记录(侧边栏中的按钮)。
- 复制响应内容:可通过白色图标复制到剪贴板下的每个LLM响应,侧边栏中有按钮可复制完整对话。
- 工具阶段过滤:使用工具阶段过滤器下拉菜单,在不同工作阶段向LLM暴露不同工具。例如,只想让它记录流程时,可将其设置为“审查”,使其只能访问读取工具而无写入权限。
📚 详细文档
使用注意事项
- 整体目标设置:顶部文本框“定义此会话的整体目标”为可选内容,添加后将附加到每个LLM请求的系统提示中,对包含流程组ID或保持目标对LLM可见很有用。
- 令牌计数关注:每次LLM响应后的令牌计数值得密切关注,由于对话历史记录持续增长,可能需要定期重置对话历史记录(侧边栏中的按钮)。
- 响应内容复制:可通过白色图标复制到剪贴板下的每个LLM响应,侧边栏中有按钮可复制完整对话。
- 工具阶段过滤:工具阶段过滤器下拉菜单允许在不同工作阶段向LLM暴露不同工具。例如,只想让它记录流程时,可将其设置为“审查”,使其只能访问读取工具而无写入权限。
未来计划
完善现有工具以改进创建和修改流程的能力,可能引入辅助调试流程的工具。
🔧 技术细节
该系统集成了大型语言模型(LLM)和自定义工具(MCP工具),通过NiFi API与Apache NiFi实例交互。使用的LLM模型类型对系统遵循指令的能力有显著影响。系统已在NiFi版本1.23和1.28上进行测试,若NiFi REST Api保持一致,其他版本也可能适用。
⚠️ 重要提示
- 顶部文本框“定义此会话的整体目标”是可选的,若添加内容,它将附加到每个LLM请求的系统提示中。
- 每次LLM响应后的令牌计数需密切关注,因对话历史记录不断增长,可能需定期重置对话历史记录(侧边栏中的按钮)。
💡 使用建议
- 若希望LLM工作在特定流程组,可在“定义此会话的整体目标”中添加流程组ID。
- 当令牌计数过高时,及时重置对话历史记录,避免影响系统性能。
- 根据不同工作阶段,使用工具阶段过滤器下拉菜单向LLM暴露不同工具。