V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
chnwine
V2EX  ›  分享创造

花一周时间写了一个 LLM-API 管理订阅的会员系统

  •  
  •   chnwine · 16 天前 · 1364 次点击

    Hi, 大家好

    我在做另一个产品Swiflow的,时候一直犹豫要不要做一个会员系统。我把 App 发给周围的朋友时,好多都问 Api Key 怎么获取,有时无奈只好把自己的 Key 直接发给对方。

    犹豫再三,便决定接入一个会员系统,刚开始有去了解 one-api\newapi 这些,但这些更多的是 api 管理,而我期望的是像 Trae\Cursor 这样的封闭型系统,

    • 会员不关心那么多杂七杂八的设置,只要注册、充值、使用即可
    • 开发者只需要关注自己的业务,像正常的使用 openai 的接口就行

    在这个基础上于是就有了现在的《基于订阅和套餐的 LLM 会员管理系统》(llm-member),话不多说,上链接

    演示地址: https://llm-member.fly.dev/

    后台地址: https://llm-member.fly.dev/admin

    账号密码:admin/admin123

    Github: https://github.com/OptLTD/llm-member

    附上 Readme, 欢迎大家吐槽拍砖


    LLM Member - 支持 LLM Proxy 的会员管理系统

    一个专为开发者和企业打造的 LLM 代理服务平台,提供完整的会员管理体系和灵活的模型接入管理。

    🎯 产品定位

    面向用户:

    • 👥 会员注册登录: 完整的用户注册、登录体系
    • 💳 充值续费: 支持多种支付方式的充值和套餐续费
    • 📊 使用统计: 清晰的用量统计和消费记录
    • 🔒 权限管理: 基于套餐的服务权限控制

    面向管理:

    • 📦 套餐管理: 灵活设置会员套餐和计费规则
    • 🤖 模型接入: 支持多种大模型的统一接入和管理
    • 💰 在线支付: 集成多种支付方式,支持自动续费
    • 👨‍💼 会员管理: 完整的会员信息、订单、日志管理
    • 📈 数据分析: 收入统计、增长分析、运营数据监控

    解决什么问题?

    • ❌ 不用处理不同模型的接口差异
    • ❌ 不用担心模型服务的稳定性和切换
    • ❌ 不用从零开始构建用户管理和计费系统
    • ❌ 不用在业务侧频繁升级调整模型适配
    • ❌ 不用担心 API KEY 在业务侧泄漏

    💡 核心价值

    🎭 对用户完全透明的 AI 服务

    您的用户只需要:

    1. 注册账号
    2. 选择套餐
    3. 开始使用

    用户无需知道:

    • 什么是 GPT 、Claude 、通义千问
    • 什么是 Token 、Temperature 、Max Tokens
    • 哪个模型适合什么场景
    • 如何申请 API 密钥

    ⚙️ 对管理侧可灵活调整上游模型

    • 智能路由: 根据负载和成本自动选择最优模型
    • 策略配置: 灵活配置不同场景下的模型使用策略
    • 实时切换: 支持在线调整模型配置,无需重启服务
    • 成本控制: 精细化的成本控制和预算管理

    🔧 开箱即用,兼容 OpenAI 接口

    只要是适配 OpenAI 的接口,直接接入即可使用,无需任何修改:

    // 标准 OpenAI 接口调用方式
    fetch('/v1/chat/completions', {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer user_token',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        model: 'gpt-3.5-turbo',
        messages: [{
          role: 'user',
          content: '帮我写一份产品介绍'
        }]
      })
    })
    

    🚀 快速开始

    1. 部署服务

    docker run -d \
       --name llm-member-app \
       -p 8080:8080 \
       -v llm_storage:/app/storage \
       -e APP_PORT=8080 \
       -e APP_MODE=test \
       -e ADMIN_USERNAME=admin \
       -e ADMIN_PASSWORD=admin123 \
       -e DEEPSEEK_API_KEY=sk-you-api-key \
       optltd/llm-member:latest
    

    完整配置参考.env.example

    2. 配置您的产品

    2.1. 在您的产品中集成 LLM Member 认证服务:

    增加登录注册功能,用户可以通过 LLM Member 认证服务进行注册和登录。 Authorization Url: https://your-domain.com/authorization

    2.2. 在您的产品中存储用户认证信息:

    在 LLM Member 认证成功后,如果设置了Callback Url,认证服务会将用户信息返回给您的产品。您需要在您的产品中存储这些信息,以便后续的 API 调用。

    payload:

    {
      "token": "sk-xxxxxxxxxxxxxxxx", // 临时 token
      "sign": "sn-xxxxxxxxxxxxxxxxx", // 签名信息
      "time": "2023-12-31T23:59:59Z"  // current time
    }
    

    2.2.1 Web Callback 设置: Web App Callback Url: https://your-web-app.com/auth-callback 实际回调请求为: https://your-web-app.com/auth-callback?token=sk-...&sign=...&time=...

    2.2.2 Mobile App Callback 设置: Mobile App Callback Url: x-you-app://auth-callback 实际回调请求为: x-you-app://auth-callback?token=sk-...&sign=...&time=...

    2.2.3 Desktop App Callback 设置: Mobile App Callback Url: x-you-app://auth-callback 实际回调请求为: x-you-app://auth-callback?token=sk-...&sign=...&time=...

    2.2.4 通过token获取用户信息: 获取用户信息接口:https://your-domain.com/v1/verify-token

    const resp = fetch(`https://your-domain.com/v1/verify-token`, {
      method: 'GET',
      headers: {
        'Authorization': 'Bearer ${token}',
        'Content-Type': 'application/json'
      },
    })
    

    响应体:

    {
      "email": "[email protected]",
      "username": "User Name",
      "user_plan": "basic",
      "api_token": "sk-xxxxxxxxxxxxxxxx",
      "expire_at": "2023-12-31T23:59:59Z"
    }
    

    2.3. 在您的产品中集成 LLM Member 服务:

    2.3.1 请求大模型: Base Url:https://your-domain.com/v1 实例请求:

    // 标准 OpenAI 接口调用方式
    fetch(`${baseURL}/chat/completions`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${api_token}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        model: 'gpt-3.5-turbo',
        messages: [{
          role: 'user',
          content: '帮我写一份产品介绍'
        }]
      })
    })
    

    2.3.2 获取用户信息: 获取用户信息接口:https://your-domain.com/v1/user-profile

    const resp = fetch(`https://your-domain.com/v1/user-profile`, {
      method: 'GET',
      headers: {
        'Authorization': `Bearer ${api_token}`,
        'Content-Type': 'application/json'
      },
    })
    

    响应体:

    {
      "email": "[email protected]",
      "username": "User Name",
      "user_plan": "basic",
      "expire_at": "2023-12-31T23:59:59Z"
    }
    

    2.3.3 获取使用统计信息: 获取用户信息接口:https://your-domain.com/api/usage

    cosnt resp = fetch(`https://your-domain.com/api/usage`, {
      method: 'GET',
      headers: {
        'Authorization': 'Bearer user_token',
        'Content-Type': 'application/json'
      },
    })
    

    响应体:

    {
      "email": "[email protected]",
      "username": "User Name",
      "user_plan": "basic",
      "expire_at": "2023-12-31T23:59:59Z"
    }
    

    3. 为用户提供服务

    用户访问您的产品时:

    1. 引导用户注册/登录
    2. 展示套餐选择页面
    3. 用户选择套餐并支付
    4. 立即开始使用 AI 功能

    让 AI 能力触手可及,让您专注于核心业务价值创造。

    7 条回复    2025-08-24 02:23:49 +08:00
    chnwine
        1
    chnwine  
    OP
       16 天前
    这个好像更完善: https://v2ex.com/t/1021608
    tangxiangpi325
        2
    tangxiangpi325  
       13 天前 via Android
    支持 stripe 支付么
    chnwine
        3
    chnwine  
    OP
       13 天前
    @tangxiangpi325 我可以给你加上,抖抖手的事儿
    tangxiangpi325
        4
    tangxiangpi325  
       13 天前
    @chnwine 刚才试用了下,支付按钮是灰色的,现在集成的是啥支付?
    chnwine
        5
    chnwine  
    OP
       13 天前
    @tangxiangpi325 支付宝、微信相关的代码是加进去了,但我还在申请相关的账号,约等于验证过的都还没有。非 release 模式,有一个 mock 支付可验证下流程是否符合自己的业务
    flavoury
        6
    flavoury  
       13 天前
    楼主,这玩意你写了多久啊
    chnwine
        7
    chnwine  
    OP
       13 天前 via Android
    @flavoury 8.9 号开始写的,8.15 号整个糊起来带 readme 发的 github.从这个点算是一周,但中间修 token 计算、修会员限制、修统计功能又花了两三天
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   903 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:37 · PVG 04:37 · LAX 13:37 · JFK 16:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.