LLM工具调用编排系统

POLPO是一个通过模型上下文协议(MCP)实现Ollama托管的大语言模型与外部工具交互的编排系统,具备模块化设计和Docker化部署特性。

  • by GiovanniDaLivorno
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 GiovanniDaLivorno/polpo

使用说明

波尔波

POLPO(Playful Ollama LLM Python Orchestrator)是一个系统,它使在Ollama上运行的大型语言模型(LLM)能够通过模型上下文协议(MCP)与外部工具进行交互。它充当一个编排器,检测LLM响应中的工具调用,将它们路由到适当的MCP服务器,并将结果反馈给LLM以获得最终答案。

特性

  • LLM集成:与Ollama托管的LLM无缝集成。
  • 工具调用:检测并执行LLM响应中指定的工具调用。
  • MCP支持:通过WebSockets与MCP服务器通信。
  • 模块化设计:易于添加新的MCP服务器和工具。
  • Docker化:完全集装箱化,便于部署。

项目结构

polpo/
├── docker-compose.yml
├── example-app.py
├── README.md
├── system-prompt.txt
├── polpo/
│   ├── Dockerfile
│   ├── Polpo.py
│   ├── McpClient.py
│   └── config.yaml
├── mcp-logs/
│   ├── Dockerfile
│   └── server.py
└── mcp-metrics/
    ├── Dockerfile
    └── server.py

先决条件

  • Docker和Docker Compose
  • Ollama已安装并正在运行(或使用提供的Docker设置)

安装

  1. 克隆存储库:

    git clone <repository-url>
    cd polpo
    
  2. 确保Ollama正在运行。docker-compose.yml包含一个Ollama服务,该服务使用 giod/molly 图像。

  3. 构建并启动服务:

    docker-compose up --build
    

用法

运行示例

这 example-app.py 演示如何使用POLPO:

import asyncio
from polpo import Polpo

async def main():
    polpo = Polpo()
    response = await polpo.run("Check recent ERROR logs and tell me main issues.")
    print("\n=== FINAL ANSWER ===\n")
    print(response)

asyncio.run(main())

系统提示

提示LLM时,请使用中指定的格式 system-prompt.txt:

When you need external information, call a tool in this format:

#tool:TOOL_NAME@SERVER_NAME
{ "arg1": "", "arg2": "" }

Only use this format.

交互示例

  • 用户提示:“检查最近一小时的日志中的错误。”
  • LLM可能会回应:
    #tool:get_logs@logs_server
    {
      "query": "ERROR",
      "minutes": 60
    }
    
  • POLPO检测到工具调用,调用MCP服务器,获取数据,并提示LLM提供最终答案。

配置

编辑 polpo/config.yaml 配置MCP服务器和Ollama模型:

mcp_servers:
  - name: logs_server
    url: "ws://localhost:6001"
  - name: metrics_server
    url: "ws://localhost:6002"

ollama:
  model: "llama3"

添加新的MCP服务器

  1. 创建一个新目录 Dockerfile 和 server.py.
  2. 在中实现MCP处理程序 server.py.
  3. 将服务添加到 docker-compose.yml.
  4. 更新 config.yaml 使用新的服务器详细信息。

贡献

欢迎投稿!请打开问题或提交pull请求。

许可证

[在此处指定您的许可证]