标签 API Key 下的文章

是否想设计一套让用户感到公平的 API 限流规则?通过平滑流量,避免随机触发 429 错误,并借助 Redis 与真正的滑动窗口算法,实现足够健壮的限流执行,以适应复杂的生产环境。

如果限流器上线后立刻收到客诉,并非个例。事实上,大多数所谓“简单”的限流方案,其简单程度就如同将折叠椅当作简单梯子来用,平时凑合,但一旦出问题便可能是严重的故障,且往往发生在最不该出错的时刻。

正确的解决方式不是提高限流阈值,而是让限流规则更具公平性。

本文将演示如何为 FastAPI 与 Redis 搭建滑动窗口算法,避免边界峰值问题,减少误判,同时保持足以应对真实流量的性能。

为什么固定窗口会导致误判?
最常见的“固定窗口”算法,比如“每分钟最多 60 次请求”,看似简单有效,却隐藏着一个致命缺陷:
假设一个用户在 12:00:59 这一刻瞬间发出了 60 次请求。
紧接着下一秒 12:01:00,计数器清零重置。
然后他又立刻发出 60 次请求。
结果就是:在短短 1 秒多的时间里,用户实际发出了 120 次请求,而你的限流器却认为完全合规。
更糟糕的是,固定窗口常常会惩罚那些在时间窗口边界附近正常操作的用户。比如用户在某一分钟的最后几秒和下一分钟的开头发送了两小批请求,就很容易被系统标记为“滥用”——即使他的行为完全没有恶意。
滑动窗口算法正是为了解决这个问题而生的。

滑动窗口是怎么工作的

  • 固定窗口问的是:“这个固定的 1 分钟时间段里,有多少请求?”
  • 滑动窗口问的是:“从当前这一刻往前推 60 秒,这滚动的 60 秒里,有多少请求?”
    它没有生硬的“时间桶”概念,也不会在整点时刻突然重置计数器。整个时间窗口是连续滑动的,就像一条移动的时间滑轨。

有几种实现方式,但有一个非常优雅的 Redis 方案:

  1. 存储:为每一个需要限流的对象(如用户ID、IP)创建一个 Redis 有序集合(ZSET),每次请求的时间戳就是集合中的一个成员。
  2. 判断(每次请求时):

    • 清理:移除集合中所有超过窗口时长(比如60秒)的旧时间戳。
    • 计数:统计集合中剩余的时间戳数量(即最近60秒内的请求数)。
    • 裁决:如果数量未超限,则将当前请求的时间戳加入集合。
    • 保洁:为这个集合设置一个过期时间,让不活跃的用户数据自动清理。

    核心架构:如何保证高并发下的准确性?

[客户端请求] --> [FastAPI 应用 (依赖注入/中间件)]
                          |
                          |--- (原子化限流检查) ---|
                          V
                     [Redis 集群]
                   (Key: 用户标识:路由路径)
                    (Value: 有序集合 ZSET)

这里的关键在于,“清理、计数、添加” 这一系列操作必须是原子的。否则,在超高并发下,多个请求可能同时通过检查,导致实际请求数超出限制。因此,我们选择使用 Redis Lua 脚本来保证原子性。

设计限流键:我们要限制“谁”?
在 coding 前,先定义“公平”的含义。

  • 按IP:最简单的方案,但对于公司网关、移动网络(NAT)后的多个真实用户可能不公平。
  • 按用户ID/API密钥:如果你有用户认证体系,这是最精准、最公平的方式。
  • 按端点:可以对不同的端点设置不同的限制,例如 /login 接口比 /public/news 更严格。
  • 复合键:例如 user_id:route,能实现非常精细的“公平使用”策略。

一个推荐的实践策略是:

  1. 首选:已认证用户的 API Key 或 User ID。
  2. 降级:如果未认证,则使用 Client IP。
  3. 增强:可选地结合请求路径,对不同成本的接口实施差异化限流。

Redis Lua脚本(原子滑动窗口)
这个脚本一次性完成了滑动窗口限流的所有逻辑:清理旧数据、判断是否超限、记录新请求。

-- 参数说明:-- KEYS[1]: 限流键,例如 "rate_limit:user_123:/api/search"-- ARGV[1]: 当前时间戳(毫秒)-- ARGV[2]: 窗口大小(毫秒),如 60000-- ARGV[3]: 限制次数,如 60-- ARGV[4]: 键的过期时间(秒),应略大于窗口local current_time = tonumber(ARGV[1])local window_size = tonumber(ARGV[2])local max_requests = tonumber(ARGV[3])local key_ttl = tonumber(ARGV[4])-- 1. 移除窗口之外的所有旧时间戳
redis.call("ZREMRANGEBYSCORE", KEYS[1], 0, current_time - window_size)-- 2. 获取当前窗口内的请求数量local current_count = redis.call("ZCARD", KEYS[1])-- 3. 判断是否超限if current_count >= max_requests then-- 计算还需要多久才能重试(基于窗口内最早的请求)local oldest_request = redis.call("ZRANGE", KEYS[1], 0, 0, "WITHSCORES")local wait_time_ms = 0if oldest_request[2] then
        wait_time_ms = (tonumber(oldest_request[2]) + window_size) - current_time
        if wait_time_ms < 0 then wait_time_ms = 0 endend-- 返回:不允许,当前计数,需等待的毫秒数return {0, current_count, wait_time_ms}end-- 4. 未超限,记录本次请求
