iflow cli在执行循环的长任务时,一般过几轮就会停下来询问方向,有时甚至只是停下来,汇报情况。无论如何指令不要停下来,不要总结,也无法克服。经过询问iflow,发现是iflow内置定期询问和定期总结的系统指令。所以iflow无法实现无监督的长时间分析任务。
希望官方还是出个克服这些内部指令的办法或者模式。
iflow cli在执行循环的长任务时,一般过几轮就会停下来询问方向,有时甚至只是停下来,汇报情况。无论如何指令不要停下来,不要总结,也无法克服。经过询问iflow,发现是iflow内置定期询问和定期总结的系统指令。所以iflow无法实现无监督的长时间分析任务。
希望官方还是出个克服这些内部指令的办法或者模式。
为何要执行这种长任务呢,这种会导致结果不可预测?
我是用户,但是大模型上下文一长,很容易忘记之前要做什么。长任务效果很差的。
是不是智能模式?yolo模式可以试试
实际上我感觉它们的对话性格,和它们的实际能力相比已经有点偏长了,应该更短一点,停下来让用户检查。
如果你真的希望让它执行半天,得到的大概率是一坨没法用的代码。修改它的成本远大于一步步引入人类监督的成本。
如果你指的不是特别长的任务,却仍然停下来,有可能确实是模型和软件问题,建议给它发送:
很好,你已经完成了一部分,请参照你前面的做法,把剩下的任务全部完成,中间不需要让我检查,做完再停。
(这句prompt在我看来已经有点危险了,我通常会反着说,让它停下来让我测试,通过再继续)
感觉主 agent 确实有系统提示要求祂到一定程度要停一停,这个模式对当前普遍用法是合适的。
但是自动运行肯定是未来方向,人吊在系统里时不时地做点微管理工作,挺消耗人的,整体效率也还是受限于肉身耐造极限。
这个问题需要自定义主 agent 的系统提示才能解决,并且同时需要硬流程机制做必要的防灾把关、巡检等等。
至于你们说模型弱跑长了效果打折扣,这是最容易解决的,就用 agent 审核纠正 agent 就好了,做到上下文隔离,用头脑清醒、上下文轻负载的监工 agent,能比你自己纠偏效果更好。
用subagent的好处有很多,你可以适当地编排任务增加自主检查和自主遵循的部分,然后试试适不适合长任务。
如何开启subagent?
直接这样问:你是否具备subagent工具?你的任务是监督并安排subagent完成清单上的任务:安排一个subagent进行代码编写,在合适时机安排另一个subagent检查代码。
另一个技巧是设置hook,在任务完成的时候用声音或者其他方式提醒你。
有同感,比如敏捷开发时,涉及开发的story超过10个,大概率会停止任务,汇报下进度。但是期望的事先把既定的故事全部执行完。这个和ralph loop的那种无限循环又不一样
看别人的贴子,使用CC进行长达几小时甚至十几小时的任务时,会编写stop hook,在对话结束时重新发起对话继续下去。但是具体原理就不清楚了,不知道是不是iflow也可以用这种方式实现。
主agent只做流程和监督,说明怎么用sub agent串流程,话说狠一点,不完成工作,就把家里的小猫全杀了! 然后你自己定义sub agent。
试试看,祝你好运
stop hook就是再开启一个新的iflow或者claude code,重新检查之前的工作是否正确完成,没有完成就接着做
目前 iflow 主 agent 的系统提示,或者模型本身的调性也占很大一部分,导致大概率祂自己干活而不是去安排 subagent 干活,没有硬性机制去保持对话继续还真跑不长。 我觉得从模型到框架工具都会逐渐朝着长程运行去改变的,或早或晚改成什么样的问题。
p.s. 是说暴力威胁模型能出更好的效果,不过我觉得“好”的标准太模糊了,模型一次主动多做些事就一定好吗? 做得多错的多,现在模型被训练得很怕自己犯错,宁可少做。
我觉得短期有效的办法应该是另找一个 agent 给另一个做的事挑错,“挑错”变成正向激励祂会愿意多做,另一个做事的 agent 可能会比较“委屈”,人适当出来和和稀泥,避免无意义的掐架比较好吧。 我自己手搓的框架快要好了,到时候做做实验 ![]()
iflow 包括其它主流 agentic 工具,都是单向调用 subagent,想让 agent 之间掐架还没好办法 ![]()
可以用SDK试试
下面的例子, 任务结束时自动"继续", 一共执行3次
```python
import asyncio
from iflow_sdk import IFlowClient, AssistantMessage, TaskFinishMessage
async def dotask():
async with IFlowClient() as client:
prompt = '''当我说你好或继续时, 你回复"靓仔好+n", 其中的n是回复次数, 如果明白回复"收到"
'''
await client.send_message(prompt)
loop_limit = 3
loop_index = 0
while loop_index <= loop_limit:
print(f'loop_index: {loop_index}')
loop_index+=1
async for message in client.receive_messages():
if isinstance(message, AssistantMessage):
print(f'ai: {message.chunk.text}', end="", flush=True)
elif isinstance(message, TaskFinishMessage):
print() # 换行
user_input = "继续"
print(f"user: {user_input}", end="\n", flush=True)
await client.send_message(user_input)
break
else:
print(f'message: {message}', end="", flush=True)
print("done")
if __name__ == "__main__":
asyncio.run(dotask())
```