📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

AI Engineer Summit 2025 - AI Leadership (Day 1)

AI Engineer8:03:36

Transcription

[音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [掌声] [音乐] [掌声] [音乐] [音乐] [掌声] [音乐] [掌声] [掌声] [音乐] [音乐] [掌声] [音乐] [音乐] [音乐] 我 [音乐] [音乐] [音乐] [音乐] 他 [掌声] [音乐] [掌声] [音乐] [音乐] [音乐] [掌声] 为 [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] 在 [音乐] n 为 [音乐] a [音乐] 欢迎 欢迎 大家 感谢 你们 的 到来 欢迎 感谢 你们 在 这里 欢迎 来到 2025 年 人工智能 工程 峰会 好的 我想 首先 说 一下 尽管 我 经常 被 人 告知 我 工作 起来 像 个 机器 但 我 想 利用 这个 时刻 向 大家 保证 你们 的 活动 工作 人员 你们 的 活动 策划者 你们 的 活动 人员 像 我 一样 我们 都是 真人 没有 一个 是 在 这次 会议 上 推出 的 机器人 至少 今年 是 这样 我 意思 是 明年 谁 知道 对 吧 但 今年 对 我们 来说 非常 特别 今年 是 我们 在 纽约 的 第一年 我们 非常 高兴 能 在 这里 我 已经 感受 到 并且 已经 感受 到 今天 在 这个 房间 和 在 这个 会议 上 我们可以 获得 的 能量 我们 在 2023 年 成功 售罄 的 人工智能 工程 峰会 和 2024 年 在 旧金山 成功 售罄 的 人工智能 工程师 世界 博览会 的 成功 基础上 再接再厉 这 就是 为什么 我们 今天 能 在 纽约 市 为 你们 带来 这个 精心策划 的 独家 行业 内幕 活动 这里 我们可以 一起 讨论 并 从 彼此 的 真实 世界 的 实用 经验 中 学习 在 一个 华丽 的 星级 场地 好的 那么 我们 为什么 在 这里 呢 就像 工业 革命 一样 在 人工智能 之前 是 一个 新的 未来 它 将 改变 之后 的 一切 我 坦率 地 说 仅仅 几 年前 即使 是 整个 互联网 和 人类 集体 知识 的 集合 触手可及 的 想法 也 令人 惊叹 令人 惊叹 我们 也 在 这里 当然 是 因为 人工智能 远未 停止 进化 对 吧 以前 需要 五年 和 一个 研究 团队 才能 完成 的 事情 现在 在 2025 年 只需 一个 空闲 的 下午 和 API 文档 就 可以 完成 这 真是 难以置信 好的 让我们 稍微 设定 一下 对 活动 的 期望 我们 安排 了 一个 非常 激动人心 的 会议 今天 是 人工智能 工程 赛道 面向 高管 和 副总裁 然后 明天 将是 代理 工程 赛道 最后 我们 将 在 周六 通过 实践 工作坊 结束 会议 因此 今天 的 领导力 赛道 将 为 你们 提供 在 人工智能 和 商业 领导力 交汇点 所需 的 战略 见解 来自 Lux Capital Signal Fire Anthropic Open AI LinkedIn DataDog 等 公司 的 高管 领导者 高级 人员 将 在 这里 分享 他们 的 真实 世界 经验 和 来之不易 的 伤疤 和 教训 我们 将 涵盖 从 趋势 到 招聘 再到 安全 再到 工具 再到 基础设施 和 技术 等 等 还有 更多 当然 我们 非常 幸运 能够 得到 Solana 等 赞助商 的 支持 如果 你 不熟悉 区块链 世界 或者 你 不熟悉 Solana Solana 是 一个 无需 许可 的 基础设施 让 你们 的 代理 可以 创造 财富 他们 在 楼下 有 一个 大型 展位 有 三个 演示 站 所以 请 停下 来 了解 他们 如何 帮助 你 博览区 就在 楼下 对 吗 在 走廊 的 下层 它 在 上午 主题 演讲 之后 开放 并 开放 一整天 所以 请 务时 间 去 拜访 我们 的 赞助商 因为 他们 是 像 这样 的 集会 发生 的 重要 组成 部分 对 吧 更 重要的是 他们 将 在 你们 的 旅程 中 帮助 你们 然而 这个 活动 不仅 由 Solana 促成 它 也 由 我们 所有 赞助商 促成 他们 在 人工智能 工程 的 前沿 进行 创新 他们 代表 了 一批 非常 有趣 的 公司 他们 派 了 他们 的 高级 别 高管 产品 负责人 高级 技术 人员 来 参加 这个 活动 所以 请 务必 在 休息 时间 拜访 他们 并 与 他们 交谈 所有 休息 时间 都 列 在 时间表 中 并 已 安排 好 谁 知道 你们 可能会 找到 下一个 服务 提供商 下一个 合作伙伴 甚至 下一个 客户 稍后 你们 将 听到 这些 创始人 高管 人工智能 领导者 的 声音 他们 都 为 你们 精心 准备 了 定制 的 演讲 然后 在 每个 演讲 块 之后 的 休息 时间 演讲 者 将 在 场 回答 你们 的 问题 在 会议 场地 中 有 三个 问答 和 讨论 区 其中 一个 在 这个 楼层 这里 然后 楼下 有 两个 一个 在 楼梯 的 底部 然后 另一个 藏 在 下面 我们 将 在 休息 时间 利用 这些 区域 来 促进 走廊 交流 你们 可以 以 志同道合 的 方式 聚集 在 一起 讨论 休息 前 的 那个 块 中 所有 课程 的 主题 以及 与 演讲 者 会面 这些 休息 时间 一天 中 有 几次 都 列 在 时间表 中 所以 你们 不必 猜测 或 担心 然后 当然 所有 食物 和 饮料 都 将 在 楼下 的 博览区 提供 请 务必 不要 错过 今晚 在 博览区 的 派对 所以 我们可以 一起 喝点 酒 玩得 开心 听 音乐 并 互相 了解 因为 我 认为 我们 很多人 在 这里 的 原因 就是 这个 好了 感谢 你们 的 时间 我 很荣幸 能 邀请 我们 的 第一位 演讲 者 上台 请 大家 鼓掌 欢迎 Lux Capital 的 合伙人 Grace Isord [掌声] [音乐] 非常 感谢 Peter to swix 和 所有 人工智能 工程师 峰会 的 邀请 我 非常 高兴 能 在 这里 我 是 Grace Lux Capital 的 合伙人 很高兴 能 真正 开启 这个 会议 并 应对 一个 相当 艰巨 但 令人 兴奋 的 任务 2025 年 人工智能 前沿 的 状态 以及 我们 如何 驾驭 它 那么 关于 Lux 的 一些 信息 在 我们 开始 的 时候 对 吧 Lux 喜欢 说 我们 在 别人 理解 之前 就 相信 我们 投资 于 那些 看起来 疯狂 的 前沿 技术 想法 实际上 我们 喜欢 将 科幻 小说 变成 科学 事实 事实上 我们 很 幸运 能 在 最早 阶段 与 一些 顶尖 人工智能 公司 合作 Hugging Face 我 相信 许多 人 都 知道 它 是 机器学习 的 GitHub Together AI 开源 人工智能 云 Physical Intelligence 这 就像 机器人 的 软件 大脑 和 Solana AI 这 是 一个 研究 实验室 实际上 在 日本 东京 进行 非常酷 的 进化 启发式 算法 他们 昨晚 发布 了 一个 非常酷 的 AI Cuda 科学家 所以 去 看看 吧 稍微 向 前 看 一下 当 我们 考虑 纽约 市 时 如果 我 的 激光笔 工作 的 话 这里 就 好 了 Lux 非常 兴奋 能 在 纽约 市 和 人工智能 领域 加倍 下注 Lux 创立 于 纽约 市 我们 的 第一个 人工智能 投资 是 在 2013 年 在 这里 大部分 Lux 人工智能 投资组合 实际上 都 总部 设在 这里 或 作为 一个 主要 中心 正如 你们 在 我 身后 的 图表 中 所见 它 也 是 许多 你们 的 家园 最先进 的 研究 和 工程 领导者 以及 许多 四百强 和 五百强 公司 其中 许多 公司 将 在 未来 几天 内 听到 你们 的 声音 我们 对 纽约 市 的 机遇 非常 看好 我们 非常 高兴 你们 都 来 分享 这个 机遇 那么 当 我 创建 这个 演示文稿 时 我 回顾 了 过去 几年 的 人工智能 并且 一直 回溯 到 2022 年 8 月 的 Stable Diffusion 哇 我 觉得 这个 曲棍球 棒 过去 两年 半 简直 太 疯狂 了 过去 18 个月 更是 指数级 增长 进步 越来越 激进 越来越 令人印象深刻 并且 越来越 广泛 实际上 它 不再 仅仅 是 OpenAI 和 Anthropic 发布 这些 模型 而是 xai 我们 刚刚 在 上周 看到 了 Grok 的 发布 Mistral DeepSeek 以及 更多 的 模型 并且 模型 的 性能 越来越 好 它们 的 计算 效率 也 越来越 高 当 我们 聚焦 到 2025 年 的 当前 世界 状态 时 它 的 开端 更加 疯狂 如果 你们 认为 过去 几年 很 疯狂 那么 2025 年 就 更 疯狂 了 我们 看到 了 美国 政府 OpenAI SoftBank 和 Oracle 之间 宣布 的 5000 亿 Stargate 项目 我们 看到 了 OpenAI 在 年初 之前 的 03 03 在 这里 他们 实际上 在 AGI 挑战 中 超越 了 人类 表现 我们 看到 了 DeepSeek 的 狂热 随着 DeepSeek 的 R1 模型 在 今年 早些时候 发布 导致 Nvidia 的 股价 下跌 我们 也 看到 了 DeepSeek 在 应用商店 中 排行 第一 然后 当然 是 上周 我们 看到 了 法国 人工智能 峰会 马克龙 实际上 启动 了 一个 全新 的 人工智能 计划 让 法国 和 欧洲 回到 游戏 中来 那么 你们 可能会 说 我 认为 我们 很多人 都在 想 这是 2025 年 的 人工智能 代理 时刻 我 甚至 可以 说 这是 人工智能 代理 的 完美 风暴 坦率 地 说 很容易 理解 为什么 许多 推理 模型 从 OpenAI 的 01 开始 然后 是 03 DeepSeek 的 R1 Grok 上周 的 最新 推理 模型 都 超越 了 人类 的 能力 有些 甚至 拥有 我们 从未 见过 的 能力 我们 看到 了 测试 时间 计算 的 兴起 这 是 在 推理 而非 训练 中 应用 的 计算量 这 正在 提高 模型 的 性能 我们 看到 了 更多 的 工程 和 更难 的 优化 无论 你们 认为 训练 DeepSeek 模型 需要 多少 成本 你们 都 不能 否认 这 是 工程 和 硬件 效率 的 壮举 推理 成本 越来越 低 硬件 成本 越来越 低 DeepSeek 和 Llama 模型 之间 的 开源 和 闭源 差距 正在 缩小 并且 当然 是 数十亿 的 基础设施 为 我们 刚才 讨论 的 美国 Stargate 欧洲 的 马克龙 以及 日本 的 SoftBank 和 Nvidia 的 所有 这些 数据中心 和 计算 提供 支持 Nvidia 一直 在 加倍 下注 他们 的 努力 所以 所有 这些 都 为 我们 会议 的 自主 名称 代理 工作 奠定 了 激动人心 的 基础 并且 确实 感觉 像 一个 激动人心 的 时刻 但 实际上 这些 人工智能 代理 还没有 真正 工作 人们 正在 说 这是 一个 完美 的 风暴 我 已经 看到 了 很多 雷声 很多 伟大 的 势头 但 我们 还没有 看到 那道 闪电 并且 我 认识 的 每个人 对 代理 都有 不同 的 定义 因此 在 本次 演示文稿 中 我 将 定义 我 对 代理 的 定义 一个 完全 自主 的 系统 LLM 指导 其 自己 的 行动 那么 让我们 举 一个 我 所说 的 人工智能 代理 还没有 工作 的 例子 这是 OpenAI Operator 上 一个 看起来 很 简单 的 查询 我 相信 在座 的 各位 都 知道 它 是 什么 我 要求 它 为 我 预订 周一 从 纽约 到 旧金山 的 航班 我 相信 这 也 是 一个 路线 并且 是 在座 许多 人 都 熟悉 的 东西 实际上 这 是 一个 相当 复杂 的 问题 我 需要 在 周一 下午 三点 之后 出发 但 我 想 避开 高峰 时段 我 想 乘坐 联合航空 捷蓝航空 或 美国航空 以 最大化 我 从 经济舱 升级 的 机会 我 想 将 价格 控制 在 500 美元 以下 以便 遵守 我 的 工作 费用 政策 我 还 想 靠过道 的 座位 但 不要 太 靠近 卫生间 我 想 在 午夜 前 到达 所以 我 将 这个 输入 到 OpenAI Operator 中 它 所做 的 第一件事 是 去 Kayak 如果 你们 以前 预订 过 航班 那么 这 是 一个 非常 令人 沮丧 的 体验 不幸 的 是 它 没有 找到 航班 它 无法 找到 它 甚至 没有 寻找 联合航空 或 美国航空 第二次 尝试 再次 尝试 这是 Skyscanner 这次 稍微 好 一点 它 确实 找到 了 一个 航班 但 它 找到 的 航班 有 很多 交通 堵塞 下午 5:30 从 JFK 出发 对于 纽约 的 人们 来说 那 是 一个 交通 困难 的 时段 最后 我 甚至 无法 选择 我 的 座位 所以 根据 我 之前 的 提示 它 并 没有 真正 起作用 那么 这 所有 的 意思 是 什么 为什么 这些 人工智能 代理 不起作用 我 认为 我们 经常 谈论 幻觉 和 虚构 以及 人工智能 模型 出现 问题 我们 没有 足够 多地 谈论 这些 累积 的 微小 错误 吧 吧 我们 看到 了 这个 旧 模型 的 许多 小 错误 我 将 介绍 其中 一些 这 不是 一个 详尽 的 列表 但 它是 你们 在 构建 这些 人工智能 代理 时 可能 遇到 的 一些 事情 的 感觉 首先 决策 错误 它 选择 了 错误 的 事实 我 可能 会 用 人工智能 预订 航班 但 它 可能会 预订 到 秘鲁 的 萨尔瓦多 而 不是 加利福尼亚 的 旧金山 模型 可能会 过度 思考 或 夸大 其 词 并 做 其他 几件事 第二 执行 错误 错误 的 访问 或 集成 在 上一 张 幻灯片 中 使用 Skyscanner 我 实际上 需要 输入 验证码 这 破坏 了 一些 流程 你们 也 可能 会 被 锁定 无法 访问 重要 数据库 最终 该 人工智能 代理 将 不再 工作 第三 启发式 错误 错误 的 标准 不幸 的 是 模型 没有 承认 留出 足够 时间 给 JFK 的 最佳 实践 我 甚至 没有 问 我 从 曼哈顿 布鲁克林 还是 更远 的 地方 来 这 可能会 真正 影响 你们 的 交通 并且 最终 我 是否 能 赶上 下午 5:30 的 航班 第四 品味 错误 错误 的 个人 偏好 对于 熟悉 我 的 人 来说 我 其实 是 一个 非常 胆小 的 飞行员 我 不喜欢 乘坐 波音 737 Max 如果 人工智能 预订 了 这个 我 之前 没有 在 提示 中 提到 但 如果 它 预订 了 这个 我 会 非常 不高兴 我 不会 坐 那架 飞机 然后 还有 一种 更加 模糊 的 错误 吧 这 是 一点点 的 完美 悖论 吧 我们 现在 用 人工智能 做 的 事情 非常 神奇 然而 当 人工智能 思考 时间 过长 或 当 Operator 的 速度 像 人类 一样 时 我们 感到 沮丧 即使 代理 第一次 就 做 对 了 它们 通常 也不 一致 且 不可靠 导致 对 整个 体验 的 人类 期望 非常 低落 这是 另一个 关于 这些 复杂 系统 的 可视化 图像 其中 每个 累积 错误 都 会 真正 叠加 两个 简单 的 代理 一个 准确 率 为 99% 一个 为 95% 开始 时 看起来 是 非常 令人印象深刻 的 代理 但 在 50 个 连续 步骤 之后 你们 实际上 会 发现 一个 相当大 的 差距 在 95% 和 99% 之间 实际上 有 50% 的 差异 99% 的 代理 实际上 下降 到 60% 的 重点 是 像 预订 航班 这样 简单 的 事情 实际上 本质 上 是 非常 复杂 的 当 所有 这些 微小 的 累积 错误 加起来 时 并且 在 具有 多步 任务 的 复杂 多代理 系统 中 它们 会 被 放大 那么 你们 这些 了不起 的 人工智能 副总裁 人工智能 领导者 如何 优化 一个 复杂 的 代理 并 考虑 所有 这些 非常 困难 的 查询 以 一致 且 可靠 地 做出 正确 的 决定 事实 是 这很 困难 但 这 并 没有 阻止 我们 以前 并且 有 希望 所以 我 想 介绍 一些 我们 今天 在 构建 人工智能 代理 时 所见 的 最佳 实践 和 五种 策略 我们 都可以 考虑 来 帮助 减轻 许多 这些 累积 错误 让我们 开始 吧 首先 数据 整理 我们 如何 确保 人工智能 代理 拥有 它 所需 的 信息 数据 是 混乱 的 它 是 非结构化 的 它 是 孤立 的 它 随处 可见 它 不再 仅仅 是 网页 和 文本 数据 了 它 是 设计 数据 它 是 图像 数据 它 是 视频 数据 它 是 音频 数据 它 是 你们 传感器 和 仓库 中 的 数据 如果 你们 在 制造业 中 它 甚至 是 你们 代理 实时 生成 的 代理 数据 考虑 整理 专有 数据 代理 生成 的 数据 以及 最终 你们 在 模型 工作流 中 使用 的 数据 进行 质量 控制 数据 是 你们 最宝贵 的 资产 并且 整理 是 使 其 更 有效 的 关键 数据 也 不再 是 静态 的 了 你们 如何 从 第一天 就 设计 一个 数据 飞轮 使 每次 用户 使用 产品 时 它 都能 实时 且 大规模 地 自动 改进 回到 我们 的 航班 示例 获得 一个 包含 格蕾丝 所有 旅行 偏好 的 整理 数据集 包括 737 Max 和 我 所有 的 航空公司 偏好 或者 甚至 假设 我们 随着 时间 推移 运行 该 代理 并 预订 许多 航班 我们 如何 将 这些 内容 回收 并 实时 适应 我 自己 的 偏好 第二 评估 的 重要性 我们 如何 收集 和 衡量 模型 的 响应 我们 如何 选择 正确 的 答案 这 在 机器学习 和 人工智能 中 长期 以来 都 很 重要 并且 真正 理解 对 与 错 你们 知道 在 可验证 的 领域 中 这 是 非常 简单 的 有 一个 明确 的 是 或 否 的 答案 比如 数学 比如 科学 这里 是 Grok 3 的 基准 测试 你们 看到 了 他们 在 数学 和 科学 中 都 进行了 可验证 的 基准 测试 但 我们 如何 为 没有 明确 是 或 否 答案 的 非可验证 系统 设置 评估 比如 格蕾丝 喜欢 这个 座位 根据 她 的 偏好 以及 我们 如何 收集 这些 信号 我们 还 看到 了 上周末 与 Deep Research 的 评估 辩论 吧 我们 有 一个 OpenAI Deep Research 产品 来自 Perplexity 和 Gemini 的 产品 也有 多个 版本 的 同一 产品 这里 的 评估 取决于 旁观者 的 眼光 吧 哪一个 更 适合 日常 研究 还是 VC 市场 研究 还是 科学 或 学术 研究 我们 必须 关注 收集 这些 信号 我们 需要 知道 并 收集 人类 偏好 我们 需要 以 真正 个人化 的 方式 构建 评估 有时 最 好 的 评估 就是 自己 尝试 代理 并 根据 你们 的 需求 进行 评估 而 没有 数字 或 排行榜 告诉 你们 该 做 什么 第三 支架 系统 我们 如何 确保 当 一个 错误 发生 时 它 不会 在 整个 组织 中 产生 级联 效应 Ramp 的 一个 投资 公司 在 这方面 做得 很好 我 知道 Rahul 明天 会 演讲 所以 去 看看 他 当 Ramp 推出 新 的 应用 人工智能 功能 并 失败 时 有 基础 设施 逻辑 来 确保 它 不会 在 代理 系统 和 Ramp 所有 生产 基础 设施 中 产生 级联 效应 我们可以 通过 构建 一个 复杂 的 复合 系统 来 减轻 支架 并且 有时 甚至 将 人类 带 回 循环 以 进行 推理 模型 这 变得 更加 有趣 和 重要 我们 如何 调整 支架 以便 更 强大 的 代理 可以 自我 修复 和 成长 一个 代理 意识到 自己 是 错 的 并 尝试 纠正 自己 的 道路 或者 一个 不确定 的 代理 然后 需要 打断 执行 以 使 其 回到 正轨 回到 我们 的 旅行 示例 再次 我们可以 为 这个 人工智能 代理 添加 一个 检查点 来 验证 交通 时间 或者 也许 将 其 引导 回 正确 的 方向 第四 用户 体验 或 UX 是 关键 这是 我们 的 人工智能 代理 如何 成为 更好 的 副驾驶 今天 的 人工智能 应用 都 使用 相同 的 模型 基础 模型 是 市场上 折旧 最快 的 资产 类别 GPT 包装 器 很酷 UX 确实 产生 了 不同 影响 对于 那些 重新 构想 产品 体验 并 真正 深入 理解 用户 工作流 并 真正 促进 美丽 优雅 的 人机 协作 的 人 来说 吧 这里 有 一些 具体 的 例子 回到 Deep Research 吧 提出 清晰 的 问题 以 确保 它 完全 理解 我 想要 完成 的 事情 比如 Codium 的 Wier 真正 从 更 基本 的 层面 理解 该 开发人员 的 UX 或 心理 以 预测 他们 的 下一步 比如 法律界 的 Harvey 无缝 集成 到 遗留 系统 中 以便 为 执业 律师 创造 真正 的 ROI 如果 你们 考虑 到 今天 所有 主要 的 人工智能 应用 和 编码 客户 支持 销售 等 类别 这些 都 使用 相同 的 模型 再次 吧 真正 的 UX 和 产品 质量 使 任何 一家 公司 脱颖而出 在 Lux 我们 对 新 的 人工智能 前沿 公司 感到 兴奋 他们 拥有 专有 数据源 并 真正 了解 用户 的 工作流 比如 机器人 硬件 防御 和 制造 比如 生命科学 你们 知道 如何 让 一个 公司 利用 其 专有 数据源 他们 了解 生物学家 防御承包商 或 化学家 的 工作流 并 为 最终 用户 创造 真正 的 神奇 体验 第五 最后 我们 如何 构建 多模态 你们 知道 我们 不再 仅仅 是 多模态 我们 是 多模态 有 新 的 模态 我们可以 真正 重新 构想 并 创造 10 倍 的 用户 个性化 体验 我 厌倦 了 聊天 机器人 作为 界面 我 知道 还有 许多 令人 兴奋 的 事情 我们可以 用 我们 的 人工智能 代理 来 做 以便 真正 使 它们 更 像 人类 吧 如何 使 人工智能 更 像 人类 如何 添加 眼睛 耳朵 鼻子 声音 我们 在 过去 一年 中 看到 了 语音 的 真正 惊人 的 改进 它 变得 相当 可怕 Lux 在 气味 领域 有 一项 投资 叫做 Osmo 它 在 对 气味 进行 数字 化 我 触摸 呢 如何 注入 更 人性化 的 感觉 和 具身 感 与 机器人 技术 我 甚至 会 谈论 记忆 吧 如何 使 人工智能 真正 个人化 并 比 今天 更 深层 地 了解 你们 做 所有 这些 都 重塑 了 对 人类 而言 的 完美 定义 即使 该 代理 不一致 不可靠 产品 的 远见 性 超越 了 所有 期望 它 是 一些 新 的 东西 在 我 身后 的 幻灯片 中 你们 会 看到 TLD Draw 这是 Lux 的 一个 了不起 的 投资 公司 我 认为 他们 在 重新 构想 视觉 画布 方面 做得 很棒 吧 通过 画笔 笔触 实现 人工智能 他们 有 一个 叫做 T Draw Computer 的 很酷 的 东西 你们 实际上 可以 将 所有 这些 很酷 的 人工智能 模型 组合 在 一起 而 不 知道 在 后台 运行 的 是 一个 大型 语言 模型 所以 真正 努力 构建 多模态 总结 一下 我们 今天 讨论 了 很多 但 我们 处于 人工智能 代理 的 完美 风暴 中 但 不幸 的 是 闪电 还没有 击中 人工智能 代理 不会 一蹴而就 累积 错误 会 加起来 我们 看到 错误 的 答案 错误 的 偏好 错误 的 标准 所有 这些 在 构建 这些 系统 时 出现 的 错误 的 人类 期望 数据 整理 评估 和 支架 都是 你们 可以 使用 的 工具 来 帮助 减轻 许多 这些 挑战 并且 请 真正 思考 更大 的 UX 多模态 创新 的 产品 体验 真正 将 工作流 和 愿景 分开 我 非常 期待 看到 你们 所有 人 构建 的 东西 并 非常 期待 在 未来 几天 内 继续 讨论 谢谢 大家 期待 在 会议 期间 与 你们 交谈 谢谢 [音乐] [掌声] [音乐] 我们 的 下一位 演讲 者 将 教 你们 如何 构建 一个 失败 的 人工智能 战略 请 鼓掌 欢迎 Parlament Labs 的 创始人 Hamma Hussein 和 Spec 的 联合创始人 Greg Sarelli [音乐] 故事 好的 各位 Hamma 和 我 都 非常 高兴 能 在 这里 和 你们 一起 教 你们 如何 构建 一个 完全 彻底 且 壮观地 搞砸 你们 人工智能 战略 的 指南 我 实际上 无法 想象 比 格蕾丝 的 开场 白 更 好 的 对手 了 因为 我们 不仅仅 是 在 谈论 小 的 挫折 我们 将 带 你们 通过 一种 方式 来 创造 全面 的 公司 瘫痪 职业生涯 结束 的 失败 格蕾丝 谈到 了 最佳 实践 但 我们 在 这里 是 为了 拥抱 最差 实践 事实上 我们 将 确保 你们 知道 如何 完全 破坏 你们 的 人工智能 项目 并 确保 你们 疏远 所有 与 你们 共事 的 人 听起来 怎么样 对 我 来说 听起来 很棒 那么 在 我们 开始 之前 也许 最好 先 做些 介绍 吧 我们 没有 议程 这里 只是 一系列 的 步骤 但 我 是 Greg 我 是 一位 高管 我 花 了 很多 年 在 高管 层 制定 人工智能 战略 我 现在 是 一家 人工智能 初创公司 的 联合创始人 但 之前 我 是 Pluralsight 的 产品 总监 和 其他 公司 的 高管 我 亲眼目睹 了 高管 团队 如何 将 清晰 的 战略 机遇 变成 迷宫般 的 灾难 我 是 Hamma 我 是 一位 机器学习 工程师 和 独立 顾问 我 与 许多 公司 在 人工智能 方面 合作 我 亲眼目睹 了 人工智能 战略 可能 失败 的 每一种 可见 的 方式 我 发现 人们 在 失败 方面 可以 多么 有创意 确实 所以 你们 可以 说 我们 一起 就像 梦想 团队 一样 灾难 我们 已经 咨询 过 或者 也许 我们 已经 与 来自 许多 公司 的 代表 互动 过 我们 甚至 没有 这个 花哨 的 网站 但 对于 今天 的 演示文稿 我们 决定 活 在 并 呼吸 已故 的 Charlie Munger 的 伟大 话语 他 说 永远 倒置 让我们 开始 吧 好的 失败 的 第一步 是 确保 你们 开始 分而治之 你们 自己 的 公司 这是 关键 如果 你们 注定 要 失败 你们 就得 拥抱 付费 意愿 和 成本 之间 的 脱节 通过 考虑 不合理 的 目标 来 创造 价值 的 关键 并且 你们 应该 尤其 你们 在座 的 各位 现在 都 应该 知道 你们 必须 确保 你们 参加 每一个 人工智能 行业 会议 但 永远 不要 回去 与 你们 的 团队 谈论 你们 学到 的 东西 就像 摩西 分开 红海 一样 目的是 创造 难以穿透 的 孤岛 并 激励 你们 团队 之间 的 保密 那么 让我们 开始 吧 所以 我 在 上一 张 幻灯片 中 谈到 了 价值 棒 和 付费 意愿 但 在 这里 对 我们 来说 坚持 反价值 棒 非常 重要 你们 必须 拥抱 它 因为 它 与 价值 创造 和 战略 性 的 一切 好 的 和 有用 的 都 相反 今天 这 是 我们 的 指导 原则 你们 可能会 认为 WTP 是 付费 意愿 但 在 这里 它 是 一厢情愿 的 承诺 你们 必须 告诉 你们 的 客户 人工智能 将 为 他们 做 一切 你们 的 新 系统 将 撰写 邮件 阻止 你们 的 狗 解决 气候 变化 并 实现 世界 和平 但 不要 真正 担心 细节 只需 承诺 月球 你们 知道 价格 吧 对 我们 来说 那 是 另一个 首字母缩略词 尤其 是 在 基础设施 成本 方面 我 们 抱歉 那 是 一口 气 吧 购买 最昂贵 的 GPU 不要 考虑 任何 成本 效益 分析 只需 最大化 公司 信用卡 把它 想象成 对某事 的 投资 而 成本 那么 它 就是 你们 即将 冲进 去 的 壮观 技术 债务 的 级联 你们 需要 考虑 构建 如此 复杂 如此 交织 的 系统 以至于 即使 是 你们 作为 高管 也 几乎 无法 理解 你们 知道 工作 保障 吧 这是 确保 它 的 关键 考虑 一下 当 它 不可避免 地 坏掉 时 除了 你们 之外 没有 人 在 这里 并且 最后 如果 你们 知道 价值 你们 就 知道 WTS 或 销售 意愿 对 我们 来说 就是 为什么 这个 系统 答案 永远 是 因为 人工智能 从来 不需要 进一步 的 解释 没有 董事会 会 质疑 你们 这 就像 魔法 但 更 昂贵 且 更 不可靠 那么 第二步 是 当 你们 开始 定义 你们 的 战略 时 吧 这里 是 第一个 关键 假装 任何 诊断 你们 可能会 想到 拿起 去年 的 年度 报告 或 运营 计划 并 开始 突出 随机 段落 最好 是 你们 最不 理解 的 段落 并 宣布 我 必须 解决 这个 问题 不要 与 任何 真正 从事 工作 的 人 交谈 你们 的 指导 原则 应该 既 模糊 又 模糊 比如 成为 全球 人工智能 领导者 在 所有 领域 除非 定义 所有 领域 那 是 别人 的 问题 完全 是 你们 的 行动 计划 很 简单 你们 需要 一个 人工智能 驱动 的 SEO 工具 保证 顶级 谷歌 搜索 结果 即使 你们 卖 花园 侏儒 吧 和 一个 生成式 艺术 插件 创造 你们 CEO 的 猫 的 NFT 还有 一个 人工智能 无人机 送餐 服务 因为 协同效应 在 下次 公司 全体 会议 上 宣布 解决 这个 问题 并 获得 奖励 分数 如果 你们 穿 着 闪亮 的 西装 并 使用 “颠覆性” 这个 词 至少 十几次 最后 一点 在 这张 幻灯片 上 是 关于 时间表 但 时间表 是 为 打算 完成 项目 的 公司 准备 的 我们 建议 你们 拥抱 永久 测试版 只需 在 GitHub 中 创建 一个 巨大 的 积压 工作 并 将 所有 这些 突出 显示 的 财务 报告 放入 其中 Greg 刚才 提到 的 很好 的 战略 但 你们 知道 什么 战略 真正 有效 吗 只需 创建 一个 4000 页 的 文档 并 将 其 发布 在 所有 Slack 频道 中 并 耗尽 人们 参与 材料 的 意愿 并 应对 这些 海啸般 的 文件 你们 知道 话语 吧 Greg 你们 没有 关于 术语 的 战略 吗 当然 有 目的是 以 没人 理解 的 方式 进行 沟通 让 每个人 都 淹没 在 术语 的 海啸 中 说 诸如 我们 的 多模态 代理 Transformer 系统 利用 少样本 学习 和 思维链 推理 来 优化 我们 的 动态 超参数 空间 的 协同 潜力 如果 你们 充满 信心地 说出 这些话 你们 可能 完全 不知道 你们 刚才 说 了 什么 关键 是 看起来 极其 聪明 即使 没人 理解 你们 说 的 任何 一个 字 关键 是 概念化 是 的 你们 可能会 诱惑 做 类似 在 优势 中 定义 一个 非常 有说服力 的 一页 业务 的 方法 但 永远 不要 太 诱惑 造成 组织 功能 失调 最 有效 的 方法 之一 是 在 各处 使用 术语 并 战略性地 使用 术语 来 隐藏 要 完成 的 工作 例如 我 有 一个 心理 健康 客户 而不是 说 我们 需要 编写 一个 提示 我们 就 说 嘿 我们 正在 构建 代理 而这 确保 了 心理 健康 专家 不在 房间 里 并且 不知道 如何 参与 这 正是 你们 想要 的 结果 确实 就像 Hamma 减少 了 这些 心理 健康 专家 的 心理 健康 我 也 喜欢 这样做 所以 而不是 说 嘿 让我们 确保 人工智能 具有 正确 的 上下文 我 只谈论 RAG 而不 说 确保 用户 可以 欺骗 人工智能 做 坏事 只说 提示 注入 是 的 关键 是 鼓励 工程师 而不是 那些 可能 最 了解 你们 客户 的 人 来 编写 提示 因为 可能会 出什么 问题 看看 我们 知道 将 日常 英语 翻译 成 术语 可能 非常 困难 所以 我们 为 你们 制作 了 这个 指南 这个 指南 将 帮助 你们 分割 你们 的 组织 就像 Greg 刚才 提到 的 一样 就像 摩西 一样 链接 在 这里 但 请 记住 让 所有 东西 甚至 编写 提示 都 看起来 非常 技术性 并且 超出 所有人 的 能力 是 你们 想要 的 好的 简要 回顾 我们 讨论 了 如何 播下 你们 的 分歧 如何 开始 定义 你们 的 战略 如何 沟通 现在 我们 进入 动员 阶段 吧 因为 你们 必须 对 那个 巨大 的 积压 工作 做些 什么 你们 中的 一些 人 可能 知道 杰弗里·摩尔 但 我 从未 听说 过 他 今天 我们 开创 了 一个 非常 新 的 革命性 框架 那 是 关于 区域化 以 失败 为 目标 它 是 专门 为 失败 而 设计 的 随机 将 人工智能 任务 分配 给 完全 没有 相关 经验 的 人 例如 将 你们 的 数据 审查 外包 给 几乎 没有 你们 业务 背景 的 海外 问答 团队 是 的 最 重要 的 是 你们 可能会 诱惑 使用 孵化 区 来 引导 新 的 人工智能 想法 但 目的是 从 这里 直接 向 你们 的 客户 发布 完全 未经 测试 的 充满 错误 的 人工智能 聊天 机器人 就像 Hamma 提到 的 一样 永远 不要 担心 Beta 测试 忽略 质量 保障 直接 发布 到 生产 环境 中 因为 最坏 的 情况 会 发生 什么 除了 可能 导致 职业生涯 结束 的 公关 灾难 那么 如果 你们 做得 对 的话 应该 感觉 像 South Park 你们 会 把 你们 最 优秀 的 工程师 从 可能 支持 你们 创收 产品 的 工作 中 拉 出来 等待 一段时间 然后 盈利 不 其实 它 会 感觉 更像 是 完全 崩溃 因为 你们 太 混乱 了 我们 现在 可以 过渡 到 看看 这一点 你们 的 组织 处于 完全 的 混乱 状态 但 是时候 做 这件事 并 将 所有 东西 都 烧毁 了 最 有效 的 方法 是 关注 工具 而不是 流程 你们 之前 造成 的 问题 和 可能 存在 的 其他 问题 不要 分析 它们 不要 试图 理解 它们 只需 用 工具 来 解决 它们 所以 如果 你们 的 RAG 系统 没有 检索 到 正确 的 文件 就 买 一个 新 的 更昂贵 的 向量 数据库 是 的 如果 你们 需要 衡量 进展 就 使用 你们 能 找到 的 每 一个 现成 的 评估 指标 永远 不要 费心 去 定制 它们 以便 适应 你们 的 业务 需求 只需 盲目 地 相信 数字 即使 它们 没有 意义 哦 并且 就像 你们 知道 的 我们 今天 谈论 了 很多 关于 代理 如果 它们 不起作用 就 选择 一个 新 的 框架 和 供应商 进行 微调 而不 进行 任何 测量 或 评估 只需 假设 它 会 更好 因为 它 就像 Al me 一样 有 更多 的 电力 确实 你们 不需要 查看 我们 的 设计 指标 评估 那 是 供应商 的 问题 只需 插上 一个 工具 它 就会 解决 你们 所有 的 问题 Greg 我 非常 喜欢 你 如何 演示 了 我们 想要 的 东西 用 打地鼠 来 表达 每次 你们 看到 问题 就 用 工具 来 解决 它 如果 出现 新 的 问题 就 用 工具 来 解决 它 同一个 问题 再次 出现 就 用 不同 的 工具 来 解决 它 你们 懂 了 是 的 Hamma 我 非常 感谢 你 把 我 当作 模因 来 帮助 你 表达 观点 我 想 强调 你们 应该 采用 一种 心态 评估 是 供应商 的 问题 只需 认识 到 应该 有 一个 一刀切 的 解决方案 让 供应商 去 解决 你们 太 忙于 做 高管 了 如果 你们 真的 想 正确 地 做 这件事 你们 需要 创建 一个 看起来 像 这样 的 仪表板 包含 你们 能 收集 到 的 每 一个 现成 的 指标 指标 越多 越好 没关系 指标 是否 与 结果 或 真实 的 失败 模式 相关 确保 数字 难以 理解 所以 你们 不知道 3.5 和 4.5 之间 的 区别 持续 囤积 随机 指标 直到 你们 找到 一个 正在 上升 并且 向 右 移动 的 指标 然后 你们 就可以 声称 成功 了 也许 你们 可能会 发现 很难 找到 如何 获得 这些 通用 指标 但 我们 有 你们 只需 采用 来自 评估 框架 的 指标 事实上 采用 所有 的 指标 让 你们 的 评估 指标 指导 你们 盲目 地 并且 永远 不要 问 它们 是否 真正 衡量 成功 再次 你们 拥有 的 数字 越多 越好 是 的 我 个人 喜欢 优化 余弦 相似度 BL 和 Rouge 忽略 实际 用户 体验 我 说 了 一遍 我 会 再说 一遍 永远 不要 与 领域 专家 或 你们 的 用户 进行 交叉 检查 因为 如果 LM 说 它 是 准确 的 那么 我们 凭什么 争论 我们 都是 他们 谦卑 的 僕人 毕竟 阿门 现在 是时候 揭晓 我们 工具箱 中 最 有效 的 技术 了 那 是 避免 查看 数据 认真地 只需 避免 它 随时 在 旁边 放 一副 眼镜 你们 必须 偶然 碰到 数据 戴 上 眼镜 是 的 数据 听起来 很 混乱 让我们 让 工具 来 处理 它 因为 你们 绝对 100% 可以 信任 人工智能 的 输出 而 不用 自己 查看 数据 查看 数据 那 是 一个 工程 问题 你们 是 领导者 你们 有 更 重要 的 战略 事情 要做 比如 开会 讨论 会议 除此之外 开发人员 他们 总是 比 你们 的 业务 团队 拥有 更 多 的 领域 专业知识 是 的 我们 知道 最终 到 了 这个 时刻 你们 的 客户 是 你们 最 优秀 的 问答 并且 希望 你们 有 很多 他们 会 在 出现 问题 时 抱怨 也许 最终 但 更 重要 的 是 你们 必须 相信 你们 的 直觉 它 让 你们 在 生活 中 走 到 了 今天 吧 感觉 总是 可靠 的 数据 替代品 尤其 是 当 你们 做出 数百万 美元 的 决定 时 如果 你们 难以 相信 你们 的 直觉 就 戴 上 眼镜 它 会 让 你们 重新 接触 到 这些 感觉 所以 现在 我们 知道 工程师 都 是 编码 巫师 他们 将 处理 所有 事情 实际上 并不 重要 他们 是否 已经 几年 没有 与 客户 交谈 过 因为 你们 可以 很快 忘记 事实 是 可能 有 更 简单 的 选择 比如 使用 电子表格 来 注释 和 查看 数据 比如 屏幕 上 的 电子表格 让我们 一起 说 记住 这是 超越 我 的 绝佳 建议 并且 你们 不仅 不应该 查看 数据 你们 必须 确保 没有 人 查看 数据 最 好 的 方法 是 将 你们 的 数据 放入 只有 工程师 才能 访问 的 复杂 系统 中 并且 领域 专家 无法 访问 它 比如 而不是 使用 简单 的 电子表格 或 许 是 屏幕 上 的 Airtable 作为 高管 你们 应该 坚持 购买 一个 定制 的 数据 分析 平台 可能 需要 一支 由 博士 组成 的 团队 来 操作 和 理解 记住 你们 获得 的 奖励 分数 如果 加载 这个 需要 六个月 并且 经常 出错 就 越多 那么 就 这样 了 在 不到 20 分钟 的 时间 里 实现 完全 人工智能 失败 的 终极 防弹 指南 如果 你们 仔细 遵循 我们 在 这里 提供 的 建议 那么 保证 你们 将 浪费 时间 资源 并 疏远 所有 与 你们 共事 的 人 就 我 而言 那 是 你们 可以 拥有 的 终极 成功 确实 是 的 更多 建议 实际上 是 真实 的 请 访问 ai-execs U 我们 也 有 一本 O'Reilly 书 在 2 月 27 日 发布 了 同样 的 材料 所以 虽然 这个 演讲 是 倒置 的 你们 知道 我们 的 生活 经验 实际上 不是 并且 我们 总是 非常 渴望 在 你们 的 旅程 中 帮助 你们 所以 在 这次 演示文稿 之后 找到 我们 问答 演讲 者 的 展位 谢谢 [掌声] 非常 感谢 我们 的 下一位 演讲 者 是 Privacera 的 联合创始人兼 CTO 和 Page 请 欢迎 他 上台 Don Bosco [音乐] Dury 大家好 我 是 Don B 我 是 Privacera 的 联合创始人兼 CTO 最近 我们 开源 了 我们 的 J 和 AI 代理 安全 和 保障 解决方案 我 也是 Apache Ranger 开源 项目 的 创建者 和 PMC 成员 它 为 大数据 提供 数据治理 也 被 大多数 云 提供商 如 AWS gcp 以及 Azure 使用 所以 今天 我 主要 谈论 如何 构建 一个 安全 可靠 的 AI 代理 在 我 开始 之前 让我们 先 统一 一些 术语 从 我 的 角度 来看 AI 代理 是 自主 系统 它们 可以 进行 自己 的 推理 可以 制定 自己 的 工作流 并 可以 调用 任务 来 执行 一些 它们 可以 使用 的 工具 来 完成 的 操作 任务 是 更 具体 的 操作 它们 可能 能够 使用 LLM 或者 它们 也 可能 调用 RAG 或 工具 而 工具 是 可以 用来 从 互联网 获取 数据 的 函数 如果 你们 有 数据库 可以 从 数据库 获取 数据 如果 你们 有 服务 API 可以 调用 这些 东西 此外 内存 是 在 代理 任务 和 工具 中 共享 的 上下文 以 提供 可视化 表示 可能 有 多个 代理 并且 一个 代理 可能 访问 多个 任务 可能 有 多个 工具 并且 由于 这些 工具 可以 与 API 和 数据库 通信 所以 这里 需要 知道 的 一件事 是 今天 大多数 代理 框架 都 作为 单个 进程 运行 这 意味着 什么 代理 任务 工具 都 在 同一个 进程 中 这 意味着 如果 工具 需要 访问 数据库 那么 它 需要 凭证 或者 如果 它们 想 进行 API 调用 它 需要 共享 令牌 所以 这些 凭证 通常 是 服务 用户 凭证 这 意味着 它们 拥有 超级 管理员 权限 并且 由于 它们 都 在 同一个 进程 中 一个 工具 理论上 可以 访问 同一个 进程 中 的 其他 凭证 类似地 如果 你们 有 具有 提示 的 任务 或 代理 所有 在 进程 中 运行 的 东西 任何 第三方 库 也可以 访问 它 所以 这些 使 整个 环境 有点 不安全 对 吧 这里 有点 零信任 的 问题 代理 任务 与 LM 通信 如果 你们 没有 安全 的 LM 那么 这 是 这些 东西 可能 被 漏洞 利用 的 另一个 领域 如果 你们 考虑 到 代理 本身 按 定义 是 自主 的 这 意味着 它 将 调用 自己 的 工作流 取决于 任务 所以 这 实际上 带来了 我们 所说 的 另一组 挑战 安全性 是 未知 的 未知 的 你们 真的 不知道 代理 会 做 什么 所以 它 非常 不确定 因此 与 传统 软件 相比 典型 代理 的 攻击 向量 非常 高 那么 由于 这个 原因 有 什么 挑战 呢 有 多个 挑战 所以 如果 你们 从 安全 角度 来看 如果 代理 没有 被 正确 设计 或 实现 那么 它 可能 会 导致 未经 授权 的 访问 以及 你们 敏感 信息 机密 信息 的 数据 泄露 安全 信任 也是 最大 的 挑战 如果 你们 使用 不可靠 的 模型 或者 你们 的 环境 不够 安全 如果 有人 去 更改 提示 那么 它 也 可能 会 导致 错误 的 结果 合规 和 治理 是 一件 有趣 的 事 我们 大多数 人 都 忙于 仅仅 是 让 代理 工作 我们 甚至 没有 担心 许多 使 你们 的 代理 适合 企业 所需 的 其他 事情 有趣 的 是 我 刚 在 周二 与 我们 的 一位 客户 谈过 他们 是 三大 信用 局 之一 他们 构建 了 许多 代理 但 目前 最大 的 挑战 是 将 其 推向 生产 他们 将 AI 代理 视为 类似于 人类 用户 而当 他们 雇用 人类 用户 时 他们 会 经历 培训 并 有 许多 需要 遵守 的 法规 对 吧 他们 有 来自 加利福尼亚 居民 的 数据 所以 他们 需要 确保 任何 访问 加利福尼亚 居民 数据 的 人 都 不能 使用 它 如果 用户 没有 同意 他们 不应该 用于 营销 目的 他们 有 国际 数据 所以 如果 是 欧洲 数据 那么 谁 可以 访问 这些 数据 有关 它 的 法规 并且 还有 许多 区域 法规 所以 当 他们 甚至 将 AI 代理 视为 类似于 人类 时 他们 有 入职 流程 他们 有 培训 流程 他们 想 确保 代理 也 遵守 法规 对 吧 没有 它 们 就 不能 进入 生产 环境 而 我们 作为 AI 工程师 仍处于 早期 阶段 所以 这是 我们 目前 关注 的 事情 那么 我们 如何 真正 解决 这个 问题 呢 那么 对于 那些 从事 安全 合规 工作 的 人 来说 没有 银弹 最 好 的 方法 是 多层 解决方案 这些 是 我 在 脑海 中 的 一些 想法 比如 你们 可以 将 其 分成 三个 不同 的 层 第一层 是 将 你们 的 代理 推向 生产 的 标准 是 什么 你们 需要 做 什么 吧 我们 谈论 评估 但 我们 大多数 都 只 谈论 模型 有多 好 回应 有多 好 的 评估 但 你们 也 需要 有 更多 关注 安全 和 安全性 的 评估 我们 将 介绍 其中 一些 但 这里 的 评估 的 目的是 得出 一个 风险 分数 并 根据 风险 分数 你们 可以 决定 你们 是否 可以 将 该 代理 推向 生产 并且 该 代理 不一定 是 你们 编写 的 它 可能 是 第三方 代理 所以 它 必须 经过 同一个 标准 第二 是 执行 评估 告诉 你们 你们 的 代理 构建 得 有多 好 而 执行 是 实际 执行 或 实现 的 人 那么 你们 必须 确保 你们 有 一个 非常 强大 的 实现 如果 你们 的 实现 不好 你们 的 评估 将 失败 基本上 你们 无法 进入 生产 环境 第三 是 可观测性 在 代理 世界 中 尤其 是 更 重要 因为 有 太多 的 变量 在 这里 你们 无法 在 开发 或 初始 测试 中 捕捉 所有 这些 东西 所以 你们 必须 跟踪 它 在 现实 世界 中 的 使用 情况 以及 你们 如何 对其 做出 反应 我 将 稍后 详细 介绍 其中 一些 所以 让我们 从 评估 本身 开始 吧 如果 你们 看看 传统 的 软件 开发 中 已经 有 一个 流程 有 门控 因素 告诉 你们 如何 将 你们 的 应用 推向 生产 环境 吧 如果 你们 从 基本 的 事情 开始 比如 当 你们 编写 代码 时 你们 必须 确保 你们 有 正确 的 测试 覆盖率 吧 如果 你们 构建 了 Docker 容器 你们 必须 进行 漏洞 扫描 如果 你们 使用 第三方 软件 你们 需要 确保 你们 扫描 了 CVE 如果 你们 发现 了 高 中 或 关键 风险 你们 尝试 在 进入 生产 环境 之前 修复 它 吧

您进行渗透测试,因此请确保没有跨站脚本和其他漏洞。同样的方法也适用于 AI 代理,对吧?您需要提出正确用例,您需要确保您拥有正确的基础,这样当您进行任何更改时,您更改了提示,或者您引入了一个新库、新框架或新 LLM,您希望确保您的基线不会改变,对吧?如果您使用的是第三方 LLM,请确保它们没有被污染,它们也经过了漏洞扫描。如果您使用的是第三方库,而几乎每个人都在使用它,请确保它们也符合您对漏洞的最低标准。同样,与渗透测试一样,您还应该对您的提示注入进行测试,确保您的应用程序具有正确的控件,这样它就可以阻止它们,而大多数 LLM 已经在这样做了,但并非所有 LLM 都这样做。

另一个关于数据泄露的评估,这也很重要,尤其是在企业界,因为当您构建企业时,您正在构建通常由人类完成的代理。如果您正在为人力资源构建代理,它具有某些功能,如果我是一名员工,我可以申请我的薪资福利,但我不能为别人申请。但如果我是人力资源管理员,我有可能能够访问别人的薪资福利。您如何确保您的代理不会泄露数据?没有恶意用户可以利用您的一些漏洞。因此,在您甚至可以将代理投入生产之前,您必须进行此评估。

与数据泄露类似,未经授权的操作。大多数代理即使是只读的,现在也有一些代理试图改变事物,它们会执行一些操作。您如何确保这些操作也是由正确的人员以正确的方式执行的?

而对于那些已经了解代理工作原理的代理机构来说,代理可能会进入一个紧密的循环,原因有很多,可能是提示使用不当,或者只是任务的提示,或者代理无法解决这些问题。因此,在将代理投入生产之前,您必须确保测试这些场景。

所以,这一切的最终目标是得出一个风险评分,这样它就能让你有信心,你是否可以将它投入生产。下一个将是关于执行。正如我所说,您的风险评分将取决于您的执行有多好,尤其是在代理方面,您几乎是在一个零信任的环境中工作,因为您的库可以访问任何东西,对吧?如果您正在访问您的一些后端系统,其中包含敏感数据,您如何确保错误的用户无法访问它?

因此,从安全控制的角度来看,有很多其他事情我今天不会谈论,比如检测投影和审核,但专注于企业级的事情,您必须确保您拥有正确的身份验证和授权。这非常重要,因为当您查看用户向代理发出请求的环境时,它会转到任务,最终转到工具,并对服务或数据库进行 API 调用。如果您没有正确的身份验证,有人可能会冒充他人,并可能窃取机密敏感信息。

第二个是授权。如果您正确地进行了身份验证,那么您必须确保正确地应用了访问控制。这也很重要,因为代理有自己的角色,并且它们可以执行某些操作。因此,您必须确保它们不会超出它们应该做的范围。同时,如果您有代理试图代表另一个用户执行某些操作,那么您必须确保该用户的角色得到执行。因此,如果您正在访问数据库,您不应该访问用户没有权限访问的任何内容,或者进行 API 调用。

所以,这就是为什么身份验证和授权如此重要。但显然,还有很多其他问题。批准很有趣,因为在传统世界中,我们已经有了工作流程。如果我申请休假,我的经理会批准它,它已经内置到系统中了。但在代理的情况下,您不一定需要一直有人。您的代理可以自动完成大部分工作。因此,如果您设计得当,您可以拥有另一个代理,它所做的就是查找批准并确保结果正确。您还可以设置这些代理可以自动批准的阈值,并且您可以设置适当的保护措施,以确保如果它超过某个限制,它可以自动获得人工介入。

所以,为了重申这一点,因为这非常重要,当涉及到身份验证和授权时,它不仅仅是在您发出请求的点进行身份验证。您必须确保用户身份在所有地方都得到传播。如果您正在调用一个任务,而任务正在调用一个工具,您必须确保用户身份被传递到实际进行数据访问或进行 API 调用的最后一点。在这一点上,您必须确保您能够强制执行正确的策略和访问控制。

第三个是可观察性。可观察性在代理领域非常重要,因为正如我所提到的,传统的软件一旦构建完成,它通常就能正常工作。您只需要确保它不会因为某些库更新或类似原因而出现新的漏洞。但在代理的世界里,涉及许多不同的变量。一个是模型变化非常快。如果您使用的是代理框架,它也在不断发展。您正在使用第三方库,而它开始表现不同。

在代理中,另一个重要的事情是它非常主观,取决于用户输入的内容。您可能已经用某种假设进行了测试,主要是晴天场景,我想申请休假,但最终用户可能使用完全不同的文本来问同一个问题。那么您的模型将如何应对?因此,您必须持续监控,看看用户输入是否会改变响应的生成方式,以及确保发送了多少 PI 数据和其他机密数据。因为如果您看到一些异常情况,您需要能够真正采取行动。

另一件事是,显然您无法监控每一个请求。随着请求数量的增加,这根本不可能。因此,您必须开始设置阈值和指标。这意味着什么?您可以开始计算有多少失败率。一旦您知道您有一定的失败率在您的容忍范围内,那就可以了。但如果它超过了,您可以自动创建警报并进行调查。失败率可能是由于代理误判,可能是恶意用户试图破坏系统。

异常检测是另一个有趣的事情。我认为我们还没有接近它。但在常规的传统软件中,安全方面总是有用户行为分析,他们会查看用户,看看他们是否在标准操作范围内。随着代理的出现,将会有越来越多的异常检测,看看代理是否在可接受的范围内运行。所有这些都将最终形成一个安全报告,这样您就可以近乎实时地了解您的代理在实际生产中的表现如何。这样您就可以获得一些信心。

所以,总结一下,正如我所说,有三件事。一是预防性,进行漏洞评估,以确保您获得正确的风险评分,这让您有信心是否可以将代理推广到生产环境。如果您使用的是第三方代理,是否可以在您的环境中进行使用。二是主动执行,确保您有正确的保护措施,正确的执行,正确的沙箱,这样您就可以安全地运行代理。确保您有正确的可观察性,这样您就可以近乎实时地了解您的代理的表现如何,如果存在一些异常情况,您可以快速进行调整。

所以,正如我所说,我们已经开源了我们的安全解决方案。它被称为 page.ai。安全和合规是一个非常广泛的领域,我认为任何一家公司都无法做到。因此,我们正在寻找设计合作伙伴和贡献者,他们可以帮助我们完成我们的旅程。如果您有兴趣,请通过 boscat@page.ai 联系我,或在 LinkedIn 上与我联系。谢谢。

[音乐]

我们的下一位演讲者将教您如何构建能够自我构建的 AI 编码代理。请加入我们,欢迎 Augment Code 的创始研究员 Colin 登上舞台。

[音乐]

[掌声]

Flairy 大家好,感谢大家今天光临。我想谈谈一些听起来像科幻小说但却非常真实的事情:一个帮助自我构建的 AI 编码代理。我叫 Colin,是 Augment Code 的 AI 研究员,一家为软件工程组织构建 AI 驱动的开发工具的公司。我想和大家分享一下我们从事 AI 编码代理工作的一些经历。

放眼全局,AI 开发工具是一个快速变化的领域。每个人都还记得 2023 年,我们都在谈论自动补全模型,GitHub Copilot 可能是最先想到的。2024 年,聊天模型开始渗透到软件工程组织中。但到 2025 年,我们认为 AI 代理将主导关于软件工程如何变化的讨论。

因此,很自然地,几个月前我们在 Augment 开始构建自己的代理。我想向大家展示一下我们构建的东西的预览,并分享一些关于这项技术如何工作的、来之不易的经验教训。我想强调一下,我真的对这个代理帮助自我构建的程度感到惊讶。我将分享一个有趣的统计数据:我们的代理代码库大约有 20,000 行代码,其中超过 90% 是由我们的代理在人类监督下编写的。

那么,代理编写自己的代码意味着什么?实现核心功能。我们最先需要添加的功能之一是第三方集成。我们的代理,如果它要像软件工程师一样工作,就需要与 Slack、Linear、Jira、Notion、搜索、Google 交互,并在您的代码库中进行操作。我们希望代理能帮助我们构建这些功能。我们让它在自己添加了前几个功能后,当我们给它一个指令,比如添加 Google 搜索集成时,它能够查找代码库中要添加它的正确文件,弄清楚要使用的正确接口,然后添加它。一个有趣的轶事是,当我们添加 Linear 集成时,它不知道 Linear API 文档,我们使用的基础模型没有记住这些。因此,它使用了它之前编写的 Google 搜索集成来查找 Linear API 文档,然后能够添加它。

我们用它来编写测试。我们发现,如果我们问它类似“为 Google 搜索集成添加单元测试”之类的问题,它就能够添加这些。为了做到这一点,我们只需要给它一些基本的进程管理工具,比如运行子进程、与之交互、在它编写的某个测试中出现无限循环时不会挂起,以及读取输出。

我认为这非常有趣。每个人都见过这些代理编写功能和编写测试的 Twitter 演示。但我还没有看到一个引人注目的例子,说明它们能够执行某种优化。在我们项目的过程中,我们注意到代理速度很慢,我们不确定为什么。所以我们让它剖析自己。它利用我们提供的所有工具,在自己的代码库中添加了一些打印语句,基本上运行了它的子副本,查看了这些打印语句,并发现我们代码库中的一部分在同步加载所有文件和用户存储库,然后同步进行哈希处理。然后它添加了一个进程池来加速这个过程,并进行了压力测试以确认一切正常。到最后,我们达到了大约 20,000 行代码,其中超过 90% 是由代理在我们的帮助和监督下编写的。

让我们通过几个简单的例子来快速看看代理是如何工作的。我专注于可靠的简单例子,这样您就可以轻松地跟上。所以,我问代理:“你能搜索 Google 吗?”然后它注意到它找到了一个名为 Google Search 的工具。对于不熟悉工具概念的人来说,我相信你们大多数人都熟悉,但我还是会快速重申一下。这个想法是,我们有一个主级代理,它负责所有规划,并且可以访问某些工具来与之交互。它的环境,无论是我们谈到的第三方集成,比如 Google,还是编辑用户存储库中的文件。然后它想确认这个 Google Search 工具是否正常工作。所以它发送了一个测试查询。代理回应我们:“是的,我可以搜索 Google,我看到了前 10 个结果。”

让我们尝试一些更复杂的事情。我问它:“为代理的 Google Search 工具添加日志记录,然后生成一个示例。”然后它使用我们的检索工具,该工具允许我们搜索本地代码库,它正在寻找与 Google 搜索集成相关的文件。它在我们的目录结构深处找到了这个文件:services/integration/thirdparty/google_search_tool.py。然后它调用它的文件编辑工具,快速高效地编辑该文件以添加这些打印语句。

这是上一个例子的延续。它添加了这些打印语句,现在它想运行一个子副本,以便它可以查看输出。这个打印语句是因为我们要求它提供示例日志。但在这样做时,它发现我们没有授权 Google 凭据。因此,它使用我们的澄清工具向用户寻求澄清。它问:“我没有看到 Google 凭据。您希望我添加 Google API 的存根,还是引导您完成凭据设置?”我注意到凭据实际上存储在 augment/google_api.json 中。它只是错过了这一点。

这是一个非常酷的附加功能。我们希望代理在与人类互动时能够不断学习。所以在这里,它想:“也许记住 Google 凭据存储在哪里是个好主意。”因此,它调用了这个内存工具来创建一个关于 Google 凭据存储在哪里的内存,以便以后保存。

这是另一个例子。如果您拥有那个非常好的上下文引擎,那么获得一个能够良好工作的代理至关重要。现在我们得到了输出。它打印出这些日志,它用示例字符串“Python 编程语言”进行了搜索,并提供了一些 Google 返回的示例 URL:python.org 和 wikipedia.org。

所以,我们让代理为自己添加日志,运行自己,从用户反馈中学习,并使用了各种工具:Google 搜索、代码库检索、文件编辑、用户澄清和记忆有用的学习。

让我们快进一下,谈谈我们构建过程中的一些经验教训。我想指出,我们已经从事 AI 编码工具几年了,我们并没有打算构建代理。我们已经从事过补全模型和聊天等工作。但我们的重点一直是围绕构建一个非常强大、可扩展、适合企业使用的上下文引擎,因为我们知道,无论这些 LLM 有多好,您都需要那个上下文。我们还仔细考虑了如何构建出色的 UI/UX,以便 AI 能够与人类无缝交互。事实证明,这个上下文引擎以及所有关于设计的想法为我们提供了一个很好的基础,让我们在短短几个月内就能快速构建出这个代理。

最重要的三件事是:访问上下文,那个拥有所有不同类型上下文源的上下文引擎,无论是 Slack 还是代码库;来自一流基础模型的推理能力;以及代码执行环境,这样您就可以安全地在客户环境中运行命令。

让我们来谈谈我们经常陷入并已纠正的一些假设,以及你们中的一些人可能会遇到的。第一个是,LLM 代理已经达到了高级软件工程师的水平。如果您查看 Twitter 演示,通常看起来是这样的:一个代理自己编写了整个网站。现实情况是,专业的软件工程很少是从零开始的,我们编码的环境比那些演示所展示的要混乱得多。因此,这些工具还不够完善,但它们仍然非常有用。

我看到人们思考如何使用和构建这些代理的一种方法是,他们认为代理将接管整个任务类别。首先,您构建一个解决后端编程的代理,然后构建一个专注于前端的代理,也许还有一个专注于测试的代理。实际上,这项技术是通用的。因此,与其考虑任务类别,不如考虑复杂性级别。我们的代理在前端、后端、安全等方面都做得相当不错,我们正在同时提高所有这些方面的能力水平,因为这是一项非常通用的技术。

我们也看到人们拟人化代理。他们认为它们就像人类软件工程师一样,并将弱软件工程师的特征映射到他们认为弱代理的样子,反之亦然。实际上,代理拥有与人类不同的优势和劣势。您可能有一个不能做数学的代理,但它可以比任何人类都快地实现一个完整的前端功能。重要的是我们要记住这一点。

让我们来谈谈一些反思和经验教训。我问 Aman:“你能为新的推理模块使用 Graphite 创建两个 PR 的堆栈吗?”不幸的是,Graphite 是一个用于处理 Git 的版本控制工具。您可以堆叠 PR,这使得审查更容易。不幸的是,基础模型没有记住 Graphite 的工作原理。所以我们的通用代理回应:“我不知道 Graphite 是什么。我将使用 Git。”然后它调用我们的终端工具来运行一个命令:`git checkout`。

但我们在这里该怎么办?我们希望它使用 Graphite。我们不能指望 OpenAI 或 Anthropic 立即重新训练他们的模型来理解 Graphite。所以我们想出了“知识库”这个概念,它本质上是一组我们希望代理理解的信息,而它目前还不理解。我们可以修补一些漏洞。我们想添加的一个东西是 Graphite 知识,所以我们创建了这个 Markdown 文件,描述了 Graphite,如何运行常用命令,比如如何创建 PR,使用 `git create`,以及一些不该做的事情。我们在知识库中为其他事情创建了其他文件,比如我们工具堆栈的详细信息,如何运行测试,风格指南。然后我们将其添加到代理的上下文中,这样它就可以在不理解某些内容时动态地搜索这个知识库。添加了这个之后,我们就可以问它:“你能为新的推理模块使用 Graphite 创建两个 PR 的堆栈吗?”它就会调用知识图谱,阅读关于 Graphite 的信息,然后就可以运行 `git create` 命令了。

那么这里的学习是什么?将代理集成到您的组织中至关重要。我喜欢使用的类比是,如果您刚刚雇佣了一名新的软件工程师,您不会让他们盯着代码库看三天来弄清楚您的技术堆栈是如何工作的。您会让他们提问,也许他们不理解一些事情,您会在 Notion 中添加一些额外的文档。我们应该同样考虑代理。

回想一下,我之前谈到过我们添加的所有第三方集成,无论是 Linear 工具还是 Slack 工具等等。当我们处理这些时,我们并不确定应该优先考虑哪些,并从产品路线图开始。在正常情况下,我们会做出一些有根据的猜测,实现其中几个,然后继续前进。但有了代理,我们能够迭代它们,一次性构建所有这些。这开始改变产品管理的工作方式。如果您能够一次性构建所有东西,那么也许工程时间就不是我们构建的瓶颈了,而我们构建的瓶颈将更多地在于良好的产品见解和良好的设计。所以,当代码便宜时,您就可以探索更多的想法。

另外,回想一下我们之前讨论的为代理的 Google 搜索工具添加日志记录的例子。它能够找到要编辑的文件。请注意,我们不必给模型一个非常精确的指令。我们只是用自然语言告诉它,就像我们和另一个工程师说话一样,为代理的 Google 搜索工具添加日志记录。它能够找到要编辑的文件。这之所以可行,是因为我们拥有非常好的代码库意识。

我们还可以将代理用于编写代码之外的任务,但仍然在软件开发生命周期内。所以,我们让它查看我们代码库中的最新 PR,并生成一个关于它们的公告,然后我们将其发布到 Slack。标题是“CLI 代理的新工具”,我们谈论了一些关于 Slack 通知和 Linear 集成的事情。这之所以可行,是因为我们拥有 Slack 集成并且很好地理解了我们的代码库。

这个图可能看起来很熟悉,来自讲座的开头。我们实际上让代理也制作了这个。我们让它:“给我画一个交互式代理代码行数随日期变化的图。”

所以,良好的上下文在所有这三项任务中都至关重要。我们需要从一些不同的来源引入一些不同的上下文。而且不仅仅是代码库。上下文有多种形式。还要注意它是乘法的。拥有代码库的访问权限和拥有 Slack 的访问权限,其有用性是仅拥有其中一个的四倍。

最后,我想切换到谈论测试。这是我们代码中一个非常难以测试的边缘情况。代理实际上编写了这个,我们之所以发现它,是因为一些意外的运行时行为。我们有这些缓存,代理会存储相关的运行信息。我们可以并行运行多个代理,它们都写入同一个缓存位置。代理编写了这个 `save` 函数来保存到该位置。它有一个围绕 `json.dump` 的锁,所以当多个代理同时写入这个缓存时,不会出现明确失败的竞态条件。但请注意,这里没有在写入缓存之前读取。结果是,您可能会遇到一个竞态条件,即多个代理并行运行,它们都在覆盖彼此的缓存。当代理编写这个 `save` 函数时,为什么它会错过这个问题?这些代理会犯错误,这是一个难以测试的情况。存在并行编程,存在缓存。所以我们没有测试。因为我们没有测试,代理就搞砸了。我的学习是,我们需要非常小心地进行充分的测试。

我们有一个非常惊人的统计数据。我们有一个内部 bug 修复基准测试。我们发现,当我们升级我们的基础模型大约六个月时,我们在该基准测试中的分数提高了 4%。但是当我们增加了运行测试的能力,这样代理就可以建议修复 bug,运行测试,查看反馈,建议另一个修复,运行测试,重复四次,这使得该基准测试的得分提高了 20%。那么教训是什么?更好的测试能够实现更多的自主性。您可以更信任这些代理,它们会变得更聪明。

在代理的世界里,软件工程看起来是什么样的?去年代理还不能工作,但现在它们相当不错了。如果您两年前问我,我们是否会从事这项技术,我坦白说我不会猜到。这些代理正在开始帮助构建自己,这只会加速它们改进的速度。代码不会消失,因为它是我系统的规范,但我们与它的关系正在改变。良好的测试平台正变得比以往任何时候都更重要。我们需要特别注意我们代码库中那些往往测试不足的部分。产品开发的计算方式正在改变。如果代码的编写变得非常便宜,那么我们的重点将更多地放在良好的产品工作上,快速收集客户反馈,建立见解。我们对这项技术将如何积极地改变我们的行业感到非常兴奋,我们将很快发布我们的代理。所以我真的很期待与您分享。如果您想进一步讨论,请在会谈结束后找我。谢谢。

[掌声]

[音乐]

女士们,先生们,请再次欢迎您的领导力轨道会议主持人 Peter 登上舞台。

[音乐]

[掌声]

Humphrey 好了,各位,欢迎回来。希望您喝了咖啡,系好安全带,戴上头盔。我们接下来的会议安排得非常紧凑。我们将讨论检索增强生成和数据管道。我们将讨论“正好”,这总是一个热门话题。我们将讨论 AI 在软件开发生命周期中的应用。这是一个我非常期待的。它如何影响传统的软件开发生命周期?这是我肯定要学习的东西。然后是关于 AI 生产力、内部代理的一些内容。当然,我们还将邀请 OpenAI 的演讲者。

那么,请加入我,用您的掌声欢迎我们的下一位演讲者,Neo4j 的开发者关系副总裁 Steph Chin,以及 Pfizer 的运营和洞察高级总监 Jonathan Low。

[掌声]

[音乐]

谢谢。

嘿,很高兴回到纽约市。我实际上就在附近长大,很高兴能和 Jonathan 一起演讲。

谢谢 Stephen。很高兴来到这里。您知道,我们在这里是为了谈论领导力,谈论您如何真正将您一直在听到的许多事情付诸实践。我们将谈论战略,我们将谈论技术。但让我们从分析师开始。这里有多少人信任 Gartner?当 Gartner 说什么时,他们预测 AI 浪潮,他们预测……好吧,没人信任。没人。房间里没有举手。记录在案。但当他们预测失败和灾难时,我试图相信。所以,去年他们预测到 2025 年底,30% 的生成式 AI 项目将被放弃。现在,房间里的任何人,这是一个非常真实诚实的检查,有没有人参与过一个失败的生成式 AI 项目?现在,勇敢的灵魂,太棒了。给那些花了那么多勇气的人鼓掌。

现在,为了让他们感觉好一点,谁还没有生产出他们的生成式 AI 应用?所以剩下的手都举起来了。所以,这就是挑战。我们都希望生成式 AI 取得成功,我们都希望做惊人的事情,我们被要求做惊人的事情。但我们需要有正确的方法来在我们的组织中,在领导层中,在内部推销它,用他们能够理解的技术来构建它,以及那个愿景。当坐在桌子前面的人是这个人时,很难获得一个技术上可行的愿景。他就是那个听说了生成式 AI 的高管,他的孩子正在为他们的学校课程使用它,他就像,“哦,是的,是的,它解决了所有问题。插入这里。成功。我希望在两个月内投入生产。”

我认为,拥有 Jonathan 作为我的联合演讲者的一大优点是,他实际上已经完成过这件事了,而且是在一家大型生命科学公司,他不得不应对所有这些领导力挑战、组织挑战、孤岛,来构建一个我们实际上可以投入生产的系统。

能多告诉我们一些吗,Jonathan?

谢谢 Stephen。正如我所介绍的,Jonathan Low。您可能认识我,当我们在走廊里时,或者当我给您更多关于我推出基于生成式 AI 的业务能力经验的信息时,您可能会认为我是“悲观的黛比”。AI 如此令人兴奋,直到奇点。这就是我实际上处理我将要解释给您的问题的方式,但它实际上奏效了。

商业案例是技术转让,这意味着在生物制药领域,将实验室规模的药物开发(想想烧杯和人类规模)扩展到工业规模,每天生产一百万剂。要从实验室规模达到全球多个工厂,非常快速地生产大量产品,需要数年时间,因为建造工厂和建造设备的工业人员需要筛选数千份在科学层面创建的文档、笔记和测试结果。

另一个挑战是,我将引用一个统计数据。2019 年的一项研究表明,制造工人的平均任期(任期是指他们在公司工作了多少年)约为 20 年。今天,您认为制造公司的平均任期是多少?研究表明是三年。我们从 20 年下降到 3 年,所有这些专业知识都将退休,或者很快就会退休,因为婴儿潮一代正在变老。因此,我们确实需要生成式 AI,我们需要一台机器来吸收捕获在文档中或甚至在人们头脑中的大量智能,并将其传递给从事这项技术转让的新人。

因此,我们获取了所有这些数百万份文档,并将它们加载到了一个图中。我们不一定将文档加载到图中,我们将块加载到图中。我们真正喜欢使用图来完成的一件事是,我们构建了块、文档、段落、行,因为我们想了解当我们用相似性搜索搜索这些块时,哪些块真正返回了人们最想要的结果。我们想真正地改进我们存储和管理块的方式。所以,在这一点上,这是一个全新的领域。由于我们能够在图中构建那个级别的分块,我们最终能够学会并越来越好地改进我们最初的分块方式。

是的,我认为这对我来说真正令人惊叹的是……我们谈论的是业务挑战和项目失败。Gartner 的研究表明,最大的失败模式是没有一个能够真正解决实际问题并可盈利的业务用例。而这不仅是一个伟大的业务用例,而且它还可能拯救生命,因为您正在更快地将救命药物带给人们,您能够更快地完成这项工作。但问题总是中间的人。所以,您合作的团队可能有点“非我发明”的综合症,当您带着这个伟大的解决方案来时,比如“我将使用 Graph RAG,我将把所有这些文档加载到我的……我的……我的大型存储中”,他们会说:“不,不,不,我们已经看到了这篇研究论文,我们观看了这个演讲,有一个其他的平台我们想使用,有一个其他的框架。”或者也许它太贵了。我的意思是,与经典计算和云计算相比,生成式 AI 架构的成本可能要高得多,如果它们没有得到很好的架构。而且,总的来说,它们会增加组织的成本。那么,您如何说服人们从一个正在工作但工作得不够好的系统转向一个更昂贵的系统,这是一个研发投资、重新开发,以转向生成式 AI 架构呢?

那么,您在费森内部遇到了一些挑战,您是如何解决的呢?

很好。对于这个,它更像是一个大型组织内的创业用例。我想知道有多少人曾在 50,000 人或更多人的组织工作过?很多人举手了。我目前的公司有超过 10 万人。我也曾在 IBM、德勤等大型组织工作过。如果您像我一样在这些组织中,您就会成为那个头上带着灯泡的小红人,说:“我有一个想法,可能会帮助公司。”我有一个 X 名数据科学家、开发人员和 SRE 的团队,我们可以为公司带来这种价值、这种能力。如果您像我一样,如果您是那个红人,是您最感兴趣与之联系的幻灯片上的第一批人,那么您就往上走。您比我好。我加入这个职业是因为我喜欢构建让用户愉悦的应用程序。所以我的本能一直是先去底部,对那些用户说:“嘿,您真的想要这个工具吗?”那些用户会怎么说?他们会说:“您的工具……如果它正确,什么让它变得好?它消除了他们不想做的无聊的事情。但它不能只是消除无聊的事情,它还必须提供准确的结果,它还必须以高性能的方式工作。他们不能按下按钮,然后去喝杯咖啡回来。”我觉得这很容易,对吧?现在,您越来越快地构建出准确、快速的应用程序。那么真正的挑战在哪里呢?

所以有人说,您先去上面。在一个拥有 5 万到 10 万人的公司里,您遇到 CEO 的可能性有多大?如果您是等级制度第四级那个有想法的人,可能性很小。这里有人看过电影《Dirty Dancing》吗?《Dirty Dancing》?也许?您还记得《Dirty Dancing》中 Baby(电影中的女主角)第一次见到 Johnny(那个了不起的舞者)的那一部分吗?她激动得说不出话来,最后她结结巴巴地说:“我搬了一个西瓜。”然后他就走了,她说:“我两周前搬了一个西瓜。”

我走进我公司总部七楼的电梯,我的 CEO 也在电梯里。我感觉就像《Dirty Dancing》里的 Baby。我不知道该说什么,我卡住了。他是个好人,他打破了僵局。“我刚从度假回来,卷起袖子,迫不及待地想开始工作。你在忙什么?”然后,谢天谢地,我们到了他的楼层,门开了,他出去了。当他出去时,我结结巴巴地说,不是“我搬了一个西瓜”,而是“我正在使用 LLM”。他走了。

所以,当您试图在一个像这样的大公司中推广您的工作时,了解那个高管正在努力实现什么会有所帮助。他达到那个点的方式是,他与顾问交谈,顾问说:“让我们告诉您如何成为您行业的领导者,而不是落后于竞争对手。”所以,一个那个级别的执行者可能会做的事情是创建一个“目的蓝图”或类似名称的东西。而第一条信息必须是几个词,并传达整个公司都能遵循的东西。例如,可能是“每年改变十亿人的生命”。在生命科学领域,这是一个巨大的愿望。

为什么您要关心呢?也许您会在电梯里提到它。“我正在用最棒的 AI 搜索引擎 Bing 改变每年十亿人的生命。”他走了。但那个信息,他给出的信息会传递到下一个级别:首席数字官、首席科学官、首席供应官。您认为他们会说什么?他们会试图将他的信息转化为他们自己的特定风格。所以数字官会说:“我希望在 AI 领域引领行业。”科学官会说:“我想应对世界上最严重的疾病。”供应官会说:“我想加速供应。”仍然非常高层。而且您可能也见不到他们。

您会见到谁呢?您会见到他们的二级和三级人员。这时他们会说什么?他们不再说标语了。相反,他们说:“我想要节省成本,我想要避免成本,我想要更早地实现收入,或者我想要更均衡的头数。”所以,当您与这些人交谈时,您的幻灯片必须有数字和时间,以及您对您的工具、能力或报告等的承诺,它们将如何满足这些时间和数字。

您可能也见不到他们。如果您的大家公司有一种叫做“客户合作伙伴”的角色,您的数字人员与客户合作伙伴交谈,客户合作伙伴与业务部门交谈,那么您必须说服的那个人就是他。而问题是,客户合作伙伴往往只专注于他们特定的部门。可能有一个客户合作伙伴专门从事研发,或者一个专门从事供应。他们有时会说什么?他们不一定说同样的话。其中一个可能会说:“研发已经有五个、六个或十个搜索引擎了,为什么还要建一个呢?”或者他们可能会说:“搜索引擎是个好主意,为什么不将其功能集成到供应部门的每个工具中呢?”所以,您的范围要么缩小到零,要么扩大到一切,您需要能够就此进行谈判和导航。

如果您能满足所有这些人并克服所有这些障碍,您就完成了,对吗?不,因为当您开始构建时,供应商会来找您说:“为什么要在内部构建,而不是购买我们的工具?”他们已经和首席数字官谈过是构建还是购买,哪一个在经济上更现实和合适。也许您能通过这一点,然后就完成了,对吧?谁还会阻碍您那令人难以置信的 AI 搜索工具呢?“友军火力”就是答案。您自己的同事,无论是上级还是同级,可能会说:“伙计,我先来的。AI 搜索是我的地盘。”或者他们可能只是说:“嘿,供应部门的那个客户合作伙伴是对的,请将它集成到我已有的东西中。”

所以,我想说的是,我们听了很多关于失败和挑战的演讲,Gartner 也不喜欢。这是一个令人难以置信的时刻,在这个令人难以置信的行业中,在这个令人难以置信的变化中,对我来说,生命科学和更广泛的信息技术行业都是如此。我喜欢我们听到所有关于失败的担忧,因为这只是意味着我们正处于一个非常激动人心的时刻的开始。但作为其中的代表,我的建议是:了解您的听众,为所有人个性化,并让您的人工聊天机器人以正确的语言、正确的级别进行交流。

好了,这太棒了。我们已经讨论了很多这些挑战。所以,我们已经讨论了获得一个好的业务用例,能够真正为组织提供价值,如何处理像人和组织内的不同失败模式,组织中有大量的人可以是您的盟友,也可以反对您,这取决于您如何与他们合作。但这也是一个技术问题,您必须拥有正确的技术来解决您的用例。

现在,我认为我们许多一直在构建 RAG 和企业应用程序的人面临的最大挑战之一是 LLM 本身,它们会因为幻觉而与我们作对。随着新模型的出现,这种情况正在改善。通过向量数据库更容易输入正确的信息。但我认为您选择了一种相当独特的方法,使用了图数据库。为什么您选择在您的费森实现中使用图数据库?

嗯,有很多事情图不擅长,比如家谱序列、食谱或社交网络、层次结构或时间序列。而所有这些应用在费森都普遍存在。所以这是最初使用图的动力。但我还发现,我将越多数据整合到图中,我的数据科学家、工程师、开发人员和 SRE 就越快地能够理解数据格局。过去需要三个月才能整合、理解、清理的数据,现在只需要三周或更短的时间就可以完成一个新项目。

所以我知道,很多原因……

人们之所以采用图,是因为在数据搜索和性能方面,遍历变得更加容易,而且性能也得到了提升。但我发现,使用这项技术也极大地提升了团队的绩效。对于不熟悉知识图谱、LLM 或图谱 RAG 的朋友来说,这并不是一个新想法。虽然我会将你们列为早期用户,因为你们现在已经在使用基于此的产品了,但微软写了关于图谱 RAG 的开创性论文,基本上是利用现有的文档,让 LLM 将其分块成图,然后展示了由此产生的卓越结果。

在直接使用 LLM 的技术光谱上,你可以获得不错的结果,但它缺乏上下文,缺乏企业知识。使用向量数据库或基础 RAG,你可以获得更好的结果,因为它实际上可以调动组织知识,但答案往往有点笼统,存在很多幻觉。图谱 RAG 将我们拉到了光谱的另一端,现在你正在从你构建的知识图谱中获得答案,你可以随着时间的推移不断发展,获得更精确的答案,这些答案实际上触及了生命科学、制造业和关键业务行业中现实问题的核心,在这些行业中,你不能犯错。

而且,在那些复杂的行业中,如果存在很多关系数据库中可能不会出现的大量连接,因为没有人费心去永久建立连接,而在图谱中,这些连接一开始就存在。所以,如果你搜索某样东西,突然之间,相关的邻近事物就会变得可用,你可以与 LLM 共享,以获得更好的上下文知识。

是的,你知道,我认为,如果大家正在实施这个,或者大家正在考虑如何构建图谱 RAG 的架构,这是一种非常简单的思考方式。基本上,你正在做的是,你正在为你的生成式应用程序提供数据,并且你同时提供数据的向量和知识图谱表示。所以你既在向向量询问答案,也在从图数据库中获取关系上接近的节点,在那里你获得额外的上下文,并将其传递给 LLM,然后这会让你从你的专家系统中获得更具上下文相关性的结果。

我认为这是一个使用你随着时间推移构建的知识图谱,或者让 LLM 构建的知识图谱来获得卓越结果的好方法,这样你就可以更好地进行治理,你可以在图谱节点上设置控制和属性来控制谁可以访问信息。你现在可以获得更好的可解释性,因为当你从 LLM 获得答案时,你不再查看向量空间中的统计概率,你实际上是在查看图谱、节点和边,我们可以对其进行推理,并开始理解它们之间的关系,理解什么与制造业相关,什么与制造业无关,它们只是普通术语。

对于正确的应用,我们可能正在拯救生命,更快地将药物送到人们手中,并利用生成式 AI 做好事。感谢大家参加我们在 AI 工程峰会上的演示。非常感谢大家。

[音乐]

我们的下一位演讲者将介绍如何将集成的 AI 编码代理集成到世界上最大的旅游网站中,他将告诉我们如何做到这一点,他就是 Bruno。

[音乐]

大家好,我是 Bruno Pasos,大家今天过得怎么样?早上过得很愉快,很高兴看到观众中有如此多的面孔,大家都在构建软件,无论大小。我的名字是 Biang,我是 Sourcegraph 的 CTO 和联合创始人,我们为大型、混乱的代码库构建开发工具。是的,我是 Bruno,Bruno Pasos,我负责 Booking.com 的开发者体验产品部门,在过去一年里,我也负责 Booking 的生成式 AI 创新方面。

今天我们来谈谈我们如何合作构建软件开发代理,这些代理消除了 Booking 的大量重复劳动,并带来了实际的投资回报和影响。有多少人听说过这个?你知道,你在一家大公司工作,CEO 进来告诉你:“我们需要采用 AI。”然后大家说:“好吧,那是什么意思?我们如何衡量它?也许是出于对错失机会的恐惧而购买 Co-pilot 之类的东西。”然后六个月后,其他人,也许是 CFO,会问你:“嘿,我们刚采用的那个 AI 工具的投资回报是多少?或者我们正在构建的代理的可衡量影响是什么?”这是一个很多人现在都不太确定如何回答的问题。

但 Bruno 和 Booking 一直走在这方面的前沿,并且非常积极地获取和构建最好的工具,并跟进以展示它们如何真正影响他们的组织。你太客气了。我们正在引领这个。我认为我们才刚刚开始,而且我感觉离真正的前沿还很远。但让我先谈谈 Booking。我相信你们大多数人都听说过这家公司。我们的目标是让每个人都能更轻松地体验世界,而我团队的目标是确保我们的开发人员的道路畅通无阻,以便他们能够发挥最佳作用。

在公司的一些地方,我们已经接近这个目标了,而在其他地方,我们却离得很远。为了提供一些背景信息,我们是地球上最大的在线旅行社之一,我们服务大约 150 万个房间夜,拥有超过 3000 名开发人员。请举手,有多少人曾在一家拥有超过一千名开发人员的公司工作过?好的,很多人。在开发或技术方面,我们每年服务超过 2.5 亿个合并请求,每年运行 250 万个 CI 作业。我们是极其数据驱动的。

我们的公司之所以能走到今天,是因为我们不断进行实验,并且痴迷于数据。我之所以这么说,是因为当我们进行实验,主要是以 A/B 测试的形式进行时,我们会将这些实验和功能标志添加到代码库中。当我们努力为用户带来新功能时,很可能这些实验标志或死代码会留在代码库中。现在快进几十年,我们的代码库变得极其臃肿。有趣的事实是,我的孩子们看着我编辑这张幻灯片,他们说:“什么是功能标志?”我说:“嗯,你知道,它们留在了代码库里,它们污染了代码库。”他们说:“就像代码放屁一样。”我说:“现在你进入了代码异味,这是另一个话题,但我们继续。”

因此,随着代码库开始膨胀,变得越来越大,周期时间也变得越来越长,开发人员在调试和处理该代码库上花费的时间就变成了超过 90% 的重复劳动。谁在这里熟悉这种情况?这比一千名开发人员还要多。我们至少每季度对开发人员进行一次调查,了解他们对处理特定代码库的感受。他们只是觉得做任何事情都越来越难。所以我们必须做点什么。

我见过我这一代最优秀的开发者头脑被长达十年的死功能标志迁移所摧毁。这是疯狂的。L Channon 实际上是这么说的。但说真的,那些可能是天才。我前几天和一个来自普华永道的人聊天,他描述了他们正在构建的系统,用于更新他们系统中的所有遗留代码。这太棒了,那个人非常聪明,非常出色,技术非常有趣。但如果那些聪明才智能够用于解决新功能和用户问题,而不是所有这些遗留的垃圾,那不是更好吗?

所以,简而言之,这就是 Sourcegraph 公司存在的意义。我们的使命是让大规模构建软件变得可行。你可能熟悉我们多年来构建的一些产品和工具。代码搜索,就像你的代码的谷歌,允许任何开发者找到并理解正在发生的事情。我们有一个用于大规模重构和代码迁移的工具。你可能听说过我们的 AI 编码助手 Cody,它是一个上下文感知代码生成器,经过调优,可以在大型混乱的代码库中很好地工作。本次讲座的主题实际上是我们正在构建的代理,以自动化软件开发生命周期中的重复劳动。所以我们多年来构建了许多不同的产品,真正统一的主题是加速开发人员的内部循环,增强那里的创造力,然后尽可能多地自动化外部循环中的垃圾。

好的,SB Young 谈到了 Source Graph Search。就在两年前,我们开始使用他们的产品,并在我们的社区中取得了巨大的成功,因为他们能够更容易地搜索那个臃肿的代码库,并找到零散的小块上下文。我完全鼓励大家看看这个产品,它很棒。所以,大约一年前,去年一月,我们开始试验 Cody,为什么?因为 Cody 也有 Source Graph Search 作为上下文。因此,使用一个具有该上下文的工具来试验生成式 AI 主题对我们来说变得极其有用。现在我们希望通过构建内置 Cody 和 Source Graph Search 的代理来实现这一目标。

好的,如果我快速总结一下,希望这能说明事情的进展速度。一月份,我们开始使用 Cody,让公司里的每个人都能使用该工具,我们所有的 3000 名开发人员都有机会使用它。有些人开始使用它,有些人使用后没有看到价值就停止使用了。这开始引起我们的兴趣。所以,在年初的时候,我们有一个选择,要在整个公司使用一个 LLM,以及一些限制我们能做什么的 token 限制。所以,我们开始与 Sourcegraph 配对的第一件事就是移除我们所有的限制,以便真正地尝试一下。

所以 Sourcegraph 非常迅速地为我们提供了每个开发人员可以使用多个 LLM,我们可以选择。这很重要,因为我们发现 LLM 具有专业知识。所以,如果我们要在我们的代码库中挖掘,我们臃肿的代码库,一个特定的 LLM 会比那些在一个全新的服务上工作并开发功能的 LLM 更好。所以快进到七月,我们开始培训开发人员,这变得极其重要,因为那些开始使用但看不到价值的人,在接受培训后,他们开始使用并爱上了它,并成为我们现在称之为的日常用户。我将解释为什么这很重要。

然后我们开始查看更多指标。一月份,主要的指标是“我被节省了时间”。我提到我们是一家数据驱动的公司,而“我被节省了时间”并不是我们可以使用的最统计相关的指标。它基于对少数开发人员的研究,而那还不够。请举手,谁在炒作初期听说过有人声称节省了数千甚至十万个小时的生成式 AI 时间?有人听说过吗?然后你回到公司,说:“我们为什么不做这个?”我称之为“半垃圾”。

所以我们不得不开始研究其他指标,一些更具统计相关性的指标。所以我们开始头脑风暴。到了十月,我们定义了新的 KPI,我将深入探讨,以及衡量生成式 AI 的指标。快进到十一月,去年年底,我们开始发现开发人员如果每天使用 Cody,他们的速度会提高 30% 以上。这意味着每月有 12 天以上,不包括周末和他们不编码的时间。最重要的是,我们能够与 Sourcegraph 合作,在 Cody 前面创建一个 API 层,这样我们就可以创造性地使用我们的一些工具,比如 Slack、Jira,并能够将其中一些从 IDE 中提取出来。

好的,当我们到十月份完成时,我们开始关注这些 KPI,对我来说重要的是,我们定义了我们可以在一年内衡量的东西,因为事情发展得如此之快。如果它真的很有帮助,让我们能够确定我们可以在接下来的一年里衡量什么。所以我们定义了四个 KPI:变更的提前期、代码库的质量洞察,这将转化为我们如何现代化一些臃肿的代码库。所以,一些指标,当我提到短期、中期和长期时,这些是我们可以在短期、中期和长期内看到结果的指标,而长期正是指一年。

所以我们开始看到提前期指标的改进。使用 Cody 的开发人员比不使用的开发人员的合并请求多 30%。一个非常有趣的点是,他们的合并请求更轻量,代码量更少,我仍然不知道该如何解释这一点,但我们正在努力。然后在质量方面,我们希望深入研究漏洞。我们能否展示过去的一些漏洞,提供上下文,代码库的上下文,并尝试看看我们能否预测新漏洞何时会出现,或者它们是否仍然潜伏在我们的代码库中?然后我们开始研究显而易见的,测试覆盖率。我们能否提高测试覆盖率?我们能否为遗留代码创建测试覆盖率?当我们将平台迁移到新平台时,它会通过那组测试。

然后我们进入了编码站点,这更多地与我们能否跟踪我们代码库的哪些部分未被使用有关,一些仍然存在但不应该存在的实验性功能标志,以及性能不够的代码。所有这些都将服务于我们的最终目标:我们能否将代码库的平台迁移时间从数年缩短到数月?

好的,当所有这些都在进行时,我们注意到的一件事是,那些使用编码助手生成代码的工程师也在玩弄底层 API。所以我们意识到,要求人们自定义提示会导致他们想要构建这些调用并将它们组合成更长的自动化链,我们现在称之为代理。我们在早期阶段遇到了很多陷阱,比如帮助人们理解他们对 LLM 能力的期望以及它不能做什么。但长话短说,在某个时候,我们基本上说:“去他妈的,这真的没用,让我们把我们的大脑放在一起吧。”飞到阿姆斯特丹,我们会进行为期一周的联合黑客马拉松,一起构建一些代理。

所以,从那次黑客马拉松中出来的第一件事是这个生成 GraphQL 的东西。Booking 有一个巨大的 GraphQL API。播放视频,它真的有超过一百万个 token,所以它不适合任何现有 LLM 的上下文窗口。即使你能把它塞进上下文,它也无法很好地将上下文集成到连贯的东西中,有很多幻觉。所以我们构建了这个系统,它基本上搜索这个非常非常长的 GraphQL schema,找到相关的节点,无论它们在哪里,然后代理式地确定哪些节点是相关的,然后沿着树向上移动以提取相关的父节点等等。

所以,在右边,你可以看到它的内部对话,这是它推理要提取哪些 schema 节点的过程。然后,在完成推理后,它会生成一个响应。所以,如果你天真地这样做,UI 看起来非常相似,但你最终只会得到垃圾,这就是我们在运行这次黑客马拉松之前看到的。在我们坐下来,实际解决具体的提示等问题,使其正常工作后,我们看到了更好的结果。

好的,一个非常有趣的代理是自动代码迁移。我们能否进入那些拥有超过 10,000 行代码的遗留函数,提供上下文,并加速平台迁移工作?代码搜索、结构化元提示,以及将代码库分割以征服小部分的概念都非常有趣。我完全推荐的一件事是,如果你开始踏上这样的旅程,与一些专家合作,将他们的专业知识带到你的办公室,这对我们来说非常有价值。

我们开始看到,回到我提到开发人员使用 Cody 然后停止并反馈说没有价值的时候,那是纯粹的知识缺乏。人们不知道如何使用 LLM,他们不知道如何传递正确的提示和正确的上下文。这对我们能够构建这个代理非常重要。所以当我们进入这个领域时,开发人员已经工作了好几个月,试图弄清楚我们问题的规模,然后我们能够将其分解并征服。我们用了两天时间,在一个黑客马拉松中,我们能够真正定义并理解调用站点来自哪里,然后能够定义问题的规模对我们来说很重要,以便有一个起点,然后收集可用的低垂的果实。

所以,所有这些仍然处于实验阶段,但我们已经看到了很多价值,以及很多“烟雾中的火花”,从理解代码库的几个月到今天。

好的,所以最后一个真正从这次联合努力中产生的代理是针对代码审查的。这是我们发现的,在许多不同的企业中都相当普遍。这里谁不做代码审查?举手。好的,我稍后会和你谈谈。所以,每个人都进行代码审查。我们发现,最初我们认为这个领域并不那么有趣,因为现在有大约二十几家初创公司都在做 AI 代码审查。但当我们与 Booking 和其他企业交谈时,我们发现代码审查在某种程度上对你的组织来说是非常特殊的。

有很长的规则、指南和其他你想融入你的审查流程的事情,而许多现成的工具并不那么可定制。所以我们构建了这个界面,我们正在产品化构建审查代理的过程,该代理是为你自己的团队和组织量身定制的。基本思想是,你定义一套你想在代码中遵守的规则,然后这些规则以一种简单的平面文件格式定义。然后代理将消耗这些规则,将相关的规则应用于任何给定 PR 中修改的特定文件,然后非常有选择性地发布评论,这些评论是根据这些规则调整的。所以它一点也不嘈杂。我们在这里尝试优化反馈的精确性而不是召回率。

好的,根据我们今年年初的了解,我们已经一起工作了一年,与 Sourcegraph 一起。然后一些想法开始浮现在我们脑海中,我们如何继续前进。我想留给你们的是声明你的服务规则的概念。想想你今天的 CI 管道,当它们出现错误时,我们能否预测并将其左移到 IDE 中?这样错误就会在那里出现,并且它们会以“这是一个错误,这是一个修复”的形式出现。所以希望服务能够达到自我修复的状态。

我们开始看到我们可以做到这一点,我们可以开始利用所有上下文,开发人员通过我们创建的提示库创建的所有提示,并询问这些问题,自动化这些问题到服务器,看看代码库中会产生什么知识。所以我们认为这最终是我们想要实现的,我想说,在今年年底之前,就代理而言。但有很多,有很多东西要去做。

抱歉,我能再说一句话关于上一张幻灯片吗?我认为我们有潜力解决自软件开发诞生以来一直困扰软件开发的一个问题。所以,谁读过“神话般的男人月”?是的,几乎所有人。所以,这是这样一个问题:任何成功的软件最终都会成为其自身成功的牺牲品。因为如果你有收入,你有用户,这就会产生功能请求、错误报告。任何优先考虑这些的业务都将承担技术债务,坦率地说,为了竞争。随着时间的推移,当你向代码库添加贡献者时,你会失去愿景的凝聚力,你会失去你想维护和坚持的标准。

通过声明式编码,现在你可以让高级工程师、架构师、负责组织的人定义必须贯穿代码库的约束和规则,并在审查时以及在编辑器中强制执行这些规则,无论是人类还是 AI 编写的代码。对于更大的组织,你所有的合规规则,开发者需要处理的所有事情,但这些并不一定能为你的最终用户提供新功能。我认为这些是完美的例子,可以声明到你的服务中。但无论如何,在过去一年里,我们一直在努力解决这个问题,最重要的是教育。我们越多地教育开发人员,并手把手地指导整个业务部门,让他们看到价值,然后让他们在两天的工作坊和黑客马拉松中进行实验,他们就会出来,对它的能力充满热情,并成为我们试图转型的日常用户。所以希望能够证明速度提高了 30% 以上。所以教育你的员工。如果你从中只学到一件事,那就是教育。如果你想深入研究任何这些内容,我们楼下有一个展位,随时可以停下来聊聊,或者我明天会有一个博览会演讲,涵盖了其中一些代理的实现细节。谢谢大家。

[掌声] [音乐]

我们的下一个演示是关于在企业 AI 中建立信任。请欢迎 Writer 的联合创始人兼首席技术官 Wasim。

[音乐]

大家好,我是 Wasim,我是 Writer 的联合创始人之一。今天我将给大家讲一个关于我们为什么创建 Writer 的小故事,以及我们正在做什么。但在我们深入之前,我想先快速回顾一下 Writer 的历史。Writer 于 2022 年成立。我们喜欢说 Writer 的故事就是 Transformer 的故事。我们早期就开始构建这些解码器-编码器模型,我们不断构建这些模型,并构建了许多模型。今天我们有大约 16 个已发布的模型系列,还有另外 20 个即将推出,并且我们不断构建这些模型。

从这个列表中,你会发现这些模型分为两类:通用模型,如 GPT-3、GPT-4,如果你有 GPT-5 即将推出;以及许多所谓的领域特定模型,如创意、金融服务、医疗。现在,在 2024 年初,也就是去年,我们开始看到这种趋势,即所有 LLM 在通用领域都取得了非常高的准确性。随着基准测试的进行,我们看到准确性在不断提高,而且我认为每个人今天都注意到了这种准确性。一个好的通用模型的平均准确性在 80% 到 90% 之间。这让我们公司内部产生了一个问题:如果我们继续构建和保持构建领域特定模型,是否值得,如果通用模型的准确性今天已经达到了 90% 左右?

如果我们有领域特定模型,我们是否应该继续构建通用模型,对其进行微调,也许朝着所谓的推理或思考模型方向发展,这样就足够了,而且我们不需要这些金融模型或所谓的领域特定模型。为了回答这些问题,我们需要数据。所以,无论我们接下来展示什么,都可能适用于金融服务领域特定模型,适用于医疗领域特定模型,客户支持领域特定模型,以及所有不同的领域特定模型。今天我将专门谈论金融领域的特定模型,称为“金融基准测试”。我们也有类似的医疗模型,但我们相信我们正在取得类似的成果。

现在,让我深入探讨一下,提醒大家,我们正在尝试回答这些问题:通用模型和领域特定模型,我们应该继续构建它们吗?我们现在要去哪里?我们开始说:“太好了,我们不知道答案。让我们进行评估,创建数据。”我们创建了一个名为“Fail”的东西。其理念是创建真实世界的场景来评估这些模型,看看这些新模型是否真的能提供我们承诺的准确性,或者我们今天在领域特定基准测试中看到的准确性。

我们在评估中创建了两种类型的类别:查询失败和上下文失败。在查询失败中,我们引入了三种子类别:拼写错误查询,你知道,当你向 LLM 提问时,你有一些拼写错误,分段错误,你有一些评论打字错误。我们将这些引入了评估集。我们引入了不完整查询,你缺少一些关键词,一些东西不清楚。我们引入了域外查询,如果你不是该领域的专家,或者你决定复制粘贴一些通用答案来回答非常具体的问题。

在第二类中,我们称之为上下文失败。这变得非常有趣。我们引入了三个子类别:所谓的“混乱上下文”。我们基本上问 LLM 关于不存在于问题本身、在提示中的上下文的问题。我们引入了所谓的 OCR 错误。今天,当我们进行任何 OCR 或将物理文档转换为文本时,我们会引入很多错误,比如字符问题,它们之间的距离。当你进行 OCR 时,单词之间的距离可能会合并在一起。所以我们引入了这种类型的错误。还有不相关的上下文。假设你想询问特定文档的问题,但你最终上传了完全错误的文档。LLM 还会回答吗?LLM 只是实际上发现你有一个完全不相关的上下文吗?

当我们把所有这些数据放在一起,在金融特定领域,金融服务特定领域,你需要某种多样性。这是一个快速截图,告诉你数据量,多少 token。值得一提的是,白皮书、数据、评估集、排行榜都已开源,可在 GitHub 和 Hugging Face 上获取。所以,任何人请查看一下。

我们引入了一个非常简单的“评估指标”。我们只需要关注两件事:模型是否给出正确答案?模型是否能够很好地遵循基础或上下文基础,或者你在这里称之为上下文?这是一个快速或高层次的计算方法。

所以,为了评估,我们选择了一组模型。今天我们可以看到很多聊天模型和思考模型。这是我们拥有的两个列表,我相信你们都很熟悉。然后我们进行评估,我们开始看到非常有趣的结果。我将直接深入结果,我们开始看到一些花哨的东西,所有这些颜色。让我切换到真正有趣的东西。

我们看到所有思考模型都有非常好的行为,它们实际上不拒绝回答。这听起来不错,大多数时候。但实际上,当你给这些 LLM 错误上下文,你给它们错误数据,你有一个完全不同的基础时,这些模型就会失败。它们无法遵循这一点,它们仍然会给你一个答案。这基本上会导致更高的幻觉。如果你专注于答案本身,模型是否能给我答案?你可以看到,几乎所有模型,从领域特定到通用模型,都给你某种答案,它们都非常接近。实际上,推理或思考模型比那里高一点。

但当涉及到基础和上下文基础时,事情变得更有趣了。你可以看到,特别是在文本生成或问答等任务中,它根本没有表现好。所有这些图表看起来都很棒。我更喜欢数字。这是生成图表的数据。我们可以快速浏览一下。如果你看这里的数字,特别是例如 o1 或 o03 或 B fan,你开始注意到这些模型做得非常出色。基本上,当你问它是否拼写错误,当你得到不完整、域外的东西时,数字看起来很棒。模型可以接受一个拼写错误、语法错误甚至域外查询,仍然可以给你答案。

但当你开始转向基础时,事情就会变得非常有趣。我将在这里暂停一下。你注意到什么不同了吗?是的。而且,这些更大的、更具思考性的模型给出了更糟糕的结果。你在基础方面得到了近 70% 到 60% 的结果更差,这意味着模型根本不遵循你。你附加了上下文,你问了问题,答案完全存在于上下文之外。同样的事情也发生在周围的上下文。所以你可以查看数据,看到较小的模型实际上比所有这些过度思考的模型表现更好。

这基本上让我们思考:这是思考,还是只是一个思维链?你知道,这可能有很多争论。至少根据我们拥有的数据,在领域特定任务中,这些模型在这个阶段并没有思考。这意味着幻觉非常高,导致了很多问题,特别是在我们在这里运行的金融用例的基准测试中。我们还可以看到,所谓的鲁棒性、幻觉和获得正确答案之间存在巨大差距。所以,我们肯定还有很多工作要做,以构建这些模型并提高性能。但这让我回到了主要观点。如果你快速回顾一下,即使是最好的模型,在所有幻灯片中,我们在鲁棒性和上下文基础方面仍然没有超过 81%。如果你考虑到现实,你说每 100 个请求,就有 20 个是完全错误的。

所以,这基本上就是我们今天看到的。我相信,至少以我们目前的技术,以我们目前的模型,直到我们有完全不同的东西,我们看到你需要全栈,你需要架构系统,你需要基础,你需要所有东西,包括护栏和围绕系统本身的构建,才能真正拥有一个可靠的、可用的东西。

与此同时,我想回到第一个问题,并回答第一个问题:我们是否仍然需要构建模型?至少今天,根据我们拥有的数据,根据我们的基准测试,答案很简单:是的,我们仍然需要构建并继续制造特定模型。至少以今天的实现方式,即使准确性不断提高,但基础、上下文跟踪、所有上下文的正确性仍然远远落后于我们今天在市场上看到的一切。谢谢大家。

[音乐]

我们的下一位演讲者将分享来自 OpenAI 的真实案例研究。请欢迎 OpenAI 的技术人员 Brent Matall 和解决方案架构主管 Toki Sherbakov。

你好,感谢邀请我们。今天我们将谈谈使用 OpenAI 构建和扩展用例,以及这意味着企业与 OpenAI 合作将用例投入生产。还将简要介绍代理,以及我们如何看待在现场构建这些用例的经验,以及代理工作流程。

所以,在我们这边,简单介绍一下 OpenAI。我相信大家可能都听说过 OpenAI,但就我们的运作方式而言,我们有两个核心工程团队。我们有一个研究团队,有 1200 名研究人员,他们正在发明这些模型。他们构建和部署这些基础模型,这些模型就像从天而降。我们的应用团队,我们的第二个工程团队,利用这些模型构建产品。这就是你看到 ChatGPT 的地方,你看到 API 的地方,GPT 模型在那里可用。这就是我们最终部署它的地方。

最后,在市场营销方面,我们将这些产品推向终端用户手中,这正是我们的团队发挥作用的地方。通过市场营销,我们实际上将其引入到你的员工队伍中,引入到你的产品中,并真正开始自动化这些内部运营。一旦我们最终部署了这些,就会有一个迭代循环,我们从现场收集反馈来直接改进我们的产品,并通过这个研究飞轮来改进我们的核心模型。所以,这基本上是让它回到研究的最后一步。这就是 OpenAI 通常的运作方式。

就企业而言,我们通常看到 AI 客户旅程发生在三个阶段。它不一定必须按此顺序发生,但这是我们通常看到的。首先,也是最重要的,是构建一个支持 AI 的员工队伍。这是将 AI 引入员工手中,让他们具备 AI 素养,每天在日常工作中都使用 AI。这是第一步,也是最重要的一步。

然后,你通常会转向自动化你的 AI 操作。这更多的是内部用例,用于构建自动化,或者也许是一些协同助手类型的用例。然后最后一步是真正将 AI 注入最终产品。这是面向终端用户的。因此,就 OpenAI 的产品而言,赋能你的员工队伍通常从 ChatGPT 开始。这是我们的第一方产品,供用户日常使用。

然后,当你谈论自动化内部运营时,你可以通过 ChatGPT 来完成,对于更复杂的用例,或者需要更多定制化时,这就是 API 的用武之地。然后,最终将这些注入你的最终用户产品主要是 API 用例。但为了让你了解这些产品在实际执行 AI 客户旅程中的作用。

因此,就我们看到企业如何实际制定策略而言,这通常有几种方式。我想说,首先,你从顶层确定战略应该是什么。一个核心的事情是我们认识到的,它实际上不是你的 AI 战略,而是你的更广泛的业务战略。OpenAI 的作用是首先找出技术在哪里满足更广泛的业务战略。因此,这种自上而下的战略指导非常重要。

然后,一旦你有了自上而下的指导,你就会转向用例,比如,让我们确定一两个有影响力的用例来开始,并对其进行范围界定,真正地实现范围内的规模化。所以,一旦你有了战略,你就执行一到两个用例,然后考虑如何在你的整个企业中构建部门能力。这就是你开始赋能团队,并将 AI 融入整个组织。这以多种方式发生。这包括赋能,包括建立卓越中心,包括建立一个中央技术平台,供企业中的其他人构建。我认为这就是我们通常看到的旅程:设定战略,选择一到两个用例,然后通过赋能来构建整个组织的这种能力。所以,这通常是我们看到的旅程。

为了说明这一点,举个例子,这就是我们看到用例旅程如何展开。这是一个说明性的例子,大约三个月。当你确定了你想首先解决的一到两个用例后,你必须进行构思,进行一些初步的范围界定,进行一些架构审查,以了解 AI 将如何融入你当前的堆栈。然后,明确定义成功指标和 KPI。一旦你建立了这些,大部分时间都花在开发上。这就是你进行迭代,你进行提示策略的迭代,整合 RAG,无论是什么,以不断改进你正在处理的用例。

在与 OpenAI 互动方面,这就是我们的团队,比如 Brant 和我,通过研讨会、办公时间、配对编程会议、网络研讨会等方式与你的工程团队密切互动,以加速用例的进展。一旦我们完成了开发阶段,我们就进入了测试和评估阶段。通过我们预先定义的评估,我们现在可以进行 A/B 测试,进行一些 Beta 版本发布,以了解它在实践中是如何工作的。然后我们最终进入生产阶段。这就是你进行一些启动发布,进行一些规模优化测试,以确保它在部署到许多最终用户后能够正常工作。然后我们有持续的维护。

所以,这就是你通常会看到的阶段。再次强调,大部分时间,尤其是在与 OpenAI 合作时,将围绕开发。在这方面,我们带来了一个专门的团队,我们也要求你带来一个专门的团队来实际实现这一点。我们部署的东西也能赋能你,比如早期访问模型和功能。这是与 OpenAI 密切合作的关键事项之一,我们可以稍微看到未来。我们的路线图并没有太多,我可能看不到六个月以上。人们问你的 18 个月路线图是什么?我无法告诉你。我可以告诉你未来两个季度会发生什么。但这种对未来的洞察对于将这些用例带 forward 并赋能客户构建和创新未来至关重要。所以,这是我们合作的一个非常关键的部分。

我们还带来了我们研究、工程和产品团队的内部专家,以帮助加速你在这条道路上的进程。最后,我们进行联合路线图会议,以确保我们朝着你的未来路线图前进。所以,这Hopefully 是我们如何合作的一个说明。

一个例子是我们与摩根士丹利一起做的。摩根士丹利位于纽约,他们正在构建一个内部知识助手。这意味着他们的财富管理人员能够询问他们庞大的知识库中的问题,这些知识库包括研究报告、股票代码的实时视图等。他们希望获得高度准确的信息,以便能够回应他们的客户。一开始准确性很差,通常是 40-45%。

通过与我们互动,我们在用例开发过程中引入了新的方法,比如隐藏检索,我们进行了一些微调嵌入,不同的分块策略,这提高了性能。然后,随着我们不断引入更多方法,准确性有所提高。我们引入了重新排序和分类步骤,使其达到 85%。最终目标是 90%。通过其他方法,如提示工程、查询扩展,我们达到了 98% 的准确性。所以,这更多地是一个例子,说明我们如何在整个用例旅程中引入方法来改进他们的核心指标,在这种情况下是准确性。

所以,这Hopefully 是 OpenAI 与客户合作的一个例子。我们越来越多地看到的一个常见用例是现在构建代理领域。你可能听说过 2025 年是代理的年份。代理工作流程已经是一个热门词汇很长时间了。我认为今年我们看到它真正成为现实。我认为,通过这一点,我们已经看到了一些战斗伤痕和最佳实践,这是我们在现场看到的。我将把话筒交给 Brent,让他谈谈我们在代理方面看到的。

谢谢 DOI。在 OpenAI,我们很幸运能与构建最先进代理的客户以及构建我们自己的代理产品(如 Deep Research 和 Operator)的团队成员一起工作。正如 DOI 所说,我们预计 2025 年将是代理的年份,是生成式 AI 真正从助手毕业成为同事的年份。为了迎接这个时代,我们一直在努力识别代理开发中普遍存在的模式和反模式。我很高兴今天与你们分享其中四个。

在我们进一步讨论之前,我想快速定义一下我们所说的代理是什么意思。我们认为代理是一个 AI 应用程序,它包含一个模型,该模型具有一些指令,通常以提示的形式,访问一些用于检索信息和与外部系统交互的工具,所有这些都封装在一个执行循环中,其终止由模型本身控制。所以,一种思考方式是,在每个执行周期中,代理可以被认为是一个接收自然语言指令的实体,它决定是否发出任何工具调用,运行这些工具,综合一个响应。

随着工具返回的值,然后向用户提供答案。此外,用户可能会决定,抱歉,代理可能会决定它已经达到了目标,因此终止执行循环。那么有了这个定义,让我们来看看我们在实际构建这些代理时学到的一些经验教训。

那么对于第一个见解,想象一下你正在设计一个人工智能代理。你需要协调多个模型,你需要检索数据,对其进行推理,并生成输出。你有两种选择:你可以从基本元素开始,进行原始API调用,自己记录结果,嗯,并记录输出和故障,或者你可以从一个框架开始。你可以选择一个抽象层,将其连接起来,然后让它处理许多细节。我不得不说,从一个框架开始是相当诱人的。这就是我开始构建代理的方式。它真的很容易上手,很快就能建立一个概念验证。但问题是,如果你从一个框架开始,你通常并不知道你的系统是如何运作的,或者它使用了哪些基本元素。你在理解你的约束条件之前,就已经推迟了设计决策。如果你不知道你的约束条件,你就无法优化你的解决方案。所以我们认为更好的方法是首先使用基本元素进行构建,了解你的任务如何分解,故障发生在哪里,以及实际需要改进什么。然后,当你发现你在重复造轮子时,例如通过重新实现嵌入策略或重新实现模型评估器时,再引入抽象。那可能是一个引入一些抽象的好时机。许多团队今天都在花费大量时间选择合适的框架。嗯,我们实际上认为,以可扩展的方式开发代理,与其说是选择正确的抽象,不如说是理解你的数据,理解你的故障点和你的约束条件。所以总而言之,第一课是:从简单开始,在需要时进行优化,并且只在它能让你的系统变得更好时才进行抽象,这直接引出了我们的第二个见解:从简单开始。

因此,团队常常直接跳入设计多代理系统:代理之间互相调用,动态协调任务,对长轨迹进行推理。这听起来都非常强大,但如果做得太早,它会产生许多未知数,并且不会给你带来太多洞察力。我们喜欢一种不同的方法。我们通常建议从一个为单一任务专门构建的代理开始,将其投入生产,供有限的用户使用,并观察其性能。这样做可以让你识别出真正的瓶颈:对话轨迹中的幻觉,由于高延迟导致的低采用率,或者由于检索性能不佳导致的不准确性。然后,了解系统表现不佳的原因,并了解对用户来说什么重要,我们就可以逐步改进它。简而言之,我们应该将复杂性视为随着我们发现更严重的故障情况和约束条件而增加的东西,因为目标并不是真正要构建一个复杂的系统,而只是要构建一个能工作的系统。所以从简单开始听起来很棒,呃,但我们都知道真正的价值是在复杂性中实现的。那么我们应该如何处理更复杂的任务呢?这就是代理网络和交接概念的用武之地。

所以你可以把交接想象成,抱歉,让我们从代理网络开始。代理网络是一个协作系统,其中多个代理协同工作以解决复杂请求或执行一系列相互关联的任务。你可以将其视为一系列专门的代理,在一个大型代理工作流中处理子流程。关于交接,你可以将其视为一个代理将活跃对话的控制权转移给另一个代理的过程。这与你在电话中被转接给另一个人非常相似,不同之处在于,在这种情况下,你可以保留你的整个对话历史,而新的代理会神奇地知道你已经谈论过的一切。那么让我们来看一个例子。在这个示例架构中,我们展示了如何通过代理网络和交接来实现一个全自动的客户服务流程。这种方法使我们能够将正确的工具用于正确的工作。例如,在左侧,我们使用GPD 40迷你调用对传入请求进行分类。然后,我们在争议代理上使用GPD 40来实际管理与用户的对话。最后,我们使用o03迷你推理模型来执行对准确性敏感的任务,例如检查客户是否符合退款条件。事实证明,交接效果非常好,并且在切换模型、提示和工具定义的同时,保留整个对话历史和上下文,提供了足够的灵活性来解决各种场景。

那么我们的最后一课是关于护栏的,简单来说,护栏是当今一个包罗万象的术语,指任何在你的应用程序中强制执行安全性、保障性和可靠性的机制。它通常用于防止滥用并确保你的系统保持完整性。因此,保持模型指令简单并专注于目标任务,可以确保你的系统具有最大的互操作性,并确保我们能够最可预测地关注准确性和性能。护栏不一定非要成为你主要提示的一部分,而应该并行运行。像GPD 40迷你这样更快、更便宜的模型的普及,使得这一点比以往任何时候都更容易实现。高风险的工具调用和用户响应,例如发放退款或向用户显示其个人账户中的某些信息,这些可以推迟到所有护栏都返回结果之后。在这个例子中,我们看到我们运行了一个单一的输入护栏来防止提示注入,然后是几个输出护栏,呃,用于代理的响应。所以总结一下,我们在构建代理的过程中学到了四点经验:最少地使用抽象,从单一代理开始,当你有更多意图时升级到代理网络,最后,保持你的提示简单并专注于“快乐路径”,并使用护栏来处理边缘情况。谢谢大家,女士们先生们,请欢迎领导力专题会议的主持人彼得·汉弗莱回到舞台。

各位,谢谢,呃,也谢谢潘特和托基。呃,我认为今天能请到他们来这里,听他们介绍Open AI的一切进展,真是太棒了。呃,各位,这是一个相当激动人心的上午。呃,我们深入探讨了知识图谱、代理如何融入现有软件开发生命周期、呃,领域特定的大型语言模型,当然还有刚才的Open AI等话题。嗯,所以如果你想,只是一个快速提醒,如果你想讨论这些话题中的任何一个,与演讲者见面,进行一些问答,呃,只需前往我之前提到的三个问答休息室之一。呃,这一层有一个,展会层楼梯底部有一个,楼梯下面还有一个,呃,演讲者将在那三个区域中的一个。嗯,另外,请利用午餐时间,呃,去赞助商展区看看。嗯,那里再次提供午餐,而且,呃,我们的赞助商有,嗯,非常棒的产品、技术和服务,可以帮助你一路前行。嗯,所以如果在,嗯,午餐期间,有一个特别的,呃,迟来的广告,我们对此感到有点兴奋和高兴地告诉大家,呃,我们将带回一点“家庭问答”。有人记得“家庭问答”吗?那个电视游戏节目?可以,是的,好吧,几个人。嗯,我们将有来自领先的人工智能前沿实验室的团队,基本上以“家庭问答”风格进行智力对决,呃,这将由Amplify,呃,Partners的合伙人Bar Euron主持。嗯,我们将邀请像Mahir Patel,呃,Shest the Malik,John Ma,Tina Zoo,Petra Grutzik,Colin Flarity,Steven Roller,Paige Bailey这样的“家庭问答”选手,只是举几个例子。嗯,所以如果你想,如果你决定想早点离开午餐,回来享受一下乐趣,那么它将在1点15分在这里举行。嗯,否则,我们将在下午1点45分在剧院继续领导力会议,届时再见。请享用午餐,感谢您的到来。欢迎大家回来。作为一名人工智能语言模型,我无法品尝食物,但我确信您用餐愉快。不过,关于我就说这么多吧,请大家和我一起欢迎人工智能工程师峰会领导力专题会议的主持人彼得·汉弗莱回到舞台。

欢迎回来,谢谢大家,希望每个人都吃饱了。嗯,只是一个快速提醒,呃,我不会在这里待太久。嗯,谢谢大家午餐后提前回来。呃,我们将会玩一个家庭问答式的游戏节目,只是再次好奇,有人记得《家庭问答》那个电视游戏节目吗?可以,是的,好吧,有几个人。嗯,这是一个问答式的游戏节目,参赛者会承受一点压力,所以这应该会很有趣。嗯,我想请Amplify Partners的合伙人Baron上台,她将介绍我们其他的家庭问答选手,祝大家玩得开心,谢谢大家回来。我们都来了。好的,欢迎来到前沿问答!我是你们的主持人,呃,Bar Euron,我是Amplify的合伙人,我们是技术创始人的首批投资者,我投资数据和人工智能公司。我很高兴能在我最喜欢的城市纽约市进行这场前沿问答,今天舞台上有一些了不起的人,他们将争夺奖品和永恒的荣耀以及所有美好的东西。所以我们将介绍我们的团队,呃,不要让这些笑脸欺骗了你,我们是来竞争的。呃,在我们介绍团队之前,先问问观众,包括舞台上的各位,之前有没有看过《家庭问答》?快速举手,好的,大多数人。对于那些,呃,没看过的人,前提很简单,细微之处你会在游戏中学习。所以我们对100名人工智能工程师进行了一系列问题的调查,舞台上的各位将猜测这些问题的答案,调查中最受欢迎的答案将获得最高分。所以请随意跟着我们一起在观众席中猜测,呃,如果你不喜欢这些答案,你可以看看你的左边,看看你的右边,然后责怪你的邻居。不,我只是开玩笑,说真的,非常感谢所有之前填写过那份调查的人。所以我们将进行一些快速介绍,嗯,在我左边的M,你可以开始,告诉我们你是谁,你做什么,以及你的科技热门观点。我们将进行快速介绍,酷。呃,大家好,我叫M here,呃,我在Anthropic工作。嗯,我的科技热门观点是,我认为,呃,比如说今天训练大型模型的五个人中,至少有一个人到今年年底将不再训练人工智能模型了,麦克风放下,但实际上是麦克风传递给John。大家好,我是John,我在Anthropic工作,我的科技热门观点是,我认为人工智能会成为非常好的治疗师。大家好,我是Tina,嗯,我在Reflection AI工作,这是一家构建编码代理的初创公司,我的科技热门观点是,我们行业中的每个人都应该每天花20分钟,只用一张纸和一支铅笔,嗯,然后思考一些不被人工智能打断的想法,谢谢。大家好,我是Sha,我是Gemini开发者API的产品负责人,与Paige合作。呃,我有两个,我的第一个科技热门观点是Tina的后续,我认为人们做Tina说的事情很重要,因为最终当人工智能模型代表你时,它们需要一些好的内容来训练,我想我把下一个留到后面再说。我喜欢!太棒了,Paige,你想开始你那边吗?当然可以,所以请注意,呃,我们没有提前排练过,没有作弊,没有作弊。嗯,呃,我叫Paige,我在Google DeepMind工作,领导我们AI Devel团队的工程部门。嗯,呃,我想我的科技热门观点是,呃,快进一年半,我认为大多数部署的模型都将在设备上运行。嗯,我们将看到一种趋势,更多地转向小型模型,嗯,这些模型,呃,可能协同编排,也许,呃,针对特定任务进行超专业化,嗯,而不是仅仅依赖大型模型,嗯,并将数据发送到其他地方做有趣的事情。呃,我叫Colin,呃,你可能还记得我今天早些时候的演讲,我是Augment Code的研究员,构建人工智能编码工具,在那之前我在纽约的Facebook AI研究部门工作,研究棋盘游戏的人工智能。我只是不得不把两个热门观点都说出来,因为我有两个,所以一个是,未来约会应用将是我们的AI互相约会。嗯,二是,我不认为Transformer是最终的架构,因为最终我们将使用生物材料构建这些模型,哦,天哪!大家好,我叫Petra,我是Google搜索页面顶部AI答案的事实性产品经理,我的热门观点是,嗯,一对一地与一个机器人聊天很无聊,未来大多数对话都会有至少两个其他机器人在房间里和你一起。我喜欢!你好,呃,我是Stephen,呃,我很快就要加入Thinking Machines了,嗯,我的热门观点是,如果你认为我们正在触及一个token墙,那听起来像是一个技能问题,[笑声] 我喜欢!太棒了,那么,让我们开始吧,我将请Paige和Mahir加入我,不是说你们离我很远,太棒了,很好。所以目标是尽可能快地击中这个,对吗?是的,好的,所以,所以,嗯,所以谁先按铃,谁就有第一次回答这个问题的机会。所以我要问一个问题,然后我们从这里开始,所以我们问了100名人工智能工程师,说出最有影响力的人工智能研究员,天哪,我看了屏幕。好的,你的猜测是什么?呃,Ilia Sutskever,好的,我们有Ilia Sutskever,Noam Shazeer,非常有影响力,但不在榜上,不在我们的前八个答案中。所以你的团队决定是玩还是放弃。好的,我们要玩,你们要玩,你们要玩,好的,好的,太棒了,所以John,轮到你猜一个人了。我再猜一个人,但你可以待在那里,我们正在解决问题,作弊,欺诈,Andre Karpathy,好答案。好的,Tina,你呢?Jeff Hinton,哦,一个很棒的,但是,哦,抱歉,你说了Jeff Hinton吗?是的,哦,那是我的错,嗯,我以为你说了别的什么,太棒了。我,Transformer论文的主要作者,Attention Is All You Need论文,我们需要一个具体的名称,抱歉,嗯,抱歉,我有点像,我知道名字,但我,呃,我有点像,呃,我们会有的,是的,我想,但是我们,你已经有一个犯规了,那不算数,所以我们要,我们只算一个,继续,我猜是Yann LeCun,Yann LeCun,我们确实有Yann LeCun。好的,我们为什么继续?我们只是继续,因为你赢了,哦,直到我们输,是的,直到你输,哦,我没有,如果你们想输,这是你们的机会,呃,不,所以不在榜上。嗯,问题又是什么?好问题,所以说出最有影响力的人工智能研究员,嗯,我猜是Sam Altman,Sam Altman,好答案,不在榜上,所以我们已经三次犯规了,所以你的团队需要商议,如果你选择一个答案,你实际上就偷走了分数。我们榜上有四个选项,对于那些正在加入的人,问题是:我们问了100名人工智能工程师,说出最有影响力的人工智能研究员。好的,我给你五,四,你很好,好的,我猜Jeff Dean,嗯,Jeff Dean不在榜上,这正是我之前记录的。嗯,好的,所以这归Roo的Basilisk所有,我们要去,是的,我给你们看,是的,我给你们看其他的,所以这些是被猜到的,我们还有Andrew Ng,我们有Fei-Fei Li,我们有Yoshua Bengio。也有很多非常有影响力的研究人员,但他们只有八个位置,所以都是很棒的猜测,好的,下一个。好的,呃,我想John和Colin,是什么?是的,你想知道问题吗?耐心点,那么,选择模型时的首要考虑因素是什么?哦,我想你的坏了,我首先更热情,呃,这个团队要积极一点,但是我们会,是的,说出选择模型时的首要考虑因素,智能,我将非常字面化,非常聪明的答案,非常聪明的答案,你必须猜,呃,安全,安全,呃,实际上不在这里。那么我们为什么不让Tina和Petra来猜呢?轮到我了吗?是的,哦,嗯,价格,所以成本是第一答案,这实际上让我很惊讶,我不知道是不是,也许举手,如果你现在会猜价格,不,所以事后诸葛亮,这对我来说并不明显,但这意味你们将继续这个答案,我们,我们,我们将从那里继续。延迟,延迟,呃,是的,呃,评估基准分数,其中一些是模糊的,但我会把它归类为,别,别杀我,准确性,性能,好的,那就像一切。好的,嗯,呃,CEO,CEO,好答案,好答案,好答案,好,继续。哦,我以为因为我们错过了,哦,不,我们,你的团队得到了它,嗯,比如模型在哪里提供服务,比如它是在本地还是,你知道,呃,不,我们不会算那个,但这是一个好答案。好的,这个团队有机会偷走这些分数,我听到观众中有些人认为他们准备好偷了,所以我喜欢你们这一点,我喜欢这种自信,哦,天哪,我们可以猜一下,那不是,呃,开源与闭源,好的,所以这样你们就得到了63分,因为你们偷走了分数,但是所以在第三个也是最后一个问题之前,比赛非常接近,是的。好的,抱歉,我知道每个人都想知道答案,谁有非常强壮的上半身力量?所以,所以这里是答案,是的,这些是答案,太棒了,谢谢大家,观众席上的各位和这里的各位,谢谢你们让我保持诚实,好的,下一个。那么我们接下来有谁?Petra和Tina,太棒了,你们能做到,所以都在前面,好的,这需要,呃,力量,这是我们学到的。所以,嗯,你们准备好了吗?准备好了,是的,好的,我们问了100名人工智能工程师,说出一个流行词,抱歉,没关系,我没有生气,但说出一个每个人在人工智能领域都听腻了的流行词,代理,代理,你们都怎么看?是的,好的,但你仍然有机会猜测,因为你可以得到第一答案,哦,但你现在必须猜,我给你三,二,二,一,抱歉,嗯,好的,所以它将归这个团队所有。嗯,呃,Sha,轮到你了,我们问了100名人工智能工程师,说出一个每个人在人工智能领域都听腻了的流行词,我要开始我的五,四,多模态,多模态,呃,我们没有多模态,但我不知道这个犯规是从哪里来的,所以这是第一次犯规,呃,选择副驾驶,副驾驶,这是一个很好的猜测,我们认为怎么样?对副驾驶是同意还是不同意?这是一个很好的猜测,我认为这是一个好,好的,好答案,好答案,呃,但是没有,AGI,AGI,好的,观众怎么看?AGI,是的,好的,看起来我们认为得到了好答案,不,开玩笑,是的,第一答案,AI,好的,Tina,哦,嗯,DeepSeek,不,不,DeepSeek,所以这个团队有机会偷走,但你是对的,也许,也许只是这一周,是的,你回来了,你又回来了,安全,安全,所以不幸的是,安全不是其中一个答案。所以这些是额外的答案,这里的人们厌倦了RAG和提示工程师,嗯,但这意味我们有一个赢家,那就是Roo的Basilisk,但是Paige、Attention和专家混合的精彩工作,所以我们将进入快速抢答环节。你们有两位代表吗?好的,你们两个去,那意味John离开舞台,我准备好了就叫你,好的,我们正在进入快速抢答环节,呃,所以你们有些人看过《家庭问答》,但我们正在玩快速抢答,目标是他们两个人一起达到200分。呃,Mahir你有20秒回答五个问题,呃,如果你想不出任何东西,就说“跳过”,我们可以在最后或永远不回来。嗯,如果你听到蜂鸣声,让我检查一下它是否工作,太棒了,你的答案不是调查问题之一,你可以继续提问或继续前进,好的,你准备好了吗?是的,好的,呃,说出一个工程师喜欢的人工智能工具,Cursor,呃,说出,抱歉,我没有开始计时,说出最容易受到人工智能颠覆的职业,软件工程师,说出历史上最有影响力的人工智能论文,Attention Is All You Need,说出人工智能工程师在凌晨2点最大的噩梦,呃,硬件故障,好的,所以我们通过了四个,但它们都是好的。所以说出一个工程师喜欢的人工智能工具,你说Cursor,Cursor是第一答案,我们问了说出最容易受到人工智能颠覆的职业,你说软件工程,那是第三答案,我们问了说出历史上最有影响力的人工智能论文,你认为什么?摧毁了,Attention Is All You Need是迄今为止的第一答案,呃,说出人工智能在凌晨2点最大的噩梦,硬件故障,硬件故障,你知道吗,我们会给它,我们会把它当作梗问题,好的,好的,是的,嗯,所以你进入了这一轮,140分,你想让John上场吗?John跑了,他害怕了,不,来了,太棒了,不可思议,所以John,大事,你有25秒,你必须站在后面,你有25秒回答五个问题,嗯,如果你想不出任何东西,就说“跳过”,如果我们最后有时间,我们会回来,呃,如果你听到蜂鸣声,那意味你的答案不在榜上,或者他已经回答了,你准备好了吗?是的,嗯,好的,我要开始计时了,说出一个工程师喜欢的人工智能工具,先生,哦,嗯,Chat,嗯,说出最容易受到颠覆的职业,嗯,艺术家,呃,说出历史上最有影响力的人工智能论文,呃,Transformer就是一切,Attention Is All You Need,好的,所以我们有模型API,那是榜上的第三个答案。我们有说出职业模式,你说你说艺术家,所以我给你内容创作/文案,这有点模糊,而且Attention Is All You Need已经被Mahir选了,但我们会,我会让你选择下一个问题,那就是说出人工智能工程师在凌晨2点最大的噩梦,有人写了VC的冷邮件,所以我之后会和你谈,呃,呃,Cuda SS,Cuda SS,好的,你知道吗,你的队友,因为你们想法一致,你们想出了很棒的答案,所以让我给你们看看这里的第一答案,它们是Cursor,数据输入,对于最容易受到人工智能颠覆的职业,Attention Is All You Need,顶级论文,所以那是一个好答案,只是已经被拿走了,最大的噩梦是模型中断或类似情况,以及最能从人工智能中受益的行业是医疗保健,呃,所以这样我们,嗯,你输了200分,但我认为你们仍然是赢家,你们也是赢家,我们外面有一些奖品,我想有人正在带来。所以我们为这个团队准备了一只巨大的羊驼,我们为每个人准备了彩虹羊驼豆宝宝,我们有工程书籍和纽约你最喜欢的餐厅的礼品卡,也许我们可以把它们拿出来,然后离开,呃,非常感谢你们加入我们的前沿问答,我们明年再见,我们正在进行一项关于人工智能工程现状的大规模调查,将在六月的人工智能工程师世界博览会上展示。所以如果你喜欢一些预告问题,这将更深入地探讨人们正在使用的工具,人工智能工程师的工作流程,这是一种让行业更加透明的方式,呃,所以谢谢你,呃,如果你想参与这项关于人工智能工程现状的调查,你可以在这里找到二维码或链接,太棒了,宝宝们是,但他们会来,来,来,来女士们先生们,请欢迎领导力专题会议的主持人彼得·汉弗莱回到舞台。

那很有趣,谢谢。嗯,是的,呃,我会尽力模仿史蒂夫·哈维,但这不会成功,我只是提前说一下。所以那场争斗真的很有趣,嗯,我希望你们喜欢那场争斗和午餐,呃,也希望你们在展会上和我们的赞助商聊了一会儿。嗯,好的,所以请坐好,希望你们喝了咖啡,系好安全带,戴上头盔,我们接下来的系列会议将会非常棒。我们将讨论,我们将有一个人工智能案例研究,我们将讨论人工智能评估,当然是热门话题,人工智能可观测性,人工智能基础设施,当然还有来自Anthropic的演讲。所以,呃,请和我一起欢迎我们的下一位演讲者,来自汤森路透的Shira Chaudhry上台。

你好,下午好。我面前有一个艰巨的任务,就是用一个听起来像作弊的话题,让这个演示文稿变得非常有趣:人工智能实现工作流自动化缺少了哪些部分?我将给你们讲一个真正的企业故事,它会枯燥吗?它会只是关于我现在要去找出谁拿了我的午餐三明治吗?我们拭目以待,嗯,你知道,当我准备这次演讲时,我意识到日程表上说这将在午餐后进行,我想我应该先讲个笑话。既然我们所有的日常需求都求助于人工智能工具,我尝试用人工智能工具来找个笑话,但它们真的很糟糕,我找不到一个像样的笑话。如果你能告诉我一个关于,你知道,将人工智能用于你的真实世界企业需求的好笑话,我很乐意现在就把它加进去,呃,比如它不起作用,有人能帮我吗?哦,好的,是的,所以这个图表看起来和我今天早上看到的所有图表有点不同。我们在我们的世界,我们的企业世界中踏上了这段旅程,嗯,当我们探索时,但在我深入探讨之前,我想我应该先做个介绍。我是Shisha,我从班加罗尔远道而来,向你们讲述我周围正在发生的故事,不仅是在我工作的汤森路透,我试图将人工智能引入我的,嗯,我的,嗯,你知道,团队和,嗯,不同的业务流程,而且也是我在聚会和,你知道,嗯,我遇到人工智能从业者的不同社区活动中听到的相同故事。嗯,每个人都从2023年开始尝试普及生成式人工智能的使用,我们在汤森路透有一个叫做Open Arena的东西,非常类似于你们的,你知道,嗯,游乐场,你可以在那里尝试不同的LMM模型。这是真正让企业中几乎每个人都开始将生成式人工智能用于其工作流的地方。再往前走,我们很快就进入了RAG,嗯,你知道,提示工程的世界,我们着眼于,嗯,利用RAG自动化各种知识驱动型任务,很快我们就在企业层面回答关于投资回报率的问题。再往前走,在2024年,我们开始尝试工具和框架,并迎来了代理的兴起。我们现在在这里,我们正在考虑利用人工智能/代理自动化整个工作流,而不仅仅是一次一个任务,对吗?我们正在展望一个未来,我们希望重新构想业务流程,因为仅仅自动化一个任务似乎是多余的。好的,那么工作流自动化是什么意思?我在这里展示的是一个非常典型的,几乎任何发布软件的公司的工作流:客户打电话给你,打电话给你的服务台,报告账单问题、发票问题或产品功能未按预期工作。你的客户支持,嗯,会接听电话,他们可能已经在使用RAG来回答这个问题,或者他们可能正在查看,你知道,内部工单或与,嗯,你知道,呃,他们的,呃,层级联系,看看是否能给出答案,如果找不到答案,他们就会,你知道,向IT运维团队报告工单,对吗?内部IT运维团队进行二级支持,他们正在考虑,你知道,启动调查来进一步支持这一点,如果这不起作用,你的工程团队就会进行L3 L4支持,并且很可能通过使用各种可观测性工具来识别修复方案,启动脚本来,你知道,创建新的构建测试,回归测试,集成测试,最后,你要么修复了bug,要么回答了账单问题,你的工单得到更新,并且满足了SLA。不用说,你们都能发现这么多任务可以通过使用代理来自动化,但是,你知道,自动化每个任务是我们想要的方式吗?有没有什么可以不同地做来重新构想这个工作流?我们就在那里,我们正在尝试重新构想这个工作流,嗯,这里有一个稍微不同的看法,让我们看看,嗯,一个内容正在被创建的工作流,对吗?它从作者或内容专家开始,也许识别一个警报或触发器,这将启动内容工作流,然后你可能有批准,说“是的,继续,做你的研究,找出我们想写什么”,然后你就有,你知道,通过研究创建内容,随后你的编辑和你的,嗯,副编辑和审稿人审查该内容。如果它是,你知道,非常关键的内容,你,你可能会有几轮这样的审查,最终定稿的内容会交给出版商,然后,你知道,出版团队会启动他们自己的格式化、样式相关的流程,最终内容就会发布。在这里你也会意识到,这么多任务可以由人工智能完成,可以由代理完成,当然人类也在审批流程中,但在这里又有什么地方不对劲?我们应该坚持相同的工作流设计,还是应该做得有点不同?好的,所以这就是我们现在所处的位置,我们希望能够重新构想这些工作流,因为它是一个新世界,因为我们拥有这些新技术的新能力,嗯,而不仅仅是将能力插入到现有的业务流程中,对吗?但我们卡住了,我们卡住了,我们,嗯,缺少重新构想的某些部分,那么我们缺少什么?我们缺少的第一件事是连接器,嗯,我昨天和一些,嗯,你知道,摊位的人聊过,一个共同的主题是,如何围绕提供一个好的人工智能代理解决方案,你总是需要一个连接到你当前IT系统的层,对吗?而且连接器在重新构想这些业务流程中是非常非常缺失的一部分,嗯,我还想说,你知道,我来自一个,嗯,你知道,技术并不完全是新的世界,我们一直在,你知道,我们一直在做人工智能,我们一直在做NLP几十年了,作为汤森路透,甚至在不同的公司,嗯,呃,开发者来自不同的聚会和社区,我参加的那些,他们也支持我们世界中一些,你知道,不同技术公司的IT系统。信不信由你,财富500强公司中71%仍然使用大型机,全球68%的IT生产工作负载仍然在大型机上运行,对吗?而且你的一些主要的信用卡,嗯,交易仍然在大型机上进行,这意味我们距离那么远,对吗?就像那个技术谱系,如果你要从大型机测量到一个代理工作流,我们如何连接这些世界,对吗?所以这正是我们认为的一个主要绊脚石,你知道,如何将现有的技术,嗯,稳定的技术栈与,嗯,嗯,嗯,人工智能代理工作流的力量连接起来。第二件事是,嗯,我将新想法带给不同利益相关者时遇到的困难,我看到,你知道,我定期遇到的几家初创公司也在挣扎,它回到了投资回报率的问题,它回到了,你知道,嗯,可靠性的问题,对吗?我如何确定我的代理能够执行?而且通常与利益相关者,你知道,从业务影响的角度来看,这是一个零或一的决定,对吗?我是否将继续需要支付人工工时,或者如果我为代理人工智能代理付费,我是否可以认为不再需要人工工时?所以可靠性成为我们的一大因素和绊脚石。我们作为从业者发现缺少的第三件事是,要有能够与我们一起重新构想这个世界的梦想家。嗯,你知道,作为一名从业者,作为一名深入人工智能领域的人,你只能在重新构想这个世界方面走那么远,你需要主题专家,你需要来自特定领域的专家与他们一起做这件事,以便能够,你知道,重新构想你的业务流程。你知道,我们需要的第四件事,我相信你们很多人都会同意,基于我所进行的对话,是我们需要的某种程度的标准化,对吗?我们需要能够说,这就是代理的构建方式,这就是它们的打包方式,这就是它们的部署方式,它还太新了,嗯,你知道,在一个成熟的技术生态系统中,要说,呃,我们将用代理数据和系统替换这些部分,以便代理真正,你知道,发挥其全部力量,我们需要让它访问上下文。上下文今天分布在不同的IT系统、业务系统中,它可能,嗯,部分位于日志中,它可能存在于,嗯,聊天消息或,你知道,IT工单中,以及,你知道,不同的,嗯,你知道,不同的孤立系统,对吗?有时这些系统分布在组织的不同部分,因此将它们整合在一起,甚至识别出这些系统中的哪些系统将拥有什么,以及如何跨这些系统关联单个事务,这往往成为,你知道,引入人工智能的绊脚石。第六件事是,你知道,我个人非常强烈地认为,是创建协作式用户体验,代理将成为助手,那么人类的角色是什么?定义这一点并创建人类可以支持代理工作,反之亦然的系统,我认为是,嗯,创建这些工作流中非常重要的一部分,所以从协作式用户体验的角度来看,什么是有意义的?人工智能治理,我们,我们,嗯,在其中一个演讲中看到了,关于安全测试的不同部分如何深入到你的代理工作流中,所以,你知道,我们一直以来围绕道德和责任建立的人工智能治理的各个方面,你如何将其转化为你的代理架构的不同层面,对吗?下一件事是控制,我们仍然希望赋予人类控制权,我们希望有一些确定性的步骤,以及一些代理可以自行控制的步骤,或者,你知道,你如何平衡,嗯,代理和人类之间对控制的需求,并赋予人类正确的,嗯,你知道,正确的行动时机?最后,代理的生命周期是什么?你们所有人都,你知道,谈到了我们领域中指数级的增长,嗯,演变,我们如何将最新的能力引入我们已经部署的东西中,以及那个不断变化的东西?所以这就是我想要分享的,嗯,我们才刚刚开始,你们所有人都做了很多出色的工作,我期待着从我周围看到的世界连接到我来自的世界,所以很高兴能听到你们的问题、想法、建议和反馈,谢谢。我们的下一位演讲者将分享将人工智能代理转化为可靠的、可投入生产的工具的策略,这些工具能够带来切实的业务成果,请大家和我一起欢迎Arise的创始人兼首席产品官Apara Dinkin上台。嘿,嘿,大家好,怎么样?好的,你们都能听到我吗?太棒了,非常感谢大家来到这里,我首先要说声抱歉,我的声音有点沙哑,但你们今天会和我一起坚持下去。我们今天将讨论一个非常重要的话题,那就是,嗯,幻灯片模式,太棒了,我们将讨论一个非常重要的话题,那就是评估人工智能代理和助手。这将加载,只是为了在我们深入之前设置一点背景,今天你们很多人可能都听说了正在构建的不同代理,如何构建它,以及有哪些很酷的工具可以用来构建代理。今天我们将实际讨论当你将这些代理投入生产时,了解它们的表现并评估它们的重要性,这对于确保它们在现实世界中实际工作至关重要。我们这次演讲可能会有点技术性,也许比其他一些演讲更技术性,但请坚持住,我认为这很重要,即使在领导层面也要理解如何确保你发布的东西在现实世界中实际工作。嗯,所以关于我的一点介绍,我叫Apara,是Arise的创始人之一,呃,关于我们的一个有趣更新是,实际上今天我们宣布了我们的C轮融资,嗯,所以,嗯,有很多有趣的人正在使用我们来评估代理,所以,让我们开始吧。好的,这里每个人可能都和你们谈论过基于文本的代理,所以你有一个聊天机器人,无论它正在做什么动作,它都在找出所有这些事情来做,下一个很酷的前沿实际上是语音人工智能,它已经接管了呼叫中心。全世界的呼叫中心有超过10亿次呼叫是通过语音助手,通过语音API进行的,实时语音API,如果你们有人玩过它,我们实际上已经看到这些类型的,嗯,代理开始接管并彻底改变呼叫中心。这实际上是一个旅行代理的真实生产应用,这是Priceline Pennybot,你今天可以免提,无需文本,使用Priceline Penny预订整个假期。所以我们不再仅仅谈论基于技术的代理,我们正在谈论多模态代理,并且解决这些问题很重要,因为你评估这些类型代理的方式,不仅仅是评估一个代理,而且如果它是基于语音的,你需要进行特定类型的评估,如果它是多模态的,你需要考虑额外的评估类型。所以我们将分解所有这些,今天和我一起享受一个有趣的环节吧。所以在我深入讨论如何评估一个代理之前,让我们先谈谈一个代理的组成部分。今天你们可能听过不同版本,但我会告诉你们我们将使用的语言,一,嗯,通常有一个叫做路由器的东西,呃,它本质上是决定代理下一步将采取什么行动的东西。有技能,那是实际执行工作的逻辑链,然后有存储记忆的东西,这很重要,因为你可能会看到人们构建这些代理的方式有不同的架构。无论你使用的是L graph还是qai还是llama index工作流,都有各种各样的代理框架,它们都有稍微不同的构建代理的方式,你甚至可能不使用框架,但你会看到这些常见的模式,好的,那是一个路由器,那是一个技能,那是一个记忆,这些不同的组件将有不同的评估方式。所以让我们首先谈谈第一个,路由器到底是什么?所以你可以把路由器想象成老板,它有点像在决定,嘿,嗯,电子商务代理很常见,你们今天可能都在和电子商务代理交谈来购买东西,亚马逊有一个,所有这些电子商务公司都有一个,当你输入一个问题,比如“我想退货,给我一个购买什么的建议,这上面有什么折扣吗?”那个用户查询会流入一个叫做路由器的东西,那个路由器的目标是,它真正要确定的是,我是否要调用这个关于联系客户服务代理的技能?我是否要调用这个,嗯,技能来建议我们所有的折扣或建议产品?路由器实际上有点像老板,决定我应该找谁来实际执行用户提出的要求,路由器可能不总是能做对,但你希望它能做对,因为它会沿着代理中特定技能的路径前进。所以在这种情况下,它会调用一个技能,嗯,所以如果我问,嘿,呃,告诉我最好的,嗯,我不知道,要买的打底裤,所以它会进去,它会进行产品搜索,然后这实际上是代理需要执行的整个技能执行流程,你知道,无论用户要求什么,其中一些可能是LLM调用,其中一些可能只是API调用,这真的取决于人们如何实际实现它们。然后最后,这是一个重要的部分,总有一些东西在存储记忆,因为这些通常不仅仅是单轮对话,它们是多轮对话,多轮交互,所以你不想和一个忘记你之前说过什么的代理交谈。所以实际上有记忆,它存储了它之前要求的东西,并将所有这些保持在某种,嗯,某种状态的表象中。所以有了这个,我们今天会有点乐趣,我将向你们展示,嗯,一个实际的例子,说明这一切可能是什么样子:路由器、技能和记忆。所以这是一个开源项目,嗯,它实际上查看了一个代理的内部工作原理,这些被称为跟踪,对于那些可能不熟悉的人来说,如果你,你知道,在领导层,或者这实际上是你的工程师在实际构建和排除代理故障时所查看的,他们实际上在理解幕后到底发生了什么。所以这实际上是一个基于代码的代理的例子,有人问了一个问题,比如“你在我的跟踪延迟中看到了什么趋势?也就是什么让我的应用程序变慢了?”这是我们之前谈论的路由器调用,它实际上决定了,嗯,我如何去问,我如何去解决这个问题?所以首先你可以在这里看到,有多个路由器调用,不仅仅是一个路由器调用,这在你的应用程序增长时很常见,你可能会多次回来,不得不决定我需要做什么,所以它第一次调用路由器时,它

做的是什么,它实际上是这样,然后路由器会进行一个工具调用,嗯,这基本上是你需要的技能,第一次它实际上会进行一个工具调用,去运行一个 SQL 查询,去收集我所有的应用程序的追踪信息,然后去运行一个 SQL 查询,然后它会回到路由器,然后它会调用第二个技能,这个技能实际上是数据分析师技能,它会获取所有的追踪信息和应用程序数据,然后它会将其传递给一个实际分析这些数据的东西,所以在这个例子中,你实际上可以看到有一个路由器,有工具调用,我们实际上拥有内存,它实际上正在存储正在发生的每一件事,所以它真的只是展示了我刚刚走过的所有三个不同的组件,所以现在我们有了一个带有路由器和内存中技能的代理的例子,让我们来谈谈如何实际评估这些代理,我刚刚在这里走过的每一步实际上都是代理可能出错的地方,对于路由器来说,通常团队最终关心的是它是否调用了正确的技能,因为如果它没有调用正确的技能,你知道用户要求我想要打底裤,但它却把我转到了客服,或者把我转到了关于折扣和优惠的东西,所以你实际上想确保代理中的路由器能够正确地做正确的事情,并调用正确的技能,所以这是你想让你的团队评估的第一件事,所以如果你的团队正在构建代理,当被问到“嘿,最终的控制流是什么?控制流是什么?我们有像路由器这样的东西吗?我们正在评估它以确保它正确地调用正确的技能,在 ABC 之间,它是否调用了具有正确参数的正确技能?所以不仅仅是调用产品搜索,而是实际上确保无论你如何设计那个技能,你实际上都在传入正确的东西,比如“你知道,我想要这种材料,我想要这种成本范围,你实际上正在将所有正确的参数传递给用户实际要求的东西,有人能举手吗?你们中有多少人听说过?你们中有多少人今天实际上在评估你们的代理?你知道你们的团队在做这件事吗?好的,太棒了,你们中有多少人正在内部评估这个路由器级别?好的,太棒了,哇,这是一个很棒的群体,好的,这令人印象深刻,嗯,好的,我们继续下一个,实际上是评估一个技能,这实际上是变得非常有趣和棘手的部分,因为一个技能中有许多不同的组件,在这个例子中,我有一个 rag 类型的技能,所以我想看看评估实际提取的块的相关性,我想看看生成的答案的实际正确性,但这个技能本身可以有许多不同的 LLM 作为裁判评估,也可以有代码评估,你可能想运行这些来实际评估技能,代理的技能,最后,这是我们看到团队可能在评估方面遇到最多麻烦的一个非常重要的事情,那就是代理所走的路径,因为,理想情况下,你希望它收敛,你调用同一个技能几百次,它总是需要大约五步或六步来实际查询用户所要求的东西,输入正确的参数,调用技能的 XYZ 组件,然后最终,你知道,生成正确的答案,但有时这可能会有点长,我们有时看到同一个技能,我不知道你们是否都做过这个实验,但你可以用 OpenAI 构建同一个技能,你也可以用 Anthropic 构建,有时它们在路径实际走的步数上会有很大的不同,所以这里的目标是如何做到简洁,以及如何确保代理完成任务所需的步数具有可靠性,所以我们称之为收敛,但也许最难评估的是,今天有人在评估收敛吗?或者至少计算步数?好的,你太棒了,伙计,很酷,好了,有了这个,我可能会再花两分钟,然后我会进入另一个演示,所以如果你们中的任何一个人看过电影《她》,这是来自《她》的,这是当主要角色问“你还在和谁说话?”时,你知道,萨曼莎说“现在有大约 8000 个人在和我交谈”,所以语音应用的未来是,这些可能是迄今为止部署过的、构建过的最复杂的应用类型,它将需要更多的一个额外的东西来实际评估语音应用,而这些东西的有趣之处在于,不仅仅是文本需要被评估,或者转录,音频块也需要被评估,在许多这些语音助手 API 中,音频块实际上在发送后会生成转录,所以这是关于用户发送了什么,语音到文本的转录实际上是否可以,语气在整个对话中是否一致,所以你实际上需要评估的不仅仅是音频部分和对话流程以及你为所有其他你正在做的其他部分所做的一切,还要确保音频块有自己的评估,定义在,你知道,意图或语音质量或语音文本准确性,所以这对语音很重要,好了,有了这个,我将向你们展示我们如何评估我们自己的代理,这样你们就可以得到一个关于一些实际的代理在野外做什么的例子,这是我们自己的代理,所以让我向你们展示它是什么样的,你实际上今天可以在我们的产品中找到一个小的助手,我们的助手做的事情与其他助手类似,当人们在我们产品中花费时间时,我们会帮助他们做一些事情,比如“嘿,帮我调试一下”,帮我总结一下”,帮我看看这个”,我能用自然语言搜索吗?这种助手集成在我们整个产品中,但我们是一家评估公司,所以我们做什么?我们实际上自己使用我们的工具,我们决定你现在看到的是我们整个助手的实际追踪信息,在野外,以及这个助手的每一个步骤,我们实际上都运行评估,所以在这个例子中,我们在最上面有一个评估,实际上评估的是关于生成的整体响应,这实际上是一个搜索问题,整体搜索问题实际上是正确的还是不正确的,然后我们还有一个关于它实际调用搜索路由器后,它是否选择了正确的路由器,然后是否将正确的参数传递给了路由器,然后最终,它是否在执行这个整个技能的过程中正确地完成了任务或技能,所以评估不仅仅在你整个追踪的一个层面,如果你从这次谈话中带走任何东西,目标实际上是如何确保你的应用程序中有评估,这样当出现问题时,我就可以调试,如果它实际上发生在路由器级别,如果它发生在技能级别,或者如果它发生在流程中的其他地方,我想这就是我的全部,有什么[掌声]问题吗?是的,所以团队最终做的是,他们有,嗯,调用,比如输入到一个技能中,所以输入到,我不确定,你知道,如果你正在构建代理,但就像如果你的技能有一些输入,那通常就是输入,然后它会反复调用同一个技能,用相同的输入,一次,两次,三次,一直到 100 次,然后你跟踪每次运行这个技能花了多少步,所以理想情况下,你想用相同的输入和相同的技能来模仿它,但我们确实有一些团队,作为测试的一部分,他们会稍微修改输入,所以有时他们会用不同的方式问问题,稍微多说一点,看看这是否需要更多步骤,所以你也可以这样做,但你知道,通常我们推荐用相同输入的变体来测试收敛性,今天我没有涵盖很多内容,比如关于护栏,这是一个很大的组成部分,你知道,我称之为稍微更主动的评估,因为你正在运行评估,然后你实际上正在采取行动或阻止代理的输出,因为,说实话,我认为它主要对面向外部的应用和高风险环境有用,因为当然它会增加你的实际调用的延迟,所以你想确保你需要它,抱歉,我认为那里有一个问题,是的,哦,是的,是的,好的,好问题,所以她,首先她问了两个很好的问题,首先她问,嗯,你如何看待多模态应用中的评估,所以如果你有语音,你有视频,你有图像,你如何实际看待那一部分的评估?让我先解决那部分,我们确实看到了很多,我认为语音比视频更常见,这是我们看到的,说实话,图像,我认为有很多应用,比如我告诉你的呼叫中心,我认为企业一直以来,能够与某人交谈比视频和图像更容易,所以我们看到了更多的语音助手,对于语音,他们最终关心的是,一个有趣的故事,我们的一位客户,语气一开始非常友好和甜蜜,然后到最后变得粗糙,这并不是他们期望的,他们希望语气在整个对话中保持一致,所以像这样的东西是语音无法检测到的,如果你只评估转录,你就无法检测到底层语气发生变化的事情,对于图像和视频,我们通常看到人们做的是总结图片中的内容或视频中发生的事情,然后尝试评估,这是一个常见的做法,当然,所有常见的图像质量、视频质量最终都是人们评估的常见事情,然后我认为你问的第二个问题是,人们如何实际使用,你知道,我不会具体谈论我们的,但只是一个通用的可观测性平台,人们确实会插入和连接他们实际的数据,因为归根结底,今天这些可能是迄今为止构建过的最复杂的软件,它们也是非确定性的,所以他们确实希望对正在发生的事情有一定的可见性,工程师用它来故障排除,我们看到 AI PM 真的在崛起,以真正理解体验,所以他们,嗯,如果你担心数据安全,有很多方法,不仅仅是我们的平台,还有其他平台,你总是可以决定在自己的 VPC 中部署它,所以这就是他们如何解决安全问题,请,谢谢,是的,是的,嗯,我为即将发生的呼叫中心转型感到非常兴奋,因为我认为我们将看到更多你所说的,我们一直看到团队在做的一件事是,我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我我 I'

The router then makes a tool call, um, which is essentially the skill that you need. The first time it actually makes a tool call to then go run a SQL query, go collect all of my traces of my application, and go go run a SQL query. Then it goes back up to the router and then it calls the second skill, which is actually the data analyzer skill, which takes all of the traces and the application data, and then it passes it to something that actually analyzes that data. So in this case, you can actually see there was a router, there was tool calls, we actually have memory that's actually storing everything that's happening under the scenes. And so really just shows all three of the different components that I actually just walked through. So now that we have an example of a of an agent with a router and skills in memory, let's talk about how to actually evaluate these agents. Every single step that I just walked through here actually is an area where the agent can go wrong. For routers, typically what teams end up caring about is did it call the right skill? Because if it didn't call the right skill, you know, user asks for, I asked for leggings, but then it sent me over to customer service, or it sent me over to, um, you know, uh, something about discounts and deals. So you actually want to make sure that the router within an agent is correctly doing the right skill and calling the right skill. So that's the first piece that you'll want to make sure that your teams are evaluating. So if your teams are building agents, when asked, well, hey, what's the ultimate control flow? What's the control flow? And are, do we have something like a router? And are we evaluating it to make sure that it's correctly calling the right skill between ABC and is it calling the right skill with the right parameters? So not just, um, a calling product search, but actually making sure that whatever way you've designed that skill, you're actually passing in the correct things like, um, you know, I want this type of material, I want this type of, whatever cost range, you're actually passing in all the right parameters into what the user actually is is asking for. Can I get a raise of hands? Have any of you guys heard of, do any of you guys evaluate your agents today? Actually, is that something, you know, your teams are doing? Okay, awesome. Are any of you guys evaluating this router level internally? Okay, awesome. Wow, this is a great group. Okay, this is impressive. Um, okay, let's next go to the next one, which is actually evaluating a skill. This is actually the part where it gets really interesting and tricky, because there's many different components in a skill. There might be, in this case, I have a RAG type of skill. So I want to look at things like evaluating the actual relevance of the chunks that were pulled. I want to look at the actual correctness of the answer that was generated. But this skill itself can have many different LLM as a judge evals, or can also have code based evals that you might want to run to actually evaluate the skills, the skills of the agent. And then lastly, this is kind of a really important one that we're seeing teams probably have the most trouble evaluating, which is actually the path that the agent took. Because, well, ideally, you want it to converge. You call the same skill hundreds of times, and it always takes about five steps or six steps to actually query what the user asked for, put in the right parameters, call XYZ components of the skill, and then ultimately, um, take the right, you know, generate the right answer. But sometimes this can be a little longer. We've seen sometimes where the same skill, and I don't know if you all have done this experiment, but you can put the same skill and build it with OpenAI, and you can also build it with Anthropic, and sometimes they have wildly different number of steps that the path actually takes. And so, so the goal here is how do you be succinct, and how do you also make sure there's reliability in the number of steps that your agent takes to actually consistently complete a task? So we call this convergence. Um, but probably one of the hardest to actually evaluate. Is anyone evaluating convergence today? Or at least counting the number of steps? Awesome. Okay, you're awesome, dude. Cool. Well, with that, I'm going to go maybe two more minutes, then I'll hop into one more demo here. So if any of you guys have watched the movie Her, this is from Her. Um, uh, this is where, you know, the the main character asks, like, who else are you talking to? And, you know, the Samantha says something like, 8,000 other people are in a conversation with me right now. And so the future of voice applications is that these are probably some of the most complex type of applications that have ever been deployed, ever been built. It's going to require one more additional pieces to actually evaluate voice applications. And the interesting part about these is that it's not just the text that needs to be evaluated or the transcript, but it's also the audio chunk that needs to be evaluated. Um, in a lot of these Voice Assistant APIs, you have the generated transcript that happens actually after the audio chunk is really sent. And so that's a whole another dimension around, is the user, how, what's the user sent to? Is the speech to text transcription actually okay? Is the tone consistent throughout the entire conversation? And so you actually need to evaluate not just the audio piece and the flow of the conversation and everything else you're doing for all your other, you know, other parts of your agent, but also make sure that the audio chunks are getting their own evals defined on, um, you know, intent or speech quality or speech text accuracy. Um, so this is important for voice. So with that, um, I'm going to actually show you guys how we evaluate our own agent, so that you can get a little bit of a example of of what some agent in the wild actually does. Um, this is our own agent, so let me actually show you what it looks like. Um, you can actually go in our product today, and there's a little co-pilot. And our co-pilot does something similar to what other co-pilots do, where as people are spending time in our product, we actually help them do things like, hey, help me debug this, help me summarize this, help me look at this. Um, can I search with natural language? There's kind of this co-pilot integrated throughout our entire product. But we're an eval company. So what do we do? We actually dog food our own tool. And we decide to, what you're looking at here is actually the traces of our entire co-pilot actually in the wild. And every single step of this co-pilot, we actually run evaluations of. So in this case, we have an eval at the very top, actually evaluating something around, was the overall response that was generated? This was actually a search question. Is the overall search question actually correct or incorrect? And then we also have one around, once it actually called the search router, did it pick the right router? And then did it pass in the correct arguments into the router? And then finally, ultimately, did it complete the task or the skill correctly in the execution of this, this entire skill? And so evals aren't just at one layer of your entire trace. If you take anything away from this conversation, the goal here is really, how do you make sure that you have evals throughout your application, so that when something goes wrong, I can debug if it actually happened at the router level, if it happened at the skill level, or if it happened somewhere else along the flow. Um, and I think that's it from me. Any [Applause] questions? Yeah, so what teams actually end up doing is they have, um, call, like the input into a skill. So the input into, I'm not sure, you know, if you're building an agent, but like, if there's some input into your skill, that's typically what the input would be. And then it would repeatedly call that same skill with the same input, like one time, two times, three times, all the way to 100 times. And then you're tracking for every single run of that skill, how many steps did it actually take? So ideally, you want to mimic it with the same input and the same skill. We do have some teams though, where as part of testing, they'll slightly modify the input. So sometimes they'll ask the question a little bit differently, a little bit more wordy, see if that takes more steps. Um, so you can do that as well, but it's, you know, flavors of the same input is typically how we recommend testing for convergence. Um, there's a lot I didn't cover here today, which is around, like, for example, guardrails is a big component of, you know, I call it slightly more proactive type of evals, because you're, you're running evals, and then you're actually making an action or blocking what the output of the the agent could, because of it. Um, if I'm honest with you, though, I think that it's really mostly useful for external facing applications and high-risk environments, because of course, it's going to add some sort of latency to your actual call. Um, so you want to be sure you need it. And sorry, I think there's a question there. Yeah. Oh, yeah. Yeah. Okay, good point. So she, uh, first, she asked both great questions. First, she asked, well, how do you think about, um, evals in the context of multimodal applications? So if you have voice, if you have video, if you have images, how do you actually think about that piece in the evaluations? Let me tackle that part first. So, we, we do see that a lot. I think voice is probably more common than video is, is what we're seeing. And to be honest, image, and I think there's just a lot of applications, like the call center one I was telling you about. I think enterprises have just been like, the ability to just talk to something is a lot easier than video and image. Um, so we've been seeing a lot more voice assistants. And then with voice, the things that they end up caring about is actually, um, a fun story. Uh, one of our customers, the tone started out really like nice and sweet in the beginning, and then it got rough near the end. And it just, and so that wasn't really something that they expected. They wanted the tone to be consistent throughout the entire conversation. So stuff like that is things that the speech is not going to detect. So if you're just evaluating the transcript, you're not going to detect those things that the underlying tone has changed. Um, with image and video, uh, what we've typically seen people do is summarize what's in the picture, or summarize what's happening in the video, and then try to evaluate as a common one. And then of course, all the common, like quality of image, quality of video, ends up being common things that people end up evaluating. Um, and then I think the second question you asked was, like, how, how do people actually use, you know, I won't talk specifically about ours, but just a general observability platforms. So people do, um, plug in and connect their actual data, because at the end of the day, today, these are probably some of the most complex software that has ever been built, and they're also non-deterministic. So they do want some level of visibility into what's happening. The engineers use it for troubleshooting. We're seeing AI PM really make a rise into really understanding the experience. Um, so they, they are, um, if you're concerned about data security, there's a lot of ways, not just our platform, but other platforms out there too, where you can always decide to deploy it in your own VPC. Um, so that's kind of how they address the security. Yeah, go ahead. Thanks. Yeah. Yeah. Um, I'm so excited for the call center transformation that's about to happen right now, because I think we're going to see a lot more of what you're saying. So one thing we have been seeing teams do is, I, I mean, it just comes down to what can you fit in the context window? And the context windows aren't big to handle a lot of back and forth, especially of the voice conversations with both the audio file as well as the transcription. What we see some teams do is that, uh, they, I think this is pretty common of like summarizing the previous historical state, the memory. This is where it, that starts to get really important. They decide to then, uh, summarize the audio chunk itself, so that you're not obviously passing that back and forth over the wire. Um, and so typically, how do you keep trying to condense the historical state? Um, and then of course, you're kind of hoping that there's some recency, so things that were asked more recently are more important than things that were like earlier in the conversation. And so that's how we've seen a lot of people manage state overall, um, and and just growing size of these conversations. But great question. Yeah, thanks everyone. I think that's time. [Applause] [Music] Bye. Would you like more time to go to more epic conferences like this one? Our next presenter is the Director of Engineering AI at DataDog, where they've built AI agents that are always ready to handle issues on your behalf. Please join me in welcoming to the stage Diamond. [Music] [Applause] Bishop. Hey, I'm Diamond. I hope everyone's, you know, feeling the AGI today. Um, I'll be sharing our AI agents at DataDog, and what we've learned building the DevOps engineer who never sleeps. I came all the way from the New York Times building, uh, right across here, to see all of you. So I hope it's worth it. If this works, uh, okay, here we go. Hey, little about me. Um, I've been working for my entire career, about 15 years or so, in AI, trying to build more AI friends and co-workers. Um, I wouldn't read too much into that. I have human ones too. Um, promise. Um, throughout the AI Winters and lulls of the last 15 years or so, I've managed to keep doing just that at Microsoft Cortana, building out Alexa at Amazon, working on PyTorch at Meta, and building my own AI startup that was working on a DevOps assistant. Now at DataDog, we're building out Bits AI, which is the AI assistant who's there to help all of you with your DevOps problems. So today, I'll talk a little about that, talk a little about the history of AI at DataDog, a little bit about how we think about AI agents today, and where we think things are going for the future. DataDog is the observability and security platform for cloud applications. There's a lot that we do, um, but it kind of all boils down to being able to observe what's happening in your system and take action on that. Make it easier to understand, make it easier for us to, uh, simply understand and build out things to have a safer and more DevOps friendly system. We've been shipping AI for quite a while, actually. Um, it's not always in your face, it's not always out there saying, here's a big AI product. But things like proactive alerting, really understanding things like root cause analysis, impact analysis, and change tracking, and much more has been happening since 2015 or so. But things are changing. This is a clear era shift. I think of this kind of similar terms to the microprocessor or the shift to SaaS. Bigger, smarter models, reasoning, and multimodal coming. Foundation model wars happening. This general shift where intelligence becomes too cheap to meter. And what this means is products like Cursor are growing, you know, terribly fast. Um, and really people are expecting more and more from AI every day. With these advancements, at DataDog, we're really trying to rise to meet the shift as well. The future is uncertain. This kind of ambiguity creates opportunity, but there's a lot of potential for us. That's kind of the dawning of this intelligence age. We're working to move up the stack to leverage these advancements and give even more to our customers by making it so that you don't use DataDog as just the DevOps platform, but also as AI agents that use that platform for you. This requires work in a few key areas that I'll talk about: developing the actual agents, doing eval. You just heard a lot about eval. We think about that every day, for better or worse. Um, and building new types of observability. There's a few agents that we're working on right now in private beta. The first is the AI Software Engineer. This kind of looks at problems for you, looks at errors, tries to recommend code, uh, that we can generate to help you improve your system. The second is the AI On-Call Engineer. This wakes up for you in the middle of the night, does your work, hopefully makes it so you have to get paged less frequently. And then we have a lot more on the way. So I'm going to talk a little bit about the AI On-Call Engineer first. This is the one that, you know, everyone wants to save them from that 2 AM alert. You don't want to have to wake up in the middle of the night, go and look through your runbook, go and figure out what's going on. If you can help it, our On-Call Engineer is there to really make it so you can keep sleeping. This agent proactively kicks off when an alert occurs and works to first situationally orient, read things like your runbooks, grab context of the alert, and then goes and, you know, figures out the common stuff that each of you would do on DataDog already. Look through logs, look through metrics, look through traces, and kind of act in this loop to figure out what's going on. The On-Call agent's great for both automatically running investigations for me, but also, you know, being able to look through and find summaries and find information for me before I even get to my computer. So if I want to get insights into why an alert just occurred, or figure out why a trace might, uh, be showing an error, this agent can jump ahead, pull information for me, and show it to me. We also have added a new page that makes it easy so that you can have human-AI collaboration. This is still something I'm thinking about a lot, is like, what, what kind of collaboration do we expect? We want our agents to act as humans, but we also need to be able to verify what they did and be able to kind of look over what they're doing and really learn from it. It also helps you to kind of earn trust along the way. I can see the reason why, uh, this hypothesis, for example, was generated. I can see what the agent found, and I can make decisions about whether or not I agree along the way. It also tells you things like, what steps did it actually take out of your runbook? And kind of like a junior engineer who does this work, I can go ask follow-up questions, find out why I did a certain thing, a little more insight into how we're making this happen. Much like a human SRE or DevOps engineer, our agent works to put together hypotheses on what might be happening and reason over them, coming up with ways to test them, use tools in the tool forager sense to try out ideas, run queries against logs, metrics, etc., and work to validate or invalidate each hypothesis. In the case that it does find a solid root cause, our agent can suggest remediations along the way. Again, just like a human might might say, hey, we should page in that other team that's involved here, or it might offer to scale up or down your infrastructure over time. We plan to add more built-in actions and eventually discover new types of workflows based on what your team has done. But if you already have certain workflows that you've set up in DataDog, um, we can tie directly into them and make it so that our agent can understand those workflows and how they might map to helping you remediate a problem. And if it's a real incident, the On-Call engineer is not usually done. Once an issue is remediated, you usually go and write a postmortem, you go try to learn from it, you share it with your team. Our agent can do the same. Write out your postmortem for you, look at what occurred during the entire time, what it did, what humans did, and put that together so that you have something ready in the morning. So that was the On-Call Engineer. Um, that's the one that is, you know, trying to help you in the middle of the night, trying to help you every time alerts come on. Um, we also have this AI Software Engineer. I think of this as the proactive developer, the DevOps or software engineering agent who observes and acts on things like errors coming through. This is kind of the error tracking assistant. It automatically analyzes these errors, identifies causes, and proposes solutions. Those solutions can include generating a code fix and working to reduce the number of on-call incidents you have in the first place. So they can work in concert to make a better system over time. In this case, the assistant has caught a recursion issue, proposes a fix, and even creates a recursion test so that we can catch it if it happens again in the future. We have the option to create a PR in GitHub or open the diff in VS Code for editing. This workflow significantly reduces the time spent by an engineer manually writing and testing code and greatly reduces human time spent overall. So what have we learned building out these agents and some of the new ones that we're working on today? Well, we've learned quite a lot. Um, there's a lot of things that we started with that we kind of went back and and redid. Um, but a few areas I'll touch on that I hope help you as you develop your own: First is scoping tasks for evaluation. It's very easy, you know, to build out demos quickly, much harder sometimes to scope and eval what's occurring. Second is building the right team who's ready to move fast and deal with the ambiguity that comes with these kind of problems. Third is that, you know, the UX is changing. That's something that everyone needs to be comfortable with. And fourth is observability matters. You know, uh, I'm surprising for DataDog to say that, I'm sure, but observability is terribly important, even in this new era. So scoping the problems, scoping the work to be done. I like to think about this as defining jobs to be done and really kind of trying to clearly understand step by step what you'd like to do. Think about it from the human angle first, and think about how another human might go and evaluate it. Um, this is why we build out vertical task-specific agents rather than building out generalized agents. We also want, where possible, this to be measurable and verifiable. And at each step, this has honestly been one of the biggest pain points for us, and I think this is true for many people working in agents, where you can quickly build out a demo, you can quickly build something that looks like it works, but then it's very hard to actually verify that over time and improve it. Um, use your domain experts, but use them more like design partners or task verifiers. Don't use them as the people who will go and kind of write the code rules for it, because there is a big difference in how these kind of stochastic models work versus how experts work. You know, everyone kind of knows Gnome and his, uh, anti-NLP rants, but that kind of stuff happens pretty frequently. At domain experts, eval, eval, eval. I can't stress this enough. Um, start by thinking deeply about your eval. The number of mistakes we made by not thinking about eval first is, uh, frustrating, and something that I think everyone should think about. It's very easy to build these demos, as I said. Um, but everything in this fuzzy stochastic world requires good eval. Even something small to start. This means offline, online, and kind of living eval. Have end-to-end, uh, uh, uh, tasks. Have end-to-end measurements. Make it so that you also instrument appropriately. The way to know if humans are using your product right and giving you feedback. And then make this a living, breathing test set. Building the team. You don't have to have a bunch of ML experts. There aren't that many to go around right now. Um, what you really need is you want to seat it with one or two, and then have a bunch of optimistic generalists who are very good at writing code and very willing to try things out fast. Um, I'll also note that UX and front-end matters more than I'd like as a backend engineer myself. Um, but it's terribly important as you collaborate with these, with these agents and the assistants. Um, and then you want teammates and people who are excited to be AI augmented themselves. This is day-to-day AI use. This is explorer types who want to learn. This is a field that's changing fast. Um, and if you don't have people like that, you're going to kind of get stuck. You want folks to kind of, you know, yeah, you're in for the vast and endless AI capabilities, right? Um, it's a big world out there, and there's a lot going on. Ye Olde UX. This is one of those things that I still, you know, we think about, we go back and forth every day. Um, it's an area that I didn't realize was quite so important initially when I started working in this field. Um, despite my engineering sensibilities and lack of UX, it's terribly important. Um, this is such an early space of work. This is kind of one of the more important things here as you collaborate and work together. But the old UX patterns are changing. Be comfortable with that. Um, and so far, I'm partial to agents that work more and more like human teammates, instead of building out a bunch of new pages or buttons. So who watches the watchmen, right? Um, you have these agents running around. Observability is actually really important, and don't make it an afterthought. Um, these are complex workflows. You really need situational awareness to debug problems. And this has saved us time a lot as we start to work with, um, a new view that we're calling LLM Observability in the DataDog product. DataDog in general has a full observability stack. As many of you know, we can look at GPUs, um, we can look at LLM monitoring, we can look at really your system end-to-end. But tying in the LLM observability has been very helpful because you have a wide variety of interactions and calls out to models. You're hosting models, you're running maybe models, you're using through an API, and we can make them all, uh, kind of group together in the same pane of glass so you can look at them and debug what's occurring. I will note, though, that this can get messy fast with agents. Our agent, for example, has very complex multi-step calls. You're not going to look at this and figure out what's going on right away. Um, this can be hundreds of calls. This can be, you know, uh, tons of different places where it's making decisions about tools, looping time and time again. And if you just look through a full list of these things, you'll never really figure out what's going on. So here's a quick, you know, sneak peek into a more agent view of what's occurring inside of our observability tools. This is our agent graph. Really, what this means is that I can kind of look at it just like our agent did, and looking at workflows that are occurring. You can see in this, even though it's a big graph, uh, there's a bright red node here. If we zoom into that, we can actually see where errors were occurring. This is very human-readable. Something that makes it super easy to figure out what's going on when your complex workflow is running. As an aside, though, I do also want to note what I think of as kind of like the agent or application layer bitter lesson. Um, general methods that can leverage new off-the-shelf models are ultimately the most effective, by a large margin. I hate to say it, but like, you sit there, you fine-tune, you do all this work on, like, this specific, uh, you know, project, a specific task, and then all of a sudden, you know, OpenAI or someone comes out with a new model, and it handles all this, you know, kind of quickly. A lot of the reasoning is solved for you. We're not quite there where it handles all of it very quickly, but you should be at a point where you can easily try out any of these models. And don't feel stuck to a particular model that you've been working on for a while. You know, rising tide lifts all boats here. Um, I also think a lot about not just building agents, but what it might mean for other agents to be users of DataDog and other SaaS products. Um, there's a good chance that agents surpass humans as users in the next five years. Um, I'm probably somewhere in the middle on my estimate there. You know, there are people who will tell you that'll happen in the next year, there'll be people who will tell you it'll happen in 10 years. I think we're somewhere around the five-year mark. Um, but this means that you shouldn't just be building for humans or building your own agents, you should really think about agents that might use your product as well. An example of this is like third-party agents like Claude might use, you know, DataDog directly. I set this up with MCP relatively quickly. Um, but any type of agent that might be coming in and using your platform, you should think of the context you want to provide them, the information you want to provide about your APIs that agents would use more than humans. So looking ahead, um, the future is going to be weird. It'll be fun. Um, and AI accelerating is accelerating each and every day. I strongly believe that we'll be able to offer a team of DevSecOps agents for hire to each of you soon. You don't have to go and use our platform directly and integrate directly. Ideally, our agents will do that for you, and our agents will handle your on-call and everything like that for you. Um, I also do think that AI agents will be customers. Many of you building out SRE agents and other types of agents, coding agents, should use our platform, should use our tools, just like a human would. And, uh, we can't wait to see that. And generally, I think that small companies out there are going to be built by someone who can use automated developers like Cursor or Devon to get their ideas out into the real world, and then agents like ours to handle operations and security in a way that lets, you know, an order of magnitude more ideas make it out into the real world. Thank you so much. Um, please reach out if you're building any agents that want to use us, um, or if you'd like to check out our agents as well. Um, there's a lot to build here, and if you want to work in this space, we are hiring more AI engineers and people who are just excited about it. But thank you very [Applause] much. Our next presentation is about building self-managed AI networks. Please join me in welcoming to the stage Technical Lead for Arista Networks, Paul. [Music] [Applause] Gilbert. Ah, oops. How do I go back? There you go. Yep. So my name is Paul Gilbert. I have an accident, but I'm actually based here in New York City, and I build or design or help build and design, uh, enterprise networks. But what we do is a plumb in. So I'm not going to talk about agents, but more kind of how you train models, what the infrastructure looks like, and how you do inference on on the infrastructure. Uh, I, I, I normally teach people, uh, the very basic stuff. So I, I, you guys probably know this already, but these are new terms for us. When, when we built computer networks, people will come to us and say, job completion time, barrier. I'm, I'm pretty sure you guys know that the inference, and the question I get all the time is, you know, we can build a network to train a model. There's an algorithm maybe you can use to look at what you, what you need. But then, you know, what's inference? And, you know, it's changed a lot now because of chain of thought and reasoning models. The inference is a lot different. It used to be X, but now it's Y. I'm pretty sure you guys have seen this slide. But I use these just to talk to enterprises around kind of what they might be thinking in GPU size. This, uh, Wed Sosa came up, Dr. Wed Sosa came up with this. On the left there is the training, and on the right there is the inference. And it's kind of, you know, on one you have times 18 times the other times two again. I think that changes now with chain of thought and reasoning. Not too sure kind of which way it's going to go. And at the bottom there was a really interesting one again, which I showed customers, cuz I, most of the enterprises I talk to kind of don't understand models and how they work and training. I know little, but not a lot. But, you know, the, the, the, the model they trained down here was 248 GPUs for one to two months. And then when you go to inference after fine-tuning and alignment, it's four H100s for inference. So we talk to people about building different types of networks, which I'll speak about. But, you know, kind of I always start at the beginning. And, you know, this, I got this slide, and I think it's really interesting. You know, LLMs were kind of just a tiny little bit of inference. But now with the, the next generation models, it's a lot. So this is what we build, or I, I build. And these are new terminologies for us from the networking world. Backend network. So this is where you connect GPUs to. When we build these networks, they're completely isolated because GPUs are really, really expensive. They take a lot of power, and they're really hard to get old of. So when people build AI networks in the enterprise, we don't connect nothing else to these networks. The, the bottom part of that, the backend network, there's eight GPUs per pool on those servers. And they can be Nvidia, they can be Super Micro, they can be, be whatever. They will go into a high-speed switch at the bottom there. You have a leaf switch and a spine switch, and nothing else attaches to that network. And then on the front-end network is where you get storage from. The train the model, obviously, you know, the GPUs synchronize, they do something, they calculate, they produce an algorithm, and they call for more data. And that's kind of the cycle. The front-end network is not as intense as the backend. The backend network, depending on the model that you train, they, the GPUs will actually work at 400 gigabits. And for, for us in the enterprise, you know, and I've built some big, big data centers, but I've never seen anything like that. So this is in the networking world, this is a completely new world to us. And we, we make the networks as simple as possible because again, these are really expensive, and people want to get their money's worth. They want these running 24/7. So we do IB, IBGP, or EBGP, just really simple protocols. I'm sure most of you have seen this, but again, I, I kind of teach this. I, the, this was an infrastructure presentation, but, you know, that's kind of the back of an H100, probably the most popular. It is actually the most popular, uh, AI server out there right now. You can see in the middle there, there's four ports, but those four ports are broken out into two, so there's eight ports. Those are the GPU ports there. And then kind of over to the left there, there's the Ethernet ports. So that's what we connect to. We've never seen anything like this before. You know, when you first speak to people about this, you know, I've seen servers with 400 gig, you know, and I do a lot of the big financial networks, but never before have we seen servers that can put this type of traffic onto a network. Uh, we always, they always ask me about this, and, you know, I got this from an Nvidia slide. It's stand there, but, you know, there's this thing called scale up and scale out. I'm not really sure scale up, you know, when, when you buy, when my customers buy these servers, they always have HGP using it. You can't add anything to an Nvidia server. You get the DGX. If you go with the outsource model, it's an HGX, so it's a third party. You don't really add things to it. But so I don't see scale up. But scale out, you know, obviously you can build. We, we build a network so that you can add more GPUs. We can start very small, and we can go up to, you know, hundreds of thousands of GPUs, not in the enterprise, but the cloud scale guys do. So, so what's different? You know, for us, again, it's there's, it's hardware and software. The hardware are those GPUs. We're not used to them. The first time I tried to configure one, it took me hours and hours, but I'd never seen them before, whereas other stuff I've seen pretty quickly. You have software, so CUDA and NCCL are probably, you know, two of the biggest protocols. And you, you guys know more about that than me, but we had to kind of understand, not CUDA, but NCCL, because it has a collective. So we had to understand kind of how the collective works, because that will put traffic onto the network in a certain way. The hardware was completely different again. You know, we had the eight, uh, 400 gig ports and the four 400 gig ports facing the, the front-end network. Totally new to us. The other thing was data center applications, kind of web app, database, they're really easy. They go from one to the other and in different parts of the network. And if one fails, you have some kind of load balancer in or FA, and it fails over. This is AI networks, not like that. The GPUs all speak, they'll talk to each other, they'll get stuff, they'll send stuff. And if one fails, the, the job might fail, it might recover, but it's a different concept to us. So it's, it's hard to imagine. And traffic is bursty, because all of these GPUs, if you have a thousand GPUs at 400 gig, they will all burst at the same time. And if they can, they will burst up to 400 gig. So there's a lot of traffic on a network, and I've never seen anything like that. So when we build these networks, we don't build them oversubscribed. We build them one to one. Might, in the data center world, we used to do one to ten, it went down to probably one to three, but never one to one, because it's just really expensive to build that kind of bandwidth. But with AI networks, we need to. So we have no oversubscription in the network. And from, from our point of view, if you look at what one of these servers can put on the network, you know, just an H100 is eight 400 gig GPUs and four 400 gig, that's 4.8 terabytes. And that's just one server. The storage size, the, the front-end probably nowhere near that, but the backend is always wire rate. And then 800 gig is probably, you know, the bees are just around the corner. I think in March they'll be released. I think there's some people to have them. And those are 800 gig. We support 800 gig today on the network. But each one of those servers in there's a possible 9.6 terabytes per server. And you, most people in my world, in the, in the enterprise world, come from servers at maybe one, two, three, or four 100 gig Ethernet, but nothing like 9.6 terabytes per server. So the other problem we have is the traffic patterns. When we load balance from kind of leaf to spine, we use a thing called entropy, which is the five-tuple IP address, port, and MAC address. And we do pretty good load balancing. But with GPUs, it's just one IP address, and it can sometimes match to a single uplink and oversubscribe it, which would be really bad, because you'll start dropping an awful lot of packets. So we have to take a lot of care on how we load balance within the AI network, or how we build the backend and the front-end. So we have some pretty cool tools where we don't now look at the five-tuple. We actually load balance on the percent of bandwidth that's being used on the uplink. And we can get up to about 93% utilization on all the uplinks to the downlinks, which is pretty good. You know, and again, one thing that's really new to us is a single GPU can, or a set of GPUs, if they fail, sometimes the model will stop. I know checkpoints, but a single failed GPU is a problem for us. And if one of the big problems that we've always had is optics and transceivers and DOMs, which is the rates and the loss between them, and the cables, etc. And when you start building these networks with thousands of GPUs, you will have a lot of cable problems, and you will have a lot of GPU problems. So it's, it's really hard for us because, again, this world is new to us. The last year or so, power. I, you know, power is, you could, you know, you've read the newspapers, you know, everyone's trying to buy nuclear power stations to power these things. The average rack in the data center today is about 7 kW to 15 kW, and you can put like, you know, 10, one, one U racks into those, and you'll be fine. And when we come to me, say, yeah, we finally got GPUs, whatever. And I say to them, you know, what kind of racks have you got? And they said, well, we're going to put them in. And then you could only put one of these servers in one of those racks because they, they actually draw with 8 GPUs, 10.2 kW. So you need new racks. Most enterprises now waking up to this, and they're building racks between 100 and 200 kW, and they're water-cooled. There's no way you could air-cool them in a data center. So that's a whole new concept to people as well, is water-cooled racks. Traffic is both ways, which again is new to us. So north-south, you know, in a regular data center, you have users coming in, database, app, web, whatever, and it comes in, it goes out. But in the AI world, when the GPUs speak, that traffic is east-west because it's speaking amongst each other. And then when they ask for more data from the storage network, it's north-south. So you have both traffic patterns. The east-west is really bad, that's kind of where they run wire rate. The front-end to the storage is much more calmer because most storage vendors can't put that kind of traffic on the network right now. I'm pretty sure they will one day, but they're more around 100, 200 gig. And, you know, in a network, there's a certain amount of buffering on these switches, and buffering is bad because it means it can't send traffic somewhere because something else is not receiving the traffic. So you need congestion control and feedback. And right now, we use something called RoCE v2, which is two parts of RoCE v2. There's PFC and an ECN. If you were building an AI network, your engineers, your network engineers will definitely know about this. ECN is an end-to-end flow control where if traffic, if traffic is, if there's congestion somewhere in the network, packets are marked, they go to the receiver, the receiver sends back to the sender, you need to slow down because there's congestion. And it goes for an algorithm, it pauses for a while, it slows down. And if it doesn't get any more ECN packets, it speeds up again. And PFC is basically stop. My buffers are full, I can't take anymore. So it kind of is a dead

停止,所以您通过 ECN 有一种缓慢的呃反馈机制,而 PFC 则提供一种紧急停止。我们构建的网络非常简单,我们没有像常规数据中心那样拥有防火墙、负载均衡器等的 DMZ。我们有互联网连接,我们有 L4 到 L7 服务,一大堆东西。当我们构建这些网络时,它们是完全隔离的,呃,GPU,后端是完全隔离的。前端可能可以连接到某些东西,但即使那样,构建它的成本也非常高,您不想冒险。按需访问我们习惯的应用程序,您知道,如果它出现故障或什么东西出现故障,它会恢复,您知道,您可能会遇到一点跳跃或跳跃,但如果您做对了,那就不会那么糟糕。在这个世界上,如果有什么东西失败了,模型可能会出现故障,您收到的呼叫到您的运营中心会与您重新启动后一切都好起来时收到的呼叫不同。呃,另一件事是集体,您知道,显然镍会出去弄清楚 GPU 在哪里以及如何处理它,但有不同的设计,所以我告诉我的客户与您的数据科学家和您的呃,您的程序员开发人员交谈,找出他们在做什么以及他们正在构建什么样的模型,因为这会影响网络,影响您如何构建它以及如何设计它,所以网络完全隔离,事物正在快速发展,我们现在是 800 千兆,呃,我们已经这样做了大约一年了,我们可能会在今年年底看到网络上的 1.6 太字节,呃,2027 年初,它将继续磨砺、磨砺、磨砺,这些模型将变得越来越大,消耗的越来越多。我敢肯定,呃,可见性和遥测,我,您知道,我所有的客户,当模型因网络问题而失败时,他们收到的核心信息与他们过去收到的不同,所以我们放入了不同的呃,遥测和可见性,以确保如果网络上出现问题,您知道他们会知道,希望在他们接到电话之前。所以,是的,我在 Arista 工作,我们的操作系统叫做 EOS,我们有很多功能。所以,如果您正在构建一个 AI 网络,我不确定你们是否与工程师交谈,但这是我们谈论的事情,呃,无损以太网,每个人都认为您知道,当您训练模型时,您不能丢弃数据包。我见过,而且您可以,我认为丢弃数据包是可以的,一致的延迟是可以的,但如果您丢弃了如此多的数据包,那显然是个问题。所以流量控制损失以太网真的至关重要,ECN 和 PFC 是其中的一部分,正如我之前所说,它们是流量控制机制,一个说请减速,另一个说停止。正如您所知,由于 GPU 是同步的,如果有什么东西减速了,您减速了一个端口,一个 GPU,一切都会减速,所以您真的需要掌握呃,过度订阅的情况,如果您正在获得 Qin,它在哪里?呃,我们有非常好的缓冲区,我们可以调整缓冲区,我们在网络的不同位置有不同类型的交换机,但我们发现模型发送和接收特定大小的数据包,我们所做的是调整这些缓冲区以接受这些类型的数据包。缓冲是网络中一种非常昂贵的商品,如果您能找到一种方法来精确地分配缓冲区以适应数据包大小,那将是双赢的。呃,我们已经弄清楚了如何做到这一点,这很好。呃,是的,监控对我们来说非常重要。我告诉我的客户,您可能需要做五件事,其中之一是 RDMA,您知道,呃,这些网络使用 RDMA 进行训练,您知道,呃,它是内存到内存写入,而不是 CPU 到内存,RDMA 是一个复杂的协议,它有 10 个或 10 个或 12 个甚至更多的错误代码。所以,如果网络开始出现问题,并且开始丢弃数据包,而不是仅仅丢弃数据包,我们可以实际将该数据包复制到缓冲区或发送到某处,或者只是发送头部以及我们丢弃该数据包的原因。如果您仔细想想,这真的很酷,就像大多数网络在拥塞时,您的缓冲区会填满,您会丢弃数据包,我们会丢弃数据包,但我们会实际拍摄数据包和头部快照,其中包含任何 RDMA 信息,我们会告诉您为什么丢弃它。呃,我们还有另一件非常好的事情,我们有一个 AI 代理,您知道,从网络角度来看,我们可以看到正在发生的事情,但我们实际上并没有看到 GPU 的任何可见性。所以现在我们有一个代理,它是一个 API,呃,以及一些我们加载到 Nvidia GPU 上的代码,它们将与交换机通信。所以该代理会告诉交换机,您是如何配置的?所以 PFC 和 ECN 这些慢速控制机制必须正确配置,因为如果配置不正确,那将是一场灾难。所以 GP 会与交换机通信,说这是我的配置方式,交换机会说,是的,您很好,我们互相理解。第二件事是它为您提供了大量关于接收的数据包、发送的数据包、RDMA 错误、RDMA 问题等的统计信息。所以您现在可以关联问题是 GPU 还是网络,这对我们来说是一个巨大的进步。呃,我们还有另一个非常酷的功能,那就是智能系统升级,您知道,如果您使用路由器和交换机,您知道您有时需要升级软件,有时是为了获得新功能,有时是为了修复 pts,即交换机上的安全漏洞。我们现在已经找到了一种方法,可以做到这一点,您可以升级代码而无需实际将交换机脱机。所以,您知道,如果您在网络中有 1,24 个 GPU 和 64 个交换机,您实际上可以升级它们,并且 GPU 可以继续工作。所以这对我们来说是一个真正的巨大进步。所以您,对我来说,我不知道,但后端没有过度订阅,您不能,因为 GPU 使用您提供给它们的所有东西。地址方面对我们来说非常重要,它是点对点连接,所以它是 SL30 31s,如果您有 IPv4 问题,您可以使用 IPv6。地址空间问题,我所有的客户我都告诉他们使用 BGP,因为它是最好的协议,它非常简单,而且非常快速。EVPN VXLAN,如果您有 M 延迟,如果您有很多不同的业务部门、业务线使用网络,您就需要像高级负载均衡这样的东西。我们有几种不同的,我们实际上会查看您正在运行的集体负载均衡,我们称之为集群负载均衡。您可以部署它。Rocky,我告诉我的所有客户都要这样做,因为如果您不这样做,您的网络就会崩溃,您就不会知道为什么。这些东西会给您一个预警系统,您需要对您的网络做些什么。所以它们确实至关重要,而且可见性和遥测始终都非常好,因为在网络操作中心或运营中心,您总是希望在接到开发人员和为该网络支付了巨额费用的那些人的电话之前就意识到问题。我时间不多了,但这是一种 1,400 千兆的集群,它看起来会是脊叶结构。呃,再次强调,没有过度订阅,叶和脊之间的链接是 800 千兆,到 GPU 的链接是 400 千兆。这是一个 4,000 集群,这些是更大的盒子,这些是 16 插槽的。其中一个盒子可以容纳 576 个 800 千兆的 GPU,所以是 1152 个 400 千兆的 GPU。所以,如果您正在构建包含数千个 GPU 的集群,那么这个盒子就是为您准备的,7800 系列。将它们放在一起,这就是我们通常会构建的。这里有三个网络,一个是 GPU 所在的后端网络,一个是存储所在的后端网络,然后是推理,您将模型放到别处。我时间不多了,我没来,所以我想我不是,所以,所以另一件事是,您知道,有超以太网联盟,我不知道这是否会引起您的兴趣。以太网的构建方式可能在 30 年里没有改变。它可以在拥塞控制、数据包喷射、网卡之间的通信等方面做得更好。所以有一个叫做超以太网联盟的东西,版本 10 可能会在 2025 年第一季度获得批准,这是一种不同的网络构建方式,您可能要到第三季度或第四季度才能看到它们。但大多数云规模的玩家都对此非常热衷,因为它将更多内容放入网卡,并从网络中取出更多内容。所以我们只需要做我们擅长的事情,那就是转发数据包。所以总结一下,您知道,对我们来说,我们有前端,也就是存储,后端,这是对我们来说真正重要的部分。呃,那部分确实是突发性的。GPU 都是同步的,所以它们同时发送和接收。如果您有一个慢速的 GPU,那将是一个障碍,因为它会阻止其他所有人的工作完成时间对我们来说很重要。如果您接到电话说,您知道,我的工作完成时间昨天是 1 小时,今天却是 4 天,您知道,这很可能是我们的问题。您知道,模型可以检查点,但它们非常昂贵,你们都知道,我完了,它们还没有来。是的,呃,有人有什么问题吗?如果他们不来,我想问一个问题。 [音乐] [掌声] [音乐] 我们的这个环节的最后一次演示是 Anthropic 的 AI 副总裁。请大家热烈欢迎来到舞台的 Anthropic 的技术成员 Alexander Bricken 和 Anthropic 的 GTM Enterprise 的 Joe Bailey。 [音乐] 好了,我们比预期的要亮。很高兴今天见到大家。我是 Alexander Bricken,我在 Anthropic 的应用 AI 团队工作。所以我与客户密切合作,进行技术实施工作,我也会将这些建议带回产品研究和模型研究。呃,我将把它交给 Joe。大家好,很高兴来到这里。我叫 Joe Bailey,我在 Anthropic 的上市团队工作。我加入 Anthropic 已经一年多了,所以我亲眼目睹了我们的模型从 2.1 版本发展到今天的能力。我认为,日复一日,最令人兴奋的是我们正在与 AI 领导者合作,他们正在解决实际的业务问题,这些问题在一年前似乎是不可能的。所以,我对一切发展的速度感到非常兴奋。好的,今天我们将进行一个快速的概述,您知道我们是谁,我们的使命,然后我们将重点关注实施 AI 和最佳实践以及常见错误。呃,Alex 和我实际上并不是凭空捏造的,而是与我们的一些同事进行了交谈,所以这一切都基于数百次客户互动。所以我们希望从中能有一些可操作的见解。太棒了,那么 Anthropic 是什么?所以我们是一家 AI 安全和研究公司,致力于构建世界上最好、最安全的呃,大型语言模型。我们几年前由一些顶尖的 AI 专家创立,自成立以来,我们不仅发布了多个版本的前沿模型,而且还在安全技术、研究和政策的最前沿。我将把它交给 Alex 来谈谈我们的明星模型。太棒了,所以有些人可能熟悉,但我们最近推出的模型是 Sonet 3.5,去年 10 月底发布。您可能熟悉它,因为如果您是开发人员,Sonet 实际上是代码领域领先的模型之一。所以,如果您熟悉像 sbench 这样的评估,这是一个代理编码评估,Sona 仍然在该排行榜上名列前茅。我不会在评估方面深入细节,所以让我们继续。呃,所以是的,除了 Joe 提到的,我们还有很多不同的研究方向。呃,这些方向分布很广,但在模型能力、产品研究和 AI 安全之间有重叠。我认为让我们与众不同的是可解释性,这实际上是逆向工程模型,并试图弄清楚它们实际上是如何思考的,以及为什么它们会这样思考,然后是额外的能力,即根据用例将它们引导到正确的方向。所以让我们更深入地探讨一下。我们仍然处于可解释性研究的早期阶段,值得一提的是,正如您所见,有一个更长的时间线,我们实际上只处于前半部分,甚至可能是前 25%。但我们确实以这些相互构建的阶段来处理它。这些包括理解,例如,掌握 AI 的决策制定,检测,实际上能够理解特定的行为并对其进行标记,引导,以某种形式影响 AI 的输入。我稍后会举一个例子。然后是可解释性,这才是您真正解锁与可解释性方法相关的业务价值的地方。所以,虽然我们看到可解释性在长期内提供了呃,在 AI 安全性、可靠性和可用性方面取得了许多重大改进,但我们的可解释性团队使用方法来理解模型级别的特征激活,然后发表了关于这些的研究,例如“走向单义性”和“缩放单义性”,这两篇论文我都强烈推荐。呃,然后随着技术的发展,进入例如检测领域,您可以想象能够更好地掌握模型的实际思考和行为,甚至出于安全原因发现可能深藏在模型能力中的休眠代理。一个很好的例子是,想象一下您问模型今天的 NBA 比赛得分是多少?假设它知道答案,它会说,哦,斯蒂芬·库里,您知道,得了 30 分。这将导致例如特征号 304 的特征激活,著名的 NBA 球员。实际上,这是一组神经元激活的模式,我们在所有提及著名篮球运动员时都识别出来了,而不仅仅是斯蒂芬·库里。您可能还听说过金门克劳德,那是我们引导模型的例子。呃,基本上是放大金门方向的激活,因此每当您问一个问题,比如我应该把卧室漆成什么颜色时,克劳德会回答,哦,你应该把它漆成红色,就像金门大桥一样,也许它应该有一些像你一样的柱子。我将把它交给 Joe 来谈谈我们合作的一些客户。是的,我将从两个方面来阐述这个问题。一个是呃,早期的讨论,另一个是正在做一些很酷的事情的客户的例子。所以在对话中,显然有很多噪音和嗡嗡声,这很棒,但我们经常鼓励我们的客户回到基本问题,以及他们如何利用 AI 来解决您的产品试图解决的核心问题。我们还与大量的呃,AI 原生或 AI 初创公司合作,这就是他们对他们产品的看法。我认为您想超越聊天机器人和摘要。这些可能是很好的选择,但我会更多地考虑在哪里下更大的赌注。举个例子,如果您只点击一次,漂亮的幻灯片,想象一下您是一个入职和技能提升平台。您为客户解决的问题是,您帮助他们快速上手,然后通过装备他们所需的技能来帮助他们进入职业生涯的下一阶段。例如,您可能想擅长公开演讲,或者您可能想成为一名经理。所以很容易说,好吧,让我们总结课程内容,或者让我们呃,呃,让我们有一个问答聊天机器人来回答沿途的问题。它们可能很有帮助,但我实际上会从不同的角度考虑。如果您可以根据每个员工的个人情况超个性化课程内容怎么办?或者如果有人轻松地学习所有课程内容,您能否动态地调整它以使其更具挑战性?所以他们实际上从中获得了更多价值。我特别喜欢最后一个是,如果可以动态更新课程材料,基于人们对客户的了解,会怎么样?所以如果有人是视觉学习者,太棒了,让我们为他们制作视觉内容。而让 AI,抱歉,让大型语言模型自动完成这项工作,您必须考虑这是否比摘要或问答聊天机器人更能解决问题。所以,非常好的思考点。为了谈谈一些取得行业领先成果的客户,他们通过结合他们自己的领域专业知识和我们的呃,我们的模型。我不会一一朗读,但只举几个例子。一个是 AI 影响不同行业,我们有税务,我们有法律,我们有项目管理。他们正在利用 AI 来大幅提升客户体验。他们使其更易于使用,使其更值得信赖。所以它正在改善体验,而不仅仅是“锦上添花”。然后他们实现了真正的高质量的输出。您在报税时不能出现幻觉。这可能会导致各种各样的问题。所以我们很高兴他们看到了这些业务关键工作流程由 AI 提供支持,带来了非常积极的成果,也为他们的客户带来了积极的成果。太棒了,我可以做这个。是的,所以,呃,入门,我只是快速地,这里有两个关键点。所以,如果您转到下一张幻灯片,我们的产品是什么?我们有我们的 API,我们有 Claude for Work。我们的 API 适用于希望将 AI 嵌入其产品和服务的企业。然后 Claude for Work 使您的整个组织能够利用 AI 进行日常工作。我们还与 AWS 和 GCP 合作。您可以在这里获得两全其美。您可以在 Bedrock 或 Vertex 中访问我们的前沿模型。您可以在现有环境中部署这些应用程序。您,所以您不必管理任何新基础设施。所以它真的打破了任何进入壁垒。所以您在这里获得了两全其美。我们谈论了整个过程中的支持。对我们来说,无论您是通过第三方还是我们自己的第一方访问我们,都没有关系。所以我想提一下这一点。太棒了,现在我们已经谈论了一些客户,我们如何真正为客户的成功做好准备,与他们合作?在 Anthropic,所以只是对我的团队做什么进行一个简要的介绍,正如我所提到的,它处于产品研究、面向客户的互动以及组织内的实际研究的交叉点。我们支持用例的技术方面,例如帮助设计架构、评估、调整 Cloud 提示以充分发挥我们模型的潜力等。然后我们将我们看到的一切带回 Anthropic,并努力为我们的客户构建最好的产品。所以我们的一些项目示例或我们发布的一些内容包括“构建有效的研究”论文,我的同事 Barry 撰写了这篇论文,他明天将发表演讲。此外,我们还推出了模型上下文协议,这是一个开源协议,用于语言模型与数据源交互,我相信 Mah 将在周六主持一个关于它的研讨会。所以 Anthropic 作为一个整体,我们努力有效地支持我们的客户。但我们真正开始嵌入,至少是我的团队,我们与大量使用 Cloud 的客户密切合作,他们在特定用例领域面临着非常独特的挑战,他们需要我们团队的支持来尝试应用一些最新的研究成果,或者从提示的角度充分利用模型等。所以这种方法是相当有益的。我们经常在客户面临那些棘手的挑战时启动一个冲刺,这些挑战可能是 LLM Ops 架构或评估。我们帮助他们找到某些他们认为重要的指标,当他们根据用例评估模型时。然后,最后,我们帮助他们将这种迭代循环的结果部署到 A/B 测试环境中,然后希望部署到生产环境中。所以其中一部分是评估的重要性,我稍后会讲到这一点。但我将首先把话筒交给 Joe,让他谈谈我们为 Intercom 做的一些事情。是的,所以我认为这是一个很好的过渡,过渡到 Alex 刚才描述的内容。所以对于那些不知道 Intercom 的人来说,它是一个 AI 客户服务平台。他们有一个名为 Finn 的 AI 代理,在许多方面,它是市场上最好的,而且这是一个相当有竞争力的市场。所以他们已经推出了他们的产品,我认为大约一年左右。当我们与他们交谈时,他们分享了他们的愿景,他们认为客户支持和代理的未来是什么。基于我们模型的某些功能,我们觉得我们可以对这些指标产生相当大的影响。所以我们开始的时候是应用 AI 负责人会见了他们的数据科学团队,我们进行了一个为期两周的快速冲刺。我们采用了 Finn 最难的提示,并将其与我们帮助他们通过 Claude 确定的提示进行了比较。他们在最初的两周内看到了非常好的结果。如此之多,以至于我们进行了大约两个月的冲刺,我们基本上是在微调和优化他们所有的提示,以充分发挥 Claude 的潜力。在此结束时,他们能够查看所有基准测试,并看到 Anthropic 的表现优于当前的 LLM。值得注意的是,他们采用基于分辨率的定价模式,所以每个人都有动力让模型真正提供帮助并帮助客户解决问题,而不是成为一个推诿机器,您知道,我们可能都经历过。所以在这两个月结束时,他们决定继续与 Anthropic 合作。他们推出了它,您可以阅读它,它叫做 Finn 2。我认为一些指标确实令人瞠目结舌,例如,它可以解决高达 86% 的客户支持量,开箱即用 51%。我们的支持团队考虑了许多不同的选项,他们实际上也采用了 Finn,并且看到了非常相似的解决率,但也使其更人性化。所以他们我认为通过我们的模型,可以有更多的人性化元素。所以他们可以进行语气调整、回答长度调整,并且在政策意识方面也做得很好,比如退款政策。所以解锁了一些新功能,我们很高兴与他们合作,因为他们在这个领域继续前进,成为领导者。是的,在另一个独立的说明中,我最近看到的一个事情是 Claude 在 Twitter 上扮演着一些治疗师的角色,很多人都这样。我一直觉得这是一个有趣的例子,说明了它的个性是如何表达的。呃,酷,让我们进入一些我们在该领域看到的最佳实践和错误。在上市团队方面,首先是测试和评估。我敢肯定,这两个词今天和明天都会被提及很多次。我们看到客户在处理一些典型的常见错误。第一个是他们构建了一个非常强大的工作流程,他们花了很多时间构建了一些架构,然后他们说,好吧,现在我们需要评估它,让我们构建一些评估。这实际上并不是实践中的工作方式,因为您的评估实际上是指引您走向完美结果的东西。您不能在没有评估的情况下构建整个工作流程,可能从一开始或不久之后。所以,您知道,有时客户由于数据问题而无法设计他们的评估。您可以使用 Claude 来清理它,进行数据协调。或者他们只是,您知道,过于相信直觉,也许他们运行了几个查询,他们说,嘿,看起来不错,对吧?他们是否真的在代表性样本上进行了测试?您是否有足够的样本来说明您所看到的东西在统计上是显著的?或者您是否会,您知道,运行一百件事,当它进入生产环境时,然后会有大量的异常值,因为您实际上没有正确预测客户将向模型提出的问题?例如,我挑战您将您的用例视为这种潜在空间。让我们来看一下幻灯片左侧的这个图表。当您使用可以应用于模型的不同函数来探索潜在空间时,例如提示工程、提示缓存之类的东西。您基本上是在改变您在潜在空间中的位置,在吸引子状态之间移动。您最终想要找到一个优化的点,但您并不知道它在哪里。例如,如果您更改指令,不知道 Transformer 的注意力机制最终会产生什么不同的结果,可能不那么高效。所以唯一真正知道这一点的方法就是通过经验,那就是通过评估。所以我认为这就是为什么评估如此重要,而许多人却迟迟没有真正理解这一点。在许多方面,我实际上告诉客户,评估是您的知识产权。如果您想在一个领域具有竞争力,您就需要能够通过导航潜在空间并比任何人都更快地找到吸引子状态来击败竞争对手。所以,您如何做到这一点的一部分是,首先设置某种遥测来回溯测试,理想情况下是预先设置的架构,但您知道,您应该投资于它。设计代表性的文本案例。让我们说您正在处理那个客户支持代理评估。您知道,当您为它构建网站时,可能会有一个孩子来到您的网站。他可能会问一些疯狂的问题,比如,我该如何?在 Minecraft 中杀死僵尸?这与您的产品完全无关,但仍然是可能的。所以您可能应该在您的评估集中包含这样的愚蠢例子,以确保您的模型实际上以适当的方式处理响应或重新路由问题等。好的,继续下一个。识别指标。很多时候,您知道,存在这个智能成本延迟的权衡三角形,人们正在其中移动。大多数或组织可以优化其中一两个方面,但很难同时满足三个,至少目前是这样。但实际上,这种平衡应该提前定义,您应该知道,对于您的特定用例,您将在这些事情之间进行权衡。所以,让我们再次以客户支持用例为例。您希望您的客户在 10 秒内得到回复。超过 10 秒,我认为已经有研究表明,客户很可能会直接退出页面,然后他们将无法获得回复,然后他们可能会向朋友抱怨您的产品。而如果您正在看一个金融研究分析师代理,您可能不关心它需要 10 分钟才能得出实际的回复,因为之后做出的决定非常重要。例如,这是资本分配。所以决策的风险和时间敏感性应该真正驱动您的优化选择。您知道,更多的指令集可能导致更长的延迟,但性能更高。其他事情是用户体验可能很重要。所以再次以客户支持代理为例,因为我们谈到了 Intercom,您可以有不同的方法来规避这 10 秒到 15 秒。具体来说,您可以添加一个弹跳的思考框。您可以暂时将客户发送到另一个网页,让他们阅读一些内容。您知道,有很多方法可以分散注意力并推动这些界限。但您仍然需要知道那个重要的指标是什么,并且需要相应地进行优化。最后是微调。很多人,您知道,我参加这些电话会议,他们说,哦,我们想做微调。我说,哦,又来了。微调不是万能药。它是有成本的,而且大多数人都没有意识到这个成本。成本通常是您在对模型进行脑部手术,因此在您微调的领域之外的其他领域,其推理可能存在局限性。所以我的建议是,先尝试其他方法。大多数人甚至在尝试微调时都没有评估集。他们需要提前有一个明确的成功标准。就像只有当我们无法在特定智能领域获得它时,我们才会进行微调。不要试图提前解决所有问题。微调能力之间的差异以及微调领域中失败与成功的广泛差异意味着您应该能够证明微调的成本和工作的合理性。例如,与我们一起进行微调的团队,您应该能够证明这种差异的合理性。所以,在最佳实践方面,您知道,您不想让微调拖慢您的速度。您不想说,哦,只有当我们能够微调我们的模型时,我才会转换这个语言模型用例。就像不不不,去追求它,然后意识到您需要进行微调,然后您就可以替换微调的模型,然后先探索其他方法。而且有很多不同的方法,您知道,Anthropic 以及其他公司今天都在研究这些方法。我想在我们结束时快速展示其中一些。所以,我不会一一介绍,但除了基本的提示工程,虽然它确实非常重要,但还有许多不同的功能或架构,它们将极大地改变您用例的成功。例如,您可能不需要牺牲模型的智能,如果为了通过 P 缓存来加快速度,从而降低 90% 的成本并提高 50% 的速度。或者上下文检索将极大地提高您的检索检索机制的性能,从而更有效地将信息馈送给模型,从而减少处理您提供的所有指令集的时间。所以有很多东西可以应用,其中一些甚至是开箱即用的,比如引文。还有一些架构决策,比如代理架构。您知道,我的同事 Barry 明天将发表演讲,他将对此有很多话要说。但这基本上就是这样了。非常感谢您的时间。在此次聊天之后,我们将在剧院休息室进行后续提问。您还有什么想说的吗,Joe?不,非常感谢。 [掌声] [音乐] 好的,女士们先生们,请再次欢迎来到舞台的领导力轨道会议主持人 Peter Humphrey。好了,各位,再次感谢 Alexander 和 Joe 分享了关于 Claude 的应用 AI 的所有见解。Anthropic 确实在做很多了不起的事情。有多少人经常使用 Claude?我先说,我自己。好的,太好了,我们有很多。所以这是一个非常激动人心的下午。我们有案例研究,我们谈论了评估框架,我们谈论了代理的可观测性,我们谈论了自管理 AI 基础设施。我特别对最后一个感兴趣。再次感谢 Alexander 和 Joe。所以我们将休息 30 分钟,会议将于下午 4 点在这里继续。再次,和以前一样,如果您想与演讲者交流,或者谈论志同道合的话题,来自上一个环节的会议,请找到演讲者在三个问答区域中的一个。再次,一个在这里的剧院层,一个在楼梯的最底部,就在着陆处,还有一个藏在楼梯后面。在休息期间,花一些时间去赞助商展位。还有更多的咖啡和零食。再次,我们的赞助商有一些非常棒的产品、技术和服务来帮助您踏上旅程。下午四点再见。非常感谢。 [音乐] [音乐] [音乐] [掌声] [音乐] [掌声] [音乐] [掌声] [音乐] [掌声] [音乐] [掌声] [音乐] [掌声] [音乐] [掌声] [音乐] [音乐] [掌声] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [掌声] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [掌声] [音乐] [音乐] [掌声] [音乐] [音乐] [音乐] [音乐] [掌声] [音乐] [掌声] [音乐] [掌声] [音乐] [掌声] [音乐] [掌声] [音乐] [音乐] [掌声] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [音乐] [掌声] [音乐] [音乐] [音乐] [音乐] [音乐] [掌声] [音乐] [掌声] [音乐] [掌声] [音乐] [掌声] [音乐] w [音乐] [掌声] [音乐] [掌声] [音乐] [掌声] [音乐] [掌声] 女士们先生们,请再次欢迎领导力轨道会议主持人 Peter Humphrey 登上舞台。好了,各位,再次感谢。您只需要再见我一次,您就走到了最后冲刺阶段。它变得真实了,我们快到了。话虽如此,我们最后的会议环节要短一些,只是为了让您轻松一下。但它同样令人兴奋。我们将有人谈论 AI 和招聘,这是我最喜欢的话题之一,我对此非常兴奋。然后当然,我们还有其他演讲者谈论构建 AI 平台团队和组织结构。然后我们将以检索增强生成和数据管道的非常特别的杰出演讲者结束。为此,请加入我,鼓掌欢迎 Signal Fire 的董事总经理 Heath Black。谢谢。 [掌声] [音乐] 大家好,我是 Heath Black,我是 Signal Fire 的产品董事总经理。让我们快速退一步,问一下我为什么在这里?所以,在我涉足科技行业之前,我实际上去攻读了爱尔兰文学硕士学位,这是所有东西中最好的。我的两个儿子都以爱尔兰作家命名。您将看到这实际上是如何融入演示文稿的,稍后您会看到。当您获得爱尔兰文学学位时,您必须有创意地使用它。2009 年,我开始涉足一些初创公司,并帮助一家名为 Chirpify 的公司发布了有史以来第一个对话聊天机器人。然后我去了一家名为 MZ 的公司,我们试图构建一个 Reddit 的竞争对手,但要好得多。然后我实际上去了 Reddit,在那里我从事了实验性业务线和信任与安全工具。我跟随这些经验去了 Meta,在那里我发布了 Meta 的第一个助手,它叫做 M,它生活在 Messenger 中。然后我成为了他们 Ray-Ban 眼镜 AI 助手的第一个产品经理。但现在我在 Signal Fire 担任产品董事总经理。那么 Signal Fire 做什么?我喜欢说 Signal Fire 实际上是第一个像科技公司一样建立的风险投资公司。我的意思是,就像你们所有人一样,在发布产品之前,您会出去采访客户,找出您是否为他们构建了正确的东西。Signal Fire 采访了 500 位创始人,以了解让他们夜不能寐、让他们整天抓狂的事情。然后我们完全围绕这些问题构建了 AI ML 工具和我们的投资组合成功团队。进入市场、招聘、建立领导技能以及发布产品的能力。但今天,我们实际上要谈论一些我们从我们的专有 AIML 平台 Beacon 中学到的东西。Beacon 跟踪超过 6.5 亿名员工,20 或 8000 万家公司,以及 2 亿个开源项目。利用所有这些信息,我们构建了各种专有排名系统和市场洞察,然后我们可以利用这些来为我们的公司提供动力,以便我们能够以初创公司的速度前进,然后支持我们投资的公司。今天的重点是,我们将利用 Beacon 的一些数据来弄清楚如何筛选合适的人,在合适的位置找到他们,抓住合适的时机,最后用正确的叙述来完成他们。所以,让我们先从过滤器开始。当我想到招聘时,我将其视为我将应用于团队成员以及我想在团队中的人的过滤器。Beacon 为人们提供了在搜索时应用这些过滤器的工具。但现实是,如果您不知道需要应用哪些过滤器,您就找不到合适的人。所以,这里有一些我们在这十年左右的时间里看到的有趣趋势,它们改变了我们过滤的方式。我们看到 AI 初创公司的招聘工程师数量急剧下降,他们没有博士学位或名校的工程师比以往任何时候都多。2015 年,27% 的工程师招聘来自顶尖学校,16% 拥有博士学位。2023 年,这些数字分别为 15% 和 7%。在此期间,这两项数字都下降了约 50%。您可能会说,这听起来不对。对于像研究科学家这样的职位呢?他们必须有博士学位,对吧?而且,您并不完全错误。现在约有 40% 的研究科学家拥有高级学位。这不是博士学位,仅仅是高级学位。即使如此,今天担任研究科学家职位的人中,它还不到一半。从我的角度来看,这并不令人意外,因为自 2015 年以来,市场发生了一些微妙的变化。2015 年,我们确实专注于 ML 研究方面,基础方面。而今天,很多工作都是关于将它应用于模型的实际世界使用。它是 ML Ops,产品,像软件体验一样,理解用户如何与您正在构建的东西进行交互。随着凭证的转变,我们也看到了这段时间内非常有趣的员工流动。如果您看左边,历史上,很多 AI 人才都集中在这些公司,谷歌、优步、Meta、苹果。而在这一时期,他们已经转移到我们称之为 AI 联盟的九家公司。右边的公司在此期间看到了大量人才的集中。这很有趣,因为我们去年生成了这份报告,不久之后,Inflection 被收购了。我希望我们从中获得的一个关键信息是,市场在不断变化。所以我们必须不断评估市场正在发生变化的地方。有趣的是,屏幕左边的所有公司现在都在激烈地争夺来自屏幕右边的人,而不是反过来。但关键不仅仅是知道人们要去哪里,还在于他们来自哪里。这张图表显示了不同 AI 联盟公司之间的净员工流动。可以说,在顶部,OpenAI 从 DeepMind 获得了积极的人员流动,而 Cohere 实际上是负增长。了解人们来自哪里以及他们要去哪里,对于确保您在寻找像您这样的人来组建团队时筛选合适的人至关重要。所以,这里的要点是,工作经验一直很重要,但现在它远远超过了教育,成为您应该关注的主要方面。不要仅仅依赖某人的凭证。您应该关注他们所做的工作。对于新员工,您仍然可以关注他们的工作。他们的开源贡献是什么?他们在课堂外构建了什么?现实是,经验和您正在构建的东西比您获得学位的地点更重要。其次,您应该问自己,我需要为我正在招聘的职位招聘一名博士研究员,还是一个有经验的优秀工程师就足够了?第三,您实际上应该考虑从您的职位发布中删除学术要求,或者也许让它们变得软性,可以说,因为这将确保您的顶层漏斗获得您需要经验的人,而不是教育。现在让我们来谈谈地点。我敢肯定,很多人都看到了 Twitter 上的辩论,旧金山显然已经死了。所以我们想知道,它是吗?有趣的是,答案是否定的,它没有死。旧金山占所有工程师初创公司的大约 29%。现在,这比 2013 年的高峰期(33%)略有下降,但自 2021 年以来又开始回升。纽约和西雅图也令人印象深刻,因为它们在此期间的市场份额翻了一番。如果我们放大来看大型科技公司,50% 的大型科技工程师仍然居住在旧金山湾区。但具体到 AI 呢?旧金山仍然领先。20% 或 35% 的所有 AI 工程师都居住在旧金山。西雅图约占 22%。纽约约占 10%。所以旧金山占这两个城市总和的比例还要高。但如果您实际上看看这张幻灯片,并将其与我之前幻灯片中的数据进行比较,您会发现这些市场都远远超出了它们的平均水平,在 AI 招聘和 AI 人才方面。在之前的幻灯片中,它们的数量较少,而在这张幻灯片中,它们的数量要多得多。所以人才今天正集中在这三个关键市场。这对我来说并不奇怪,因为旧金山占所有早期 AI 初创公司融资的近 38%。有趣的是,旧金山仅占美国所有早期融资总额的 26%。所以旧金山不仅在 AI 人才方面表现出色,在流向 AI 公司的资金方面也表现出色。所以,这里的要点是,Twitter 并不能决定一个市场是否已经死亡。数据可以。在我们今天生活的这个高度分散的世界里,地点仍然很重要。旧金山、西雅图和纽约是今天 AI 人才的首选地点。所以您的工作是关注地点和融资市场,看看人才和资本的流向,作为筛选和寻找合适人的另一种方式。现在让我们来谈谈时机。找到合适的人,时机和才能一样重要。在机场,在我来这里的路上,我只差几分钟就能赶上我的航班,或者像查理·布朗一样坐在那里。一秒钟的几分之一秒,就是将球打到右外野的全垒打或界外球的区别。

在看台方面,对我来说,时机意味着两件不同的事情。首先,它意味着在人们最有可能离开的时候找到他们。其次,它意味着找到那些真正会加入你公司在你这个阶段并能提升你团队的人,以适应你今天的状况。所以,让我们来谈谈时机。我们分析了一些常春藤盟校公司,以了解他们的留任率。如果你在看这个幻灯片,我很抱歉,如果这些信息让你感到冒犯。但Anthropic公司以约66%的四年留任率领先,而Perplexity公司则徘徊在44%或43%左右。这只是这个不断变化的世界的一小部分,但现实是,了解留任率有助于你了解何时可能有人会回复你发送的消息。可以说,它有效地创造了一个“挖角能力”分数,即你吸引那个人的能力。但除了留任率,我们还研究了不同世代的行为。他们在2023年,近27%的Z世代离开了他们的工作。如果你将其与X世代进行比较,这实际上是X世代的两倍多。如果你看看毕业四年后,Z世代大约有2.2份工作,而X世代有1.1份。所以,其中一些与Z世代的晋升速度较慢有关。其中一些可能导致了晋升缓慢,其中一些与那个时期的裁员市场有关。但如果问我,很大一部分原因在于人们愿意承担风险并相信自己。Z世代喜欢这种风险。但这不仅仅是留任率,也不仅仅是你出生的世代。你需要知道人们在不同公司工作的时间。1973年在纽约尼克斯队打球,与2018年在纽约尼克斯队打球是非常不同的。其中一支球队举起了总冠军奖杯,而另一支球队则创下了他们队史最差的记录。因此,作为Signal Fire,我们构建了一个很棒的工具,我们称之为“历史构成”,它实际上展示了我们投资的所有初创公司,以及他们在不同时间点欣赏的公司快照。他们在那时期的组织结构是什么样的?是哪些销售领导者将他们从100万带到了1000万?当他们发布我试图超越的关键产品时,他们团队的前三名工程师是谁?这些事情将帮助你识别人们的风险特征。他们会加入你这个阶段的公司吗?它将帮助你理解他们的动机,但它也将帮助你理解他们是否是潜在的“十倍增长者”,而这是你需要做的,才能将你的公司推向下一个阶段。所以,这里的要点是,你必须从外展和影响的角度来理解时机。你应该知道你的竞争对手或你最欣赏的公司何时可能失去其他人。你应该跟踪在这些公司工作的人的个人资料,看看在那段时间里是否发生了变化。研究不同世代或人口群体的模式将帮助你了解他们如何换工作。最后,你需要知道人们何时加入和离开公司,因为这将帮助你识别你的“十倍增长者”,并帮助你识别可能在你这个阶段加入公司的人。现在,这就是我终于能运用我的文学学位的地方了。我最喜欢的作家之一库尔特·冯内古特有一个关于故事形状的精彩可视化。如果你看左下角,X轴是开始和结束,Y轴是导致好运的不幸。所以底部是弗兰兹·卡夫卡的《变形记》,格雷戈尔·萨姆索醒来变成了一只虫子,一切都变得糟糕。右上角是一个人在街上走,他掉进了一个坑里,但他努力走了出来。但我最喜欢的是灰姑娘,她在这里的右下角。她的生活开始时很糟糕,她的姐妹们很邪恶,她必须做很多工作,然后一些魔法发生了,她被邀请参加舞会,遇到了一个英俊的男人,他们坠入爱河,然后发生了什么?钟敲响了12点,她从悬崖上掉了下来。但随后,通过一系列幸运的事件,生活走向了永恒的幸福。现在,我并不是说你需要宣扬你的公司所处的或经历过的绝望的深渊,但你确实需要理解你所取得的胜利,你今天为何在此,你的弧线将走向何方。原因在于,历史上薪酬和股权是我们用来叙事的两个组成部分,但我们不能仅仅依赖它们了。为什么?从2022年11月到2024年11月,我们看到平均科技工资增长了1.6%,而授予的股权数量却急剧下降。但对于在座的各位,我有一个非常坏的消息:对于人工智能来说,情况甚至更糟。人工智能工程师是今年的热门选择,他们比其他工程职位享有5%的薪资溢价和10%到20%的股权溢价。所以,本来就很昂贵的东西对我们来说变得更加昂贵了。因此,如果我们完全依赖我们的叙事,我们就是在依赖我们可能负担不起的东西。所以,薪资作为唯一的卖点必须消失。股权是我们过去用来吸引人们加入我们公司的其他东西,但我们看到行使投资股票的人数急剧下降。在2024年第二季度,33%的人行使了他们已归属的股票,这比几年前的55%有所下降。其中很大一部分是由对估值可能过高的担忧驱动的,对行使这些股票的流动资本成本的担忧,以及对市场变化的担忧,而市场每三周就会在人工智能领域发生变化。股权不能成为我们唯一依赖的东西。我们必须达到一个点,我们不仅仅关注金钱和股权。我们必须拥有像与创始人紧密合作的紧密环境、协作团队、速度和缺乏阻碍来完成工作的能力。一个宏大的使命,能够发展你的思想和职业机会,爆炸性的市场和解决复杂问题的能力。你需要了解所有这些对你的公司来说意味着什么,才能不完全依赖薪资和股权作为叙事。总而言之,在一个如此多的公司都在同一个工程池里捕鱼的世界里,招聘数据可以给你带来优势。这些只是一些例子,但就像你使用数据来构建你的产品一样,包括你的模型和对该产品的分析,你也应该评估数据来构建你的团队。你的团队是你拥有的最有价值的产品。我们看到的是,去资格化正在发生,所以你需要相应地进行筛选。地点仍然很重要,所以要关注人们的去向。数据可以帮助你确定联系人们的合适时机,并帮助你确定人们在不同公司工作的时间。所有这些都将帮助你构建一个更好的叙事。所以,如果你能筛选,如果你能把握时机,如果你能找到合适的位置,并且你能有一个好的叙事,你就会做得更好。如果你在另一边,你正在找工作,你应该知道你欣赏的人去哪里,不仅仅是公司,而是那个领域。你应该观察他们在那里待多久。这将帮助你了解他们如何被对待,他们是否认为这个领域会富有成效,然后最后,你应该知道你在你的职业生涯弧线中想要什么。我稍后会在大厅,感谢你的[掌声][音乐]时间。我们的下一位演讲者是领英生成式AI工程经理,他将分享构建其生成式AI平台的见解。请大家热烈欢迎他来到舞台,肖芳[音乐]王。下午好,各位。很高兴能在这里分享我们构建领英生成式AI平台的历程。我的名字是Al,是生成式AI基础部门的经理。我再试一次,好的。在今天的演讲中,我将首先分享我们构建这个平台的历程,特别是我们为什么构建它,如何构建它,以及我们构建了什么。之后,我们将讨论一些关于为什么这个平台对当今的生成式AI世界至关重要的思考过程。希望之后您会同意我,这是您公司中的关键组成部分,您也想构建这个团队。我想分享一些关于如何构建这样一个团队,如何招聘这样一个团队的技巧。在最后,我们将分享一些关键的收获和经验教训。在我们深入探讨这个应用程序平台之旅之前,我认为首先谈论生成式AI产品体验很重要,因为这本质上是我们的平台所支持的。早在2023年,领英就推出了第一个正式的生成式AI功能,称为“协作文章”。这是一个相当直接的生成式AI功能,如果我们以标准方式思考的话,因为它是一个非常简单的提示字符串类型的应用程序。我们利用ChatGPT,我的意思是,我们利用GPT-4模型来创建平台上的长篇内容文章,并邀请我们的会员评论。在这个阶段,我们的团队帮助构建了一些关键的后台组件,包括集中访问模型的网关,用于提示工程的Python笔记本。但当时我们实际上有两个不同的技术栈来服务在线阶段的体验。我们使用Java,后端使用Python。我们当时不会称之为平台。很快我们就意识到,这种简单的方法存在一些局限性,特别是它缺乏将我们丰富的数据注入产品体验的能力。然后在2023年中期,我们开始开发第二代生成式AI产品,内部我们称之为“Copilot”或“Coach”。在这里,我们展示了领英上一个流行的体验。基本上,它会查看你的个人资料和职位描述,然后使用一些检索增强生成(RAG)过程,为你提供个性化的匹配度建议。在这个阶段,我们开始构建一些平台能力,特别是在我们平台的中心,我们构建了基于流行的编排框架的Python SDK,用于编排我们的模型调用,它还提供了与我们大规模基础设施集成的关键价值。在这个SDK中,我们的开发人员可以轻松地组装应用程序。我们开始统一技术栈,因为我们意识到将Python提示转换为Java世界是非常昂贵的,更不用说在此过程中出现的错误了。我们开始投资于提示管理或提示的“真相之源”。在这个阶段,这是一个子模块,用于帮助开发人员对他们的提示进行版本控制,并为他们的元提示提供一些结构。我最想强调的关键部分是“会话记忆”。这是帮助跟踪大型语言模型交互和检索内容,然后将这些内容注入最终产品的基础设施。它将帮助我们构建这种会话式的机器人。现在,聚焦到今年,实际上在去年,我们推出了有史以来第一个真正的多代理系统,称为“领英招聘助手”。这是一个多代理系统,旨在帮助我们的招聘人员高效地完成工作,特别是它自动化了招聘人员通常需要手动完成的几项任务,例如发布职位,评估数百名候选人,然后联系他们。我们的平台也开始演变成代理平台。从框架方面,我们将Python SDK的支持扩展到一个更大规模的分布式代理编排层。它将处理分布式代理执行,并处理更复杂的场景,如重试逻辑和流量转移。对于构建代理的人来说,我认为技能或API是代理的一个关键方面,因为我们期望代理执行某些操作。我们在此阶段的一项投资是围绕技能注册表。基本上,我们有一套工具来帮助我们的开发人员将他们的API发布到这个集中的技能注册表中。这个技能注册表可以处理技能发现问题和技能调用问题。所以,在你的应用程序中,调用API来执行某些任务实际上非常容易。我们在此阶段投资的另一个关键组件是内存。除了会话记忆,我们将它的能力扩展到体验记忆。本质上,它是一个内存存储,用于从代理和用户之间的交互中提取、分析和推断上下文知识。我们还将内存组织成不同的层,包括工作记忆、长期记忆和集体记忆。这可以帮助我们的代理意识到周围的内容。最后,在这个阶段,我们也意识到可操作性非常重要,因为代理,定义代理的一个关键方面是自主性,对吧?因为代理可以决定它可以调用什么API,它需要调用什么大型语言模型。所以,实际上很难预测它的行为。因此,我们开始投资于可操作性,特别是我们构建了基于OpenTelemetry的内部解决方案,以非常低的粒度跟踪遥测数据,这样我们就可以使用这些数据来重放代理调用。我们还在其之上添加了实际的分析层,这样我们就可以用它来指导我们代理系统的未来优化。让我们把为这个平台构建的所有组件放在一起。我们可以将其分为四个层,包括编排、提示工程工具和技能调用、内容和内存管理。当然,这并不是领英生成式AI生态系统中的所有内容。此外,我们还有姊妹团队构建模型层,例如微调开源模型,负责任的AI层,以确保代理按照我们的政策和标准行事,以及托管这些模型的AI平台或机器学习基础设施团队。这个生成式AI平台的关键价值主张实际上是成为这个复杂生态系统的统一接口。因此,我们的开发人员在构建他们的应用程序时,不必一定了解所有这些单独的盒子。相反,他们可以利用我们的平台来快速访问整个生态系统。例如,在我们的SDK中,开发人员只需更改代码中的一个参数,就可以从OpenAI模型切换到我们的内部模型。当然,他们仍然需要进行提示工程,但这大大降低了基础设施集成阶段的复杂性。最后但同样重要的是,因为这是一个集中式平台,它提供了一个强制执行最佳实践和治理的地方。因此,我们可以确保我们的开发人员在构建应用程序时既高效又负责任。正如你从我们的旅程中看到的,我们实际上是一点一点地构建这个平台,然后这个平台开始出现。如果我们退一步思考,我们真的需要这个平台吗?特别是这个领域有很多供应商产品,我们应该购买还是构建?为什么我们要购买或构建?这里有一些想法。简短的回答是肯定的。原因在于,我们觉得生成式AI与传统AI系统相比,是全新的AI系统。在传统AI系统中,AI模型优化阶段和模型服务阶段之间有一个明确的界限。AI工程师和产品工程师可以在两个不同的技术栈中运行。他们通常不需要在同一个代码库上工作。但在生成式AI系统中,我们看到的是优化阶段和服务阶段之间的界限消失了。基本上,每个人都是一个能够优化整体系统性能的工程师。这实际上给公司带来了新的工具和最佳实践方面的挑战。基本上,我们认为这些生成式AI系统或代理系统是复合AI系统。这里我们借用了伯克利AI研究实验室的定义。复合AI系统可以定义为一个系统,它通过多个交互组件来解决AI任务,包括多个模型调用、检索器或外部工具。正如你所看到的,这实际上跨越了AI工程师和产品工程师的技能。我相信这个生成式AI应用平台正在努力弥合这一差距。总而言之,我们相信这个平台对你的成功至关重要,因为它能够弥合这两类工程师之间的技能差距。好的,假设你想在你的公司构建这个平台,以及如何招聘?这是一个我经常听到的问题。我基本上查看了我的优秀工程团队,并提取了这些顶尖工程师的所有关键资质,并将所有资质放在这里。这个团队的理想候选人是一位强大的软件工程师,能够构建基础设施集成。他们拥有良好的开发者PM技能来设计界面。理想情况下,他们拥有AI和数据科学背景,能够理解最新的技术。他们是那些能够从最新技术中学习的人,但同时他们也是动手能力强的。不幸的是,很难找到具备所有这些资质的候选人。如果你找到了,他们可能比独角兽更有价值。现实情况是,我们在招聘中做出了多重权衡。这里有一些我们遵循的原则,而且它们实际上相当有效,我想在这里分享。在核心技能方面,我们通常优先考虑更强的软件工程技能而不是AI专业知识。这可能有些争议,但我们可以讨论,如果你有兴趣的话。第二,我们不是为了经验或学位而招聘,而是为了潜力。因为这个领域发展如此之快,大多数经验可能已经过时了。万一你找不到一个具备我们这里展示的所有资质的工程师,我们解决这个问题的方式是招聘一个多元化的团队。例如,在我们的团队中,我们有一些全栈软件工程师,我们有数据科学家,我们有AI工程师和数据工程师。我们还有一些来自顶尖研究大学的应届毕业生,以及一些来自创业背景的人。然后我们将他们组合在一起,投入到项目中。我们看到的是,基于这些合作,这些优秀的工程师开始在新项目中学习新技能,并且很快他们就开始成长为这些理想的候选人。最后,我想强调的是批判性思维。我们团队会议中一个持续的话题是,无论我们现在构建什么,它将在一年内甚至不到六个月内过时。我们不断评估最新的开源软件包,与供应商交流,并更主动地淘汰我们的解决方案。好的,让我们来谈谈一些关键的收获,特别是关于技术栈的选择。如果可能,我们强烈推荐Python。我们从Java和Python开始,内部有一些来回的争论,但最终我们选择了Python,我认为这是一个正确的选择,特别是大多数研究和开源都在这个领域。根据我们的经验,它在您想要构建的平台关键组件方面也是可扩展的。第一个是提示的“真相之源”。提示在某种程度上就像传统的模型参数,您需要一个非常健壮的系统来版本控制您的提示。这对于操作稳定性来说非常关键,您不希望意外地将提示添加到生产环境中,并看到一些非常糟糕的副作用。第二个关键组件是内存。我认为在今天的会议上,我的意思是今天的演讲,有人已经谈过了。内存是注入您丰富数据到代理体验中的一个关键组件。最后,在代理时代,一个关键的新组件是我们正在构建的,是将我们的API提升为可以从代理轻松调用的技能。这样您就可以构建一些周围的工具和基础设施来支持这种需求。好了,让我们来谈谈如何扩展这个解决方案并获得广泛采用。根据我们的经验,与其一开始就试图构建一个功能齐全的平台,不如尝试解决眼前的需求。例如,我们从一个简单的Python库开始支持编排,然后我们开始扩展到我们在这里看到的所有组件。第二,专注于基础设施和可扩展的解决方案。在领英,我们通过利用我们的消息传递基础设施作为内存层,取得了相当成功的经验。它既经济高效又可扩展。最后,专注于开发人员体验。归根结底,这个平台是为了帮助开发人员尽可能高效。他们的采用是成功的关键。如果您能设计这个平台,请专注于如何将您的技术与他们现有的工作流程对齐,这样可以简化采用并更成功。我们实际上有很多技术细节。如果您有兴趣,请查看领英上我和Cake s的工程博客文章。谢谢您的关注,如果您有更多问题,我很乐意在演讲结束后回答。[掌声][音乐]女士们先生们,请欢迎舞台,Contextual AI的CEO兼联合创始人Da Kila。[音乐][掌声]大家好,谢谢大家的光临。我是今天的最后一个演讲者。我叫Da Kila,是Contextual AI的CEO,我来这里是为了和大家谈谈生产环境中的RAG,特别是RAG代理。我将分享我学到的一些经验。我的背景是AI研究,但之后我成为了一家专注于企业的AI公司的CEO。所以我想分享一些我的学习经验,希望对大家有所帮助。所以,如果你看看企业AI,如果你在这个领域工作,你可能会注意到我们面前有一个巨大的机会。每个人都想抓住这个机会。麦肯锡估计,全球经济将增加4.4万亿美元的附加值。所以我们有一个巨大的机会,但同时,如果你看看企业里正在发生的事情,你会看到很多挫败感。这可能甚至对在座的一些听众来说也是如此。如果你是AI副总裁,你现在可能承受着一些压力。就像,投资回报在哪里?我们投入了这么多钱在AI上,但它到底把我们带向何方?我们从中得到了什么吗?所以,福布斯有一个有趣的研究,表明只有四分之一的企业真正从AI中获益。为什么会这样呢?这感觉有点像一个悖论。为了解释它,我们可以看看一个你可能熟悉的悖论,它叫做莫拉维克悖论。它来自机器人学。在机器人学中,他们发现让机器人打国际象棋比让机器人打扫房子或自动驾驶汽车要容易得多,这让他们非常惊讶。所以,这里的悖论是,对计算机来说,看起来困难的事情实际上比你预期的要容易得多,而看起来容易的事情实际上却要困难得多。所以,现在在企业AI领域,特别是关于上下文,正在发生一些非常相似的事情。一方面,我们有这些令人惊叹的语言模型。你已经看到了,这就是我们都在这里的原因,因为我们看到了这场革命在我们眼前发生。所以,语言模型可以比大多数人更好地生成代码,它们可以比我们大多数人更好地解决数学问题,而我们相当聪明。所以,它们能做到的事情真的很了不起。但它们仍然非常挣扎的一件事,也是我们人类毫不费力就能做到的事情,就是将事物置于正确的上下文中。所以,我们人类建立在我们的专业知识之上,建立在我们多年来形成的直觉之上,特别是如果我们是专家。这是我们很容易做到的事情,就是将事物置于正确的上下文中,在正确的情况下,这样你就可以理解你正在解决的信息或问题。所以,我认为这是解锁AI投资回报的关键观察,这个“上下文悖论”。原因在于,我们现在在这里,在左下角。所以,我们主要关注便利性。我们有通用助手,它们非常有用,主要是如果你懒惰的话,它们可以帮助你更快地解决问题。但你真正想达到的是差异化价值。如果你是一家企业,能够让事情更方便是很不错的,你可能会提高人们的效率和生产力,这很棒。但你想达到的是业务转型的理想状态。这就是所有CEO可能告诉你的,作为AI副总裁,比如,我想改变我的整个业务,我该怎么做?所以,要达到那种差异化价值,那就是你想去的地方。但问题是,你在这个轴上爬得越高,你在上下文轴上走得越远。所以,你需要更好地处理你企业内部存在的上下文。那么,我们该怎么办呢?所以,这个观察就是我创办我目前担任CEO的公司Contextual AI的原因。我们两年前开始尝试弥合这一差距。我们在此过程中学到了一些经验,我想与你们分享,希望它们也对你们有用。所以,第一个观察是,语言模型很棒,但通常它们只是一个更大系统中的20%。所以,如果你有一个企业AI部署,通常意味着它是一个RAG系统。所以,我认为这里每个人可能都听说过RAG。RAG是我最初在Facebook研究部门工作时与我的团队一起开创的。所以,RAG确实是让生成式AI处理你的数据的标准方法。所以,现在经常发生的是,一个新的语言模型出来了,每个人都说哇,新语言模型,太棒了。每个人都开始只考虑语言模型,但很少有人真正考虑语言模型周围的系统。而这个系统需要解决问题。所以,你可以有一个相对平庸的语言模型,但有一个惊人的RAG管道围绕它,这会比一个惊人的语言模型加上一个糟糕的RAG管道要好得多。所以,这里的基本观察或教训是,你应该考虑系统,而不是模型。模型只是系统的一小部分,而系统是解决问题的那个东西。下一个观察是,如果你在一个企业里,专业知识就是你的燃料。所以,你作为一家企业想要做的一件事就是解锁所有这些专业知识。所以,你拥有公司里所有的机构知识,你如何将其提取出来?所以,一种尝试这样做的方法是使用这些通才型的通用助手,但很难让他们与你公司里的人的专业知识相匹配。所以,理想情况下,你想做的是专业化,这样你就可以更好地捕捉专业知识。所以,在我公司,我们称之为“专业化优于AGI”。AGI很棒,有很多用例。如果你真的想解决一个非常困难的、高度领域特定的问题,你了解用例,你想为它进行专业化,你会走得更远。所以,这可能与更广泛的兴趣有些反直和。大多数人对AGI更兴奋,但用专业化解决实际问题更容易。下一个教训是,在企业规模上,你的护城河。所以,如果你认为一个公司真正是什么,是人吗?可能有点。但随着时间的推移,公司真正是什么,或者是什么让公司成为公司,是它的数据。因为即使是人也是暂时的。所以,公司拥有的数据,从长远来看就是公司。所以,现在作为一家企业,你需要考虑如何解锁所有这些潜力。所以,我们经常看到的一个大问题是,企业认为你需要清理数据,清洗数据,并投入大量时间使你的数据对AI可用。但你真正想做的是确保AI能够大规模地处理你的嘈杂数据。做到这一点非常困难。但如果你成功地做到了,那就是你获得差异化价值的方式,那就是你获得护城河的方式,因为数据造就了你的公司。所以,数据就是你的护城河。一个观察,这是一个我们学到的硬道理,我认为你们中的许多人可能已经学到了,或者你们即将发现,如果你在你的旅程中更早的话,那就是试点很容易。现在构建一个演示并不难。如果你想构建一个RAG系统,你选择一个框架,放入一些文档,你就有一个可行的解决方案,这很棒。你把它交给你的10个用户,他们都说它很棒。然后你把它展示给CEO,他说我们将在三个月内解雇一半的客户支持团队,用AI取代他们。现在你必须负责生产化一些实际上要困难得多的东西。所以,要让它在成千上万或数十万甚至数百万份文档上运行,你无法使用任何现有的开源市场工具来做到这一点。要做到这一点非常非常困难。让它扩展到成千上万的用户非常困难。让它适用于许多不同的用例。如果你是一家企业,你可能有20,000个不同的用例想要覆盖。所以,如果你正在解决这个问题,你如何扩展?然后当然还有企业关于安全和合规性的要求。所以,弥合这一差距比你想象的要困难得多。处理它的正确方法是从第一天起就真正专注于生产。所以,不要为试点设计,要为生产设计。这可以为你节省大量时间。这就引出了下一个观察:速度比感染更重要。我们看到,在生产环境中推出RAG代理,一切都关乎速度。这意味着你需要相对早地将其交给用户。真正的用户,而不是那种友好的测试者。你想尽早交给真正的用户来获取他们的反馈。它不必是完美的,它只需要勉强可用。如果你这样做,你就可以逐步达到足够好的水平。如果你不这样做,等待太久,然后试图设计一个完美的东西,从试点到生产的差距将很难弥合。所以,迭代确实是企业成功生产AI部署的关键。下一个观察也与此相关,那就是如果你想让你的工程师快速工作,并且你想遵循我刚才谈到的速度最大化原则,那么你不想让他们从事无聊的工作。这听起来有点显而易见,但事实证明,工程师们在做很多非常无聊的事情。所以,他们必须担心的其中一件事是,我的RAG系统的最佳分块策略是什么?它对每个用例都不同,对每个框架也不同。然后他们必须考虑正确的提示是什么,或者一些基本的事情,理想情况下他们不必过多地考虑,因为你真的希望你的工程师思考如何交付业务价值?我如何确保我拥有这种差异化价值,并且我确实比我的竞争对手更好?所以,确保你的工程师花时间在重要的事情上,而不是分块策略或那些现在可以通过最先进的RAG代理平台很好地抽象化的事情上。下一个是关于让AI易于消费。我的意思是,我们确实经常看到这种情况发生,公司在生产环境中运行生成式AI,然后我经常问他们的下一个问题是,好吧,有多少人实际上在使用它?令人惊讶的是,答案通常是零。几乎没有人真正使用它。他们做了所有这些工作,但他们必须确保它通过模型风险和类似团队的审查。所以,它几乎被扼杀了,现在它几乎没有用了。所以,这是一种情况,或者非常频繁地,人们根本不知道如何使用这项技术。所以,这确实是你正在进行的旅程,你的解决方案越容易消费,效果就越好。这对大多数企业来说,这意味着不仅仅要考虑你的企业数据以及你如何让AI处理它,还要考虑你如何将其集成到他们的工作流程中。所以,你越能将其集成到你企业中已有的工作流程中,你在实际生产使用中的成功就会越大。下一个也与前面一个相关,那就是关于获得使用,它是关于变得粘性。这听起来可能有点显而易见,但你越快能让用户惊叹,或者获得那种让他们突然理解的火花。对我来说,作为一家AI公司的CEO,当人们突然说,哇,我不知道它能做到这一点时,那是一个特殊的时刻。所以,你可以尝试围绕这个观察来设计你的用户入职体验。所以,在那里他们尽快达到“哇”的时刻。所以,对我们来说,我们有一个很好的例子,与高通公司的一位客户。我们与高通公司在全球范围内生产运行,有数千名客户工程师。其中一位在找到这份文件后非常高兴。这份文件有七年历史了,被藏在某个地方,他不知道它的存在。他有很多问题,但他从来不知道答案是什么。突然,因为他问了我们的系统,他得到了答案,他的世界从此改变了。所以,这些是微小的胜利,它们对于推广AI生产确实很重要。所以,这就引出了倒数第二个学习,那就是它甚至不再是关于准确性了。准确性几乎是基本要求。所以,我认为作为AI从业者,我们可能知道,要达到100%的准确性非常困难,如果不是不可能的话。达到95%的准确性,也许你可以做到,或者90%。但现在企业更关心的是,缺失的5%怎么办?或者缺失的10%怎么办?我如何处理可能出错的事情?所以,准确性有一个最低要求,但除此之外,它实际上是关于不准确性,而处理它的方法是通过可观察性。所以,你要非常小心地评估这些系统。你要非常小心地确保你有适当的审计跟踪,特别是如果你在一个受监管的行业工作,这非常重要。确保你有一个审计跟踪,说明我为什么生成这个答案,是因为我在这个文档的这里找到的。基本的事情,比如归因,在RAG系统中实际上对于处理不准确性变得非常非常重要。同样,你可以检查你的系统生成的声明。所以,进行大量的后处理,以确保你有适当的归因,你可以真正作为证据来支持。我有点挣扎于翻页器。所以,最后一个我想结束的是,这听起来可能有点陈词滥调,但它确实是真的,那就是要有雄心。我们确实看到很多项目失败,不是因为人们目标太高,而是因为人们目标太低。人们说,我已经在生产环境中运行了生成式AI,然后它做了什么?它回答了关于谁是你的401k提供商,或者我每天有多少天假期等基本问题。这并不是AI的投资回报所在。所以,你想瞄准真正雄心勃勃的事情,如果你解决了它们,你确实有投资回报,而不仅仅是一个人们根本不使用的噱头。所以,尽量要有雄心,因为我们确实生活在特殊的时代。幻灯片上有宇航员。所以,我认为在登月和所有那些事情发生的时候,活着是很特殊的。我们现在正处于一个类似的时刻,AI真的将改变一切,将在未来几年内改变我们的整个社会。所以,你作为你所处的位置,有机会真正地影响社会变革。所以,在做这件事的时候,要有雄心,不要追求那些容易够到的低垂的果实,要追求天空。所以,这确实是我给你们的经验教训。这个“上下文悖论”不会消失。但通过理解我与你们分享的这些经验教训,希望你能将我们在企业AI领域普遍看到的挑战转化为你自己的机会。所以,要构建更好的系统,考虑系统而不是模型。专注于你的专业知识并为此进行专业化。不要满足于通用解决方案,要为你的公司所拥有的专业知识进行专业化,并要有雄心。然后你就会非常成功。谢谢你。[掌声][音乐]女士们先生们,请欢迎回到舞台,本届领导力轨道会议的司仪,Peter。[音乐]Humphrey。我们做到了。谢谢大家,也谢谢Dawe分享他关于检索增强生成的见解。我的意思是,这是我们都在追求AI准确性和相关性的持续探索中如此重要的一部分。我想特别说一下,我不知道大家是否看到了谷歌最近几天的公告,关于像10亿个输入令牌。所以,这是一场非常非常精彩的会议,我一直很着迷。各位,这是一个非常忙碌的下午。我们讨论了AI招聘等话题。我认为Heath的演讲很棒,有这么多好的数据。领英的团队建设案例研究,当然还有刚才的检索增强生成。如果你想再次与演讲者见面,和之前一样。有三个问答休息室。一个在这里的剧院层,两个在楼下,一个在楼梯底部,另一个藏在下面。所以,这是一个与志同道合的人交谈的好地方,他们想谈论今天下午的话题。然后,演讲者将在招待会的前30分钟在那里,然后,享受一些社交时间,喝点酒,玩得开心。快速提醒一下,关于明天的早午餐,对于那些没有捆绑通行证的人。所以,出于安全原因,我们不再重新打印徽章,抱歉。所以,如果你有捆绑通行证并且明天加入我们,请记住,今晚把你的徽章放进包里,不要扔掉,随身携带。把它挂在门把手上,你知道,任何能帮助你明天出门时记住它的东西。所以,就是这样。你做到了。非常感谢你今天一直陪伴我们。今天的活动到此结束。接下来是博览会的派对。就像我说的,我们将有一些饮料,当然还有我们赞助商的产品、技术和服务。所以,请停下来和他们聊聊。祝你有一个美好的夜晚。感谢你的到来,我们明天工程轨道见。[掌声][音乐]暂停[音乐][音乐]