redis.call("ZADD", KEYS[1], current_time, tostring(current_time))-- 5. 刷新键的过期时间
redis.call("EXPIRE", KEYS[1], key_ttl)-- 返回:允许,新的计数,无需等待return {1, current_count + 1, 0}

返回结果:

  • allowed:是否允许 (1/0)
  • new_count:当前窗口内的最新请求数
  • retry_after_ms:让我们在 API 响应中提供精确的 Retry-After 头部。

在 FastAPI 中的优雅集成
此示例使用redis-py的异步客户端redis.asyncio,并将限流器作为依赖项应用。

from fastapi import FastAPI, Request, HTTPException, Depends
import time
import redis.asyncio as redis

app = FastAPI(title="带滑动窗口限流的API服务")# 初始化异步Redis客户端
redis_client = redis.Redis(host="localhost", port=6379, decode_responses=False)# 将上面的Lua脚本内容粘贴在这里
LUA_SLIDING_WINDOW_SCRIPT = """
-- ... Lua脚本内容同上 ...
"""
_script_sha1 = None  # 缓存脚本加载后返回的SHA1值# 限流配置
RATE_LIMIT_WINDOW = 60  # 时间窗口:60秒
RATE_LIMIT_MAX_REQS = 60 # 最大请求数:60次
KEY_EXPIRE_BUFFER = 120  # 键的过期时间(稍长于窗口,便于调试)def _get_current_ms():"""获取当前毫秒时间戳"""return int(time.time() * 1000)async def _ensure_script_loaded():"""确保Lua脚本已被加载到Redis服务器"""global _script_sha1
    if _script_sha1 is None:
        _script_sha1 = await redis_client.script_load(LUA_SLIDING_WINDOW_SCRIPT)async def sliding_window_rate_limiter(request: Request):"""
    核心限流依赖项。
    可被用于全局中间件或单个路由的 `dependencies=[Depends(sliding_window_rate_limiter)]`。
    """await _ensure_script_loaded()# 1. 构造限流对象的标识符#    优先使用API Key,否则使用客户端IP(根据你的认证体系调整)
    api_key = request.headers.get("X-API-Key")
    client_identifier = api_key if api_key else request.client.host

    # 2. 可选:将请求路径也作为限流维度的一部分,实现更细粒度控制
    request_path = request.url.path
    redis_key = f"rate_limit:{client_identifier}:{request_path}"# 3. 原子化执行限流逻辑
    result = await redis_client.evalsha(
        _script_sha1,1,  # 表示后面只有一个Key
        redis_key,
        _get_current_ms(),
        RATE_LIMIT_WINDOW * 1000,  # 转为毫秒
        RATE_LIMIT_MAX_REQS,
        KEY_EXPIRE_BUFFER
    )

    allowed, current_count, retry_after_ms = int(result[0]), int(result[1]), int(result[2])# 4. 如果被限流,抛出标准的429错误if not allowed:# 将毫秒转换为秒(向上取整,最少1秒)
        retry_after_seconds = max(1, (retry_after_ms + 999) // 1000)raise HTTPException(
            status_code=429,
            detail={"code": "rate_limit_exceeded","message": "请求过于频繁,请稍后再试。","retry_after": retry_after_seconds,"limit": RATE_LIMIT_MAX_REQS,"window": RATE_LIMIT_WINDOW,},
            headers={"Retry-After": str(retry_after_seconds),"X-RateLimit-Limit": str(RATE_LIMIT_MAX_REQS),"X-RateLimit-Remaining": "0","X-RateLimit-Reset": str(int(time.time()) + retry_after_seconds),})# 5. 请求通过,可以在此处将剩余次数等信息添加到响应头(可选)# response.headers["X-RateLimit-Remaining"] = str(RATE_LIMIT_MAX_REQS - current_count)return True# 在需要限流的路由上使用依赖项
@app.get("/api/v1/search", dependencies=[Depends(sliding_window_rate_limiter)])async def search_products(query: str):"""商品搜索接口,受滑动窗口限流保护。"""# 这里是你的业务逻辑...return {"results": [], "query": query}# 健康检查接口通常不需要限流
@app.get("/health")async def health_check():return {"status": "healthy"}

为什么这种方法能避免误判?

  1. 真正公平:平稳发送请求的用户不会在“59秒”和“00秒”的边界上被误伤。
  2. 精准评估:突发流量会在一个连续滑动的窗口内被评估,而非两个割裂的“时间桶”。
  3. 体验友好:返回的 Retry-After 时间是基于窗口中最早的那个请求计算的,告诉用户一个明确的、合理的重试时间,而不是“请稍后再试”这种模糊提示。

上生产环境前,务必考虑的几点

  1. 使用Redis作为唯一可信源(而非应用内存)
    只要你部署了多个 FastAPI 实例,就必须使用 Redis 这类外部存储来做计数。各个Pod内存里的计数器互不干扰,限流就形同虚设。
  2. 谨慎使用纯IP限流
    除非是面向公众的、最基础的防护,否则尽量结合用户身份。一个公司的出口IP背后可能有成百上千的员工,一人犯错,全员被封,并不是一个合适的方式。
  3. 考虑差异化限流成本
    查询接口 和 数据导出接口 对服务器的压力差别很大。可以为不同接口设置不同的 (窗口, 次数) 组合,甚至引入更高级的 令牌桶算法 来应对复杂成本。
  4. 制定故障降级策略
    如果 Redis 挂了怎么办?

    • 故障开放:对于 查询类、非核心 接口,可以选择暂时放行,保证核心业务可用。
    • 故障关闭:对于 登录、支付、发送验证码 等敏感接口,应该严格失败,防止在缓存失效时被攻击。

