SMCP Proxy (OIDC)

SMCP Proxy (OIDC)

🚀 SMCP 代理指南

SMCP 代理是一个支持多种模型服务协议的中间件,允许用户通过统一接口访问不同后端服务,为用户提供便捷的服务调用体验。

🚀 快速开始

SMCP 代理是一个支持多种模型服务协议的中间件,允许用户通过统一接口访问不同后端服务。以下是基本使用示例:

示例配置 (proxy-server.yml)

global:
port: 8080
host: "localhost"
log_level: "info"
enable_metrics: true

backends:
mcp-sequential:
url: "http://localhost:3001/api"
strip_path: "/v1/sequentialthinking"

mcp-memory:
command: "docker"
args:
- run
- --rm
- -i
- mcr.microsoft.com/hugginginception/transformers Glenn Glock/llama2-70b-instruct

✨ 主要特性

  • 高可用性:支持负载均衡和故障转移。
  • 可扩展性:便于添加新的后端服务。
  • 高性能:通过中间件优化请求处理。

📦 安装指南

从源码安装

  1. 克隆仓库:
git clone git@github.com:yourusername/smc-proxy.git
cd smc-proxy
  1. 下载依赖并构建:
go mod tidy
go build -o bin/smc cmd/sm/main.go
  1. 安装到系统目录(可选):
sudo cp bin/smc /usr/local/bin/

从二进制文件安装

下载预编译的二进制文件,根据你的操作系统选择对应的版本。

💻 使用示例

基础用法

场景一:统一接口访问多后端

curl http://localhost:8080/api/prompt \
-H "Content-Type: application/json" \
-d '{"model":"gpt-3.5-turbo", "messages":[{"role":"user","content":"你好!"}]}'

场景二:集成到现有系统

package main

import (
"net/http"
)

func main() {
http.ListenAndServe(":8081", smc.NewRouter())
}

高级用法

这里可以根据实际的高级使用场景进行补充说明,如果没有则可忽略。

📚 详细文档

配置参考

全局配置

参数名 类型 默认值 描述
port int 8080 代理服务器监听端口
host string "localhost" 监听地址
log_level string "info" 日志级别:debug, info, warning, error
enable_metrics bool false 是否启用 metrics

后端配置

支持两种类型的后端:

  1. HTTP 类型
backend_name:
transport: "http"
url: "http://example.com/mcp"
  1. Stdio 类型
backend_name:
transport: "stdio"
command: "docker"
args:
- run
- --rm
- -i
- your/image:tag

模型服务协议

基本请求格式

POST /api/prompt HTTP/1.1
Content-Type: application/json

{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "你好!"
}
]
}

返回格式

HTTP/1.1 200 OK
Content-Type: application/json

{
"id": "chatcmpl-XXXXX",
"choices": [
{
"message": {
"role": "assistant",
"content": "你好!很高兴见到你。"
}
}
]
}

🔧 技术细节

项目结构

smc-proxy/
├── cmd/
│   └── sm/                # 主程序入口
│       ├── main.go        # 入口文件
│       └── config.go      # 配置加载逻辑
├── internal/
│   ├── middleware/       # 中间件实现
│   │   ├── log.go        # 日志记录中间件
│   │   └── recovery.go   # 错误恢复中间件
├── go.mod                # 依赖管理文件
└── go.sum                # 依赖校验文件

中间件

日志记录

在每个请求开始时记录日志:

func LogMiddleware(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
log.Printf("Started %s %s", r.Method, r.URL.Path)
next(w, r)
}
}

错误恢复

处理panic并返回自定义错误:

func RecoveryMiddleware(next http.HandlerFunc) http.HandlerFunc {
panicChan := make(chan interface{}, 1)
go func() {
defer func() { recover }()
next(nil, nil)
}()
select {
case <-panicChan:
// 处理panic信息
}
}

📄 许可证

本项目遵循MIT License协议。

⚠️ 重要提示

  • 性能调优:使用Golang的sync.Pool优化内存使用,避免在中间件中执行阻塞操作。
  • 日志管理:根据环境设置不同的日志级别,定期清理旧日志文件。
  • 安全措施:启用HTTPS以确保数据传输安全,配置CORS策略控制跨域访问。

💡 使用建议

在安装和使用过程中,严格按照文档步骤进行操作,遇到问题可查看相关配置和日志信息进行排查。

  • 0 关注
  • 0 收藏,8 浏览
  • system 提出于 2025-09-29 19:06

相似服务问题