当RAGAS的Faithfulness指标连续12天撒谎:我构建Judge Agent链与自动回滚监控的完整决策笔记

那个周五晚上,生产环境的RAG应用又崩了一次。用户投诉说回答完全胡编乱造,但监控大盘上RAGAS的Faithfulness曲线稳得像直线——0.94,0.93,0.95。我盯着Grafana发呆,突然意识到:我们花了三个月把手工评测替换成RAGAS流水线,但它连最基础的事实幻觉都没抓到。

这不是RAGAS的错。框架本身定位在检索质量评估,而生成质量——尤其是与用户指令的精确对齐和事实交叉验证——是它指标设计之初就划出去的边界。但多数团队(包括我们)直接把faithfulness当成“最终答案正确率”在用,这是架构层面的认知错误。

接下来两个月,我主导了一个从采集、评分、可视化到自动回滚的完整监控微服务重构。核心思路是:把RAGAS指标只作为检索层健康度的信号,生成质量交给一个自定义Judge Agent链,用结构化多维度评分替代黑箱打分,并把整个管道做成一个独立微服务,最终将生成质量的评测覆盖率从人工5%推到近100%。

本文不教你怎么用RAGAS的API,而是复盘为什么这么做、为什么不那么做,以及每一步架构决策的成本权衡。(延伸阅读:我在Agent Builder上零代码搭了个客服Agent,结果上线第一天就把Cloud Run预算告警打爆了——ADK多智能体审批系统的运维血泪实录)

30秒速览

  • - RAGAS内置指标只度量检索质量,对生成事实性和指令遵循度存在根本盲区,不能作为生产安全网。
  • - 用链式Judge Agent(不是单次多任务Prompt)拆解指令遵循、事实一致性等维度,每个维度独立调优,可解释性强。
  • - 评测管道独立成微服务,通过Kafka解耦、自适应抽样控制负载,并双写PostgreSQL和Prometheus,实现明细和聚合分离。
  • - 引入SPC统计过程控制替代固定阈值,用连续下降规则触发自动回滚,避免单点噪音。
  • - 上线后将生成质量评测覆盖率从人工5%提升到近100%,LLM API月费$7500换来3个QA人力节省和多次线上事故规避。

RAGAS内置指标的生产幻觉:为什么Faithfulness≠安全网

0.1.18版本的四项指标到底在测什么

我们先看RAGAS 0.1.18(当时最新稳定版)提供的四个核心指标源码层在做什么。我把评估过程摊开:

Faithfulness:把生成回答拆成若干原子声明(claims),检索出最相关的上下文片段,然后用一个评判LLM(通常是GPT-3.5-turbo)逐条判断“声明是否可以从片段中推导”。最后得分是 可推断声明数 / 总声明数。注意,它不检查声明本身的真实性——如果检索回的文档本身就胡扯,Faithfulness仍然给高分。

Answer Relevancy:反向生成若干“可以回答当前问题”的候选问题,计算它们与原问题的余弦相似度均值。它衡量的是答案与问题的相关性,本质是语义对齐,完全绕过事实层。

Context Precision与Context Recall:这两个是检索侧指标。Precision衡量相关文档在检索结果中的排序质量,Recall则是相关文档是否被检索覆盖。它们不碰生成。

这就是问题核心:RAGAS的整套指标都是围绕检索-上下文这条链路设计的,对于生成内容本身是否遵循用户特殊指令、是否通过外部知识进行事实交叉验证,它天然盲区。而我们过去的监控,就是把这四项打分加权平均,当作“质量分”展示在仪表盘上。

一次线上事故暴露的Faithfulness盲区

4月份一个周三下午,内容审核团队的同事直接冲到我的工位:“你们那个总结助手,把一份金融文件里的‘营收同比下降2%’总结成了‘同比增长20%’。” 我打开Grafana,Faithfulness曲线纹丝不动——因为那一长串数字总结正好被片段里的某段文字部分覆盖,评判LLM判了True。但那条关键数字本身是颠倒黑白的。

更致命的是,用户指令里要求“以表格形式输出,必须包含同比变化百分比”,我们的模型给出的结果完全是一段自然语言描述,指令遵循度为0。但RAGAS任何一个指标都不会捕捉到这个信号。