小结
一个好的API限流器,不应该让守规矩的用户感到访问如同碰运气一般。通过 FastAPI + Redis + 滑动窗口 这个组合,可以获得的是一个行为可预测、边界处理平滑、反馈信息有用的限流方案。

作者:江昱

在构建 Agent 应用时,凭证管理是一个容易被忽视但又极其重要的问题。一个典型的 Agent 应用会面临两个方向的凭证需求:向内,用户如何安全地调用你的 Agent?向外,Agent 如何安全地调用外部服务?

传统做法存在诸多问题。硬编码在代码里容易泄露且难以更新,存在配置文件中同样有安全风险,每次都手动传递不仅麻烦还容易出错,让大模型处理凭证更是巨大的安全隐患。更棘手的是,当凭证需要更新时(比如 API Key 过期、权限变更),如何在不重启服务的情况下动态更新?函数计算 AgentRun 的凭证管理系统就是为了解决这些问题而生。

image

入站凭证与出站凭证:双向安全保障

函数计算 AgentRun 的凭证管理分为两个维度,分别解决“谁能调用我”和“我能调用谁”的问题。

入站凭证:控制谁能访问你的 Agent

image

入站凭证用于控制外部用户或系统如何访问你的 Agent 应用。当你创建一个 Agent 并对外提供服务时,需要确保只有授权的用户才能调用。函数计算 AgentRun 提供了灵活的入站凭证管理,可以为不同的调用方生成独立的凭证,设置不同的权限和配额,控制每个凭证能访问哪些 Agent、调用频率限制、有效期等。

由于所有请求都经过函数计算 AgentRun 网关,入站凭证可以实现真正的动态更新。 比如你的 Agent 对外提供客服能力,可以为不同的业务部门生成不同的入站凭证,每个部门只能访问各自授权的 Agent。当某个部门的凭证泄露时,可以立即撤销并重新生成,所有变更在网关层实时生效,不影响其他部门的使用,也无需重启任何服务。

出站凭证:安全调用外部服务

image

出站凭证用于 Agent 访问外部服务时的身份认证。Agent 应用通常需要调用各种外部服务:大模型 API(OpenAI、Claude、Qwen 等)、数据库、第三方工具、企业内部系统等,每个服务都需要相应的凭证。传统方式下,开发者要么把这些凭证硬编码在代码里,要么通过环境变量传递,不仅不安全,更新时还需要重启服务。

函数计算 AgentRun 采用了一套巧妙的定时查询与缓存机制来管理出站凭证。 所有出站凭证统一存储在加密的凭证库中,代码里不再出现任何敏感信息。Agent 启动时会从凭证库拉取所需的所有凭证并缓存到本地,运行过程中直接使用本地缓存,避免频繁的网络请求带来的性能开销。同时,系统会定期进行健康检查,主动查询凭证是否有更新,发现变更时只更新发生变化的凭证。如果健康检查失败,会自动重试,确保凭证始终可用。

image

这种定时查询方案带来了多重价值。 从性能角度看,本地缓存避免了每次调用都查询凭证库,大幅降低了延迟和网络开销;从可用性角度看,即使凭证服务短暂不可用,缓存的凭证仍然可用,不会影响 Agent 的正常运行;从安全性角度看,定时健康检查确保凭证泄露或过期时能在几分钟内完成更新,而不需要等到下次部署。最关键的是,整个更新过程对 Agent 代码完全透明,开发者无需编写任何凭证更新逻辑,专注于业务实现即可。

这种最终一致性的设计在实践中被证明是最优的平衡:既保证了性能和可用性,又实现了凭证的动态更新能力。相比于每次都实时查询(性能差)或者只在启动时加载(更新不及时),定时查询方案在三者之间找到了最佳平衡点。

实际应用:工具和模型的凭证配置

函数计算 AgentRun 的凭证管理在两个关键场景发挥作用,展示了从理论到实践的完整闭环。

场景一:大模型调用的凭证管理

当你的 Agent 需要调用多个大模型时,每个模型都需要各自的 API Key。以前你可能需要在代码里硬编码这些 Key,或者通过环境变量传递,但这样做存在安全风险且更新困难。有了函数计算 AgentRun 的凭证管理,你只需要在平台上配置各个模型的出站凭证,给每个凭证命名(如 openai_key、qwen_key),然后在 Agent 配置中引用这些凭证名称。

运行时系统会自动注入实际的 Key,你的代码里完全看不到任何敏感信息。当某个模型的 Key 过期需要更新时,只需在凭证管理界面更新,几分钟后所有使用该凭证的 Agent 会通过定时健康检查自动获取新的 Key,无需修改代码或重启服务。这种体验就像是有一个智能管家在后台默默地帮你管理所有的钥匙,你只需要告诉他你要开哪扇门。

# Agent 配置示例(伪代码)
models:
  - name: gpt-4
    credential: ${credentials.openai_key}  # 引用凭证名称,不暴露实际Key
  - name: qwen-max
    credential: ${credentials.qwen_key}

场景二:工具调用的凭证注入

