签到工具新增检查功能:修复状态误判问题
问题:
- 用户询问'我今天签到了吗'时,AI基于对话历史判断而非查询数据库
- 导致明明没签到,AI却说已经签到了(误判)
解决方案:
- 新增 action=check 操作,专门用于检查当前节点今天是否已签到
- 直接调用 HasSignedOnDay 查询数据库,返回准确的签到状态
- AI 现在会强制调用工具查询,而不是根据记忆猜测
改动内容:
- 工具定义中添加 check 操作类型
- 实现 executeCheck 方法,查询数据库并返回明确状态
- 添加完整的单元测试(未签到/已签到两种场景)
- 更新文档说明 check 操作的使用
使用示例:
- 用户:'我今天签到了吗?'
- AI 调用:{"action": "check"}
- 返回:'XXX 今天还没有签到。' 或 'XXX 今天已经签到过了。'
测试:
- ✅ 未签到场景测试通过
- ✅ 已签到场景测试通过
- ✅ 所有签到工具测试通过
- ✅ 项目编译成功
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -7,10 +7,11 @@
|
||||
1. **数据不准确**:AI 只能根据上下文猜测或给出模糊答案
|
||||
2. **无法查询历史**:询问超过一天的数据时,AI 一问三不知
|
||||
3. **功能不完整**:数据库层已有完善的查询能力(`CountSigns`、`CountSignsByDay`),但工具层未暴露给 AI
|
||||
4. **状态判断不准**:用户问"我今天签到了吗"时,AI 基于对话记忆判断而非查询数据库,导致误判
|
||||
|
||||
## 解决方案
|
||||
|
||||
为签到工具添加查询功能,支持以下两种操作模式:
|
||||
为签到工具添加查询和检查功能,支持以下三种操作模式:
|
||||
|
||||
### 1. 签到操作 (action=sign)
|
||||
|
||||
@@ -21,13 +22,20 @@
|
||||
|
||||
### 2. 查询操作 (action=query)
|
||||
|
||||
新增查询功能:
|
||||
查询签到统计功能:
|
||||
- 查询指定日期或日期范围的签到统计
|
||||
- 返回总人次和按天分组的统计数据
|
||||
- 可选参数:
|
||||
- `date`: 查询日期(格式:YYYY-MM-DD),默认今天
|
||||
- `days`: 查询最近 N 天,默认只查询 date 指定的那一天
|
||||
|
||||
### 3. 检查操作 (action=check) **新增**
|
||||
|
||||
检查当前节点今天是否已签到:
|
||||
- 用于回答"我今天签到了吗"之类的问题
|
||||
- 直接查询数据库,不依赖对话历史
|
||||
- 返回明确的已签到/未签到状态
|
||||
|
||||
## 修改内容
|
||||
|
||||
### 1. 扩展 SignStore 接口
|
||||
@@ -82,6 +90,27 @@ type signParams struct {
|
||||
|
||||
### AI 调用示例
|
||||
|
||||
#### 检查今天是否签到(check 操作)
|
||||
|
||||
**用户**:"我今天签到了吗?"
|
||||
|
||||
AI 调用:
|
||||
```json
|
||||
{
|
||||
"action": "check"
|
||||
}
|
||||
```
|
||||
|
||||
返回(未签到):
|
||||
```
|
||||
Test Node 今天还没有签到。
|
||||
```
|
||||
|
||||
返回(已签到):
|
||||
```
|
||||
Test Node 今天已经签到过了。
|
||||
```
|
||||
|
||||
#### 查询今天的签到情况
|
||||
```json
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user