ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

手搓了一个minimalSweAgent

手搓了一个minimalSweAgent 手搓了一个minimalSweAgentimportsubprocessfromopenaiimportOpenAIimportjsonimportlogging logging.basicConfig(levellogging.INFO,format%(asctime)s %(levelname)s %(name)s: %(message)s,filenameloop.log)loggerlogging.getLogger(__name__)messages[{role:system,content:你是一位经验丰富的软件开发工程师擅长编码及修复软件BUG 返回格式要求必须返回JSON格式 如果需要执行shell命令命令需要放在extra.action中extra为JSON格式action是字符串格式用于存放命令 例如 { content:你要说的话 extra:{ action: ls -a } finish: false } 拿到你的返回后我会顺序执行extra.action中的命令并将命令的执行结果告诉你。 如果你基于命令执行结果判断出来任务已经完成请将JSON中的finish值改为True否则值为False }]loop_cnt0clientOpenAI(api_key***,base_url***)defquery_lm(messages):查询大模型logger.info(fquery_lm messages{messages})responseclient.chat.completions.create(modelqwen3.8-max,messagesmessages,streamFalse,reasoning_efforthigh,extra_body{thinking:{type:enabled}})aiResponseresponse.choices[0].message.content logger.info(faiResponse{aiResponse})returnjson.loads(aiResponse)defrun_terminal(command):执行命令行代码logger.info(f执行命令行代码 command{command})ifcommandNoneorcommand:return{}resultsubprocess.run(command,shellTrue,capture_outputTrue,textTrue)cmdResult{command:command,stdout:result.stdout,stderr:result.stderr,returncode:result.returncode}logger.info(fcmdResult{cmdResult})returncmdResultdefrun():执行入口loop_cnt0messages.append({role:user,content:任务说明})whileTrue:try:ifloop_cnt10:breakaiResponsequery_lm(messages)ifaiResponse[finish]:breakmessages.append({role:assistant,content:json.dumps(aiResponse,ensure_asciiFalse)})commandaiResponse.get(extra,{}).get(action,)out_putrun_terminal(commandcommand)messages.append({role:tool,content:json.dumps(out_put,ensure_asciiFalse)})exceptExceptionase:logger.info(fexception{str(e)})messages.append({role:assistant,content:str(e)})finally:loop_cnt1if__name____main__:run()
返回列表