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:
32
README.md
32
README.md
@@ -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
|
||||
4
agent.go
4
agent.go
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user