这让我意识到:Faithfulness只能回答“答案是否被上下文支持”,不能回答“答案是否正确”,更不能回答“答案是否按用户要求的格式和约束返回”。在金融、医疗、法律等对事实性和合规性敏感的领域,前者远远不够。我们需要一个生成侧的评测系统,专门负责事实一致性和指令遵循度。(延伸阅读:VS Code这AI代码解释器,我调了半年才敢把它塞进CI流水线)

Judge Agent链不是Prompt工程那么简单——多维度评分的架构决策

为什么选择链式Judge而不是单次多任务评估

最初的直觉是用一次LLM调用同时完成事实一致性、指令遵循度等多个维度的评分。我在实验环境用GPT-4o做了一次“全维度评估”的Prompt试验,让模型同时输出1-5分的多项评分和原因。结果发现三个严重问题:

第一,注意力稀释。当要求同时评判6个维度时,GPT-4o对指令遵循细节的判断显著变弱,经常漏掉格式要求(比如“必须用表格”)而直接给高分。这与Transformer的注意力分配机制吻合——多任务评分相当于在softmax上平摊权重,每个维度的有效判别能力下降。

第二,幻觉传染。如果让一次调用同时评估事实和格式,模型很容易把“格式正确”的情绪带到事实评分里,使得整体分数趋同。这在心理学上类似光环效应,在LLM里体现为token序列中的偏见传递。

第三,调试困难。当综合分数不符合预期时,你完全不知道是哪个维度出了问题。单次多任务就像一个黑箱,无法单独校准某个评估维度的Prompt。

所以我决定把Judge Agent拆成链式结构:每个维度独立成一个节点,顺序执行,每个节点专注一件事。结构如下:

  • 指令遵循度Judge:专门解析用户prompt中的格式、风格、长度、角色等约束,逐条比对生成结果。
  • 事实一致性Judge(一级):提取生成答案中的所有事实断言,与检索到的上下文进行对齐,类似Faithfulness但增加对外部世界知识的交叉验证(我们接入了实时的Google Search API作为辅助校验源)。
  • 事实一致性Judge(二级):对一级中被判“不确定”的高风险断言,调用更强的推理模型(Claude 3.5 Sonnet或GPT-4o)进行二次裁定,附带解释。
  • 综合审计Judge:汇总前面各维度结果,输出结构化JSON,包含每个维度的分数、失败点的具体摘录和解释。这个JSON直接入库,不做加权合并。

链式执行的代价是延迟增加,我们实测单条评估从原来的2.3秒(RAGAS单次Faithfulness调用)增加到约4.7秒。但收益是可解释的、可单独调优的独立评分模块。而且因为每个Judge可以被不同强度的模型服务,我们可以把高延迟的二级Judge跑在异步队列里,不影响核心评分链路。

少样本提示设计:事实一致性与指令遵循度的拆解

指令遵循度Judge的Prompt设计是整个过程最耗时的部分。我最终没有用传统的“给几个例子”的few-shot,而是用了一种结构化约束注入的方式。(延伸阅读:当黑客把Prompt注入你的API,传统的WAF只能看戏——我在1000QPS攻击流下重构了大模型的安全防线)

首先把用户原始prompt解析成约束列表(用一次轻量GPT-3.5-turbo调用),例如:

{
  "format": "表格",
  "columns": ["产品名", "变化百分比"],
  "style": "正式",
  "length": "不超过200字"
}

然后把这个约束JSON直接嵌入Judge的系统提示里,要求Judge逐条返回“是/否”并说明理由。这样避免了few-shot里由于样例选择偏差导致的过拟合。事实证明,GPT-4o在结构化判断任务上的稳定性远高于开放式评分。

事实一致性Judge的Prompt关键在于区分“可从上下文验证”和“需要外部知识”。对于前者,沿用RAGAS的claims分解思路,但要求Judge必须给出引用片段。对于后者,我们启动Google Search API,用3条搜索结果作为参考,让Judge判断是否与主流事实吻合。这里有一个成本权衡:每次外部检索耗时约0.8-1.2秒,且产生$0.005的费用。为此我们加了一层缓存,对相同事实短哈希进行存储,缓存命中率后来稳定在40%左右,显著降低了时延和消费。

架构选型对比:LangChain vs. 原生OpenAI API vs. 自研调度器

Judge链的实现有三种典型方案,我在原型阶段全都实现了mini版本做对比:

