
代码大模型的出现极大提升了工程师的效率,但同时也带来了安全性与隐私性问题的挑战。如何应对这些挑战?有哪些最佳实践可以帮助企业在利用这些 AI 工具时确保代码安全和隐私保护?软件开发者应该如何准备和适应这种由 AI 带来的变革?AI 工具接管部分编程任务后,开发者的角色又会发生哪些实际变化?
在即将举行的AICon全球人工智能开发与应用大会上,我们有幸邀请到了腾讯云产品专家汪晟杰,他将发表题为《代码大模型对于工程理解的探索研究》主题分享。在会前,我们对汪晟杰进行了访谈,以下为访谈实录:
嘉宾:汪晟杰
编辑:李忠良
技术有效性和限制
InfoQ:您如何评价当前 AI 代码助手如 GitHub Copilot 在理解复杂代码结构和项目架构方面的能力?
汪晟杰:当前的 AI 代码助手,如 GitHub Copilot,以及腾讯云 AI 代码助手,都展示了在理解复杂代码结构和项目架构方面的显著进步。他们都有着如下优点:
在编写简单到中等复杂度的代码时,它们可以提供有用的代码建议和补全,从而提高开发者的代码生产力。
通过分析大量的开源代码库,它们可以学习到许多编程语言和框架的最佳实践。
对于某些常见的编程任务,它们可以生成准确的代码
片段,减少开发者的工作量。
然而面临着成本和速度的权衡,以及如何塞下整个工程代码上下文来理解工程。譬如对于非常复杂的代码结构、大仓或者多仓的项目重度依赖的情况,AI 代码助手可能无法完全理解其逻辑和设计,导致生成的代码片段不准确或不适用。最近 GitHub Copilot 的企业版的知识库可以对项目工程做 Indexing+Embedding,可以大大强化本地开发并享用远端向量,从而提升对于工程理解的提问和回答。这块我将在本次分享中重点和大家分享。
InfoQ:针对多文件和大型项目,这些工具在理解上下文和逻辑关系方面表现如何?
汪晟杰:在补全场景下,对于常见的编程模式和结构,AI 代码助手通过语法分析等多种策略,可以较好地识别和理解多文件之间的关系。比如你用了工厂单例模式构造一个对象,在调用上就知道我这个对象要用到工厂类。在 GitHub Copilot 实战中,需要打开相关的文件。在腾讯云 AI 助手上,我们采用了快速的语法树能力快速找到相关文件引入提示词,从而让大模型能感知到更多上下文。通过分析大量的开源代码库,它们可以学习到许多编程语言和框架的最佳实践,从而在一定程度上理解大型项目的结构和组织方式。
InfoQ:在使用如 CoT 和 RAG 这类技术时,有哪些明显的优势和存在的局限性?
汪晟杰:CoT(Chain of Thought),本质上是对于提问者的问题的思维链的拆解,并逐步去解决子任务的要求并合并成最终答案。
首先在上下文理解上:CoT 有效的通过 Multi-Agent 方式,来拆解并安排下一轮的子任务,同时可以通过 RAG 进行代码推理,从而生成更符合需求的代码。
其次,有高质量的代码生成:通过模拟人类程序员的思考过程,自主获得并进行下一轮的执行,可以选择不同模型、或者 Function call 来调用业务函数,或者通过上下文找到问题出错点并在下一轮进行修复方案。RAG 则是保障了项目代码扩展理解能力。
InfoQ:您认为未来这些工具需要哪些改进才能更好地支持复杂的软件开发任务?
汪晟杰:当前的 AI 代码助手,如 GitHub Copilot,已经在简化软件开发任务方面取得了显著的进步。然而,要更好地支持复杂的软件开发任务,未来这些工具可能需要以下几方面的改进:
更好的上下文理解:AI 代码助手需要更好地理解项目的上下文,包括项目的目标、架构、已有代码的功能等。这可以通过更先进的自然语言处理和代码分析技术来实现。
更强更快的代码推理能力:对于复杂的代码逻辑和算法,AI 代码助手需要有更强的推理能力,以生成正确和高效的代码。这可能需要更先进的机器学习模型和算法。
更全面更深的集成 IDE:AI 代码助手需要更广泛的支持主流的 IDE,并深入地集成到集成开发环境(IDE)中,以提供更流畅和无缝的用户体验。这可能包括更好的代码提示、实时错误检测、代码重构建议等功能。
更全面的编程语言和框架支持:AI 代码助手需要支持更多的编程语言和框架,以满足不同开发者的需求。这可能需要分析和学习更多的开源代码库。
更高的安全性和可靠性:AI 代码助手需要在生成的代码中考虑到安全性和可靠性,避免引入潜在的安全风险和错误。
安全性和隐私问题
InfoQ:在使用 AI 编程助手时,如何处理和保护敏感和私有的代码数据?
汪晟杰:有以下六个方面值得考虑。
选择可信赖的 AI 编程助手:在选择 AI 编程助手时,选择那些来自可信赖来源、有良好声誉的工具,这些工具通常会遵循严格的数据保护政策和安全实践。我也建议不要把核心代码用 GitHub Copilot 去生成,因为你的代码上下文是直接经过他们海外服务器。
了解数据保护政策:在使用 AI 编程助手之前,详细了解其数据保护政策和隐私条款。确保这些政策符合您对数据保护的要求,特别是关于数据的收集、处理和存储方面。
是否提供安全私有化能力:在银行等领域腾讯云积累了很多客户实践。我们一键部署升级,并在封闭的环境、信创环境下都有着不错的客户反馈。对于技术对话解决了在不可上网的环境下,搜索技术问题找寻答案的另一种安全方法。
遵循最佳实践:在编写代码时,遵循最佳实践,将敏感信息(如密码、API 密钥等)从代码中分离。将这些敏感信息存储在安全的配置文件或环境变量中,而不是直接嵌入到代码中。
限制访问权限:确保 AI 编程助手仅能访问其需要的最小权限。例如,可以限制其访问特定的代码库、分支或文件夹,以减少潜在的风险。
监控和审计:定期监控和审计 AI 编程助手的使用情况,确保其符合您的安全和合规要求。如果发现任何异常行为,立即采取相应的措施。
InfoQ:您如何看待这些工具在训练过程中可能出现的数据泄露风险?
汪晟杰:首先,AI 编程助手通常使用大量的开源代码库进行训练。虽然这些代码库本身是公开的,但在训练过程中可能会捕获到一些敏感信息,如 API 密钥、密码等。因此,训练过程中需要对这些潜在的敏感信息进行清理和过滤;其次,由于 AI 模型在训练过程中可能会学习到一些敏感信息,因此在使用模型生成代码时,有可能泄露这些信息。应用端需要针对这类问题,采用技术手段,以增加兜底逻辑,即模型训练过程中数据的隐私问题,可以由应用端做针对性的过滤。最后,用户教育和意识:对于使用 AI 编程助手的开发者,提供培训和意识教育,以确保他们了解如何在使用这些工具时保护敏感和私有的代码数据。这包括遵循最佳实践,将敏感信息从代码中分离等。
InfoQ:有哪些最佳实践可以帮助企业在利用这些 AI 工具时确保代码安全和隐私保护?
汪晟杰:一方面是用户开发习惯,在让模型基于上下文推理的时候,他会模仿你的习惯,所以将敏感信息从代码中分离,在代码库中引入代码扫描,实时监听代码生成质量。另一方面是给予仓库代码更小范围,比如我只需要把主要描述的 Readme 文件、接口文档、核心代码的实现类等作为 RAG 的来源,或者在补全上找到核心调用链的相关函数及文件
对开发者角色的影响
InfoQ:AI 工具在接管一些编程任务后,您观察到开发者的角色有哪些实际变化?
汪晟杰:有三方面的影响,首先是更高层次的抽象:开发者可能会从处理底层代码转向处理更高级别的抽象,例如设计软件架构、优化数据结构和算法等。这将使 AI 代码助手能够更有效地理解并模仿生成;其次是更全面的技术点:有了 AI 助手后,后端也会写前端代码,在做一些短平快的项目时,一个产品和一个技术可以分工完成,相比之前的开发效率是大大提升;最后当然是开发习惯的变化:以 IDE 为平台,以 AI 为内核,以对话为切入,以编码质量为验收,会是开发者在日常编码中的另一个自己的「数字人」
InfoQ:这些变化对开发团队的结构和工作流程有何影响?
汪晟杰:我认为团队会更扁平,技术同学也不会再抗拒新的某种技术和语言。上手门槛变低了,获取知识的速度提高了,解决问题的方式多样化了。在工作流程中,学习提示词,摸透大模型的习性,会是工作中不可缺少的一部分。逐步上手后,会产生极大粘性。腾讯内部我们的产品的留存率是非常高的。
InfoQ:您认为 AI 工具将如何影响软件开发行业的就业趋势?
汪晟杰:大概有以下几个方面。
自动化低级任务:AI 工具可以自动化许多重复性和低级别的编程任务,如 CRUD 的代码生成、SQL injection 错误检测和修复等。这可能导致对于那些主要从事这些任务的初级开发人员的需求减少。
提高生产力:通过自动化一些任务,AI 工具可以提高开发者的生产力。这意味着开发团队可能需要更少的人员来完成相同的工作量。然而,这也可能导致对高技能开发人员的需求增加,因为他们可以更好地利用这些工具。
AI 化转型和咨询:随着 AI 工具的普及,软件开发人员可能需要学习新技能和知识,以适应不断变化的技术环境。这可能包括学习如何与 AI 工具合作,以及掌握新的编程范式和技术。
AI 产品化的创新:随着 AI 工具接管一些基本任务,开发者可以将更多精力投入到创新和创意上。这可能导致对具有创新思维和能够开发新产品和服务的开发人员的需求增加。
与大模型及算法的紧密合作:AI 工具的发展可能导致业务要与大模型及算法团队的合作更加紧密。
新的就业机会:虽然 AI 工具可能导致某些角色的需求减少,但它们也可能创造新的就业机会。例如,随着 AI 技术的发展,可能会出现新的专业领域,如 AI 伦理、AI 系统监管等。
总之,AI 工具将对软件开发行业的就业趋势产生深远影响。虽然某些角色可能受到冲击,但整体上,对具有创新思维、高技能和跨领域知识的软件开发人员的需求可能会增加。为了适应这些变化,开发人员需要不断学习和更新技能,以保持在行业中的竞争力。
InfoQ:对于软件开发者来说,他们应该如何准备和适应这种由 AI 带来的变革?
汪晟杰:首先学习 AI 和机器学习基础知识:开发者应掌握 AI 的基本概念、原理和技术,了解机器学习算法和数据科学库(如 TensorFlow、PyTorch 等),这将有助于他们在开发过程中更好地利用 AI 技术;其次,关注 AI 领域的最新发展:关注 AI 领域的最新研究成果和行业动态,了解 AI 技术在各个行业的应用案例,以便了解哪些技术可以应用到自己的项目中;当然,提高编程技能也不可或缺:AI 技术的发展对开发者的编程能力提出了更高的要求,因此开发者需要不断提高自己的编程技能,熟悉各种编程语言和框架,如 Python、Java、C++等;最后是学会与 AI 合作:开发者需要学会如何与 AI 系统合作,理解 AI 系统的优势和局限性,以便在开发过程中充分发挥 AI 的潜力。
嘉宾介绍:
汪晟杰 腾讯云 产品专家,历任阿里高级技术专家,从事钉钉云效核心业务线、Teambition 合伙人、Autodesk 首席软件架构师、十多年 SAP 云平台、SuccessFactors HCM、Sybase 数据库、PowerDesigner 等产品的开发经理,在软件架构设计、产品管理和项目工程管理、团队敏捷提效等方面拥有近 20 年的经验。
在 5 月 17 日-18 日,AICon 即将落地北京,汪晟杰即将与大家进行演讲分享,期待与你一起现场交流。

公众号推荐:
AGI 概念引发热议。那么 AGI 究竟是什么?技术架构来看又包括哪些?AI Agent 如何助力人工智能走向 AGI 时代?现阶段营销、金融、教育、零售、企服等行业场景下,AGI应用程度如何?有哪些典型应用案例了吗?以上问题的回答尽在《中国AGI市场发展研究报告 2024》,欢迎大家扫码关注「AI前线」公众号,回复「AGI」领取。

评论