Hacker News 中文摘要

RSS订阅

在7年历史的Rails单体应用中构建AI代理 -- Building an AI agent inside a 7-year-old Rails monolith

文章摘要

作者是一家老年和残障服务SaaS公司的技术总监,公司拥有一个7年历史的Ruby on Rails单体应用。虽然系统数据量大且敏感,但AI代理开发尚未成为重点。在参加SF Ruby会议后,作者发现大多数AI应用案例与自身系统特点(严格数据边界、复杂访问规则)存在差异。

文章总结

标题:在七年历史的Rails单体应用中构建AI智能体

核心内容: 1. 项目背景 - 作者担任工程总监的Mon Ami公司开发面向老年及残障案例工作者的SaaS解决方案 - 基于Ruby on Rails构建的七年历史单体应用,具有严格的多租户数据安全要求 - 现有系统通过Algolia索引优化客户记录查询性能

  1. 技术突破契机
  • 在SF Ruby技术会议上受启发,发现RubyLLM gem可实现受限数据访问的RAG系统
  • 关键创新:通过函数调用封装复杂权限逻辑(Pundit策略),避免直接开放数据库访问
  1. 技术实现方案
  • 采用RubyLLM gem构建对话系统:
    • 配置多LLM提供商API(OpenAI/Anthropic)
    • 定义工具类实现Algolia搜索与权限校验的融合
    • 示例工具类包含参数描述、执行方法和返回结构
  • 前端通过Turbo Streams实现实时对话界面
  • 后台使用Active Job异步处理消息
  1. 模型选择经验
  • GPT-5:上下文容量大但响应延迟明显
  • GPT-4:易产生幻觉回答
  • GPT-4o:在速度与准确性间取得最佳平衡
  1. 开发总结
  • 耗时2-3天完成开发(借助Claude辅助)
  • 核心复杂度在于构建工具服务对象(类似API控制器)
  • 对比ActiveAgent等方案后选择RubyLLM因其工具定义和长对话支持

删减内容: - 原文中关于会议其他演讲的泛泛描述 - 初始配置代码中的注释细节 - 前端模板语言的具体语法标记 - 与其他技术方案对比的次要细节

保留要点: - 在严格权限约束环境下实现AI智能体的创新方法 - 关键技术决策背后的具体考量 - 可复用的工程实践模式(权限封装、异步处理等)

评论总结

评论总结:

  1. 对LLM数据访问的担忧
  • pell质疑LLM直接访问返回数据的安全性,建议限制其仅查看状态信息而非完整输出 "Was there any concern about giving the LLM access to this return data?" "only seeing the start of a JSON string with a status like 'success' or 'not found'"
  1. 对项目实用性的质疑
  • tovej认为直接使用API比通过LLM更高效 "why not just let the users directly interact with the API? The LLM is just extra bloat"
  • midnightclubbed质疑AI聊天功能的必要性 "they can just use it to do searches of client information... which the existing site would already do"
  1. 技术方案讨论
  • vicentereig详细讨论了DSPy.rb的分层架构优势 "Total tokens stay similar, but signal density per prompt goes up" "DSPy.rb enables this pattern in Ruby: define typed Signatures for each concern"
  • Lio对比RubyLLM和DSPy.rb的使用体验 "I'm trying to contrast that with my own use of DSPy.rb"
  1. 对AI热潮的反思
  • shevy-java批评当前对AI的过度追捧 "I find the addiction to AI annoying" "there are also numerous bad examples of AI use"
  1. 代码质量赞赏
  • marklwatson赞扬Ruby代码的设计风格 "I liked how well designed the monolith application seems to be" "it seems like in general many Ruby devs have excellent style"
  1. 历史类比
  • Herring将该项目比作2010年代失败的"自然语言转SQL"趋势 "which largely failed because business users required 100% accuracy"
  1. 其他
  • sidd22表达合作兴趣 "Would you be open for a quick chat?"
  • rahimnathwani指出文章模型列表过时 "None of these are current generation models"