方案 开发效率 链式编排灵活性 生产稳定性 可观测性 最终选择
LangChain (LangGraph) 高,有现成Chain抽象 高,支持条件边、并行 依赖包版本混乱,回调地狱 需自建trace埋点 否
原生OpenAI/Anthropic SDK + 自研状态机 中,需手写流程控制 极高,完全掌控 高,无外部依赖 天然可埋Prometheus指标 是
结合Celery/任务队列 低,异步逻辑复杂 中,适合长链路 高,成熟的worker管理 依赖Celery监控 否

LangChain的LangGraph当时还处于0.0.x版本,我们在灰度环境碰到过序列化Bug导致状态丢失,而且一旦进入生产排错,回调函数嵌套太深,根本理不清哪里出错。我最终选择了原生SDK加一个轻量状态机(大约200行Python),每个Judge作为一个纯函数,输入字典,输出字典,状态机负责按顺序调用并将中间结果注入上下文。这样做的好处是:每个步骤可以被单独mock测试,延迟和失败率都可以单独打点,不用依赖任何框架的魔法。

代码骨架大致如下:

from typing import Dict, Any, List
from dataclasses import dataclass
from openai import AsyncOpenAI

@dataclass
class JudgeContext:
    question: str
    answer: str
    context_docs: List[str]
    user_constraints: Dict
    results: Dict = field(default_factory=dict)

async def instruction_adherence_judge(ctx: JudgeContext, model: str = "gpt-4o") -> Dict:
    constraints_text = json.dumps(ctx.user_constraints, indent=2)
    prompt = INSTRUCTION_PROMPT.format(question=ctx.question, answer=ctx.answer, constraints=constraints_text)
    resp = await client.chat.completions.create(model=model, messages=[{"role": "system", "content": prompt}], temperature=0.0)
    parsed = parse_judge_response(resp.choices[0].message.content)
    ctx.results["instruction_adherence"] = parsed
    return parsed

async def factual_consistency_judge(ctx: JudgeContext, search_api: SearchAPI) -> Dict:
    claims = extract_claims(ctx.answer)
    external_refs = await search_api.query_batch(claims)
    prompt = FACTUAL_PROMPT.format(answer=ctx.answer, context="n---n".join(ctx.context_docs), external=external_refs)
    resp = await client.chat.completions.create(model="gpt-4o", messages=[{"role": "system", "content": prompt}], temperature=0.0)
    parsed = parse_factuality(resp.choices[0].message.content)
    ctx.results["factual_consistency"] = parsed
    return parsed

# 状态机依次执行
async def run_judges(ctx: JudgeContext) -> Dict:
    await instruction_adherence_judge(ctx)
    await factual_consistency_judge(ctx, search_api)
    await deep_fact_check_for_uncertain(ctx)  # 二级判断
    return ctx.results

这套代码生产运行了6个月,单实例吞吐约12 QPS,P99延迟5.8秒,完全能满足我们每小时数万条生成的抽样评分需求。

从日志到SPC图:把评测变成独立微服务的全部内脏

日志采集与片段提取的坑:异步写入与背压

原来的RAG服务是一个FastAPI应用,每个请求生成答案后通过一个中间件同步调用RAGAS指标计算,然后将结果写入PostgreSQL。一开始我们想直接把Judge链嵌入同一个进程,结果把请求P99从300ms拖到3秒以上,立即下线。

最终的架构是将评测完全拆成独立微服务。FastAPI服务只负责将生成内容异步写入Kafka(我们已有现成消息平台),topic为gen-events。消息体包含:

{
  "request_id": "uuid",
  "user_query": "...",
  "generated_answer": "...",
  "retrieved_contexts": ["...", "..."],
  "timestamp": "2025-02-17T10:11:12Z",
  "metadata": {"model_version": "v3.2.1", "user_id": "..."}
}

评测微服务从Kafka拉取消息,执行Judge链,将评分结果写入另一个表。这个解耦带来的最大好处是:生成服务的延迟不受评测的任何影响,即使评测服务挂了,生产流量照常运行。

但Kafka消费这边碰到了背压问题。高峰期生成事件可达每秒2000条以上,Judge链一秒处理不了那么多。我们采用了自适应抽样:维护一个令牌桶,根据当前评分结果的质量波动动态调整采样率。正常状态下只采样5%,当检测到某一维度评分的移动平均下降超过阈值时,把采样率提高到50%甚至100%。这样把评测服务的CPU控制在50%以内,同时保证关键异常期不漏判。(延伸阅读:把ColPali塞进VideoRAG管道后,我的P99延迟从800ms砸到320ms,但中间烧掉三块A10G的预算)

评分入库与可视化:为什么选择PostgreSQL + Prometheus双写,而不是ClickHouse

有人会建议用ClickHouse这类列存优化大规模评分分析,但我评估后坚持用PostgreSQL做评分明细存储,同时把聚合指标推到Prometheus。理由有三个:

第一,评分明细需要关联查询。一条评分记录常要和用户请求、上下文片段甚至后续反馈做JOIN。我们现有的所有业务关系型表都在PostgreSQL中,使用同一数据库的跨表查询能力,省去数据同步和双写的一致性问题。

第二,评分数据量级可控。我们预估每天抽样的生成事件最多100万条(在自适应采样下约是总量的15%),每条记录2KB,一天写入200MB,保留30天也才6GB,PostgreSQL完全扛得住,不需要引入另一个分析型数据库增加运维复杂度。

第三,监控告警需要实时聚合。我选择在Judge微服务内,每次评分完成后直接向Prometheus Pushgateway推送指标:各维度平均分、通过率、失败条数。Grafana面板上的SPC图、阈值线直接查询Prometheus,延迟毫秒级。评分明细只在需要钻取具体异常答案时才去查PostgreSQL。

表结构设计上,为了应对随时间变化的评估维度,我用了JSONB字段存储评分详情,而不是固定的宽表列。核心表:

CREATE TABLE gen_score (
    request_id UUID PRIMARY KEY,
    model_version TEXT,
    scored_at TIMESTAMPTZ DEFAULT now(),
    score_payload JSONB, -- 包含各维度分值和详情
    judge_time_ms INT,
    trigger_fallback BOOLEAN DEFAULT false
);
CREATE INDEX idx_scored_at ON gen_score(scored_at);

这样当需要新增一个维度(例如“敏感信息泄露检测”)时,不需要改表结构,Judge写入新的key即可,查询用JSONB操作符。

评分数据可视化与统计过程控制(SPC)图

我坚持把生产评分监控做成SPC图而不是简单的趋势线,是源于制造业的质量管理思维。RAG应用的质量波动不应只看“当前值高低”,而要判断过程是否受控。(延伸阅读:我给GPU集群接上了优先级队列和KEDA,高优推理请求的P99延迟终于从3.2秒砸到120ms)

在Grafana里,我用PromQL实现了简易的SPC:

  • 中心线(CL):过去7天评分均值(如faithfulness 0.92)
  • 上控制限(UCL)和下限(LCL):CL ± 3×移动极差均值/常数d2(对于单值移动极差图通常d2=1.128)。PromQL直接用avg_over_time(score[7d]) + 3 * (avg_over_time(abs(score - score offset 1h)[7d]) / 1.128)近似计算。

一旦某个时间窗口的评分连续7个点落在中心线同一侧,或者有单点突破LCL,SPC逻辑就判定过程发生了“特殊原因变异”——这可能是模型退化、检索索引污染,或者上游数据源出现了分布漂移。相比固定阈值(低于0.8就告警),SPC能更早且更可靠地捕捉渐进式退化。

实际发生过一次:新部署的模型版本在前三天faithfulness平均值0.93,看起来健康,但SPC图显示从第4天开始连续6个点低于中心线,触发预警。事后复盘发现,新模型对长尾实体词的幻觉率确实在缓慢上升,固定阈值根本不会触发。这是SPC在生产中价值最直接的体现。

自动回滚不只是一个Webhook——告警规则与模型版本管理的闭环

告警规则设计:为什么连续下降触发回滚,而不是单点超限

在Prometheus Alertmanager中,我设计了两级告警:

  • Warning级别:任一维度评分的15分钟均值低于LCL,且连续3个采集点(每个点间隔5分钟)都低于LCL。触发钉钉群通知,提醒人工关注。
  • Critical级别:faithfulness或指令遵循度的30分钟均值低于0.65(这是业务确定的最低可接受线),并且上一个15分钟的趋势仍是下降。触发自动回滚。

为什么使用连续条件?因为单点抖动在生产环境中太常见——一次网络波动导致外部API超时,会让Factual Judge误判,但整体质量没变。如果单点触发回滚,系统会因为噪音频繁切换模型版本,引入更大的不稳定。

回滚的执行是调用内部CI/CD平台的API,把当前生产模型的流量切回上一个已标记为stable的版本。这个API需要预先注册模型版本和其对应的K8s deployment。当回滚发生后,评测微服务也会重新配置模型版本元数据,确保评分记录正确标记。

此外,我还做了一步“软回滚”:当告警触发但尚未到达Critical阈值时,评测微服务向生成服务的流量管理器发送信号,让新版本模型的请求比例从100%逐步降到10%,让旧版本承担90%流量,同时持续监控评分。这种灰度回退避免了瞬间切换带来的请求丢失,也给了开发人员介入修复的缓冲窗口。

上线前后对比:从5%到100%的覆盖率背后的真实成本

在评测管道全面取代人工之前,我们有一个“质量值班员”机制,每天人工抽查生产日志里的回答,每人花1小时,大约能看200条,覆盖率约5%。上线后,评测微服务每秒抽样200条(高峰期),非高峰期全量(夜间流量低,全检成本可接受),日均覆盖超过50万条生成,覆盖率接近100%。

直接成本方面:

  • Judge调用LLM费用:GPT-4o定价$5/1M input tokens,按每条评估平均消耗800 input tokens计算,日均50万条成本约$200,月成本$6000。加上Google Search API调用费,月总成本约$7500。相比之前需要3个全职QA人员轮班人工抽查(每人年成本$80K),半年内ROI已为正。
  • 基础设施:一个4核8GB的评测微服务容器(K8s),加一个4核16G的PostgreSQL实例(已有集群中),成本几乎可忽略。
  • 额外收益:自动回滚机制在3个月内成功拦截了4次模型退化上线,避免了至少两次严重用户投诉。用工程成本量化收益的话,避免的事故和人工排查时间足以覆盖整套系统一年的费用。

但最重要的是,评测不再是一个断断续续的人脑判断,而是变成了持续运行的系统信号,可以集成到CICD流水线中作为质量门禁。现在每次模型训练完,都会先经过Judge链在staging环境评测,评分达标才允许上线。这是人工永远无法做到的闭环。

写到最后,回想起来,放弃对RAGAS单一指标的迷信,转而去构建一个以Judge Agent链为核心的、可观测、可自动干预的质量微服务,本质上是从“事后检查”转向“过程控制”。这才是让生成式AI能在生产环境真正稳定运行的底层逻辑。

✨ 本文由 AI 辅助生成(作者人设:陈硕),已经自动化事实核查流程处理,但仍可能存在不准确之处,具体信息请以官方文档为准。

觉得有用?

零垃圾邮件 · 随时退订

陈硕

后端架构师,在互联网公司干了10年,从单体应用到微服务再到Service Mesh都踩过。技术栈偏Java和Go,但对好技术不挑语言。喜欢画架构图,喜欢刨根问底看源码,认为「能用」和「好用」之间隔着一个量级的工程能力。

📖 系列文章:LLM 微调与部署

LoRA 微调到 vLLM 生产部署完整路径

  1. INT8量化掉精度?我折腾了三天,用分层量化+QAT把8%的损失捞回7.5%
  2. RAG系统优化实战:延迟从3.2s降到0.8s,我交的学费全在这里了
  3. 一张4090训出的7B模型,在某些任务上暴打GPT-4,然后被生产环境连捅四刀(2023)
  4. 我用知识图谱给RAG装上大脑:从制度合规到医疗问答,幻觉率暴降70%的架构实录
  5. 我让客服意图识别模型靠50条标注+LoRA转起来,准确率从78%卷到91%——中小团队的数据飞轮实操手记
  6. 10%知识数据让模型事实一致性飙升27%:我用正交实验三周找到微调黄金配比7:2:1
  7. 从“省着点花”到“精确到每token成本”——我在云账单里翻到的秘密
  8. 我不再给长文档切块了——Gemini 2.5 Pro百万token上下文让我重写了整个问答系统
  9. 那个看起来无害的LoRA权重文件,差点偷走了我的AWS密钥——我用SBOM+LLM给AI供应链上了三道锁
  10. 我花30天把Llama 3.1 405B微调压进4张RTX 4090,烧掉$1200后总结的量化与分布式策略
  11. 我拿47个模型跑了一遍AWS Inf2,发现大模型部署成本砍半的核心条件90%的团队都不具备
  12. ▸ 当RAGAS的Faithfulness指标连续12天撒谎:我构建Judge Agent链与自动回滚监控的完整决策笔记
  13. AWS Inf2推理实例:号称成本直降40%,但我的压测数据揭示了什么投资委员会必须知道的事
  14. 当质检员开口说话,图纸和视频自动重组——我在多模态RAG上赌的这把,比CxO想象的更大
  15. 我让Codestral Mamba在256k上下文中跑补全,速度是GPT-4的3倍,但上下文管理差点让我翻车(2024)
  16. ReAct论文里的Agent推理很美,我在AWS Bedrock上复现时却被动作组和知识库的坑绊倒——单Agent企业自动化实战
  17. 免费T4的30分钟术语注射:4-bit量化+LoRA把Llama 3从随机猜测提到89%准确率,200条问答就够了
  18. 为什么我把公司知识库的RAG Pipeline从LangChain迁到了裸Gemini API:一场关于长上下文与分块策略的架构决策复盘
  19. Gemma 2那篇技术报告我读了三遍,直到我把2B模型量化塞进安卓机,才发现离线翻译的真正代价
  20. 我差点被按量付费送走:一个独立开发者的云端推理成本血泪账本
  21. 我把推理服务切到DeepSeek‑V3,成本跳水但凌晨三点Prometheus又开始尖叫——MoE专家负载倾侧的真相
  22. GPT-4o升级版把推理藏进了黑盒,我却用它反编译了它的思考过程(2024)
  23. 我让Claude 2.1把300页合同一口气读完,然后生成了一份让法务沉默的总结——我的文档解析管道从147行代码缩减到11行
  24. 我在生产环境跑DeepSeek-V3的那一周:API成本狂降60%,但KV缓存过载差点让凌晨的告警把我送走
  25. Graviton4迁移实测:推理成本降至x86的60%,但内存带宽瓶颈让我凌晨三点爬起来加监控
  26. 我把200K上下文当数据库查了三天法律条文,发现Claude 2.1在中间位置忘得比GPT-4 Turbo还快(2024)
  27. 我在单张RTX 3090上驯服Code Llama 70B:QLoRA调优让补全准确率飙升33%,并让我彻底放弃外部API
  28. 我在Snapdragon X Elite上编译了10次Chromium,平均102分钟,比M3多耗31%时间,但每瓦编译产出高出22%——72小时开发套件开箱与ROS2实机验证全记录
  29. 我在Amazon Q上跑了一遍RAG流程,发现它简化了ACL 2024那篇论文里的重排序步骤,但查询延迟少了70%
  30. 我让DeepSeek NSA在西门子840D手册上跑了11倍加速,结果一个路由参数选错,产线差点停了三小时
  31. 为什么我最终把 Transformer 换成了 Mamba:Mistral Codestral Mamba 在 256K 代码上下文中的架构决策
  32. OpenAI o1 独立思考(2024):我为什么把 GPT-4o 从核心推理链路中下线
  33. 凌晨三点被报警叫醒的教训:GPT-5 路线图前瞻,推理能力与长上下文如何重塑后端开发范式
  34. 我半夜调通Windows Copilot Runtime的本地RAG,发现微软把矢量搜索藏得比我想象的深
  35. 把ColPali塞进VideoRAG管道后,我的P99延迟从800ms砸到320ms,但中间烧掉三块A10G的预算
  36. 12GB显存里的ROI死磕:我把Gemma 2、Phi-3、Qwen-1.8B在法律/医疗微调上烧透了的成本账
  37. 为什么我最终换掉了Transformer:Mistral Codestral Mamba在256K上下文代码生成中的架构决策
  38. AWS Bedrock 深度解析:如何利用微调与 RAG 构建私有化知识库
  39. AWS Bedrock 的私有化陷阱:为什么微调正在变成一个伪命题,但 RAG 才是真正的护城河
  40. 工厂老板不肯买云端AI,我把Llama 3塞进工控机后,代码审查效率翻了三倍
  41. 别只谈“无状态”,这才是 Serverless AI Agent 的残酷真相:Lambda 如何驯服长上下文?
  42. 凌晨三点被报警叫醒的教训:Gemini 3.5 Pro长上下文部署踩坑实录

发表评论