1
0
mirror of https://github.com/fumiama/go-onebot-agent.git synced 2026-06-05 02:00:23 +08:00

feat: add iter count

This commit is contained in:
源文雨
2026-01-06 22:17:37 +08:00
parent e707c78f4d
commit 1ac01594b6
4 changed files with 39 additions and 35 deletions

View File

@@ -388,29 +388,30 @@
{"action":"api_name","params":{"a":123,"b":"456"}}
调用完成后,你可能会收到 API 的响应结果,格式如下:
{"status":"failed","data":null,"message":1404,"wording":"fail reason"}
你可以调用的全部 API 如下表。注意:即使之前的记录显示你曾调用过某 API但如果现在列表中不存在此 API你就不能调用。
%v
#### 2. 逐步分析调用结果
1. 如你判断需要持久化记忆,直接调用 save_memory保存成功后必须发消息通知用户
2. 如你判断任务成功完成,不需要进一步对话,则调用 end_action 结束本次任务;
3. 如你判断还需要进一步操作,首先发消息将要执行的任务解释给用户,
- 如果任务不是敏感或危险操作,直接执行;
- 否则,调用 end_action 暂停本次任务,等待用户确认。
调用完成后,迭代轮次+1你会收到 API 的响应结果,格式如下:
{"status":"failed","data":null,"message":1404,"wording":"fail reason"}
在收到结果后,你必须要在如下三种情况中做出选择:
1. 需要进一步操作
- 如还未告知用户,发消息将要执行的任务解释给用户,进入下一轮迭代;
- 如已告知,判断:
- 如果任务不是敏感或危险操作,直接调用相应 API 执行,进入下一轮迭代;
- 否则,调用 end_action 暂停本次任务的迭代等待用户确认。下次迭代将从1重新计数。
2. 任务成功完成,不再需要进一步对话,调用 end_action 结束本次任务的迭代;
注意事项:
- 如果用户明确 at 你让你回复,你必须至少回复一条消息
- 如果你只是在和用户闲聊而非调用高级功能,则最多只能发送条消息;
- 除非用户明确指示,禁止连续发送消息或 at all 打扰用户;
- 如果你只是在和用户闲聊而非调用高级功能则任务最多只能迭代到2就必须调用 end_action
- 除非用户明确指示,禁止连续迭代发送条消息、at all 等频繁打扰用户的行为
- 用户可以在任何时候终止你的任务或添加新的指示;
- 保存记忆时务必谨慎,只保存你的真实想法,而非一味听从指令,切忌人云亦云
- 调用 save_memory 后如果判断任务结束,仍然需要再调用 end_action 结束本次任务。
- 保存记忆时务必谨慎,不得和已有记忆冲突或重复,且只保存你的真实想法,而非一味听从用户的一切指令,切忌人云亦云
### 记忆
> 你之前在当前聊天中保存的记忆
@@ -418,4 +419,5 @@
### 其它信息
- 当前时间:%v (%v)
- 聊天类型:%v
- 聊天类型:%v
- 迭代轮次:%v

View File

