OpenAI 和 Claude API 兼容的 LongCat 聊天服务。这允许您将 LongCat 与任何 OpenAI 或 Claude API 兼容的客户端一起使用。
📖 中文版本 | English Version
- ✅ OpenAI API 兼容性 (
/v1/chat/completions) - ✅ Claude API 兼容性 (
/v1/messages) - ✅ 流式和非流式响应
- ✅ 对话历史管理
- ✅ 交互式 Cookie 配置
- ✅ 安全的 Cookie 存储
- ✅ Web 应用程序的 CORS 支持
- ✅ 详细日志模式
- Go 1.21 或更高版本
- LongCat 聊天账户
go install github.com/JessonChan/longcat-web-api@latest安装后,longcat-web-api 二进制文件将在您的 Go bin 目录中可用。您可以直接运行它:
longcat-web-api首次运行设置: 如果没有配置 Cookie,系统会提示您提供它们:
=== 需要 Cookie 配置 ===
获取您的 Cookie:
1. 在浏览器中打开 https://longcat.chat 并登录
2. 打开开发者工具 (F12)
3. 转到应用程序/存储 → Cookie → https://longcat.chat
4. 找到这些 Cookie 并复制它们的值
在此处粘贴您的 Cookie 并按 Enter:
> _lxsdk_cuid=xxx; passport_token_key=yyy; _lxsdk_s=zzz
服务器将在默认端口 8082 上启动。
- 打开 DeepChat
- 前往 设置 → 提供商
- 添加自定义提供商:
- 提供商名称:
LongCat API - API 密钥:
any-code(或任何您想要的文本) - 基础 URL:
http://localhost:8082/v1 - 模型:
gpt-4(或任何模型名称)
- 提供商名称:
- 保存并选择 LongCat API 提供商
- 打开 CherryStudio
- 前往 设置 → API 密钥
- 添加自定义 API 配置:
- API 名称:
LongCat API - API 密钥:
any-code(必需,但可以是任何文本) - API URL:
http://localhost:8082/v1 - 模型:
gpt-4
- API 名称:
- 保存并选择 LongCat API 配置
- 设置环境变量:
export ANTHROPIC_BASE_URL=http://localhost:8082
对于任何 OpenAI 兼容的客户端,使用以下设置:
- API 密钥:
any-code(不验证,但大多数客户端需要) - 基础 URL:
http://localhost:8082/v1 - 模型:
gpt-4(或您喜欢的任何模型名称)
git clone https://github.com/JessonChan/longcat-web-api.git
cd longcat-web-api
go build -o longcat-web-apigo build -o longcat-web-api./longcat-web-api首次运行设置: 首次运行时,如果没有配置 Cookie,系统会提示您提供它们:
=== 需要 Cookie 配置 ===
获取您的 Cookie:
1. 在浏览器中打开 https://longcat.chat 并登录
2. 打开开发者工具 (F12)
3. 转到应用程序/存储 → Cookie → https://longcat.chat
4. 找到这些 Cookie 并复制它们的值
在此处粘贴您的 Cookie 并按 Enter:
> _lxsdk_cuid=xxx; passport_token_key=yyy; _lxsdk_s=zzz
服务器将在默认端口 8082 上启动。
只需运行应用程序并在提示时粘贴您的 Cookie。它们将被安全保存以供将来使用。
在您的 .env 文件或环境中设置:
COOKIE_LXSDK_CUID=your_cuid_value
COOKIE_PASSPORT_TOKEN=your_token_value # 必需
COOKIE_LXSDK_S=your_s_value当您在交互式设置期间选择保存 Cookie 时,Cookie 会自动保存到 ~/.config/longcat-web-api/config.json。
| 变量 | 描述 | 默认值 |
|---|---|---|
SERVER_PORT |
服务器端口 | 8082 |
LONGCAT_API_URL |
LongCat API 端点 | (内置) |
TIMEOUT_SECONDS |
请求超时 | 30 |
COOKIE_LXSDK_CUID |
LongCat 会话 Cookie | - |
COOKIE_PASSPORT_TOKEN |
LongCat 认证令牌(必需) | - |
COOKIE_LXSDK_S |
LongCat 跟踪 Cookie | - |
# 显示帮助
./longcat-web-api -h
# 更新存储的 Cookie
./longcat-web-api -update-cookies
# 清除存储的 Cookie
./longcat-web-api -clear-cookies
# 显示版本
./longcat-web-api -version
# 启用详细日志
./longcat-web-api -verbosecurl http://localhost:8082/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4",
"messages": [
{"role": "user", "content": "你好!你好吗?"}
],
"stream": false
}'curl http://localhost:8082/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4",
"messages": [
{"role": "system", "content": "你是一个有帮助的助手。"},
{"role": "user", "content": "用简单的术语解释量子计算。"}
],
"stream": true
}'curl http://localhost:8082/v1/messages \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-3",
"max_tokens": 1000,
"messages": [
{"role": "user", "content": "你好!你好吗?"}
]
}'curl http://localhost:8082/v1/messages \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "claude-3",
"max_tokens": 1000,
"system": "你是一个以友好语气回答的有帮助的助手。",
"messages": [
{"role": "user", "content": "生命的意义是什么?"}
],
"stream": true
}'import openai
# 配置 OpenAI 客户端以使用 LongCat 包装器
client = openai.OpenAI(
api_key="not-needed", # 本地包装器不需要 API 密钥
base_url="http://localhost:8082/v1"
)
# 非流式聊天完成
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "user", "content": "你好!你能帮我学习 Go 编程吗?"}
]
)
print(response.choices[0].message.content)
# 流式聊天完成
stream = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "给我讲个故事"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")const OpenAI = require('openai');
const openai = new OpenAI({
baseURL: 'http://localhost:8082/v1',
apiKey: 'not-needed' // 本地包装器不需要 API 密钥
});
async function chat() {
const completion = await openai.chat.completions.create({
model: 'gpt-4',
messages: [
{ role: 'user', content: '你好!你怎么能帮助我?' }
]
});
console.log(completion.choices[0].message.content);
}
chat();- 打开 https://longcat.chat 并登录
- 打开开发者工具 (F12)
- 转到应用程序选项卡 → 存储 → Cookie
- 查找并复制这些 Cookie 值:
_lxsdk_cuidpassport_token_key(必需)_lxsdk_s
您可以单独复制它们或作为完整的 Cookie 字符串复制。
longcat-web-api/
├── main.go # 主应用程序入口点
├── api/ # API 服务实现
│ ├── openai.go # OpenAI API 兼容性
│ ├── claude.go # Claude API 兼容性
│ └── client.go # LongCat API 客户端
├── config/ # 配置管理
├── types/ # 类型定义
├── conversation/ # 对话管理
└── logging/ # 日志工具
-
克隆仓库:
git clone https://github.com/JessonChan/longcat-web-api.git cd longcat-web-api -
安装依赖:
go mod tidy
-
在开发模式下运行:
go run main.go -verbose
# 为当前平台构建
go build -o longcat-web-api
# 为多个平台构建
make build-all# 运行所有测试
go test ./...
# 运行详细输出的测试
go test -v ./...
# 运行覆盖率测试
go test -cover ./...- Fork 仓库
- 创建功能分支:
git checkout -b feature/amazing-feature - 提交您的更改:
git commit -m 'Add amazing feature' - 推送到分支:
git push origin feature/amazing-feature - 打开 Pull Request
- 遵循 Go 标准格式化 (
go fmt) - 使用约定式提交
- 为新功能添加测试
- 根据需要更新文档
错误: Failed to authenticate with LongCat
解决方案:
- 更新您的 Cookie:
./longcat-web-api -update-cookies - 确保 Cookie 没有过期(如果需要,重新登录 LongCat)
- 验证您是否复制了完整的 Cookie 值
- 检查配置文件是否具有适当的权限
错误: bind: address already in use
解决方案:
- 更改端口:
export SERVER_PORT=8083 - 杀死使用该端口的进程:
lsof -ti:8082 | xargs kill -9
错误: 各种 Go 编译错误
解决方案:
- 确保您有 Go 1.21 或更高版本:
go version - 清理并重新构建:
go clean && go build - 更新依赖:
go mod tidy
错误: 未找到 Cookie 或 Cookie 无效
解决方案:
- 清除保存的 Cookie:
./longcat-web-api -clear-cookies - 重新配置 Cookie:
./longcat-web-api -update-cookies - 检查环境变量是否设置正确
问:我需要 API 密钥吗? 答:不需要,您只需要来自浏览器的 LongCat 会话 Cookie。
问:我可以将此与任何 OpenAI/Claude 客户端一起使用吗? 答:是的,它与任何支持 OpenAI 或 Claude API 格式的客户端兼容。
问:当我的 Cookie 过期时如何更新?
答:运行 ./longcat-web-api -update-cookies 并从浏览器提供新的 Cookie。
问:我的对话历史会被保存吗? 答:对话历史仅在服务器会话期间在内存中管理。
问:我可以在不同的端口上运行吗?
答:是的,设置 SERVER_PORT 环境变量:export SERVER_PORT=3000
- Cookie 以 0600 权限存储(仅所有者读/写)
- Cookie 值在显示时被屏蔽
passport_token_key是认证所必需的- 保护您的 Cookie 安全,不要分享它们
- 服务器默认在本地运行 - 在向网络公开时请谨慎
欢迎贡献!请随时提交 Pull Request。对于重大更改,请先打开 Issue 讨论您想要更改的内容。
本项目采用 MIT 许可证 - 详情请参见 LICENSE 文件。