LLM集成服务

通过MCP协议将自定义行为集成到本地部署的LLM中,提供Frank分数计算功能。

  • by frj
  • Kotlin
  • 本地部署
  • 更新于
在 GitHub 查看 frj/mcp-demo

使用说明

MCP演示

这演示了将自定义行为集成到本地部署的LLM中 使用Kotlin开发的api实现的MCP协议。

MCP api提供了一种服务,为任何事物提供概念上的“Frank分数” 有一个名字。

这增加了对LLM的支持,以回答以下问题:

Whats Bobs Frank score?

说明

需要以下先决条件:

  • Java JDK
  • 码头工人
  • Docker Compose

构建Kotlin MCP服务器:

./gradlew shadowJar

启动LLM后端和MCP服务器:

docker-compose up --detach

启动 mcphost 控制台与llm聊天。请注意,这将触发 下载LLM模型文件可能需要一些时间:

docker-compose run --rm --build mcphost

输入提示:

Whats Bobs frank score?

您应该看到响应:

Bobs' Frank Score is: 1037748098 

发生了什么事。

LLM是阿里云发布的qwen3:8b模型,选择了这个LLM 因为它的性能相当不错,并且与MCP配合得很好。LLM 正在使用Ollama“执行”,Ollama是一个开源工具,允许许多不同的 LLM易于运行。

Ollama是通过旋转香草版的Ollama docker容器来运行的。

可以通过对ollama服务进行api调用来下载和运行模型,或者 使用cli。在这种情况下,qwen模型的运行是由 “mcphost”客户,见下文。

模型上下文协议(MCP)是一种api标准,旨在使 将api与LLM集成。

该过程大致如下:

  • 启用MCP的LLM客户端(MCP中的主机)配置了以下连接详细信息 MCP服务器和LLM。
  • LLM客户端询问MCP服务器,该服务器提供以下内容的文本描述 它支持的端点以及它们所采用的参数。
  • LLM客户端启动与LLM的会话,并提供有关可用MCP端点的上下文。
  • 用户在LLM客户端中输入提示。
  • LLM客户端和LLM协商需要进行哪些MCP呼叫。
  • LLM客户端发出MCP请求并向LLM提供响应。
  • 响应包含在LLM上下文中,因为它处理提示并返回响应。

在这种情况下,LLM客户端(或MCP主机)应用程序是 mcphost 这是一个用golang编写的LLM控制台应用程序,支持MCP服务器 集成和OLAMA托管的LLM。

MCP服务器使用 MCP Kotlin SDK 它基于Ktor框架构建。服务器配置为使用 服务器端事件(SSE)作为MCP传输。

mcphost客户端和MCP服务器使用docker compose运行,以简化演示设置。

备注

运行Ollama的本地版本

使用docker运行Ollama简化了演示,但在优化方面存在局限性 运行本地环境的LLM。尤其是苹果硅胶 docker中根本不支持使用GPU。

安装Ollama的本机版本将提高LLM提供的速度 它的回应。

您可以按如下方式安装Ollama的本机版本:

  • 确保Ollama的停靠版本已关闭:
    docker-compose down
    
  • 下载、安装并运行Ollama。详情 看见.
  • 您需要单独启动MCP服务器:
    ./gradlew mcp-server:run
    
    或
    ./gradlew mcp-server:shadowJar
    docker-compose run --rm --service-ports mcp-server
    

运行其他LLM

您可以运行其他LLM,但有一些限制:

  • Ollama需要支持LLM。LLM需要支持“工具”的使用。有关这些LLM的列表 看见 这里.
  • 受支持的LLM可能还有其他限制 mcphost 客户端,有关详细信息,请参阅 这里.
  • LLM的每个版本都有不同的变体,例如qwen3:4b和qwen3:8b。8b 版本具有“更多参数”。这对应于模型响应方面的更好结果 返回。这是以牺牲返回响应和下载的速度为代价的 模型文件的大小。

您可以通过编辑“model”字段,使用不同的模型运行演示 mcphost 配置文件,以及 然后重新启动mcphost控制台: mcphost/.mcphost.yml

进一步阅读