first commit

This commit is contained in:
lingyuzeng
2026-03-22 13:16:22 +08:00
commit ba7d42da13
23 changed files with 3541 additions and 0 deletions

80
README.md Executable file
View File

@@ -0,0 +1,80 @@
# OpenClaw Ollama Toolcall Proxy
提供在 OpenClaw 和 Ollama 之间的一个轻量级本地兼容 HTTP 代理层专门修复部分大模型直接把函数调用Tool Call作为 XML 文本输出在 `content` 里,而无法触发本地 Agent 的问题。
## 背景原理
当我们使用诸如 `OpenClaw` 这类 Agent 框架连接 `Ollama` 提供的开源大模型时:
- 大模型(如特定微调版本)由于对齐方式,有时会在回答(`content`)中使用形如 `<function=xxx>` 的 XML/标记格式呼叫工具。
- 下游的客户端(如 OpenClaw通常只认标准结构化的 JSON `tool_calls`
- 本项目由此诞生:代理接收这些含有未解析标记的流,抽取并清洗后,重新组装为符合标准 OpenAI/Ollama 协议的结构化 `tool_calls`
- 如果下游本身正常输出了 `tool_calls`,本代理不仅会透明无痕放行,甚至兼容 `<thinking>` 这类原生字段体。
## 技术栈与特性
* **跨平台部署**Node.js + TypeScript 编写,可以在 Linux (包括 WSL)、macOS 和 Windows 上以极小资源开销跑起来。
* **Fastify 核心**:高性能 HTTP 代理。内部直接由内置 Fetch 转发,不携带额外重量级依赖。
* **自动修正**:内置独立的 `xml-toolcall` 解析器重写响应体。
* **环境变量控制**:利用 `.env` 对外暴漏服务映射控制。
---
## 快速上手
### 1. 前置要求
- 安装 Node.js (推荐 v18+)
- npm / yarn / pnpm
### 2. 获取代码与安装
\`\`\`bash
# 克隆代码
git clone ssh://git@gitea.jmsu.top:2222/lingyuzeng/openclaw-ollama-toolcall-proxy.git
cd openclaw-ollama-toolcall-proxy
# 安装依赖
npm install
\`\`\`
### 3. 环境配置
复制环境变量样本:
\`\`\`bash
cp .env.example .env
\`\`\`
打开 `.env` 文件,你可以配置如下属性:
- `OLLAMA_PROXY_TARGET=http://你的OllamaIP:11434` (代理将会将请求路由至此,例如你在局域网内部机器)
- `PROXY_PORT=11435` (本代理的监听端口,为了避开 Ollama 默认的 11434
- `OLLAMA_DEFAULT_MODEL=` (如果请求中不带 model 参数,可以强行兜底一个模型名)
### 4. 运行服务
开发或者调试模式启动(带有热更新重载):
\`\`\`bash
npm run dev
\`\`\`
生产运行模式:
\`\`\`bash
# 预先进行 TypeScript 编译构建
npm run build
# 从产物运行
npm run start
\`\`\`
---
## 自定义测试说明
对于环境和转发规则是否工作,可以使用本仓库里提供好的范例 JSON 对你的新端口进行验证:
\`\`\`bash
# 目标确保对准代理监听(默认 11435
curl -s http://127.0.0.1:11435/api/chat \
-H 'Content-Type: application/json' \
-d @test/fixtures/openclaw-like-request.json
\`\`\`
随后你应该能在控制台以及返回结果中观察到结构化完毕的调用了。代理在识别时会打印:`[INFO] Rewriting response: found 1 tool calls in XML content`
## 单元与集成测试验证
项目中提供了由 Vitest 构建的测试脚本。
\`\`\`bash
npm run test
\`\`\`
将会进行 `xml-toolcall` 解析用例和端到端整合测试。