文章摘要
作者最喜欢的AI开发工具是PyCharm中的“Full Line Code Completion”,它使开发更高效且不干扰代码控制。作者在处理顺序数据处理、异步API调用和PyTorch中的向量运算时,依赖打印语句调试和日志记录。AI在编写日志方面的应用是其最喜爱的用例之一。
文章总结
文章主要内容总结
标题: 我最喜欢的AI应用场景是编写日志
发布日期: 2025年7月17日
作者: Vicki Boykis
主要内容:
AI在开发中的实际应用:
- 作者最喜欢的AI开发工具是PyCharm中的Full Line Code Completion(自2023年底起与IDE捆绑)。该工具设计精良,不显突兀,显著提高了开发效率,同时仍让开发者保持对代码的控制。
- 作者还使用了GoLand,并长期作为JetBrains的满意客户,认为其推出的功能非常实用。
日志编写的重要性:
- 作者经常处理涉及顺序数据处理、计算和跨多个服务的异步API调用的代码,以及在PyTorch中进行精确的向量操作。因此,打印语句调试和编写良好的日志多年来一直是其工作流程的关键部分。
- 引用Kerningan和Pike在《The Practice of Programming》中的观点,认为在关键位置添加输出语句和自我检查代码比逐步调试更高效。
日志编写的挑战:
- 使用f-strings编写日志虽然方便,但在需要反复编写时变得繁琐,尤其是在格式化值或访问数据框、列表和嵌套结构的元素时。
- 编写良好的日志虽然重要,但会打断调试流程,且涉及多层次的认知负担。
Full Line Code Completion的优势:
- JetBrains的模型能够从周围文本中自动推断日志补全,限制为384个字符。模型从文件扩展名、文件路径和光标上方代码部分获取输入,生成补全建议。
- 这种约束输出通常足够好,显著加快了工作流程,且生成的日志通常比人类编写的更清晰,因此在调试完成后仍保留在生产环境中。
实现细节:
- 推理模型完全在本地运行,这对开发团队提出了压缩和速度的重要要求。
- 模型必须足够小以与IDE捆绑(MacOS二进制文件约为1GB),且足够智能以从其小上下文窗口中插值代码行。
- 本地要求排除了使用vLLM、SGLM或Ray等模型推理引擎,且必须针对Python进行优化。
- 模型训练和插件集成分为两部分,模型在PyTorch中训练并量化,插件在Kotlin中实现,使用本地C++服务器进行推理令牌服务。
模型训练:
- 训练了一个100M参数的GPT-2风格Transformer解码器模型,后来改为Llama2架构。
- 训练数据集是The Stack的一个子集,包含30种编程语言的6TB代码,初始训练集为45GB,移除了所有代码注释以专注于代码生成。
- 使用BPE风格的分词器对Python进行分词,将空格和制表符转换为
<SCOPE_IN><SCOPE_OUT>令牌,并移除导入语句。 - 在8个NVidia A100 GPU上训练了几天,使用交叉熵损失目标函数。
插件实现:
- 模型从FP32量化为INT8,从400MB压缩到100MB,作为ONNX RT工件准备,使用CPU推理,移除了CUDA开销。
- 使用beam search进行推理,限制为20个beam,仅收集以换行符结尾的假设。
- 使用缓存策略,初始化模型时预加载约192个字符的先前代码,以减少重新推理的需要。
总结:
- 作者认为这种体验非常周到,在打印日志调试和生产日志中节省了大量时间。
- 在LLM领域,既有大型通用模型的应用,也有小型模型的应用,作者对后者在更多应用中的发展感到兴奋。
图片标记: 无
评论总结
评论总结:
自动化日志编写的便利性
- 支持观点:评论1和评论10认为自动化日志编写工具节省了时间,减少了繁琐的手动操作。
- 引用1:"Automates a tedious, time-consuming task."(自动化了繁琐、耗时的任务。)
- 引用10:"Best thing of all, I can just say delete all logs with emojis and my patch is ready."(最棒的是,我可以说删除所有带表情符号的日志,我的补丁就准备好了。)
- 反对观点:评论1提到,手动编写日志时有机会反思代码,可能更早发现问题。
- 引用1:"My only concern is... my log writing moments are opportunities to briefly reflect on what I have written."(我唯一的担忧是...编写日志的时刻是反思我所写内容的机会。)
- 支持观点:评论1和评论10认为自动化日志编写工具节省了时间,减少了繁琐的手动操作。
本地模型与云端模型的对比
- 支持观点:评论2和评论15倾向于使用本地模型,认为它们更专注且隐私性更好。
- 引用2:"I think I'd prefer an AI future with lots of little focused models running locally."(我更喜欢未来有大量专注的本地模型运行。)
- 引用15:"I like the way jetbrains is using the local models for auto completion."(我喜欢JetBrains使用本地模型进行自动补丁的方式。)
- 反对观点:评论11认为,现有工具(如类型语言和自动补全)已经足够处理编程中的认知负担,AI可能显得多余。
- 引用11:"The use of AI for this seems somewhat overkill."(使用AI似乎有些过头了。)
- 支持观点:评论2和评论15倾向于使用本地模型,认为它们更专注且隐私性更好。
日志库的选择与使用
- 支持观点:评论7和评论9强调了日志库的使用技巧,如避免f-string和使用标准语法。
- 引用7:"I appreciate how the author highlighted the python domain-specific tricks."(我欣赏作者强调了Python的特定技巧。)
- 引用9:"Python programmers, don't use f-strings for your logs."(Python程序员,不要使用f-string编写日志。)
- 反对观点:评论5和评论6对Loguru库表示不满,认为其设计不佳且不符合标准。
- 引用5:"I dislike loguru on appearance."(我不喜欢Loguru的外观。)
- 引用6:"Loguru sucks very badly!"(Loguru非常糟糕!)
- 支持观点:评论7和评论9强调了日志库的使用技巧,如避免f-string和使用标准语法。
日志编写的复杂性与必要性
- 支持观点:评论3和评论13认为日志编写是编程的基本部分,不应过度依赖工具。
- 引用3:"What you're describing is called: programming."(你所描述的就是编程。)
- 引用13:"Logging is just writing to permanent storage, one of the most basic blocks of programming."(日志编写只是写入永久存储,是编程的基本部分之一。)
- 反对观点:评论12和评论14认为日志应易于理解,甚至可以通过LLM生成。
- 引用12:"Making the logs understandable by the LLM is also very useful."(让日志易于被LLM理解也非常有用。)
- 引用14:"My favorite use-case for AI is writing logs."(我最喜欢的AI用例是编写日志。)
- 支持观点:评论3和评论13认为日志编写是编程的基本部分,不应过度依赖工具。
总结:
评论中,支持者认为自动化日志编写工具和本地模型能提高效率,而反对者则强调手动编写日志的反思价值和现有工具的足够性。关于日志库的选择,Loguru受到了一些批评,而其他评论则强调了日志编写的基本性和技巧。整体上,评论反映了对AI在编程中应用的复杂看法。