核心逻辑模块也是整个项目的入口utf-8 -*-
from tools import tools_map
from prompt_cn import gen_prompt, user_prompt
from model_provider import ModelProvider
from dotenv import load_dotenv
def parse_thoughts(response):
"args name": "args value"
"criticism": "criticism",
"speak": "当前步骤,返回给用户的总结",
thoughts = response.get("thoughts")
observation = response.get("observation")
plan = thoughts.get("plan")
reasoning = thoughts.get("reasoning")
criticism = thoughts.get("criticism")
prompt = f"plan: {plan}\nreasoning:{reasoning}\ncriticism: {criticism}\nobservation:{observation}"
print("thoughts:", prompt)
except Exception as err:
print("parse thoughts err: {}".format(err))
def agent_execute(query, max_request_time=10):
while cur_request_time < max_request_time:
3. 用户的输入 4. assistant_msg
prompt = gen_prompt(query, agent_scratch)
start_time = time.time()
print("*************** {}. 开始调用大模型llm.......".format(cur_request_time), flush=True)
user_msg, assistant, history
if cur_request_time < 3:
print("prompt:", prompt)
response = mp.chat(prompt, chat_history)
print("*************** {}. 调用大模型结束,耗时:{}.......".format(cur_request_time, end_time - start_time), flush=True)
if not response or not isinstance(response, dict):
print("调用大模型错误,即将重试....", response)
"args name": "args value"
"criticism": "criticism",
"speak": "当前步骤,返回给用户的总结",
action_info = response.get("action")
action_name = action_info.get('name')
action_args = action_info.get('args')
print("当前action name: ", action_name, action_args)
if action_name == "finish":
final_answer = action_args.get("answer")
print("final_answer:", final_answer)
observation = response.get("observation")
action_name到函数的映射: map -> {action_name: func}
func = tools_map.get(action_name)
call_func_result = func(**action_args)
except Exception as err:
call_func_result = "{}".format(err)
agent_scratch = agent_scratch + "\n: observation: {}\n execute action result: {}".format(observation,
assistant_msg = parse_thoughts(response)
chat_history.append([user_prompt, assistant_msg])
if cur_request_time == max_request_time:
query = input("请输入您的目标:")
agent_execute(query, max_request_time=max_request_time)
if __name__ == "__main__":