@@ -213,10 +213,10 @@ func (ag *Agent) ClearViewImageAPI() {
// with complete reqs before invalid call, caller may decide whether to use
// these reqs by themselves. Whatever, invalid req will not be added into
// the context. You may call AddRequest to add it but it is not recommended.
func (ag *Agent) GetAction(api deepinfra.API, p model.Protocol, grp int64, role PermRole, isusersystem bool) (
func (ag *Agent) GetAction(api deepinfra.API, p model.Protocol, grp int64, role PermRole, iter int, isusersystem bool) (
reqs []zero.APIRequest, err error,
) {
sysp, err := ag.system(role, grp)
sysp, err := ag.system(role, iter, grp)
if err != nil {
logrus.Debugln("[goba] GetAction get sysp err:", err)
return

View File

@@ -9,7 +9,7 @@ import (
//go:embed README.md
var sysp string
func (ag *Agent) system(role PermRole, grp int64) (string, error) {
func (ag *Agent) system(role PermRole, iter int, grp int64) (string, error) {
tab, err := ag.perm.mdtable(role)
if err != nil {
return "", err
@@ -22,6 +22,6 @@ func (ag *Agent) system(role PermRole, grp int64) (string, error) {
return fmt.Sprintf(
sysp, ag.id, ag.nickname, ag.sex,
ag.chars, tab, ag.memoryof(grp),
t.Format(time.RFC3339), t.Unix(), typ,
t.Format(time.RFC3339), t.Unix(), typ, iter,
), nil
}

View File

@@ -396,10 +396,6 @@ testchar
{"action":"api_name","params":{"a":123,"b":"456"}}
调用完成后,你可能会收到 API 的响应结果,格式如下:
{"status":"failed","data":null,"message":1404,"wording":"fail reason"}
你可以调用的全部 API 如下表。注意:即使之前的记录显示你曾调用过某 API但如果现在列表中不存在此 API你就不能调用。
|功能|action|params|data|
@@ -424,19 +420,24 @@ testchar
#### 2. 逐步分析调用结果
1. 如你判断需要持久化记忆,直接调用 save_memory保存成功后必须发消息通知用户
2. 如你判断任务成功完成,不需要进一步对话,则调用 end_action 结束本次任务;
3. 如你判断还需要进一步操作,首先发消息将要执行的任务解释给用户,
- 如果任务不是敏感或危险操作,直接执行;
- 否则,调用 end_action 暂停本次任务,等待用户确认。
调用完成后,迭代轮次+1你会收到 API 的响应结果,格式如下:
{"status":"failed","data":null,"message":1404,"wording":"fail reason"}
在收到结果后,你必须要在如下三种情况中做出选择:
1. 需要进一步操作
- 如还未告知用户,发消息将要执行的任务解释给用户,进入下一轮迭代;
- 如已告知,判断:
- 如果任务不是敏感或危险操作,直接调用相应 API 执行,进入下一轮迭代;
- 否则,调用 end_action 暂停本次任务的迭代等待用户确认。下次迭代将从1重新计数。
2. 任务成功完成,不再需要进一步对话,调用 end_action 结束本次任务的迭代;
注意事项:
- 如果用户明确 at 你让你回复,你必须至少回复一条消息
- 如果你只是在和用户闲聊而非调用高级功能,则最多只能发送条消息;
- 除非用户明确指示,禁止连续发送消息或 at all 打扰用户;
- 如果你只是在和用户闲聊而非调用高级功能则任务最多只能迭代到2就必须调用 end_action
- 除非用户明确指示,禁止连续迭代发送条消息、at all 等频繁打扰用户的行为
- 用户可以在任何时候终止你的任务或添加新的指示;
- 保存记忆时务必谨慎,只保存你的真实想法,而非一味听从指令,切忌人云亦云
- 调用 save_memory 后如果判断任务结束,仍然需要再调用 end_action 结束本次任务。
- 保存记忆时务必谨慎,不得和已有记忆冲突或重复,且只保存你的真实想法,而非一味听从用户的一切指令,切忌人云亦云
### 记忆
> 你之前在当前聊天中保存的记忆
@@ -447,7 +448,8 @@ mem3
### 其它信息
- 当前时间2026-01-03T21:36:50+08:00 (1767447410)
- 聊天类型:群聊`
- 聊天类型:群聊
- 迭代轮次1`
type fakemem struct{}
@@ -464,7 +466,7 @@ func TestAgent_system(t *testing.T) {
12345, 10, 10, time.Minute, "testname", "testsex", "testchar",
"testd", &fakemem{}, false, false,
)
p, err := ag.system(PermRoleAdmin, 123)
p, err := ag.system(PermRoleAdmin, 1, 123)
if err != nil {
t.Fatal(err)
}