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