4.5 KiB
4.5 KiB
lingma-ipc-proxy
lingma-ipc-proxy 是一个独立的 Go 后端,通过 Windows Named Pipe IPC 与 Lingma 通信,并对外暴露:
GET /v1/modelsPOST /v1/messagesPOST /v1/chat/completions
当前范围:
- 支持非流式与流式响应
- 单次只处理一个请求
- 仅支持 Windows
- 直接走 Lingma IPC,不依赖 DOM/CDP
运行
cd C:\Workspace\Personal\lingma-ipc-proxy
go run .\cmd\lingma-ipc-proxy
构建
构建 Windows 可执行文件:
cd C:\Workspace\Personal\lingma-ipc-proxy
.\scripts\build.ps1
默认输出:
dist\lingma-ipc-proxy.exe
等价的 Go 构建命令:
$env:CGO_ENABLED = "0"
$env:GOOS = "windows"
$env:GOARCH = "amd64"
go build -trimpath -ldflags "-s -w" -o .\dist\lingma-ipc-proxy.exe .\cmd\lingma-ipc-proxy
运行构建后的二进制:
.\dist\lingma-ipc-proxy.exe --host 127.0.0.1 --port 8095 --session-mode auto
Windows 服务
这个项目正确的部署形态是 Windows 本机进程,不是 Docker。原因很直接:代理需要通过 Windows named pipe 与本机 Lingma 通信,所以必须和 Lingma 跑在同一台 Windows 主机上。
NSSM
先构建:
.\scripts\build.ps1
再用 NSSM 安装:
.\scripts\install-nssm-service.ps1 -NssmPath C:\Tools\nssm\nssm.exe
它等价于执行:
nssm.exe install LingmaIpcProxy C:\Workspace\Personal\lingma-ipc-proxy\dist\lingma-ipc-proxy.exe --host 127.0.0.1 --port 8095 --session-mode auto
nssm.exe set LingmaIpcProxy AppDirectory C:\Workspace\Personal\lingma-ipc-proxy
nssm.exe start LingmaIpcProxy
WinSW
先准备可执行文件:
.\scripts\build.ps1
把 WinSW 二进制放到:
dist\WinSW-x64.exe
然后生成服务包装文件:
.\scripts\install-winsw-service.ps1
脚本会生成:
LingmaIpcProxy.exeLingmaIpcProxy.xml
然后安装并启动:
.\LingmaIpcProxy.exe install
.\LingmaIpcProxy.exe start
WinSW 模板文件位置:
scripts\lingma-ipc-proxy.xml.template
启动参数
go run .\cmd\lingma-ipc-proxy --port 8095 --session-mode auto
--host--port--pipe--cwd--current-file-path--mode--shell-type--session-modereuse:持续复用 sticky Lingma 会话fresh:为本次请求创建临时会话,结束后自动删除auto:单轮请求复用会话;带 system/history 的请求走临时 fresh 会话并在结束后自动删除
--timeout
环境变量
LINGMA_IPC_PIPELINGMA_PROXY_HOSTLINGMA_PROXY_PORTLINGMA_PROXY_CWDLINGMA_PROXY_CURRENT_FILE_PATHLINGMA_PROXY_MODELINGMA_PROXY_SHELL_TYPELINGMA_PROXY_SESSION_MODELINGMA_PROXY_TIMEOUT_SECONDS
示例
Anthropic 非流式:
$body = @{
model = "dashscope_qwen3_coder"
messages = @(
@{ role = "user"; content = "请只回复:ANTHROPIC_OK" }
)
stream = $false
} | ConvertTo-Json -Depth 8
Invoke-RestMethod `
-Method Post `
-Uri http://127.0.0.1:8095/v1/messages `
-ContentType "application/json" `
-Body $body
Anthropic 流式:
$body = @{
model = "dashscope_qwen3_coder"
messages = @(
@{ role = "user"; content = "请只回复:ANTHROPIC_STREAM_OK" }
)
stream = $true
} | ConvertTo-Json -Depth 8
curl.exe -N `
-H "Content-Type: application/json" `
-d $body `
http://127.0.0.1:8095/v1/messages
OpenAI 非流式:
$body = @{
model = "dashscope_qwen3_coder"
messages = @(
@{ role = "user"; content = "请只回复:OPENAI_OK" }
)
stream = $false
} | ConvertTo-Json -Depth 8
Invoke-RestMethod `
-Method Post `
-Uri http://127.0.0.1:8095/v1/chat/completions `
-ContentType "application/json" `
-Body $body
OpenAI 流式:
$body = @{
model = "dashscope_qwen3_coder"
messages = @(
@{ role = "user"; content = "请只回复:OPENAI_STREAM_OK" }
)
stream = $true
} | ConvertTo-Json -Depth 8
curl.exe -N `
-H "Content-Type: application/json" `
-d $body `
http://127.0.0.1:8095/v1/chat/completions
流式返回形状
Anthropic 流式响应会输出与 messages API 兼容的 SSE 事件:
message_startcontent_block_startcontent_block_deltacontent_block_stopmessage_deltamessage_stop
OpenAI 流式响应会输出 chat.completion.chunk 形状的 data: 行,并以:
data: [DONE]
结束。