Files
lingma-proxy-compose/SUMMARY.md
2026-03-30 15:48:14 +08:00

6.1 KiB
Raw Blame History

lingma-ipc-proxy 项目总结

项目概述

lingma-ipc-proxy 是一个独立的 Go 后端服务,通过 Lingma 本地 pipe 或 WebSocket 传输与其通信,对外暴露兼容 OpenAI 和 Anthropic 的 API 接口。

核心功能

  • API 兼容性: 支持 OpenAI (/v1/chat/completions) 和 Anthropic (/v1/messages) 格式的 API
  • 流式与非流式响应: 完整支持 SSE 流式输出和普通 JSON 响应
  • 双传输层: 支持 Windows Named Pipe 和 WebSocket 两种传输方式
  • 直接 IPC 通信: 直接与 Lingma 进程通信,不依赖 DOM/CDP
  • 工具调用模拟: 通过 prompt 注入方式模拟工具调用能力

架构设计

项目结构

lingma-ipc-proxy/
├── cmd/lingma-ipc-proxy/      # 入口程序
│   └── main.go                # 配置加载、服务启动、信号处理
├── internal/
│   ├── httpapi/               # HTTP API 层
│   │   ├── server.go          # HTTP 路由、请求处理、流式响应
│   │   └── server_test.go     # 工具模拟相关测试
│   ├── lingmaipc/             # IPC 通信层
│   │   ├── client.go          # JSON-RPC 客户端、通知订阅
│   │   ├── transport.go       # Pipe/WebSocket 传输实现
│   │   └── transport_test.go  # 传输层测试
│   ├── service/               # 业务逻辑层
│   │   └── service.go         # 会话管理、请求编排、模型列表
│   └── toolemulation/         # 工具调用模拟
│       └── toolemulation.go   # 工具定义解析、Action Block 处理
├── scripts/                   # 构建与服务安装脚本
│   ├── build.ps1
│   ├── install-nssm-service.ps1
│   └── install-winsw-service.ps1
├── config.example.json        # 配置文件示例
├── README.md / README.zh-CN.md
└── go.mod                     # Go 1.25.0

核心模块职责

模块 职责
httpapi HTTP 服务、请求解析、响应格式化OpenAI/Anthropic 双协议)
lingmaipc 底层 IPC 通信Named Pipe/WebSocket、JSON-RPC 协议
service 业务逻辑编排、会话生命周期管理、模型列表获取
toolemulation 工具调用模拟(通过 prompt 注入实现)

技术实现亮点

1. 配置优先级设计

支持四层配置覆盖(优先级从低到高):

  1. 内置默认值
  2. JSON 配置文件
  3. 环境变量
  4. 命令行参数

2. 会话管理模式

三种会话模式满足不同场景:

  • reuse: 持续复用 sticky 会话(适合单轮对话)
  • fresh: 每次请求新建临时会话(适合多轮对话)
  • auto: 智能判断(单轮复用,带 history/system 走 fresh

3. 传输层自动发现

支持自动检测 Lingma 连接方式:

  • 读取 %APPDATA%/Lingma/SharedClientCache/.info.json
  • 自动扫描 \\.\pipe\lingma-* 命名管道
  • 支持显式配置覆盖

4. 流式响应实现

通过 Go Channel 实现真正的异步流式:

  • GenerateStream 返回 (eventsCh, doneCh)
  • HTTP 层使用 http.Flusher 实时推送 SSE
  • 支持 Anthropic 和 OpenAI 两种流式格式

5. 工具调用模拟

不依赖原生工具支持,通过 prompt 工程实现:

  • 注入工具定义到 system prompt
  • 要求模型输出 \``json action` 代码块
  • 解析 Action Block 转换为 Tool Call
  • 支持工具结果回传继续对话

API 端点

端点 方法 说明
/ / /health GET 健康检查
/v1/models GET 获取可用模型列表
/v1/messages POST Anthropic 格式对话
/v1/chat/completions POST OpenAI 格式对话

部署方式

1. 直接运行

go run .\cmd\lingma-ipc-proxy --port 8095 --session-mode auto

2. 构建可执行文件

.\scripts\build.ps1
# 输出: dist\lingma-ipc-proxy.exe

3. Windows 服务部署

支持 NSSM 和 WinSW 两种方式:

# NSSM
.\scripts\install-nssm-service.ps1 -NssmPath C:\Tools\nssm\nssm.exe

# WinSW
.\scripts\install-winsw-service.ps1
.\LingmaIpcProxy.exe install
.\LingmaIpcProxy.exe start

代码质量

测试覆盖

  • transport_test.go: 共享客户端信息解析、WebSocket URL 规范化
  • server_test.go: 工具模拟历史消息处理

设计模式

  • 分层架构: 清晰的 API/Service/IPC 分层
  • 信号量限流: 使用 buffered channel 实现单请求限流
  • 连接池管理: sticky session + 连接复用
  • 优雅关闭: 信号监听 + context 超时控制

依赖项

require (
    github.com/Microsoft/go-winio v0.6.2    // Windows Named Pipe
    github.com/gorilla/websocket v1.5.3     // WebSocket 支持
)

项目状态评估

已完成

  • 基础 HTTP API 服务OpenAI/Anthropic 双协议)
  • Named Pipe 传输层
  • WebSocket 传输层
  • 流式响应支持SSE
  • 会话管理reuse/fresh/auto 三种模式)
  • 模型列表获取
  • 配置文件支持JSON
  • 环境变量支持
  • Windows 服务部署脚本
  • 工具调用模拟prompt 注入方式)
  • 基础测试覆盖

技术债务/待优化 ⚠️

  • 工具模拟目前通过 prompt 注入,非原生支持
  • 单请求限流channel buffer=1可能成为瓶颈
  • 仅支持 WindowsNamed Pipe 依赖)
  • 测试覆盖率可进一步提升

使用场景

  1. 本地开发: 将 Lingma 能力以标准 OpenAI API 暴露给其他工具
  2. IDE 集成: 在 VS Code/Cursor 等工具中使用 Lingma 模型
  3. 自动化脚本: 通过标准 HTTP API 调用 Lingma 能力
  4. 工具链集成: 支持 function calling 的 agent 工作流

总结

这是一个功能完整、架构清晰的 IPC 代理项目。代码质量良好,分层合理,配置灵活,部署方便。核心能力是将 Lingma 的私有 IPC 协议转换为业界标准的 OpenAI/Anthropic API使得 Lingma 可以无缝集成到更广泛的 AI 工具生态中。

项目已达到可用状态,可以作为生产环境的本地代理服务部署。