回到之前提到的 FunctionQ 案例,这是一个更复杂但也更能体现凭证管理价值的场景。Agent 需要通过 MCP 调用 CLI 工具查询用户的函数计算资源,这些工具需要用户的 AccessKey 和 SecretKey。关键问题是:如何在不暴露凭证给大模型的前提下,让工具能够正确调用 API?

函数计算 AgentRun 通过前置 Hook 实现了优雅的动态凭证注入。 用户在平台上配置自己的出站凭证后,Agent 调用工具时请求中只携带用户 ID,不包含任何凭证信息。前置 Hook 拦截请求,根据用户 ID 从凭证库获取对应的凭证,然后将凭证注入到环境变量或请求参数中。工具使用注入的凭证执行实际操作,后置 Hook 再清理敏感信息并记录审计日志。整个过程中,凭证从未暴露给大模型,也不会出现在 Agent 的代码中,真正做到了安全可控。

image

核心价值:让开发者专注业务逻辑

函数计算 AgentRun 的凭证管理系统带来的价值远不止“管理凭证”这么简单。从安全性角度看,凭证不再出现在代码和日志中,集中加密存储大幅降低泄露风险,即使某个凭证泄露也可以快速撤销和更换。从开发效率角度看,开发者不需要关心凭证如何存储、如何传递、如何更新,只需在配置中引用凭证名称,系统自动处理剩下的事情。从运维角度看,凭证更新不需要修改代码、不需要重新部署、不需要重启服务,在管理界面更新后通过定时机制自动生效。

更重要的是,凭证管理让 Agent 应用从“能用”变成“敢用” 。企业不再担心凭证泄露的风险,不再为凭证更新而头疼,不再因为安全问题而犹豫是否将 Agent 应用部署到生产环境。这种信心的建立,才是凭证管理最大的价值所在——它消除了企业拥抱 AI Agent 的最后一道顾虑,让技术真正为业务创造价值。

立即体验函数计算 AgentRun

函数计算 AgentRun 的无代码到高代码演进能力,现已开放体验:

