优化时间工具

This commit is contained in:
2026-06-11 18:07:44 +08:00
parent d1324dc2f2
commit f20247b04e
2 changed files with 22 additions and 9 deletions
+20 -7
View File
@@ -91,13 +91,13 @@ func Resolve(now time.Time) Context {
func BuildContext(ctx Context, routeReason string) string {
var b strings.Builder
b.WriteString("时间工具结果。请优先使用这里的绝对日期解释用户问题中的相对时间,不要自行猜测当前日期。\n")
fmt.Fprintf(&b, "当前本地日期时间:%s\n", ctx.Now.Format("2006-01-02 15:04:05 MST"))
fmt.Fprintf(&b, "今天:%s\n", FormatSQLRange(ctx.Today))
fmt.Fprintf(&b, "明天:%s\n", FormatSQLRange(ctx.Tomorrow))
fmt.Fprintf(&b, "昨天:%s\n", FormatSQLRange(ctx.Yesterday))
fmt.Fprintf(&b, "本周:%s\n", FormatSQLRange(ctx.ThisWeek))
fmt.Fprintf(&b, "本月:%s\n", FormatSQLRange(ctx.ThisMonth))
fmt.Fprintf(&b, "本年:%s\n", FormatSQLRange(ctx.ThisYear))
fmt.Fprintf(&b, "当前本地日期时间:%s%s\n", ctx.Now.Format("2006-01-02 15:04:05 MST"), FormatWeekday(ctx.Now))
fmt.Fprintf(&b, "今天:%s%s\n", FormatDateWeekday(ctx.Today.Start), FormatSQLRangeWithWeekday(ctx.Today))
fmt.Fprintf(&b, "明天:%s%s\n", FormatDateWeekday(ctx.Tomorrow.Start), FormatSQLRangeWithWeekday(ctx.Tomorrow))
fmt.Fprintf(&b, "昨天:%s%s\n", FormatDateWeekday(ctx.Yesterday.Start), FormatSQLRangeWithWeekday(ctx.Yesterday))
fmt.Fprintf(&b, "本周:%s\n", FormatSQLRangeWithWeekday(ctx.ThisWeek))
fmt.Fprintf(&b, "本月:%s\n", FormatSQLRangeWithWeekday(ctx.ThisMonth))
fmt.Fprintf(&b, "本年:%s\n", FormatSQLRangeWithWeekday(ctx.ThisYear))
b.WriteString("SQL 日期过滤建议:对日程/事件类表使用半开区间,例如 event_time >= start AND event_time < end;如果实际字段名不同,必须使用 schema 中存在的时间字段。\n")
if strings.TrimSpace(routeReason) != "" {
b.WriteString("激活原因:" + strings.TrimSpace(routeReason) + "\n")
@@ -109,10 +109,23 @@ func FormatDate(t time.Time) string {
return t.Format("2006-01-02")
}
func FormatWeekday(t time.Time) string {
weekdays := []string{"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}
return weekdays[t.Weekday()]
}
func FormatDateWeekday(t time.Time) string {
return fmt.Sprintf("%s%s", FormatDate(t), FormatWeekday(t))
}
func FormatSQLRange(r Range) string {
return fmt.Sprintf("start=%s, end_exclusive=%s", r.Start.Format("2006-01-02 15:04:05"), r.End.Format("2006-01-02 15:04:05"))
}
func FormatSQLRangeWithWeekday(r Range) string {
return fmt.Sprintf("start=%s%s, end_exclusive=%s%s", r.Start.Format("2006-01-02 15:04:05"), FormatWeekday(r.Start), r.End.Format("2006-01-02 15:04:05"), FormatWeekday(r.End))
}
func startOfDay(t time.Time) time.Time {
y, m, d := t.Date()
return time.Date(y, m, d, 0, 0, 0, 0, t.Location())
+2 -2
View File
@@ -23,7 +23,7 @@ func TestResolveBuildsCalendarRanges(t *testing.T) {
func TestBuildContextIncludesSQLHints(t *testing.T) {
ctx := Resolve(time.Date(2026, 6, 10, 13, 14, 15, 0, time.UTC))
text := BuildContext(ctx, "需要日期范围")
for _, want := range []string{"时间工具结果", "本月", "start=", "end_exclusive=", "半开区间", "需要日期范围"} {
for _, want := range []string{"时间工具结果", "本月", "start=", "end_exclusive=", "星期三", "星期一", "半开区间", "需要日期范围"} {
if !strings.Contains(text, want) {
t.Fatalf("context missing %q:\n%s", want, text)
}
@@ -39,7 +39,7 @@ func TestToolDefinitionAndExecuteTool(t *testing.T) {
if err != nil {
t.Fatal(err)
}
for _, want := range []string{"时间工具结果", "2026-06-10", "本月", "start=", "end_exclusive=", "测试原因"} {
for _, want := range []string{"时间工具结果", "2026-06-10", "星期三", "本月", "start=", "end_exclusive=", "测试原因"} {
if !strings.Contains(text, want) {
t.Fatalf("tool result missing %q:\n%s", want, text)
}