原文: 面对大型项目且模块多而复杂的情况,有没有好的ai开发方案,如果只给出需求让大模型自己做计划,它可能压根不会参考项目中已有的模块代码,或者开发及查bug、codereview时大模型需要每次现去读取代码,可能存在读取的代码不准确,或读取代码导致上下文越来越大,后续开发更混乱。大家的企业项目开发过程中有没有落地的好流程、方案? 让AI梳理了一下: 对于大型企业项目(代码量大、模块多、业务复杂)的场景,AI开发到底应该如何落地? 目前使用大模型辅助开发时,经常会遇到几个比较明显的问题: 缺乏项目全局认知 如果只是把需求直接丢给大模型,让它自己拆解和制定开发计划,它往往只能基于需求本身进行推理。 很难主动理解项目现有架构、模块边界、设计规范以及历史实现方式。 结果就是容易重复造轮子,甚至给出与现有架构冲突的方案。 无法充分复用已有代码 项目里明明已经有类似功能或公共模块,但大模型未必能发现。 开发出来的新代码可能绕开现有能力,导致逻辑重复、维护成本增加。 上下文窗口限制 开发、排查 Bug、Code Review 时,大模型往往需要临时读取相关代码。 随着代码、日志、需求文档不断加入上下文,Token 消耗越来越大。 后续可能出现上下文污染、遗忘早期信息、分析结果前后不一致等问题。 代码理解准确性问题 即使使用代码检索(RAG)方案,大模型读取到的代码片段也可能不完整。 缺少调用链、依赖关系、运行时信息时,容易做出错误判断。 有时候分析 Bug 的结论看起来很合理,但实际上是建立在错误代码理解之上的。 开发过程缺乏持续记忆 今天分析了某个模块,明天继续开发时可能又要重新让模型学习一遍。 对项目约定、业务规则、架构原则缺少长期记忆和沉淀。 导致每次会话都在重复做项目认知工作。 Code Review 效果不稳定 AI能发现一些明显问题,但对于复杂业务逻辑、架构设计缺陷、历史兼容性问题,效果参差不齐。 很依赖它是否恰好获取到了足够的上下文。 11 个帖子 - 5 位参与者 阅读完整话题
可更换模块化笔记本厂商Framework宣布,其首批Framework Laptop 13 Pro将较原计划推迟约一个月发货。这款被部分用户称为“Linux用户版MacBook Pro”的13英寸新旗舰原定6月发货,目前首批订单预计将延后至7月送达,部分订单甚至可能滑到8月初。对于不在首发批次的用户,原计划7月发货的订单则整体顺延到8月,个别用户要等到 9 月初才能收到新机器。 据悉,Framework 已通过电子邮件向预购 Laptop 13 Pro 的用户通报了此次延期的原因,主要涉及全新的触觉触控板和定制显示屏这两项关键新组件。官方表示,仅包含主板预购或未选配上述新组件的订单仍将按原计划发货,不受影响。 在触觉触控板方面,Framework 在内部已迭代了十余个固件版本,但在量产前的测试中,团队在电路板设计中发现了接地问题,会导致触控板在多次点击操作后出现自我重置的情况。Framework 随后与供应商 Lite-On 和 Boréas 合作排查故障,并确认需要重新设计电路板,只有采用新设计电路板的触控板才会投入整机装配,因此整机出货被迫按下暂停键。 与此同时,Laptop 13 Pro 采用的定制显示屏在量产爬坡阶段也暴露出固件缺陷。Framework 正与面板供应商华星光电(CSOT)协作开发新的显示固件,预计会与更新后的触控板模组在相近时间就绪,从而让整机恢复正常出货节奏。 对于已经下单但无法接受延迟的用户,Framework 表示可以选择取消订单,并全额退还此前支付的订金。公司强调,此次主动推迟发货是为了在发现硬件设计和固件问题后,确保用户拿到的是修正后的版本,而不是在上市后通过返修或大规模召回来弥补质量隐患。 查看评论
美国核能行业再迎关键进展:首座由私营企业开发、且采用非轻水堆技术的新一代反应堆,于40多年来首次在美国实现临界运行,并在爱达荷国家实验室(Idaho National Laboratory)完成“点火”这一重要里程碑。 这座名为 Antares Nuclear Mark-0 的测试微堆标志着西方核能发展迈出新一步,也是在美国能源部“反应堆试点项目”(Reactor Pilot Program)框架下率先达成临界目标的先进堆之一。 根据介绍,Mark-0 微堆于 2026 年 6 月 4 日实现所谓的“初始临界”(initial criticality)或“零功率燃料临界”(zero-power fueled criticality)。 这意味着反应堆被控制在刚刚足以维持核链式反应的最低功率水平,不以发电或输出热功率为目的,而是用于验证反应堆的计算物理模型、堆芯几何结构、控制棒性能以及初始中子学行为等关键参数,无需显著热功率输出和主动冷却流动。 业内人士将这一环节比作“首次让汽车发动机顺利点火”,虽功率不高,但对后续全面运行具有基础性意义。 这一进展直接呼应了美国能源部在“反应堆试点项目”中提出的目标——在 2026 年 7 月 4 日前,使至少三种先进反应堆设计完成临界运行验证。 该项目于 2025 年启动,旨在为长期停滞的美国核电产业“解套”。自 20 世纪 70 年代以来,由于公众舆论变化、政治压力以及对安全性的极致追求,美国核电审批监管程序日益复杂、成本高企,商业项目难以承受,由此导致新项目近乎停摆。 反应堆试点项目通过在联邦实验室园区采用能源部独立的安全授权与监督流程,对早期技术原型进行验证,从而绕开传统 NRC(核管会)商业许可路径的部分前期负担,加速一批新一代堆型走向实用化。 在这一项目候选方案中,由 Antares 公司研发的 R1 反应堆及其零功率前置测试堆 Mark-0,定位为高温固态微堆,设计发电功率区间在 100 千瓦至 1 兆瓦之间。 其模块化设计思路是:反应堆模块在工厂完成标准化制造,再整体运输至用电现场安装投运,并可通过叠加多个模块,按需扩展供电能力。 此类微堆瞄准的是偏远设施、军事基地以及对能源安全性和连续性要求极高的场景。 在燃料技术路径上,Antares 采用高丰度低浓铀(HALEU)与 TRISO(三重同轴各向同性)燃料颗粒组合。 单颗粒大小约似“粟米”,内部为富集至 19.75% 的铀-235,以铀氧碳化物(uranium oxycarbide)形式存在,外部包覆多层碳和陶瓷涂层,然后被压制成圆柱形燃料压块,装填入堆芯块体中。 这种燃料结构天然具备高温下保持包壳完整的能力,提升堆芯自稳特性和抗堆芯熔毁能力。 报道指出,这种配置有助于实现反应堆的“固有自我调节”,在极端高温条件下仍显著降低熔毁风险。 此外,设计允许类似“料斗”的堆芯结构,从顶部持续投放燃料小球或燃料块,并在底部排出已燃尽燃料,从而使换料过程相对简洁、连续化。 Antares 堆型另一大技术亮点在于其冷却系统。该反应堆采用液钠热管冷却:一系列封闭的钢质热管内部充填液态钠,无需泵或任何机械运动部件。 当堆芯发热时,热管内钠被汽化并向上输送至换热器,在那里冷凝放热后,再通过内壁毛细结构“吸回”堆芯区域,形成被动循环。 根据公司披露信息,即便在外部电力完全中断的情况下,这一被动式热管冷却系统仍可持续带走堆芯余热,为失电工况下的安全性提供额外冗余。 与此同时,Antares 的设计从一开始就针对美国陆军与空军的部署需求进行强化,因此在坚固性、机动部署能力与运维要求方面均满足严格的军用标准。 目前,该反应堆已被选定于 2028 年前后部署于德克萨斯州圣安东尼奥联合基地(Joint Base San Antonio),用于为军事设施提供高可靠能源保障。 美国能源部长 Chris Wright 在声明中称:“今天的成就是美国核能发展史上的重要时刻。通过让 40 多年来首座由私营部门开发的、非轻水技术的美国反应堆实现临界,Antares 展现了在释放美国创新潜力后可以做到什么。” 他还强调,特朗普政府将持续支持美国核工业的“重生”,以确保美国民众在未来数代都能获得可负担、可靠且安全的能源供应。 此次 Mark-0 在爱达荷国家实验室的成功临界,被视为美国推进小型模块化核反应堆与新一代先进堆型商业化进程中的关键信号,也为后续 R1 商用机组乃至更多私营先进核能技术的放大验证提供了现实范例。 查看评论
是这样的,各位佬,昨天晚上产品给交底了下,挺简单的功能,模块也不多,按古法编程我估计1个前端+1个后端三天作用基本能搞定 。 刚刚公司负责这个模块的产品(我其实不知道是公司的意思还是产品个人的意思,但是研发负责人也答应了)让我直接用AI开发,但是没给配前端了,而且要求全程录频。 现在的问题是,需求确实比较简单,我估摸使用AI大概半天就能搞完,最多再检查检查校验校验也花不了一天。 我有点不想太快弄出来,感觉对我,对其他同事来说都不是个好事。(之前就听到要精简人员)现在我考虑的是用垃圾点的模型,慢慢给三天磨出来,但是感觉这样的话真的显的自己太唐了。有没有好点的办法 T T。。。 11 个帖子 - 10 位参与者 阅读完整话题
应用于 Android 平台 QQ 的 Xposed 模块 “QStory” 其 QStory_2.6.2-release.apk 存在严重的恶意云控后门机制。该模块能够在用户不知情的情况下,对 QQ 账户数据执行毁灭性操作,包括批量删除全部好友、强制退出或解散所有群组、删除相册及下载内容,以及清除 QQ 全部本地数据。上述操作无需用户交互,且具有明显的恶意破坏性质,不属于模块所声明的正常功能范畴。 via 群友 仓库作者:“相关代码已移除 具体与本人无关” 在现在常用模块都闭源的情况下,该如何保障自己的利益? 3 个帖子 - 3 位参与者 阅读完整话题
量化交易系统工程师 岗位职责 负责低延迟量化交易系统架构设计与核心模块开发(行情、策略执行、订单路由、撮合、网关等)。 设计并实现风控系统(实时/事前风控、限额、异常检测、熔断、监控告警)。 深度优化系统性能:网络通信、内存管理、并发模型、序列化、GC/锁竞争、系统调用等。 与研究员、交易员协作,将策略需求稳定落地到生产环境。 参与稳定性建设:高可用、故障恢复、监控、压测、回放与问题排查。 跟踪新技术,持续推动架构与工程效率升级。 任职要求 5–8 年后端开发经验,有交易/量化/撮合/行情/风控/低延迟系统经验优先。 精通 Java/Kotlin/Scala/Rust/C++ 至少一种,扎实的工程与系统设计能力。 熟悉高性能低延迟开发,掌握并发、网络、内存模型、性能分析与调优。 熟悉交易系统链路(行情、订单管理、执行、风控、成交回报)。 对延迟、吞吐、稳定性有极致追求,能解决复杂性能瓶颈。 良好的分析能力、代码质量与交付意识。 快速学习,适应高强度快节奏。 加分项 有数字资产/证券/期货/外汇/做市/高频交易经验。 有 kernel bypass 、DPDK 、RDMA 、FIX 协议、交易所网关、撮合系统开发经验。 熟悉 JVM 调优、C++/Rust 优化、无锁编程、CPU cache 、NUMA 、异步 IO 。 有实时/资金/仓位/账户风控或异常检测系统经验。 有大型分布式、高可用、实时数据处理系统经验。 我们希望你 能写出高质量代码,从架构、性能、链路、风险角度思考,对延迟敏感,追求工程细节,持续挑战系统性能边界。 请携带简历咨询,谢谢; TG:@jtx_2023 E: [email protected]
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 想法:AI现行的当前,信息爆炸严重,对于科研人员,检索文献繁琐,且不易整理。基于这个问题,我想让AI基于主题每天去找前沿的文献。然后总结,不用多么详细,对于硕博而言,只需要大概的内容和方向,就能明白自己这个领域最近学者们都在做哪些工作,也可以给自己的科研做一些启发,所以做了这个项目。欢迎佬友们指导和交流。 图片先行: 主要功能: 1.根据主题,基于配置的多源,进行文献检索,同时对文献进行历史去重,证据完整性评分等工作。流程比较复杂,感兴趣的话可以让AI分析源项目,加了太多内容了。检索到的文献支持doi链接回看,支持科研人员一键查看文献原文。 2.调用LLM进行文献综述撰写,我总感觉AI写出的内容不够完美,欢迎佬友和我一起完善这部分的提示词。 3.公众号自动稿件撰写,手动推送。目前这部分就是把原文全部内容写在公众号里面,感觉还需要完善。大概功能已经实现了。 开源地址: yyy-OPS/YFR.frontier-review-daily 在线查看地址: https://yfr.yangy.cn/ 欢迎各位科研佬交流,再点点小星星~谢谢各位佬友~ 1 个帖子 - 1 位参与者 阅读完整话题
我这段时间仅仅在不断修改项目某一个模块下的代码,虽然仅仅是一个模块,但是这个缓存命中率确实惊人,原来用自建的GPT free号池,没有看过缓存命中率。 同时我有个疑惑,这个缓存是针对某一个session来讲的么,多久过期呢?总不能一直缓存着吧。 3 个帖子 - 2 位参与者 阅读完整话题
我给codex描述了一个比较长的任务,大概一千字左右,描述了这个模块的全部工作流程,以及外部交互方式,生成SQL的参考逻辑啥的,并设置了一个目标,让他自己去测试+开发,第一次拿脚本糊弄我,补充之后开始改程序,只完成了一半就告诉我完成了。 他是把我设置的目标忘记了吗,是不是提示词太长了分散注意力了啊 1 个帖子 - 1 位参与者 阅读完整话题
IT之家 6 月 5 日消息,PC 机电散品牌 Thermatake(曜越)在 COMPUTEX 上带来了多款富有创意的产品设计,包括采用插拔对接模块设计的 PC 电源、双 micro-ATX 系统机箱、集成屏风式三屏的 AIO 液冷。 电源 Dockpower 电源采用专利“插拔对接模块设计”, 电源本体和模组接口面板间以金手指连接 。这不仅意味着后续可单独升级本体或面板,也让用户可以先在机箱外完成布线再将面板接至本体。 机箱 曜越 双 micro-ATX 系统 机箱 CAPO X 在台北国际电脑展上首度亮相。其延续了 CES 上展出的 View Cross TG 的基本布局并进一步优化配置,升级曲面玻璃侧板,允许在单一机箱中安装主系统 + AI 智能体专属系统。 散热 散热方面,曜越此次展出的最重磅新品是 ST360 Trio Ultra ARGB Sync 。这一型号在冷头上配备了 屏风式三连 6" 720×1480 LCD 面板 ,用户可根据自身需求调整该三屏系统的朝向与开合角度。 同系列的另一款产品则是集成 6" 2160×1080 屏幕的 ST360 Pro Ultra ARGB Sync 。与上面的 Trio Ultra 一样,其搭载三合一吹排风扇。 曜越还带来了 VF360 AIO ARGB Sync 和 WB360-S ARGB Sync 两款液冷,前者冷头顶部集成 ARGB 光效 VRM 散热风扇,后者则是在冷头和风扇两端均采用木艺主题装饰。 此外,Retro 系列 AIO 液冷则在冷头设计上致敬了经典的“大背头”电脑显示器。 至于风冷,此次的 UX600 ARGB Sync 系列统一采用 260W 解热的双塔双风扇 6 热管结构,提供标准、数显顶盖、3.95" LCD 屏幕顶盖版本。
IT之家 6 月 4 日消息,据电小二微博,电小二预热一款全新模块化设计电源,其能够自由组合“加电包”实现灵活户外用途,最多可叠加 5 台。 参考官方预热,该产品本体尺寸与现款电小二户外电源 2000 Pro 2 大致相同(33.5x26.4x29.2cm), 正面配备了一块彩屏可显示充电信息,同时也支持手机 App 设置分配供电状态,可同时为 7 台设备供电。 目前,官方尚未公布新品的更多参数信息,IT之家将保持关注。
使用Qwen3.7max写了一个模块,效果差强人意,各位佬实际开发体验如何,和Glm5.1和Deepseek v4pro比怎么样 2 个帖子 - 2 位参与者 阅读完整话题
IT之家 6 月 3 日消息,据 TechPowerUp 今日报道,芝奇在 Computex 2026 上展示了其首款支持 AMD EXPO ULL(超低延迟)配置文件的 DDR5 6000 内存条。 芝奇在现场展示了多款产品,第一套时序为 26-36-36-32 CR1,第二套时序为 28-36-36-32 CR1,第三套为 30-38-38-32 CR1。这些时序比 JEDEC 标准内存常见的 38-44-44 明显更低。 据介绍,芝奇 DDR5-6000 CL26 套件采用了该品牌与酷冷至尊联合开发的主动散热解决方案。该散热模块足足有两个槽厚,因此主板需要在两个内存插槽之间至少留有一个插槽的间隙。 其他几款内存外观上则类似于 Trident Z5 Neo 和 Trident Z5 Royal Neo。芝奇计划于 2026 年下半年推出其首批 AMD EXPO-ULL 内存套件。IT之家后续将保持关注。 相关阅读: 《 芝奇展示 CU-DIMM 内存条低压高频实力:1.1V 实现 9200CL74 》 《 AMD EXPO ULL 超低延迟内存条定价预计持平现有产品,DDR5-6000 游戏性能最高提升 13-15% 》
IT之家 6 月 3 日消息,索尼今日宣布启动 RIALTO 65 影像传感器模块的研发工作。 RIALTO 65 是一款专为索尼旗舰级电影摄影机 CineAltaV 2 打造的 65mm(指源自电影领域 65mm 胶片格式的成像区域规格,并非表示传感器的实际物理尺寸)画幅影像传感器模块, 计划于 2027 年上半年上市 。 RIALTO 65 影像传感器 对角线长度约 64.60mm (宽 53.75mm,高 35.83mm),采用 3:2 画幅比,截至 2026 年 6 月发布时,是业内市售电影摄影机搭载的最大尺寸传感器之一。 索尼表示,该模块旨在拓展 CineAltaV 2 的影像能力, 将索尼旗舰电影摄影机系统从全画幅推进至 65mm 大画幅领域 。 据IT之家此前报道, 索尼 CineAltaV 2 发布于 2021 年 ,配备了 8.6K (8640 × 5760) 全画幅 CMOS 影像传感器,也可选择 CineAltaV 上搭载的 6K(6048 × 4032)全画幅影像传感器。 ▲ CineAltaV 2 官方表示,RIALTO 65 既可直接安装于 CineAltaV 2,也可通过线缆与机身分离使用,在 完全兼容当前 CineAltaV 2 配套生态 的前提下,将整套设备升级为 65mm 画幅规格的数字电影系统。 这款支持 65mm 画幅的影像传感器, 感光面积约为全画幅的 2.2 倍 ,可营造出更浅的景深和更强烈的空间纵深感。 新传感器 支持 9.6K 3:2 片门全开录制 ,同时配备多种读出模式,可适配各类 65mm 规格镜头,包含部分像场较小的专业镜头。 索尼计划于 2026 年 6 月 5 日在美国 Cine Gear Expo 上进行展示,并在 8 月携工程机亮相国内的 BIRTV 2026 展会。
IT之家 6 月 3 日消息,影石 Insta360 官方社媒 3 日(今天)发布了 Luna Ultra 全新预告视频,并官宣独创第一视角解决方案 —— 影石第一人称头追模块。 根据介绍,该模块支持一键开启头部方向检测,可快速实现 相机云台与使用者头部方向的实时同步 ,无需分身操作,即可轻松实现 POV 难以做到的大角度仰拍和俯拍视角,打破传统 POV 拍摄局限。 影石第一人称头追模块具备 三轴云台追踪 + 实时检测头部运动 的“组合技能”,号称能更加轻松优雅地实现“ 视线落到哪里,镜头拍到哪里 ”的差异化沉浸体验,画面可精准锁定视觉中心,带来“看哪拍哪”的沉浸式即拍即得体验。 该模块采用极轻的耳挂装置,号称拥有“近乎无感”的佩戴体验,并支持多种快捷按键交互: 双击模块即可让云台快速回中,长按则能进行佩戴位置校准 。据IT之家了解,该模块还具备“超长续航”。 先前 @数码闲聊站 爆料称,影石 Insta360 Luna Ultra 双摄云台相机价格已被代理曝光, 单机预计为 5299 元,全能套装预计为 6499 元 。消息称其配备三轴机械云台,采用 1 英寸 F1.8 主摄 + 3 倍光学长焦 ,带有徕卡联名,支持 6 倍无损 / 12 倍混合变焦,可录制 6K50fps、4K120fps、10bit i-Log、杜比视界格式视频。
楼主做的代码行数最多的项目大概 6w 行代码,大概 5 个模块,复杂度已经快控制不住了。
楼主做的代码行数最多的项目大概 6w 行代码,大概 5 个模块,复杂度已经快控制不住了。
楼主做的代码行数最多的项目大概 6w 行代码,大概 5 个模块,复杂度已经快控制不住了。
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 学习和整理Pi的LLM模块设计 佬友们,晚上好,前几天找到Pi的LLM模块设计的项目源码分析学习啦一下,整个设计还是非常的优雅的,理解下来,读下来就觉得他这样的设计思路很合理,同时看作者那篇文章讲Pi的设计理念的时候,让我更确认啦,好东西,得仔细学习学习,不能一眼过,所以就想整理个笔记,一边督促自己细细品味这套设计,一边为未来做信息的精炼,希望对佬们学习大模型应用开发有所帮助 再多说两句 里面关于多供应商的设计是比较出色的,还有它的模型配置文件的字段设计和对于上下文的理解都很不错,在设计层面是考虑到上下文的重要性的 Context在目前的大模型应用工程中依旧很重要,并且在优化的阶段,是harnss工程调整的原则之一 一、LLM模块的总设计 PI的编码Agent是支持多种供应商和模型的,并且在会话中途是可以更换模型和供应商的,如何协调不同的协议和消息格式是PI的核心模块 pi-ai 的设计初心,我们可以一起来从全局的角度来理解 PI定义自己内部通用的消息类型,用户发送的任何消息都会先转换为这种通用的格式,作为消息流通的核心 用户在输入的时候,会传递供应商和模型进来,根据这个我们就可以得到用户想要调用的具体的协议,那么通用定义就会先经过转换为相关协议的类型,然后调用模型,模型回复也会被转换为通用的类型,下一次用户输入的时候,切换了模型,依旧进行目标协议的转换 重点理解就是:无论怎么做,无论有多少模型和供应商,无论有多少种api协议, 只要关注自己内部定义好的通用格式就可以啦,到真正使用的时候,进行临时转换 接下来我们一起看看这个内部通用定义的东西是什么?长什么样子? 二、LLM模块内部通用定义 在一个成熟的Agent的Loop中,消息会有不同的角色,角色可以让消息列表有流程循环的状态,常见的消息角色: user、assisant、toolResult ,下面是一个完整的Context对象的例子 const context: Context = { systemPrompt: "你是...", tools: [], messages: [ // userMessage { role: "user", content: "北京今天天气怎么样?"}, // assistantMessage { role: "assistant", content: [ { type: "thinking", thinking: "...", thinkingSignature:"eyJhbGciOi..." }, { type: "text", text: "让我帮你查一下。" }, { type: "toolCall", id: "call_01ABC", name:"get_weather", arguments: { city: "北京" } }, ], ...assistantMessage, }, // toolResultMessage { role: "toolResult", toolCallId: "call_01ABC", toolName:"get_weather", content: [{ type: "text", text: "晴,25°C,东北风 3 级"}], ...toolResultMessage, }, // assistantMessage { role: "assistant", content: [{ type: "text", text: "北京今天晴朗,25°C,适合外出!"}], ...assistantMessage, }, // 多模态的userMessage { role: "user", content: [ { type: "text", text: "这张图里的数学题帮我算一下:" }, { type: "image", data: "iVBORw0KGgo...", mimeType:"image/png" }, ], ...userMessage, }, ], }; 内部流通的是Context,并且你可以向Context中增加一些数据状态,文章《停止将聊天历史用作智能体的状态存储》中有详细的介绍,感兴趣的开发者可以去仔细阅读一下,我感觉重点一句是: 你的应用拥有结构化状态:当前用户、选中项目、流程位置、数据库数据。而 LLM 只有一维消息数组。两者持续产生偏差,最终只能由你来调和。 当你把对话数组当作事实来源时,就是在强迫表现层数据结构承担控制流的职责。当状态发生偏移(这不可避免),调试意味着需要通读消息数组,推断智能体在第 4 步时认为的状态是什么。没有其他办法。这种扁平化模型抹杀了所有结构。 所以内部使用Context对象来作为通用消息格式,并且可以增加一些字段未来可以用来表示状态和承担控制流的职责, 当要将上下文注入给相应的模型的时候,这个时候可以进行临时的格式转换以适配对应的模型api协议,这样未来增加任何供应商和模型的时候,只要增加对应的转换函数就可以,其他的都不用改动, 所以Context是所有消息的源头 三、消息的数据流动 下面是Context是如何转换为对应模型的消息格式的,设计层面非常有意思,很值得学习 通用消息处理函数 :一般这里 会编写异常工具消息的处理和错误/中止消息的过滤 ,让即将传入给模型的消息看起来健康一些 异常工具消息表示的是:在message变量中,工具的调用时需要成双成对的,不能单一出现,不然调用会报错的 这里可以理解成为复用函数,共同逻辑编写的地方,例如:有一个逻辑是每一个模型协议都要有的,你如果写在具体的协议类里面去,那么需要重复7-8份一模一样的代码片段,但是你写到这里,只写一次, 并且会在进入到真正的相应转换函数之后,会执行这个逻辑,很方便,有点全局函数的感觉 消息转换函数 :这个就非常好理解啦,就是将Context里面的消息转换为对应的供应商的格式,具体的格式大家可以去看官方文档 四、具体的LLM协议类的实现 具体的API协议类的实现,例如:anthropic的实现,openai-completions的实现,google的实现,核心就是五个方法,其他的都是辅助函数 对辅助函数感兴趣的可以看源码,,抽取四个核心方法出来是因为好理解,理解的负担不大,同时可以抓住主要核心理解,不至于淹没到一堆的胶水代码和兼容代码中 参数检测:根据传入的模型和供应商自动检测哪些参数是被支持,是可以使用的,例如:开启思考的方式deepseek和openai是不一样的 工具定义转换:将tools转换为目标LLM协议支持的格式,例如:Openai和Anthropic的工具定义的方式是不同的,需要转换 消息格式转换:将Context中的通用格式转换为目标的LLM协议支持的格式,一般来说就是系统提示词的放置 Token用量解析:从模型输出的结果中解析出来对应的Token,输入、缓存、输出,总计 streamXXXCompletions:核心执行方法,里面会执行上面四个封装好对应逻辑的函数,同时调用相应的SDK完成调用任务 在核心执行方法中,有一个重要的工具函数,我们在调用模型的时候,是开启了流式输出的,如何向用户层面提供流式输出和非流式输出两种调用方法,就来源于这个工具函数的设计 五、核心工具类 这个工具类Event-Steam写的非常好,我想完整的把代码展示出来: export class EventStream<T, R = T> implements AsyncIterable<T> { private queue: T[] = []; private waiting: ((value: IteratorResult<T>) => void)[] = []; private done = false; private finalResultPromise: Promise<R>; private resolveFinalResult!: (result: R) => void; constructor( private isComplete: (event: T) => boolean, private extractResult: (event: T) => R, ) { this.finalResultPromise = new Promise((resolve) => { this.resolveFinalResult = resolve; }); } push(event: T): void { if (this.done) return; if (this.isComplete(event)) { this.done = true; this.resolveFinalResult(this.extractResult(event)); } // Deliver to waiting consumer or queue it const waiter = this.waiting.shift(); if (waiter) { waiter({ value: event, done: false }); } else { this.queue.push(event); } } end(result?: R): void { this.done = true; if (result !== undefined) { this.resolveFinalResult(result); } // Notify all waiting consumers that we're done while (this.waiting.length > 0) { const waiter = this.waiting.shift()!; waiter({ value: undefined as any, done: true }); } } async *[Symbol.asyncIterator](): AsyncIterator<T> { while (true) { if (this.queue.length > 0) { yield this.queue.shift()!; } else if (this.done) { return; } else { const result = await new Promise<IteratorResult<T>>((resolve) => this.waiting.push(resolve)); if (result.done) return; yield result.value; } } } result(): Promise<R> { return this.finalResultPromise; } } queue和waiting的设计:一个是从生产端角度设计的,如果这个时候消费端没有准备好,那么使用queue队列保存住,但是这样消费端在取的时候,就要不断的循环拿数据,一个是从消费端角度设计的,如果生产端在推送数据的时候,消费端已经准备好啦,那么直接推送给消费端,不需要中间队列存储,速度快,资源消耗低 result方法和Generator函数:一个是异步生成器,消费端可以await的方式流式取数据,一个是堵塞住,等待模型输出完成之后,返回给对应的变量 六、事件流和调用链路 6.1、Agent执行事件流 一次完整的Agent事件流,里面会存在Agent生命周期,turn执行,消息输入,模型执行,工具执行,终止和错误这些状态存在,梳理清楚这些状态会非常有益于我们做执行日志记录和前端的执行显示 在理解Agent事件流中,一定要记住 :一次Agent交互,会存在多轮模型的调用(也就是多个turn),每一轮模型的调用都有模型的回复,模型的回复中如果有工具调用执行,那么这一轮还会有工具执行的流程存在 下面是详细的Agent事件类型的设计代码,可以参考: export type AgentEvent = // Agent 生命周期 | { type: "agent_start" } | { type: "agent_end"; messages: AgentMessage[] } // Turn 生命周期 | { type: "turn_start" } | { type: "turn_end"; message: AgentMessage; toolResults: ToolResultMessage[] } // 消息生命周期 | { type: "message_start"; message: AgentMessage } | { type: "message_update"; message: AgentMessage; assistantMessageEvent: AssistantMessageEvent } | { type: "message_end"; message: AgentMessage } // 工具执行生命周期 | { type: "tool_execution_start"; toolCallId: string; toolName: string; args: any } | { type: "tool_execution_update"; toolCallId: string; toolName: string; args: any; partialResult: any } | { type: "tool_execution_end"; toolCallId: string; toolName: string; result: any; isError: boolean }; export type AssistantMessageEvent = | { type: "start"; partial: AssistantMessage } | { type: "text_start"; contentIndex: number; partial: AssistantMessage } | { type: "text_delta"; contentIndex: number; delta: string; partial: AssistantMessage } | { type: "text_end"; contentIndex: number; content: string; partial: AssistantMessage } | { type: "thinking_start"; contentIndex: number; partial: AssistantMessage } | { type: "thinking_delta"; contentIndex: number; delta: string; partial: AssistantMessage } | { type: "thinking_end"; contentIndex: number; content: string; partial: AssistantMessage } | { type: "toolcall_start"; contentIndex: number; partial: AssistantMessage } | { type: "toolcall_delta"; contentIndex: number; delta: string; partial: AssistantMessage } | { type: "toolcall_end"; contentIndex: number; toolCall: ToolCall; partial: AssistantMessage } | { type: "done"; reason: "stop" | "length" | "toolUse"; message: AssistantMessage } | { type: "error"; reason: "aborted" | "error"; error: AssistantMessage }; 6.2、Agent执行链路 在LLM模块的总设计思路下,Agent执行调用链路的完整情况如下,从用户输入到要触发的LLM模块的核心地方 总结下来就两点: 根据模型定义好的api变量的值,来现在要实例化哪一个LLM模块协议类 根据选择好的LLM模块协议类,进行参数的转换和消息格式的转换,让模型调用可以成功执行 最后 之前和这篇文章也都详细的整理到啦这个开源仓库里面,感兴趣的佬友可以前往仓库看完整的,里面会对于所有的文章做一个大纲式的理解,把文章都串起来 GitHub - WakeUp-Jin/Practical-Guide-to-Context-Engineering: 大模型应用开发的方向,上下文工程是设计原则,Agent Harness 是构建目标,本项目的目标,是为开发者和研究者提供一份大模型应用开发的骨架思路 · GitHub 相关资料和博客: PI的LLM模块核心包: pi/packages/ai at main · earendil-works/pi · GitHub 《我构建一个固执己见且极简的编码代理所学到的东西》: What I learned building an opinionated and minimal coding agent 《停止将聊天历史用作智能体的状态存储》: Stop Using Chat History As Your Agent's State Store 1 个帖子 - 1 位参与者 阅读完整话题
上传一设备照片 → 自动识别由哪些模块组 → 一键生成设备清单 + Mermaid 网络拓扑图 + BOM 物料表 + Markdown 工程文档 欢迎大家来 star github: https://github.com/ljp-777/DeviceLens