查看更多产品详情:https://www.aliyun.com/product/fc/agentrun

  1. 快速创建:访问控制台(https://functionai.console.aliyun.com/cn-hangzhou/agent/explore),60 秒创建你的第一个 Agent
  2. 深度定制:当需要更复杂功能时,一键转换为高代码
  3. 持续演进:利用函数计算 AgentRun 的基础设施能力,持续优化你的 Agent

从想法到上线,从原型到生产,函数计算 AgentRun 始终是你最好的伙伴。欢迎加入“函数计算 AgentRun 客户群”,钉钉群号:134570017218。

快速了解函数计算 AgentRun:

一句话介绍: 函数计算 AgentRun 是一个以高代码为核心的一站式 Agentic AI 基础设施平台。秉持生态开放和灵活组装的理念,为企业级 Agent 应用提供从开发、部署到运维的全生命周期管理。

image

函数计算 AgentRun 架构图

函数计算 AgentRun 运行时基于阿里云函数计算 FC 构建,继承了 Serverless 计算极致弹性、按量付费、零运维的核心优势。通过深度集成 AgentScope、LangChain、RAGFlow、Mem0 等主流开源生态。函数计算 AgentRun 将 Serverless 的极致弹性、零运维和按量付费的特性与 AI 原生应用场景深度融合,助力企业实现成本与效率的极致优化,平均 TCO 降低 60% 。 

让开发者只需专注于 Agent 的业务逻辑创新,无需关心底层基础设施,让 Agentic AI 真正进入企业生产环境。

兄弟们,我是大霖。

今天不说废话,开门见山。

最近我后台的私信快炸了,清一色的哀嚎:“大霖哥,Sora2是不是又崩了?” “我买的中转站API怎么十次失败九次?” “这玩意儿的风控是不是疯了,我就是想生成个小猫跑酷的视频啊!”

看着这些消息,我眼前浮现出一幅赛博朋克末日景象:无数的开发者和内容创作者,对着屏幕上鲜红的“Error”和“Task Failed”提示,默默点上一根电子烟,感觉自己的数字生命正在被无情地燃烧。

哈哈哈,是不是说到你心坎里了?

今天的核心议题就一个:Sora2的“API末日”真的来了吗?以及,我们这些数字世界的游民,该如何找到那艘能稳定航行的诺亚方舟?

一、风暴中心:Sora2 API的“集体沦陷”
首先,得承认一个事实:是的,你们的感觉没错。最近全网的Sora2 API接口,确实正经历一场前所未有的大动荡 。很多之前还能勉强用用的中转站,现在基本处于半瘫痪状态。

我花了两天时间,把我收藏夹里几乎所有的API供应商都测了一遍,结果嘛……只能用“惨不忍睹”来形容。

A平台: 曾经的“性价比之王”,现在提交10个任务,能成功2个就算祖上积德了。失败率飙升,客服永远在排队。
B平台: 号称“官方直连”,结果延迟高到离谱,生成一个10秒视频,我都能看完一集泡面番了。更可气的是,失败了还不退款,钱就这么打了水漂。有家平台失败率甚至超过了30%,退款流程还极其复杂 。
C平台: 玩起了玄学,同样的提示词,上午能出片,下午就“内容安全警告”。这背后就是所谓的Sora2风控(Risk Control)和账号负载(Account Load Balancing)问题。
这背后到底发生了什么?

简单来说,OpenAI官方对于Sora2的API调用,设置了极其严格的风控策略和不透明的账号负载机制 。那些中转站,本质上是“二道贩子”,他们手里可能只有有限的几个官方账号。当大量用户通过他们请求Sora2时,这些账号就会被高并发请求冲垮,或者因为某些用户的“危险”提示词而被风控系统标记,导致整个账号池污染,最后“一锅端”。

结果就是,你,作为一个无辜的终端用户,发现自己的请求莫名其妙就失败了。你不知道是你的提示词有问题,还是中转站的账号被封了。你只知道,你的钱没了,视频也没生成出来 。

这种感觉,就像在黑暗森林里行走,不知道哪一步就会踩空,非常没有安全感。

二、拨开迷雾:如何判断一个API中转站靠不靠谱?
好了,吐槽结束,上点干货。在当前这种混乱的局面下,我们怎么判断一个Sora2 API服务商是不是在“割韭菜”?

记住大霖我总结的黄金三原则,这比你看一百篇评测都有用:

  1. 看失败率,更要看失败是否退款! 这绝对是第一铁律。一个敢于承诺“失败不计费”或“调用失败自动退款”的平台,至少说明两点:第一,他们对自己的技术和渠道稳定性有信心;第二,他们有最基本的商业道德,不赚用户的“冤枉钱”。市面上很多平台,失败了就扣费,你找客服理论,他就跟你打太极。这种平台,有一个算一个,都是垃圾,直接拉黑 。真正靠谱的平台,应该是成功了才计费,这才是对开发者最大的尊重。
  2. 看并发限制,是不是真“无限”? 很多平台嘴上说着“不限并发”,但你稍微上点量,请求就开始排队,甚至直接拒绝。这说明他们的底层架构和账号池根本撑不住。对于需要批量生成视频的团队或应用来说,这一点是致命的。一个真正无并发限制的API,才能保证你的业务在高并发场景下的流畅运行 。
  3. 看接入是否简单,文档是不是人话? 都2026年了,如果一个API的接入还需要你研究半天文档,配置一堆复杂的参数,那它本身就是个失败的产品。好的API应该是“傻瓜式”的,几行代码就能跑通,文档清晰明了,提供现成的代码示例。
    记住这三点,你基本上就能过滤掉市面上90%的坑货。

三、我的选择:速创API,黑暗中的那束光
我知道,你们肯定要问:“大霖,别卖关子了,你到底用的是哪家?”

行,不装了,我摊牌了。

在我几乎要放弃,准备回归Midjourney+Runway的原始人时代时,一个同样在AI圈子里摸爬滚打的朋友,给我甩了个链接——速创API(官网自己搜,我就不贴了,免得说我打广告)。

我当时抱着死马当活马医的心态,充了10块钱进去试试。

然后……卧槽,世界瞬间清净了。

稳定性: 我用脚本挂着跑了一晚上,提交了大概500个任务,涵盖各种刁钻的提示词。你猜怎么着?成功率高得吓人。除了几个我自己写得太离谱的提示词导致内容安全失败外,几乎全部成功生成。官方自己监测的数据说成功率高达98.7% ,我个人体感也差不多。
计费模式: 这才是最骚的。速创API真正做到了“成功才计费,失败秒退款” 。我那几个失败的任务,费用几乎是瞬间就退回到了我的账户余额里,根本不用我操心。有用户实测退款在5分钟内到账 ,我自己的体验是更快。这TM才叫格局!
价格: 价格低到让我怀疑人生,Sora2的调用低至0.2元/次 。什么概念?一杯奶茶的钱,够你一个人一下午的创意挥霍了。这成本,对于独立开发者或者小型工作室来说,简直是天降福音。
并发和接入: 无并发限制,这点我亲测了,短时间提交大量任务毫无压力 。接入过程也极其丝滑,官网注册,拿到API Key,对着文档里的示例代码改两行,直接就能跑。
说实话,我已经很久没有体验过这么流畅的API服务了。它给我的感觉,不像是市面上那些草台班子搭起来的中转站,而是一个真正懂开发者、尊重开发者的技术平台。

四、写在最后
Sora2毫无疑问是AI视频生成的里程碑,它被誉为“世界模拟器” 正在以前所未有的方式降低内容创作的门槛 。但越是强大的工具,就越需要稳定可靠的“管道”来输送它的能量。

在当前这个Sora2 API接口混乱的“战国时代”,选择一个靠谱的供应商,远比你研究如何写出花里胡哨的提示词更重要。因为一个不稳定的API,会不断消耗你的时间、金钱和创作热情。

我今天的分享,不是给速创API打广告,而是把我从坑里爬出来的经验,分享给还在坑里挣扎的兄弟们。

记住,判断一个API中转站靠不靠谱,核心就看两点:失败率高不高,失败了退不退款 。

好了,不废话了。我要生成我的赛博朋克短片了。你们也别在那些“已崩”的平台上浪费生命了。

数字生命,就应该用在更酷的事情上。

大霖, out.

令牌:sk-kFEhuzNdQmqoayHHj0dItoKVvUT3Nzbj001ImhexpRm0ZCRm
URL:http://newapi.site-ali.sakuraovo.site/

扣子上我有好多点数呀,但是不知道 coze 上到底有多少模型能用

目前就开了 deepseek 和豆包 1.6

佬们要是知道有别的模型我再放上去


📌 转载信息
原作者:
Huameitang
转载时间:
2026/1/24 06:33:14

OpenCode 配置指南

配置文件位置

  • 主配置文件: ~/.config/opencode/opencode.json (供应商和模型配置)
  • 认证文件: ~/.local/share/opencode/auth.json (API Key 存储)
  • 全局提示词: ~/.config/opencode/AGENTS.md (全局行为规范)
  • 项目提示词: <项目根目录>/AGENTS.md (项目特定规范)

快速配置步骤

1. 配置供应商

~/.config/opencode/opencode.json 中添加供应商配置:

{ "$schema": "https://opencode.ai/config.json", "provider": { "供应商名称": { "options": { "baseURL": "https://api.供应商域名.com/v1" }, "models": {} } } } 

参数说明:

  • 供应商名称: 自定义供应商名称 (如 claude、openai智谱 aixxx 中转站 `)
  • baseURL: API 服务的基础 URL

2. 配置 API Key

方式一:使用命令行 (推荐)

# 登录或更新某个供应商的 Key
opencode auth login

# 查看当前已配置的所有供应商和 Key 状态
opencode auth list

# 删除指定供应商的 Key
opencode auth logout <供应商名称>

方式二:手动编辑配置文件

~/.local/share/opencode/auth.json 中添加对应供应商的 API Key:

{ "供应商名称": { "type": "api", "key": "你的API密钥" } } 

注意: auth.json 中的供应商名称必须与 opencode.json 中的供应商名称完全一致。

3. 配置模型

在供应商下添加模型配置:

{ "provider": { "供应商名称": { "options": { "baseURL": "https://api.供应商域名.com/v1" }, "models": { "claude-sonnet-4-5-20250929": { "id": "claude-sonnet-4-5-20250929", "name": "Claude Sonnet 4.5", "cost": { "input": 3, "output": 15 }, "limit": { "context": 200000, "output": 64000 }, "reasoning": true, "temperature": true, "tool_call": true, "attachment": true } } } } } 

模型参数说明:

参数类型说明
idstring模型的唯一标识符,用于 API 调用
namestring模型的显示名称
cost.inputnumber输入 token 成本 (每百万 token 美元)
cost.outputnumber输出 token 成本 (每百万 token 美元)
limit.contextnumber最大上下文长度 (token 数)
limit.outputnumber最大输出长度 (token 数)
reasoningboolean是否支持推理模式
temperatureboolean是否支持温度参数调节
tool_callboolean是否支持函数 / 工具调用
attachmentboolean是否支持文件附件

API Key 管理

优先级机制

OpenCode 选择 API Key 的优先级如下:

  1. 环境变量 (最高优先级)

    • 例如: ANTHROPIC_API_KEYOPENAI_API_KEYOPENCODE_<供应商名称>_APIKEY
    • 只要设置了环境变量,优先使用环境变量中的值
  2. 本地配置文件 (备选)

    • 如果没有设置环境变量,才使用 ~/.local/share/opencode/auth.json 中的 Key
    • 此时使用的是该供应商最后一次执行 auth login 时输入的 Key

覆盖机制

  • 对同一个供应商多次执行 opencode auth login后一次登录会覆盖前一次的 Key
  • 环境变量始终优先于配置文件

配置示例

完整配置示例

opencode.json:

{ "$schema": "https://opencode.ai/config.json", "provider": { "供应商1": { "options": { "baseURL": "https://api.供应商1域名.com/v1" }, "models": { "claude-sonnet-4-5-20250929": { "id": "claude-sonnet-4-5-20250929", "name": "Claude Sonnet 4.5", "cost": { "input": 3, "output": 15 }, "limit": { "context": 200000, "output": 64000 }, "reasoning": true, "temperature": true, "tool_call": true, "attachment": true } } }, "供应商2": { "options": { "baseURL": "https://api.供应商2域名.com/v1" }, "models": { "claude-haiku-4-5-20251001": { "id": "claude-haiku-4-5-20251001", "name": "Claude Haiku 4.5", "cost": { "input": 1, "output": 5 }, "limit": { "context": 200000, "output": 64000 }, "reasoning": true, "temperature": true, "tool_call": true, "attachment": true } } } } } 

auth.json:

{ "供应商1": { "type": "api", "key": "你的API密钥1" }, "供应商2": { "type": "api", "key": "你的API密钥2" } } 

安全建议

  1. 文件权限

    • 设置 auth.json 为仅当前用户可读: chmod 600 ~/.local/share/opencode/auth.json
    • 不要将 auth.json 提交到版本控制系统
  2. 环境隔离

    • 开发环境和生产环境使用不同的 API Key
    • 推荐使用环境变量或项目根目录下的 .env 文件管理 Key
    • 确保 .env 已加入 .gitignore
  3. Key 管理

    • 定期轮换 API Key
    • 使用具有适当权限限制的 API Key
    • auth.json 目前为明文存储,请勿随意分享
  4. 备份

    • 建议定期备份配置文件
    • auth.json 备份时注意安全存储

提示词配置

OpenCode 支持通过 AGENTS.md 文件自定义 AI 助手的行为规范和工作流程。

提示词类型

OpenCode 提供两种级别的提示词配置:

  1. 全局提示词 - 对所有项目生效
  2. 项目提示词 - 仅对当前项目生效

提示词文件位置

类型文件路径作用范围
全局提示词~/.config/opencode/AGENTS.md所有项目
项目提示词<项目根目录>/AGENTS.md当前项目

优先级机制

当同时存在全局和项目提示词时:

  • 项目提示词优先级更高,会覆盖全局提示词中的相同配置
  • 两者会合并使用,项目提示词补充项目特定的规范

提示词内容示例

全局提示词 (~/.config/opencode/AGENTS.md):

# OpenCode 全局提示词 ## 核心原则 - 严谨工作态度,保证完美质量标准
- 直接输出代码或方案,禁止客套话
- 回复简洁明了,使用中文

## 代码规范 - 遵循项目现有代码风格
- 优先编写直观的线性逻辑
- 考虑边界条件和极端情况

## Git 工作流 - 仅在明确要求时提交
- 遵循约定式提交消息格式
- 提交前检查 git status 和 git diff

项目提示词 (<项目根目录>/AGENTS.md):

# 项目名称 - 项目特定提示词 ## 项目概述
这是一个 XXX 项目,使用 XXX 技术栈。

## 目录结构 

project/
├── src/ # 源代码
├── tests/ # 测试文件
└── docs/ # 文档

 ## 项目规范 - 使用 TypeScript 严格模式
- 测试覆盖率要求 80% 以上
- 所有 API 必须有 JSDoc 注释

## 工作流程 1. 修改代码前先运行测试
2. 完成后运行 `npm run lint``npm test` 3. 提交信息格式: `<type>(<scope>): <subject>` 

提示词配置建议

  1. 全局提示词

    • 定义通用的代码规范和工作原则
    • 设置统一的命名规范和注释风格
    • 配置 Git 提交规范
  2. 项目提示词

    • 说明项目的技术栈和架构
    • 描述项目特定的目录结构
    • 定义项目特有的工作流程和规范
    • 列出项目常用的命令和工具
  3. 最佳实践

    • 保持提示词简洁明确,避免冗长描述
    • 使用 Markdown 格式,便于阅读和维护
    • 定期更新提示词,与项目演进保持同步
    • 将敏感信息(如密码、密钥)排除在提示词之外

如何创建提示词文件

创建全局提示词:

# 创建配置目录(如果不存在) mkdir -p ~/.config/opencode

# 创建全局提示词文件 touch ~/.config/opencode/AGENTS.md

# 编辑文件
vim ~/.config/opencode/AGENTS.md

创建项目提示词:

# 在项目根目录创建 cd /path/to/项目目录
touch AGENTS.md

# 编辑文件
vim AGENTS.md

# 建议将 AGENTS.md 加入版本控制
git add AGENTS.md
git commit -m "docs: add project-specific agent instructions" 

提示词生效时机

  • 全局提示词: OpenCode 启动时自动加载
  • 项目提示词: 打开项目目录时自动加载
  • 修改后: 需要重启 OpenCode 或重新打开项目才能生效

常见问题

如何添加新的 API 供应商?

  1. opencode.json 中添加供应商配置 (baseURL 和 models)
  2. auth.json 中添加对应的 API Key 或使用 opencode auth login
  3. 重启 OpenCode

如何切换不同的模型?

在 OpenCode 界面中按 Ctrl+P,选择 “Switch Model” 即可切换已配置的模型。

如何验证配置是否正确?

启动 OpenCode 后,尝试发送一条消息。如果配置正确,模型会正常响应。如果出错,检查:

  • 供应商名称是否在两个文件中一致
  • API Key 是否正确
  • baseURL 是否可访问

支持哪些 API 供应商?

OpenCode 支持所有兼容 OpenAI API 格式的供应商,包括:

  • Anthropic Claude
  • OpenAI GPT
  • Azure OpenAI
  • 智谱 AI
  • 各类第三方 API 代理服务

环境变量和配置文件同时存在时使用哪个?

环境变量优先级更高。如果设置了环境变量 (如 ANTHROPIC_API_KEY),OpenCode 会优先使用环境变量中的 Key,忽略 auth.json 中的配置。

更多帮助


📌 转载信息
转载时间:
2026/1/19 18:27:32

主贴:Claude in Excel ++
1、先下载 xml 文件
https://pivot.cometix.dev/manifest.xml

2、保存到一个文件夹下

3、共享这个文件夹

4、excel 信任中心添加共享路径

5、添加加载项。会出现共享文件夹选项

6、添加 apikey
点开 Claude for excel,公益站我用的 wong。Claude-opus-4-5


word 中的使用,我只能说很强,虽然会死循环,不知道为啥


好像都会死循环。这是啥子问题


📌 转载信息
原作者:
Lsen
转载时间:
2026/1/19 18:26:46

最近发现英伟达的 NIM(NVIDIA Inference Microservices)平台上,竟然可以免费调用 GLM-4.7Minimax-M2.1 这两个重磅模型。
重点是:不需要你有 4090,也不需要复杂的部署,只需要一个 API Key。
保姆级教程:
如何免费获取 Key 整个过程非常简单,大概只需要 3 分钟。
第一步:注册与登录直接访问 NVIDIA NIM 的集成主页:
https://build.nvidia.com/explore/discover 如果你没有英伟达账号,需要注册一个。建议使用邮箱注册


第二步:手机号验证(关键)
这是很多人卡住的地方。注册成功后,为了防止滥用,英伟达要求验证手机号。** 亲测:中国大陆的 +86 手机号是可以完美支持的。** 在验证页面选择 “China”,输入你的手机号,接收验证码即可。验证通过后,你就拥有了免费调用 API 的权限。
第三步:获取 API Key
登录成功后,在模型列表中随便点开一个模型(比如 DeepSeek-R1 或 Llama-3)。点击页面右上角的 “Get API Key” 获取密钥, 点击 “View Code” 查看请求示例。系统会为你生成一个以 nvapi- 开头的密钥。请务必保存好这个 Key。
前面文字内容摘自某公众号,下面是 VSCode 中的具体设置:
API Provider: OpenAI Compatible
Base URL: https://integrate.api.nvidia.com/v1/
OpenAI Compatible API Key: 填你自己申请的 API
Model ID :
GLM-4.7: z-ai/glm4.7
Minimax M2.1: minimaxai/minimax-m2.1

但是有限制:Your API Rate LimitUp to 40 rpm,也挺好

支持的模型


📌 转载信息
原作者:
user484
转载时间:
2026/1/16 12:25:17

老黄为了展示自家 GPU 跑大模型有多快,专门搭建了一个推理平台,把市面上顶级的开源和闭源模型都搬了上去,还有我们熟悉的国产之光:GLM-4.7、 MiniMax M2.1、DeepSeek、Qwen 等。
关键还免费!!!
rpm 40, 访问速度又非常快
而且 + 86 国内手机号就可以申请,还不需要绑信用卡,找谁说理去!
屯屯鼠们还等什么,快去申请
Nvidia AI

  1. 右上角 login 注册 / 登录


    一路火花带闪电、输个邮箱填个验证码就完事儿。
  2. 注册完顶上会提示 Verify (很醒目的一个按钮)
    可以直接使用国内 + 86 手机号验证

  3. 验证完就可以点头像生成 API Key 了

  4. 配置 API(同 OpenAI)
    Base URL: https://integrate.api.nvidia.com/v1
    API KEY: 上一步生成的 nvapi-xxxx

模型太多了,佬们快去探索吧





可以愉快的玩耍了,祝佬们玩儿的开心!


📌 转载信息
原作者:
yanxiang1120
转载时间:
2026/1/16 12:05:02

这里简单介绍一下,这个平台相当于 老黄用自家的显卡,部署了这些模型,然后统一用 OpenAPI 接口来给大家造福利(bushi),但是也确实好用,虽然高峰期的时候会卡,但白嫖是吧
话不多说,让我们 勒死 go

一、从官网进行获取 api-key

起手先注册账户拿钥匙

二、怎么进行使用

1. openapi 格式使用

baseurl: https://integrate.api.nvidia.com/v1/chat/completions
API Key: 就是第一步申请的 key
这里以沉浸式翻译插件,使用 Kimi2-thinking 举例。


添加自定义服务

注意,这里选择 open-api

配置如下:moonshotai/kimi-k2-thinking



然后手动调试一下是否可用


这里打 即可。

tip:如果不知道哪个模型,可以到官网中进行查看,方法如下:



📌 转载信息
转载时间:
2026/1/14 10:39:49

是的,我又来了,不过好像来晚了
BASE_URL: https://code.vmax.fr.cr
API_KEY : sk-eCANOawVuZDRXHmkg7v3wTybGFzbBOGqj2W0Pv50EgDSG9VV
模型:claude-sonnet-4-5-20250929,claude-opus-4-5-20251101,claude-haiku-4-5-20251001 以及 gpt-5.2,gpt-5.1-codex,gpt-5.2-codex
cc 中可直接 /model 切换到 opus

另外 求打赏


📌 转载信息
转载时间:
2026/1/12 17:06:44

用佬友的方案部署的,不知道啥时候失效,用完为止
url:https://etsotlncsvnk.ap-southeast-1.clawcloudrun.com
key:sk-qVGqv9cfMz2T8zhVbKDoRem4M7UhynLbPH46YgrHfZqVCEnJ
可用模型:gemini-3-pro-preview(包含生图)、gemini-3-flash-preview、gemini-2.5-pro、gemini-2.5-flash


📌 转载信息
原作者:
cjdem
转载时间:
2026/1/12 11:38:21


如图称号,在随便哪个地方发个帖(不是回复)
里面包含一个单行的链接就行
比如


这一行就是可以呼出 Onebox 的


📌 转载信息
原作者:
wattstudio666
转载时间:
2026/1/11 08:32:44

英伟达 NIM 开发者平台两个最近很火的国产模型 GLM-4.7 和 MiniMax M2.1,下面教大家手把手免费薅 API

1、打开 build.nvidia.com 点击右上角的 login,输入邮箱地址,点击 Next


2、自动跳转到创建 nvidia 账户页面,创建账户


3、邮箱会收到一个 6 位验证码,填进去。在 nvidia cloud 界面,随便输入一个用户名,进行下一步


4、页面右上角会出现一个 Verify,点击出现验证手机号界面,location 选择 china,phone number 填写 86 1xxxxx (自己手机号)。注意一定要先填手机号,再选择国家,要不然下方的 sendcode 按钮为灰色不可点击


5、验证通过后,获取 api key。登录后,点右上角头像 → API Keys。

找到 Generate API Key。给 Key 起个名字,过期时间可以调成 Never Expire,得到的 key 为 “nvapi-” 开头的字符串。复制保存!这个 Key,能调用 NIM 上所有免费模型。


6、API 地址,填入 https://integrate.api.nvidia.com/v1。

API 密钥,就是上面生成的 API Key。

模型,推荐 z-ai/glm4.7、minimaxai/minimax-m2.1 和 moonshotai/kimi-k2-thinking


📌 转载信息
原作者:
user1881
转载时间:
2026/1/6 11:42:04