Python 并非偶然成为人工智能领域的通用语言。我一直认为,Python 在人工智能领域的主导地位并非源于其卓越的性能或花哨的功能,而是因为它能将想法转化为可运行的代码的距离最短。它是一种易于上手的通用语言,是"人人都懂"的语言,或许不是作为第一门编程语言,但往往是第二门。这也是为什么随着人工智能的兴起,Python 的受欢迎程度也大幅上升。Python 降低了实验的门槛,这对于快速发展的 AI 领域至关重要。
但 Rod Johnson(Spring 框架的创建者)认为,Python 并未垄断人工智能应用市场,也不应如此。没错,如果您已经在使用 Python 构建Agent,很难证明转用 Java 以获取某些优势(比如类型安全)是合理的。但如果您已经在使用 Java 进行开发,那么采用像基于 Java 的 Embabel 代理框架这样的工具简直是轻而易举。这再次提醒我们,释放数据价值的关键在于充分利用您已拥有的人员和技术栈,而非一味追逐神秘的数据科学家和复杂的架构。
这总是关乎人
很容易陷入技术之争:Python vs Java vs NextBigLanguage。但人工智能最难的部分并非工具,而是人。领域知识、技能和接受情况比选择"完美"的编程语言更重要。如果您希望人工智能在您的组织中取得成功,就必须满足开发者和领域专家所处的位置。
这一点似乎显而易见,然而很多时候我们的本能反应却是用闪亮的新技术来解决问题,并期望人们能够适应。更好的做法是让人们利用他们已经熟悉的技术。实际上,这可能意味着用 Excel 来做分析,因为相比专门的数据科学工具,员工对 Excel 更为熟悉。这可能意味着用 SQL 来做人工智能驱动的查询,因为 SQL 在员工中已经很普及。没错,这也可能意味着继续使用团队擅长的编程语言,而不是强制要求改用当下流行的工具。
这一原则不仅适用于编程语言,还涵盖了整个技术栈。高德纳咨询公司预测,到 2028 年,80% 的生成式人工智能商业应用将基于现有的数据管理平台,而非全新的"以人工智能为先"的技术栈。简单来说,大多数公司会将人工智能融入现有的技术栈,而非采用新的技术栈。正如 Johnson 所建议的,如果开发人员习惯使用 Java,那么用 Java 来开发代理程序将是"显而易见"的选择。
那 Python 呢?
这种"独到见解"可能并不太受欢迎。毕竟,有一种普遍的看法是,如果你要使用生成式人工智能来做任何事情(比如像 AutoGPT 那样使用大型语言模型来执行任务的程序),就必须用 Python 来实现。毕竟,开源示例、流行的库以及在线教程几乎都是基于 Python 的。Python 在人工智能领域的生态系统确实很丰富。但这是否意味着使用 Java 或 C# 的开发者在构建人工智能代理时就会处于劣势呢?一点也不。事实上,将 Python 强加给那些精通其他语言的开发人员可能会适得其反。
Rod Johnson 通过其在 Spring 方面的工作,对企业计算领域产生了深远的影响。最近,他创立了 Embabel,这是一个用于在 JVM 上编写代理流程的框架。在 Medium 上的一篇近期文章中,约翰逊从一个 Python 项目(CrewAI)中选取了一个示例人工智能代理工作流程,并使用 Embabel 重新实现了它。他的结论是:在 Java 中构建更好的代理要比在 Python 中更出色,而且对于实际的生成式人工智能应用而言,JVM 比 Python 更优越。
大胆的言论!还是说这仅仅是一位顽固的 Java 爱好者在试图证明 Java 更好的例子呢?
这可能是其中一种情况(或者两种情况都存在),但约翰逊确实证明了他的 Java 代理在类型安全性、可扩展性和可维护性方面都优于 Python 对应的版本。Java 的强类型意味着在任务之间传递的提示和数据都会由编译器进行检查,从而避免了一些运行时错误(比如提示关键词中的拼写错误或数据格式不匹配),而 Python 脚本只有在崩溃时才会捕获这类错误。他还展示了如何通过 Java 持久化 API(在 Spring Data 中)与企业功能(如之前见过的联系人的数据库)集成在 Java 中是多么简单,这表明企业级 Java 工具可以预先为 AI 代理提供持久性、事务处理等功能。
Java 更好吗?
那么,这是否意味着在所有人工智能应用领域,Java 都优于 Python 呢?否。这完全取决于你来自哪个领域。Johnson 本人也承认存在一个关键的细微差别:"如果你使用的是 Python,那么跳到另一个开发平台就很难说得通,但如果你已经在使用 JVM,那么使用 Embabel 就是理所当然的选择。引入一个新的(Python)开发平台来解决一个较差的方案,这完全没有意义。" 这就是关键所在。如果你已经投入到了某个生态系统中,仅仅因为它是流行的就转到另一个系统上,通常都是一个失败的决定。一个使用 Python 的团队或许应该坚持使用 Python 而不是用 Java 重写所有内容,边际收益可能无法证明这样做是合理的。相反,一个使用 Java 的团队几乎没有理由放弃他们多年的积累的专长和现有的代码,转而用 Python 重新开始,尤其是现在像 Embabel 这样的库证明了它们在 Java 中也能实现前沿的人工智能。
恰当的语言应当是你的团队所熟悉并且你的系统也是基于这种语言构建的。这道理很简单,但同时也非常困难。
此外,Python 并非完全没有复杂性可言。没错,编写一个快速脚本确实很容易,但将这个脚本拓展为一个大规模的可靠应用程序时,就会出现各种挑战:依赖管理、环境问题、性能调优等等,诸如此类。我之前提到过,学习 Python 的语法是相对容易的;但驾驭其打包、冲突的库以及扩展的特性等问题则更为困难。如果您的组织已经在另一个生态系统(比如经过优化的 Java 开发运维流程)中解决了这类问题,那么在 Python 中再投入同样的学习成本可能就不值得了,除非您确实必须这么做。
当然,Python 的优势在于拥有大量的专门针对人工智能的软件包。有时仅凭借这些软件包本身,就能证明它适用于特定项目。但如今我们看到,这些人工智能功能也能够通过 API 或其他语言(如 JavaScript、Java 等)的新库从其他语言中获取。差距正在缩小。关键在于你有多种选择,而你应该根据实际需求做出选择,而非盲目遵循某种教条。
没有时间犹豫了
务实的态度很快就会带来回报。人工智能的能力正以指数级的速度增长。正如一位人工智能研究者最近所指出的:"2026 年将是人工智能广泛融入经济的关键一年。"所以,如果你有一支有能力的团队和一套可靠的技术架构,那就利用这些来立即探索人工智能解决方案吧。在这一领域发展如此迅速的情况下,拖延所带来的机会成本是巨大的。依靠现有的基础进行建设会让你进步得更快。
人工智能只是达成目标的一种手段,并非其本身的目标。我们使用更时髦的编程语言来实现这些目标并不会获得额外的加分。重要的是要创造价值:实现更出色的业务成果、改进产品、实现自动化流程。而做到这一点的最可靠方法就是选择那些能让您的团队快速迭代、充分利用他们所积累的专业知识,并与您现有的系统进行整合的工具。
(本文翻译自InfoWorld,版权归属原作者,如有问题,欢迎留言联系删除。原文链接:Java or Python for building agents? | InfoWorld)