一个使用本地LLama.cpp模型提供文本补全功能的Model Context Protocol (MCP)服务器。该服务器暴露了一个单一的MCP工具,接受文本提示并返回使用本地托管语言模型生成的文本补全。
Byte Vision MCP是MCP兼容客户端(如Claude Desktop、IDE或其他AI工具)与本地LLama.cpp语言模型之间的桥梁。它允许您:
.env文件加载环境变量/llamacpp/README.md安装)/models/README.md获取来源)git clone <repository-url>
cd byte-vision-mcp
go mod tidy
go build -o byte-vision-mcp
遵循以下说明:/llamacpp/README.md
查看:/models/README.md
复制示例配置:
cp example-byte-vision-cfg.env byte-vision-cfg.env
编辑以匹配您的设置:byte-vision-cfg.env
LLamaCliPath=/path/to/your/llama-cli ModelFullPathVal=/path/to/your/model.gguf AppLogPath=/path/to/logs/
./byte-vision-mcp
默认情况下,服务器将在http://localhost:8080/mcp-completion启动。
byte-vision-mcp/
├── llamacpp/ # LLama.cpp二进制文件和安装指南
├── logs/ # 应用程序和模型日志
├── models/ # GGUF模型文件
├── prompt-cache/ # 性能缓存提示
├── main.go # 主MCP服务器实现
├── model.go # 模型执行逻辑
├── types.go # 配置结构
├── byte-vision-cfg.env # 您的配置(从示例创建)
└── example-byte-vision-cfg.env # 示例配置
该文件控制服务器的所有方面:byte-vision-cfg.env
AppLogPathAppLogFileName:8080) HttpPortEndPoint``/mcp-completion300) TimeOutSecondsLLamaCliPathModelFullPathValCtxSizeValGPULayersValTemperatureValPredictValgenerate_completion服务器暴露了一个单一的MCP工具,接受基本和高级参数以微调LLama.cpp执行。
**输入:**
{
"prompt": "写一篇关于机器人学习绘画的短故事"
}
**输出:**
{
"content": [
{
"type": "text",
"text": "生成的补全文本..."
}
]
}
完整参数输入:
{
"prompt": "用简单的话解释量子计算",
"temperature": 0.7,
"predict": 500,
"top_k": 40,
"top_p": 0.9,
"ctx_size": 4096,
"threads": 8,
"gpu_layers": 35
}
| 参数 | 类型 | 描述 | 示例 | 默认来源 |
|---|---|---|---|---|
model | 字符串 | 覆盖模型路径 | "/path/to/model.gguf" | ModelFullPathVal |
threads | 整数 | 生成CPU线程数 | 8 | ThreadsVal |
gpu_layers | 整数 | GPU加速层数 | 35 | GPULayersVal |
ctx_size | 整数 | 上下文窗口大小 | 4096 | CtxSizeVal |
batch_size | 整数 | 批处理大小 | 512 | BatchCmdVal |
| 参数 | 类型 | 描述 | 范围 | 默认来源 |
|---|---|---|---|---|
predict | 整数 | 生成标记数 | 1-8192 | PredictVal |
temperature | 浮点数 | 创造性/随机性控制 | 0.0-2.0 | TemperatureVal |
top_k | 整数 | Top-K采样 | 1-100 | TopKVal |
top_p | 浮点数 | Top-P(核心)采样 | 0.0-1.0 | TopPVal |
repeat_penalty | 浮点数 | 重复惩罚 | 0.5-2.0 | RepeatPenaltyVal |
| 参数 | 类型 | 描述 | 示例 | 默认来源 |
|---|---|---|---|---|
prompt_file | 字符串 | 从文件加载提示 | "/path/to/prompt.txt" | PromptFileVal |
log_file | 字符串 | 自定义日志文件路径 | "/path/to/custom.log" | ModelLogFileNameVal |
{
"prompt": "写一篇关于时间旅行的创意故事",
"temperature": 1.2,
"top_p": 0.95,
"predict": 1000,
"repeat_penalty": 1.1
}
{
"prompt": "解释TCP/IP协议栈",
"temperature": 0.3,
"top_k": 10,
"predict": 800,
"ctx_size": 8192
}
{
"prompt": "编写一个Python函数来排序列表",
"temperature": 0.6,
"top_k": 30,
"top_p": 0.8,
"predict": 400
}
{
"prompt": "总结这份文档...",
"ctx_size": 32768,
"gpu_layers": 40,
"batch_size": 1024,
"predict": 500
}
{
"prompt": "关于Go语法的快速问题",
"threads": 12,
"gpu_layers": 45,
"batch_size": 2048,
"predict": 200,
"temperature": 0.4
}
{
"prompt_file": "/path/to/complex_prompt.txt",
"temperature": 0.8,
"predict": 1500,
"log_file": "/path/to/custom_generation.log"
}
- **0.0-0.3**: 高度确定性,事实性响应
- **0.4-0.7**: 平衡创造力和连贯性
- **0.8-1.2**: 创造性,多样化响应
- **1.3-2.0**: 高度创造性,潜在混乱
- **2048-4096**: 短对话,简单任务
- **8192-16384**: 中等文档,复杂推理
- **32768+**: 长文档,广泛上下文
- **0**: 仅CPU处理
- **25-35**: 平衡CPU/GPU(8GB VRAM)
- **40+**: 完整GPU加速(12GB+ VRAM)
- **50-200**: 短回答,代码片段
- **300-800**: 中等解释,文档
- **1000+**: 长篇内容,故事
{
"ctx_size": 4096, // 对于有限RAM降低
"batch_size": 512, // 较小批次以稳定
"gpu_layers": 25 // 如果GPU内存有限则减少
}
{
"threads": 8, // 匹配CPU核心
"gpu_layers": 45, // 最大化GPU使用
"batch_size": 2048, // 较大批次以提高吞吐量
"predict": 200 // 较短以快速响应
}
{
"temperature": 0.7, // 平衡创造力
"top_k": 40, // 多样化采样
"top_p": 0.9, // 核心采样
"repeat_penalty": 1.1, // 减少重复
"ctx_size": 8192 // 较大上下文以增强连贯性
}
该工具为无效参数提供特定的错误消息:
{
"content": [
{
"type": "text",
"text": "错误:无效的温度值。必须在0.0和2.0之间"
}
]
}
prompttemperature: 0使用配置默认值)const result = await mcpClient.callTool("generate_completion", {
prompt: "解释JavaScript中的async/await",
temperature: 0.5,
predict: 600,
top_k: 25
});
console.log(result.content[0].text);
response = mcp_client.call_tool("generate_completion", {
"prompt": "编写一个Python类用于二叉树",
"temperature": 0.6,
"predict": 800,
"top_p": 0.8
})
print(response["content"][0]["text"])
curl -X POST http://localhost:8080/mcp-completion \
-H "Content-Type: application/json" \
-d '{
"prompt": "解释Docker容器",
"temperature": 0.4,
"predict": 500,
"ctx_size": 4096
}'
这个全面的参数系统允许对LLama.cpp的行为进行细粒度控制,同时保持向后兼容性和易用性。
GPULayersVal=33(或根据您的GPU内存调整)MainGPUVal=0(或您首选的GPU索引)日志写入控制台和文件:
logs/byte-vision-mcp.loglogs/[model-name].log查看日志管理详情。/logs/README.md
“找不到llama-cli”
LLamaCliPath``.env“找不到模型文件”
.gguf文件ModelFullPathVal内存不足错误
CtxSizeValGPULayersVal以卸载到GPU生成缓慢
GPULayersVal服务器无法启动
go mod tidy go build -o byte-vision-mcp
go test ./...
github.com/joho/godotenvgithub.com/metoro-io/mcp-golang此项目根据MIT许可条款授权。
作者: Kevin Brisson
LinkedIn: Kevin Brisson