Skip to content

gy-0/ElmoChatProxy

Repository files navigation

Elmo Chat Proxy - OpenAI 兼容代理

这是一个将 Elmo Chat API 转换为 OpenAI 兼容格式的中间代理服务器。

🚀 在线服务已上线! 无需部署,直接使用API Base URL: https://elmo-chat-proxy.vercel.app/v1

功能特性

  • ✅ OpenAI 兼容的 API 接口
  • ✅ 支持流式和非流式响应
  • ✅ 支持多轮对话
  • ✅ 自动转换请求和响应格式
  • ✅ CORS 支持
  • ✅ 完整的错误处理
  • ✅ 支持 Vercel 无服务器部署

⚡ 快速开始

在线使用 (推荐)

你可以直接使用已部署的 Vercel 实例,无需本地安装:

API Base URL: https://elmo-chat-proxy.vercel.app/v1

快速测试

curl -X POST https://elmo-chat-proxy.vercel.app/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "elmo-chat",
    "messages": [{"role": "user", "content": "你好"}]
  }'

本地部署

如果你想在本地运行或自行部署:

安装

npm install

启动服务器

npm start

服务器默认运行在 http://localhost:3000

测试

运行测试脚本验证所有功能:

./test.sh

自行部署到 Vercel

  1. Fork 本项目到你的 GitHub
  2. Vercel 中导入项目
  3. 点击部署,无需任何配置
  4. 部署完成后获得你的专属 API URL

使用方法

在线使用: 将以下示例中的 URL 替换为 https://elmo-chat-proxy.vercel.app/v1/chat/completions
本地使用: 将 URL 替换为 http://localhost:3000/v1/chat/completions

1. 非流式请求

curl -X POST https://elmo-chat-proxy.vercel.app/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "elmo-chat",
    "messages": [
      {
        "role": "user",
        "content": "你好,请介绍一下自己"
      }
    ]
  }'

2. 流式请求

curl -X POST https://elmo-chat-proxy.vercel.app/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "elmo-chat",
    "messages": [
      {
        "role": "user",
        "content": "你好,请介绍一下自己"
      }
    ],
    "stream": true
  }'

3. 多轮对话

curl -X POST https://elmo-chat-proxy.vercel.app/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "elmo-chat",
    "messages": [
      {
        "role": "user",
        "content": "你好"
      },
      {
        "role": "assistant",
        "content": "你好!有什么可以帮助你的吗?"
      },
      {
        "role": "user",
        "content": "今天天气怎么样?"
      }
    ]
  }'

4. 在代码中使用

Node.js / JavaScript

const response = await fetch('https://elmo-chat-proxy.vercel.app/v1/chat/completions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    model: 'elmo-chat',
    messages: [
      { role: 'user', content: '你好' }
    ]
  })
});

const data = await response.json();
console.log(data.choices[0].message.content);

Python (使用 OpenAI SDK)

from openai import OpenAI

client = OpenAI(
    api_key="dummy-key",  # Elmo 不需要 API key
    base_url="https://elmo-chat-proxy.vercel.app/v1"  # 在线使用
    # base_url="http://localhost:3000/v1"  # 本地使用
)

response = client.chat.completions.create(
    model="elmo-chat",
    messages=[
        {"role": "user", "content": "你好"}
    ]
)

print(response.choices[0].message.content)

Python (流式响应)

from openai import OpenAI

client = OpenAI(
    api_key="dummy-key",
    base_url="https://elmo-chat-proxy.vercel.app/v1"  # 在线使用
    # base_url="http://localhost:3000/v1"  # 本地使用
)

stream = client.chat.completions.create(
    model="elmo-chat",
    messages=[{"role": "user", "content": "介绍一下人工智能"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

API 端点

POST /v1/chat/completions

OpenAI 兼容的聊天完成端点。

请求体参数:

  • model (string): 模型名称,使用 "elmo-chat"
  • messages (array): 消息数组
    • role (string): "user", "assistant", 或 "system" (system 消息会被忽略)
    • content (string): 消息内容
  • stream (boolean, 可选): 是否使用流式响应,默认 false
  • enableCache (boolean, 可选): 是否启用缓存,默认 true

响应格式:

非流式响应 (stream=false):

{
  "id": "chatcmpl-1728432000000",
  "object": "chat.completion",
  "created": 1728432000,
  "model": "elmo-chat",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "你好!有什么可以帮助你的吗?"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 0,
    "completion_tokens": 14,
    "total_tokens": 14
  }
}

流式响应 (stream=true): Server-Sent Events (SSE) 格式

GET /v1/models

列出可用的模型。

{
  "object": "list",
  "data": [
    {
      "id": "elmo-chat",
      "object": "model",
      "created": 1677610602,
      "owned_by": "elmo"
    }
  ]
}

GET /health

健康检查端点。

{
  "status": "ok",
  "message": "Elmo Chat Proxy is running"
}

环境变量

  • PORT: 服务器端口,默认 3000 (仅本地部署时需要)
PORT=8080 npm start

在其他应用中集成

使用 API Base URL: https://elmo-chat-proxy.vercel.app/v1
模型名称: elmo-chat
API Key: 任意填写 (如 dummy-key)

支持的应用

  • ChatWise
  • Continue (VS Code 插件)
  • Open WebUI
  • Cherry Studio
  • LibreChat
  • 任何支持 OpenAI API 格式的应用

配置示例:

API Base URL: https://elmo-chat-proxy.vercel.app/v1
Model: elmo-chat
API Key: dummy-key (随意填写或留空)

工作原理

该代理服务器的工作原理:

  1. 接收 OpenAI 格式的聊天请求
  2. 将请求转换为 Elmo Chat API 格式
  3. 对于单条消息,自动添加对话历史以触发对话模式
  4. 调用 Elmo Chat API 并解析响应
  5. 将响应转换回 OpenAI 格式
  6. 支持流式和非流式两种响应模式

注意事项

  1. Elmo Chat 主要设计用于网页内容总结,但通过适当的参数配置也可以用于对话
  2. 该代理会自动处理单条消息的情况,添加虚拟对话历史来触发对话模式
  3. system 角色的消息会被过滤,因为 Elmo 不支持 system 角色
  4. 不需要 API key,在 LLM 客户端内将 API KEY 部分随意填写即可
  5. 响应格式完全兼容 OpenAI API
  6. 在线服务: 可直接使用 https://elmo-chat-proxy.vercel.app/v1,无需部署
  7. 本地部署: 适合开发调试或自定义需求

项目结构

ElmoChatProxy/
├── server.js           # 主服务器文件
├── package.json        # 项目配置
├── vercel.json         # Vercel 部署配置
├── test.sh            # 测试脚本
├── test-elmo.js       # Elmo API 测试文件
├── test-conversation.js # 对话测试文件
├── example.js         # Node.js 使用示例
├── example.py         # Python 使用示例
└── README.md          # 本文档

许可证

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors