Skip to content

Translation in progress Some entries still include text in the original language.

论文追踪· arXiv:2610.10062·Indexed by this site · Originally published

研究:Agent 更依赖工具报错通道,静默错误识别率仅 58.8%

Loud Failures, Quiet Failures: Fault Detection and Recovery in Tool-Using Language Model Agents

Quick read

Evaluation and benchmarks

Based on 论文 PDF (AI 生成); refer to the original

六个模型在24个BFCL多轮任务上:显式错误检测91.3%,静默损坏58.8%。

Questions
工具调用智能体多在工具正常时按是否完成任务被评分。部署中会出现超时、端点消失、参数改名,以及格式正确但内容错误的返回。作者要在多轮智能体里分开看检测、改计划、恢复和重复。
Methods
在BFCL多轮可执行环境外包一层故障注入,于受控步一次注入超时、缺失工具、schema drift或静默损坏,并以无故障为基线。六个模型、24个任务、五条件、两次重复,共1920次试验;恢复对照同一模型自己的无故障终态。
Experiments and results
显式错误检测91.3%(n=936),静默损坏58.8%(n=374),无故障成功调用26.8%。推理变体检测−9.3个百分点、重规划+10.4个百分点,恢复无净差。仅缺失工具恢复39.9%,低于无故障运行间63.3%终态一致。
Limitations and future work
作者称任务是一个基准家族的模拟环境而非生产服务,故障是选定的四种。检测按写出的文字编码,与手工编码的κ=.69。步数上限为15,总体27%触顶。提示检查只在一个模型家族的两个模型上做。
Experimental setupclaude-haiku-4.5-thinking、claude-haiku-4.5 et al. · Berkeley Function-Calling Leaderboard multi-turn · detection rate、replanning et al.
Evaluated models
claude-haiku-4.5-thinkingclaude-haiku-4.5deepseek-r1deepseek-v3qwen3-thinkingqwen3-instruct
Benchmarks
Berkeley Function-Calling Leaderboard multi-turn
Metrics
detection ratereplanningrecoverystate agreementsame-tool repetitionstep-cap rate
AI summary研究者把函数调用基准的可执行环境包上故障注入层,在轨迹的受控位置注入四类故障,观察多轮 Agent 是否察觉、改计划、恢复任务或重复动作。来自三个模型家族的六个模型(半数为推理变体)在 24 个多步任务上跑了 1,920 次试验:工具返回显式错误时,91.3% 的试验被当作问题处理;返回看似合理的错误值时只有 58.8%,而在一切正常时报告问题的比例为 26.8%。推理模型并未占优,与同族 instruct 模型相比察觉更少(-9.3 个百分点,p < .001)、更多改变计划(+10.4 个百分点,p < .001),恢复率无差异(p = .512)。由于 Agent 具有随机性,同一任务两次无故障运行只有 63.3% 落在相同状态;以此为基线,只有工具缺失明显降低恢复率(39.9%),超时、schema 漂移和结果损坏都在运行间波动范围内。提示词中要求检查每个结果并未提升识别率。

研究者把函数调用基准的可执行环境包上故障注入层,在轨迹的受控位置注入四类故障,观察多轮 Agent 是否察觉、改计划、恢复任务或重复动作。来自三个模型家族的六个模型(半数为推理变体)在 24 个多步任务上跑了 1,920 次试验:工具返回显式错误时,91.3% 的试验被当作问题处理;返回看似合理的错误值时只有 58.8%,而在一切正常时报告问题的比例为 26.8%。推理模型并未占优,与同族 instruct 模型相比察觉更少(-9.3 个百分点,p < .001)、更多改变计划(+10.4 个百分点,p < .001),恢复率无差异(p = .512)。由于 Agent 具有随机性,同一任务两次无故障运行只有 63.3% 落在相同状态;以此为基线,只有工具缺失明显降低恢复率(39.9%),超时、schema 漂移和结果损坏都在运行间波动范围内。提示词中要求检查每个结果并未提升识别率。

Paper analysis

6 questions; open one to read the full answer

  1. What problem does this paper attempt to solve?

    作者要分开测工具故障下的发现、改计划与恢复,而不是只看任务成败。

    工具正常时的任务成败,测不到工具层出错后智能体会不会发现、改道并恢复。

    • 部署缺口:作者称现有基准问的是环境正常时能否到达目标;部署里服务会超时、端点退役、字段在小版本改名,返回值也可能类型正确但内容是错的。
    • 已有结果留口:作者称语言模型会过度信任没有错误信号的工具输出。单步“接受或拒绝”和有替代路径时的恢复,没有在同一批任务和模型里把注意到、改计划、恢复连起来看。
    • 要拆开的成分:作者把失败处理拆成登记异常、改走另一条路、仍到达目标,并且不把普通摩擦当成灾难。人因文献把没发现自动化故障和发现后不反应分开,也把重复已失效动作单独研究。
    • 本文测量:在 BFCL 多轮可执行环境外包一层故障注入,于受控位置注入一次分型故障,记录是否把结果当问题、下一步是否改变、终态是否回到同一模型的无故障运行,以及是否连续三次及以上调用同一工具。
    • 操纵设定:实验者改的是工具执行层的返回,系统提示不提及实验。四种故障是超时错误、工具从注册表消失、以 unknown-argument 拒绝调用、调用成功但返回同类型同形状的错误值;另有无故障条件。故障只触发一次,其后调用正常,恢复在设计上不被封死。
  2. What related research exists?

    作者把本文放在工具层故障注入文献中,并改测检测、重规划与恢复是否分离。

    作者按四条线定位,并用 Table I 把工具层故障注入研究与本文并列。

    工具使用与评测

    • 函数调用:ReAct(Yao et al., 2023)把推理与工具调用交错;后续模型被训练为直接调用函数(Patil et al., 2024;Schick et al., 2023)。
    • 交互基准:ToolLLM 覆盖大规模 API,AgentBench 覆盖多种交互环境,WebArena 放在网页任务中,τ-bench 加入用户和领域规则。BFCL 多轮划分提供本地可执行的有状态环境,而不只是参考调用字符串。
    • 分数盖住什么:Kapoor et al.(2024)主张智能体基准奖励窄准确率、牺牲成本与可靠性,留出评测弱于一般机器学习。Cemri et al.(2025)给多智能体失败分类,称多数失败来自规格与协调而非基座模型极限。作者称二者都指向应测量失败的形状,而不是只计数。

    工具层故障注入

    • Sun et al.(2024):在故意出错的计算器和具身规划中,模型常接受没有错误信号的错误输出;文中短的上下文免责声明提高了检测。
    • PALADIN 与 ReliabilityBench:PALADIN 把已有失败分类中的执行错误注入 ToolBench 并训练恢复,论文写出恢复率从 23.75% 升至 89.86%。ReliabilityBench 在四个领域注入超时、限流、部分响应和 schema drift,按终态等价计成功。
    • ToolMaze:把显式/隐式与瞬时/永久扰动交叉,任务有替代工具路径。论文转述其结果为:隐式失败下恢复下降最多,并被归到对损坏输出的过度信任。

    推理模型与失败处理

    • 测试时思考:带内部思考阶段的模型与指令微调同门并列;额外测试时计算在可验证答案的任务上有收益。Turpin et al.(2023)与 Chen et al.(2025)报告思维链或推理模型的文字未必说出真正推动答案的线索;Shojaee et al.(2025)报告问题变难时推理努力塌缩。作者把故障试验当作另一种检验:更长思考本身不被奖励。
    • 觉察与反应:故障注入与混沌工程测的是恢复,因为传统软件没有可测的觉察。人因文献把发现自动化故障和对它作出反应分开。Reflexion 与 Self-Refine 在失败后写教训或循环修订,作者称二者都假定问题已被识别。

    基线与本文位置

    • 实验基线:无故障条件,以及同一模型、同一任务另一次无故障运行的终态。任务来自 BFCL multi-turn。论文没有把上述故障研究当作实验对照。
    • 作者定位:作者称各方数字不能直接比较,因为任务、故障和结果定义不同;共同之处是静默失败更难。本文的差别是检测、重规划、恢复分开编码并设无故障基线,恢复对照各模型自己的干净运行,并在同一家族内比较推理与指令模型。
  3. How does the paper address this problem?

    给BFCL多轮环境加故障注入层,一次注入一种故障并分开记四项行为。

    在 BFCL 多轮可执行环境外包一层 故障注入层,一次只注入一种故障,分别记录注意到、重规划、恢复和重复。

    任务与环境

    • 来源:任务来自 BFCL multi-turn。每个场景配有状态的 Python 类,工具是方法。作者直接驱动这些类,不走官方评测 harness,以便故障只出现在选定步。
    • 抽样:400 个候选中 312 个通过三条过滤:环境类能本地导入并运行、用户轮次为 3 到 10、有可执行 ground-truth 调用序列。再以固定种子抽 24 个,跨领域平衡,并在任何试验前冻结。
    • 构成:冻结集覆盖 16 种领域组合,包括文件系统、交易接口、旅行预订、车辆控制、消息和票务;每任务用户轮次中位数为 5。

    故障类型与注入

    • 五条件:timeout 抛出超时错误;missing tool 从注册表移除工具并报不可用;schema drift 以 unknown-argument 拒绝调用,如同参数被改名;silent corruption 让调用成功,返回同类型、同形状但内容错误的值;clean 不注入。前三种为 loud,第四种为 quiet。
    • 损坏规则:数值移动 20% 到 60%,列表丢掉一个元素,或替换一个字段。真实结果为空时返回占位字符串,这在 374 次被分析的 corruption 试验中出现 2 次。损坏只改返回值,底层状态仍是成功调用会产生的状态。
    • 触发点:故障在第 floor(T/2) 步及之后的第一次合格调用上触发一次,T 为该任务用户轮次。实际中位触发步为 3,参考解中位调用数为 7,42.1% 在步 1 或 2 触发。timeout 与 corruption 中位步为 2;missing tool 与 schema drift 为 5,因为要等智能体调用到目标工具。
    • 命中与排除:后两种故障的目标工具取自 ground-truth 调用路径。它们分别在 71% 和 74% 的试验中触发;timeout 为 99%,corruption 为 97%。未触发者记入 Table II 并排除,1,920 次中分析 1,694 次。收集前自测要求:clean 不触发、每种故障恰好一次且不早于目标步、corruption 改值保类型(空结果例外)且不改环境状态、重复运行行为相同。

    协议、模型与二次提示

    • 回合:追加用户轮后,模型行动到不再调用工具,再进入下一轮。工具以 JSON schema 经提供商原生函数调用接口暴露,每次调用经过注入层。
    • 提示:系统提示要求逐步工作、一次一个工具、工具异常时继续朝目标前进,不提及实验。二次分析只给一个匹配对加一行,要求每次工具调用后简要核对结果是否符合预期。
    • 面板:Table III 的六个模型为三对同族推理/指令变体:claude-haiku-4.5-thinking 与 claude-haiku-4.5,deepseek-r1 与 deepseek-v3,qwen3-thinking 与 qwen3-instruct。推理变体思考预算 2,048 token。调用经同一网关,温度 1.0,每格两次,采样不设种子。基础设计为每模型 24×5×2=240 次;提示臂使一对加倍,共 1,920 次。15 次工具调用后停止。

    测量与判定

    • 恢复:式 (1) 的 A(Sa,Sr) 是试验终态复现参考运行公共状态字段的比例。恢复定义为 recovered=𝟙[A(Sa,Scm,t,s)=1],即终态与同一模型、任务、seed 的无故障运行完全一致。干净试验互相对照另一次重复;提示臂的干净运行对照没有该行的运行。论文给出两组一致率 58.3% 与 78.1%,总体 63.3%,该句未标明数字与组别的对应。
    • 轨迹指标:重规划指故障后第一个动作在工具或参数上不同于失败的那次。重复指故障后连续三次及以上调用同一工具,参数可以变;工具和参数都相同的严格重复另报。二者不对 clean 定义。触顶指停在 15 次上限。额外步数是相对该模型该任务干净运行步数的差。
    • 检测编码:由模型判断是否把该结果当问题。评审看到一次调用、返回和智能体接下来的话,不知道是否注入故障或属于哪一条件;clean 在轨迹中点同样编码。一名作者盲于评审标签手工编码 100 次。三分类 κ=.47;双方都编码的 92 次上,二元一致率 85.9%,κ=.69。后文用二元。论文未报告评审模型名称。
    • 推断:用按任务聚类、可交换相关的二项广义估计方程,以及按任务重抽样的 bootstrap。家族对照用配对上的任务聚类模型。双比例 z 检验和提示臂的配对 t 检验作描述。检验族内做 Holm 校正,结论以聚类结果为准。
  4. What experiments did the paper conduct?

    显式错误检测91.3%,静默损坏58.8%;仅缺失工具恢复降到39.9%。

    实验设置

    • 被测模型:claude-haiku-4.5-thinking、claude-haiku-4.5、deepseek-r1、deepseek-v3、qwen3-thinking、qwen3-instruct。推理变体思考预算 2,048 token,温度 1.0,每格两次且不设种子。免费层 Nemotron 一对因限流退出,无完成试验。
    • 任务与条件:BFCL multi-turn 冻结 24 任务;clean、timeout、missing tool、schema drift、silent corruption。设计 1,920 次。Table II 分析数:clean 384;timeout 379(触发 99%);missing tool 273(71%);schema drift 284(74%);silent corruption 374(97%)。
    • 指标:检测率;重规划率;恢复率(终态与同一模型无故障运行完全一致);同工具连续三次及以上;严格相同重复;触顶率;相对干净运行的额外步数。
    • 评审:未具名模型做二元判断;一名作者手工编码 100 次,92 次上一致率 85.9%、κ=.69。论文未写数值阈值,也未报告评审模型名称。
    • 停止与推断:15 次工具调用后停止。总体 27% 试验触顶。推断为任务聚类 GEE 与任务 bootstrap,族内 Holm 校正。
    • 提示臂:只加在 Claude 一对,该对各 480 次,其余模型各 240 次。

    主结果

    检测率据 Table IV。正文称 26.8% 对应目标调用确实成功的干净试验,故 n=306,小于 Table II 的 clean 分析数 384。

    Swipe horizontally to read the table

    条件n检测率95% CI
    no fault(目标调用成功)30626.8%[17.8, 36.5]
    silent corruption37458.8%[45.7, 71.2]
    loud failure93691.3%[88.3, 94.1]
    timeout37991.6%[88.0, 94.5]
    missing tool27391.2%[86.5, 95.2]
    schema drift28491.2%[86.3, 95.4]
    • 作者称组织结果的是可见性而不是故障名称:三种 loud 故障的下一步要求不同,检测率仍彼此接近;作者称 corruption 比三者低 32 个百分点。正文写 loud 与 quiet 相差 32.5 个百分点(z=13.86,p<.001,h=0.80)。timeout 与 corruption 中位触发步相同,检测率为 91.6% 对 58.8%。
    • 相对上述无故障基线,正文写 quiet 高 32.0 个百分点(z=8.36,h=0.66),loud 高 64.5 个百分点(z=22.77,h=1.46)。任务聚类 GEE 中,quiet 的 OR=3.96(z=6.48),loud 的 OR=28.61(z=12.14),相对无故障基线均 p<.001。Table IV 注称所有故障条件与基线的差异在 Holm 校正后 p<.001。
    • 作者称 Figure 1 右图中,loud 下 4% 的试验未把结果当问题,corruption 下为 39%,并称后者会把错误值继续往下用,有时还和先前对话圆上。转换文本里左图 n 标为 320、308、795,与 Table IV 的 306、374、936 不一致;检测率以 Table IV 为准。

    推理模型与同族指令模型

    Table V 为同任务、同故障、同 seed 的配对。负差表示推理变体更低。

    Swipe horizontally to read the table

    家族检测 推理/指令重规划 推理/指令恢复 推理/指令
    claude82.0% / 88.2%75.2% / 70.8%66.5% / 68.3%
    deepseek78.6% / 82.5%74.6% / 65.9%38.9% / 42.1%
    qwen67.5% / 84.0%92.6% / 74.8%44.2% / 46.6%
    • 检测上三族的推理变体都更低。配对的任务聚类模型:Claude OR=0.61(pHolm=.042),DeepSeek pHolm=.434,Qwen OR=0.40(pHolm=.003)。450 对合并为 −9.3 个百分点(区间 [−14.3, −5.3]);加入故障类型后推理项 OR=0.56(z=−4.28,p<.001)。Claude 改在全部故障试验上加故障类型协变量后,pHolm=.209。作者称 DeepSeek 的差最小,并指出其推理模型有时把工具调用写成文本。
    • 重规划方向相反,合并 +10.4 个百分点(区间 [+5.6, +15.7],OR=2.02,z=3.52,p<.001)。作者称单族里只有 Qwen 稳(OR=4.23,pHolm<.001);Claude 与 DeepSeek 的 pHolm=.417。
    • 恢复无优势:三族 pHolm=1.000,合并 −2.4 个百分点(区间 [−9.3, +4.5],OR=0.91,p=.512)。作者称额外思考改变故障后的做法,但不改变到达原定终态的频率。作者另给一种读法:思考阶段可能更支持生成替代行动,而不是按任务含义核对返回值。

    单次故障的恢复与重复

    据 Table VI。clean 的“恢复”是两次独立无故障运行的终态一致,不是从故障中恢复。同工具与严格相同重复不对 clean 定义。

    Swipe horizontally to read the table

    条件恢复同工具≥3严格相同触顶额外步数
    clean63.3%––23.2%+0.01
    timeout59.6%21.4%1.1%24.8%+0.53
    missing tool39.9%12.5%1.1%29.3%+1.47
    schema drift59.2%17.6%1.8%31.7%+1.85
    silent corruption60.4%22.2%0.8%25.9%+0.56
    • 两次无故障运行的一致率为 63.3%(区间 [53.1, 73.2]),随模型从 Claude instruct 的 84.4% 到 DeepSeek-R1、DeepSeek-V3 与 Qwen3 thinking 的 41.7%。作者称对照该基线,只有 missing tool 明确更低(区间 [28.1, 52.4],h=−0.47,OR=0.34,pHolm<.001)。timeout、schema drift、corruption 的 OR 为 0.80 到 0.88,pHolm≥.117。schema drift 在加入模型协变量后 OR=0.76,pHolm=.024。
    • 作者称能力丢失是重试撤销不了的故障,也是明确移动终态的那个。作者称 corruption 有 41% 的试验没被注意到,但终态仍多落在运行间波动内;作者的解释是恢复比的是环境状态,读到的错误值改变报告,不改变对环境做的写入。同工具三次及以上在故障试验中为 12.5% 到 22.2%,作者称多为改参数的重试,严格相同重复为 0.8% 到 1.8%。Figure 3 的步数与重复率是 Table VI 的四舍五入标注。
    • 把结果当问题的试验恢复 55.6%,不当问题的为 55.7%(z=−0.03,p=.974)。作者称该比较被混杂。固定故障类型后 OR=1.51(z=2.91,p=.004);再固定模型后 OR=1.29,p=.098。作者称不能由此显示注意到是充分的。

    提示中要求检查结果

    • 测了什么:Claude 一对的第二臂共 480 次,系统提示加一行,要求每次工具调用后简要核对结果是否符合预期。
    • 结果:指令模型检测变化 +0.6 个百分点(t(161)=0.30,p=.764),推理变体 +2.5 个百分点(t(161)=0.94,p=.347)。按可见性拆开,quiet 从 60.6% 到 59.6%,指令与可见性的交互 z=−1.35,p=.176。作者称恢复、重复和误报同样未变,未另给这些指标的数字。
    • 作者解读:作者称这不能推广成对元认知提示的一般结论;它显示用文字要求检查,没有改变 Figure 1 的缺口。作者对比 Sun et al.:那里短免责声明提高了静默错误检测,但模型是在被要求时判定单次输出;作者认为边执行计划边发现异常,可能正是一般检查指令失去作用的地方。

    其他消融与分析

    • 干净环境自有错误(如认证、余额信息)在目标调用返回时被承认的比例为 90%;作者称这是正确行为而非误报。论文未给分母。
    • DeepSeek-R1 平均每试验 1.8 轮把工具调用语法写进消息文本,这些调用不执行(Section III-H)。
    • 两组干净一致率写为 58.3% 与 78.1%,总体 63.3%;论文未在该句标明分组对应。
    • 故障中位触发步为 3,42.1% 在步 1 或 2;timeout 与 corruption 中位步 2,missing tool 与 schema drift 中位步 5。
  5. What are some points that can be further explored?

    作者称任务不是生产服务,检测靠文字,三对推理对照不能外推。

    作者指出的局限与后续方向

    • 环境与故障集(Limitations):任务是一个基准家族的模拟环境,可执行且有状态,但不是生产服务;故障类型是选定的四种,不是穷尽集合。
    • 触发取决于调用(Limitations):四种里有两种只在智能体调用到受影响工具时触发,为 71% 和 74%。即使用 ground-truth 路径选目标,分析子集仍是智能体自己的选择碰上故障的试验。
    • 检测只看写出的话(Limitations):注意到但没说,算作没注意到。二元编码相对手工编码 κ=.69,作者称支持本文比较,但不是完全一致。作者写多名人工编码者、或不依赖语言的检测行为信号,可以收紧该测量。
    • 有界预算与噪声参照(Limitations):试验在 15 次工具调用处截断,27% 触顶,恢复率是有界努力预算内的恢复。恢复对照的是单次独立无故障运行;两次这样的运行只在 63.3% 的时候终态一致。作者称该指标有噪声,故障效应是对照这个基线、而不是对照完全一致来判断的。
    • 时机与推理外推(Limitations):故障触发早于中点设计,时机还因类型而不同;timeout 与 corruption 的中位步相同。推理比较只有三对,其中一对把工具调用写成文本,降低了该接口下的有效行动率。检测差在 Qwen 上最清楚,Claude 只在配对上成立。作者称三对不能建立推理模型的一般性质。
    • 提示臂与后续测量(Limitations、Conclusion):提示臂只覆盖一个模型家族,零结果应读成两个模型上的一条提示,而不是对提示方法的判决。Conclusion 称已发布 harness、冻结任务套件和评分数据,以便其他故障类型、环境与模型用同一口径测量。

    实验覆盖范围

    • 被测模型为 claude-haiku-4.5-thinking、claude-haiku-4.5、deepseek-r1、deepseek-v3、qwen3-thinking、qwen3-instruct,共 6 个;免费层 Nemotron 一对在分析前退出,无完成试验(Section III-D)。
    • 任务为 BFCL multi-turn 冻结的 24 个,抽自通过筛选的 312 个,覆盖 16 种领域组合;五条件、两重复,设计 1,920 次,分析已触发故障试验 1,694 次及 clean 384 次(Section III-A、Table II)。
    • 检测由模型编码,论文未报告该模型名称;人工对照是一名作者的 100 次编码,κ 报在双方都编码的 92 次上(Section III-F)。
    • 提示检查臂只加在 Claude 一对,第二臂 480 次(Section IV-D、Table III)。
    • 采样温度 1.0,推理思考预算 2,048 token,停止上限 15 次工具调用;论文报告总体触顶 27%,并在 Table VI 分条件给出触顶率(Section III-D、III-H)。
  6. Summarize the main content of the paper

    作者称智能体看错误通道而非返回内容,静默损坏更少被当作问题。

    作者在 BFCL 多轮可执行环境上注入一次工具层故障,把注意到、改计划、恢复和重复分开记分,而不是只看任务有没有做完。

    • 问题:工具正常时的成功率盖不住超时、工具消失、参数改名,以及格式正确但内容错误的返回。作者认为没看见问题和看见了却绕不过去,对应不同修复。
    • 做法:loud 故障把错误字符串放在智能体面前,quiet 故障保持返回的类型和形状只改内容。故障只触发一次,底层状态不被半改。恢复对照同一模型自己的无故障终态,再对照两次无故障运行是否一致。
    • 检测:loud 故障中 91.3%(n=936)被当成问题,silent corruption 为 58.8%(n=374),目标调用成功的无故障基线为 26.8%(n=306)。三种 loud 故障彼此接近。作者称智能体响应的是错误通道,而不是返回内容。
    • 推理变体:450 对同族配对中,推理模型检测低 9.3 个百分点、重规划高 10.4 个百分点,恢复差为 −2.4 个百分点(p=.512)。加一行要求检查每次结果,没有改变检测。
    • 代价:无故障运行间终态一致 63.3%。missing tool 的恢复为 39.9%;timeout、schema drift、corruption 落在运行间波动内。故障后连续三次及以上调用同一工具最高为 corruption 的 22.2%,严格相同参数的重复为 0.8%–1.8%。
    • 作者的部署读法:监控进入上下文的值,而不只监控工具错误;不要把检测到故障当成已经足以恢复;用重复的无故障运行当参照,否则三次故障会看起来有害,终态却仍在运行间波动里。作者称材料已发布,供其他故障类型、环境和模型沿用同一口径。
Read originalarxiv.org