前几天写博文的时候,遇到了一个问题。由于时间比较紧张,就没有仔细研究,而是直接将问题丢给了AGI。得当的答复是非常清晰和完整的,还帮助笔者在解决问题的过程中,发现了自己的问题。觉得值得分享一下,遂记有此文。
这个问题的原型是这样的。在Postgres官方文档中,有一个函数date_tranc的应用和描述,里面举了一个例子如下:
defaultdb=> select date_trunc('day', timestamptz '2001-02-16 20:38:40+00', 'Australia/Sydney');
date_trunc
------------------------
2001-02-16 13:00:00+00
当时笔者对data_trunc这个函数还不太了解。但看到这个操作和数据,笔者大概已经猜到,它可能是需要对时间做一下和时区相关的转换操作。但当时笔者有一个信息记错了,就是将悉尼的时区,记成了东10区,然后按照自己的理解进行了计算,怎么也得不到示例中的结果。
当时没有太多的时间研究这个问题,以为是自己对这个函数的使用方式理解有问题,于是就将这个问题提交给AI(图),看看它是怎么说的。笔者使用的是Mistral.ai这个系统,模型是Large2。这里的提升词非常简单直接,就是:
如何理解以下查询结果:
defaultdb=> select date_trunc('day', timestamptz '2001-02-16 20:38:40+00', 'Australia/Sydney');
date_trunc
------------------------
2001-02-16 13:00:00+00
Mistral的完整回应如下:
要理解以下查询结果:
select date_trunc('day', timestamptz '2001-02-16 20:38:40+00', 'Australia/Sydney');
我们需要分析 date_trunc 函数的行为以及时区转换的影响。
date_trunc 函数
date_trunc 函数用于截断日期时间值到指定的精度。在这个例子中,date_trunc('day', ...) 将截断到日期的开始时间(即午夜)。
时区转换
timestamptz 类型表示带时区的时间戳。在这个例子中,timestamptz '2001-02-16 20:38:40+00' 表示一个带时区的时间戳,其中 +00 表示 UTC 时区。
当你指定时区 'Australia/Sydney' 时,PostgreSQL 会将时间戳转换为该时区的时间。
具体分析
原始时间戳:2001-02-16 20:38:40+00(UTC 时区)。
转换到悉尼时区:悉尼时区在 UTC 时区的基础上加 11 小时(因为悉尼时区是 UTC+11)。
将 2001-02-16 20:38:40+00 转换为悉尼时区:
2001-02-16 20:38:40+00 (UTC)
+ 11 小时
-------------------------
2001-02-17 07:38:40+11 (悉尼时区)
截断到日期的开始时间:date_trunc('day', ...) 将截断到当天的午夜。在悉尼时区,2001-02-17 07:38:40+11 截断到日期的开始时间是 2001-02-17 00:00:00+11。
转换回 UTC 时区:将 2001-02-17 00:00:00+11 转换回 UTC 时区:
2001-02-17 00:00:00+11 (悉尼时区)
- 11 小时
-------------------------
2001-02-16 13:00:00+00 (UTC)
最终结果
因此,查询结果 2001-02-16 13:00:00+00 是正确的。这是因为在悉尼时区,2001-02-16 20:38:40+00 转换为 2001-02-17 07:38:40+11,截断到日期的开始时间是 2001-02-17 00:00:00+11,再转换回 UTC 时区就是 2001-02-16 13:00:00+00。
希望这能帮助你理解查询结果。
看到这个结果,笔者立刻发现了自己的错误,就是搞错了悉尼的时区。通过这个例子,笔者有一些感想如下:
- 现在的AI和LLM技术,已经发展到了一个相当高的水平,特别是在理解输入和语境方面,这也是继续发展和应用的一个重要的基础
- 笔者的案例里面,基本没有其他的提示词或者上下文,它仍然能够快速理解语境
- AI能够有效的运用相关的领域知识和信息,以本文为例,就是postgres数据库、日期函数、甚至时区参数
- 它好像也能够理解和处理其中可变的信息和内容
- 输出的内容,逻辑性和完整性都很好
- 响应的速度是非常快速的
- 最后,稍微有点啰嗦,但对于解决问题帮助很大,就不计较了
最后,笔者还想来分享一篇博文,也是关于如何使用AI的,但觉得他描述和总结的非常好,特别是对于信息技术和软件开发相关的从业人员而言,很有启发。文章的原文链接如下:
nicholas.carlini.com/writing/202…
这里笔者还用claude概况和总结了一下:
作者列举了具体的例子来说明如何使用 LLM 来提高工作效率,这些例子分为两大类:“帮助学习”和“自动化枯燥的任务”。其中,帮助学习让作者能够处理以前觉得困难的任务,而自动化任务则让他可以专注于更具挑战性的问题。他特别提到了以下具体应用场景:
- 用从未使用过的技术构建整个 Web 应用
- 学习新的框架和编程工具
- 将多个程序转换为 C 或 Rust 以提高性能
- 简化大型代码库
- 编写几乎每篇研究论文的实验代码
- 自动化大部分单调的任务和一次性脚本
- 几乎完全替代了搜索引擎来配置新项目和调试错误