import gradio as gr # from demo.gpt_asyn_http import gpt_call_fn # from gpt_syn_http import gpt_syn_http_fn import time import random from call_theta import call_theta_message from skillAgent import SkillAgent skill_agent = SkillAgent() messages = [{"role":"system","content":skill_agent.get_system_prompt()}] def on_radio1_select(choice, chat_history, log_text): tool_result = f"tool_result: 用户选择交易:{choice}" messages.append({"role": "user", "content": tool_result}) chat_history.append({"role": "user", "content": choice}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False) while True: log_text += "\n" + "思考中...." res = skill_agent.call(messages) # print("*-" * 50) # print(messages, res) if res["type"] == "answer": log_text += "\n" + "回复生成中...." chat_history.append({"role": "assistant", "content": res["content"]}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False) break elif res["type"] == "skill": messages.append({"role": "assistant", "content": res["raw_content"]}) log_text += "\n" + f"读取skill({res["content"]})信息中...." with open("skills/资金撤回类问题解答/Skill.md", "r", encoding='utf-8') as f: reference = f.read() reference = "Skill信息:" + reference messages.append({"role": "user", "content": reference}) elif res["type"] == "md": messages.append({"role": "assistant", "content": res["raw_content"]}) log_text += "\n" + f"读取markdown({res["content"]})信息中...." if "红包资金撤回" in res["content"]: with open("skills/资金撤回类问题解答/红包资金撤回问题解答思路.md", "r", encoding='utf-8') as f: reference = f.read() reference = "参考markdown信息:" + reference messages.append({"role": "user", "content": reference}) else: log_text += "\n" + f"读取失败" chat_history.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"}) reference = "参考markdown信息:读取失败,信息缺失" messages.append({"role": "user", "content": reference}) messages.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False) break elif res["type"] == "tool": log_text += "\n" + f"发送选项工具({res["content"]})" if "bill_search_tool" in res["content"]: chat_history.append({"role": "assistant", "content": "请选择你想咨询的交易"}) yield "", chat_history, log_text, gr.update(visible=True), gr.update(visible=False), gr.update(visible=False) break elif "red_envelope_search_tool" in res["content"]: chat_history.append({"role": "assistant", "content": "请选择你想撤回的红包"}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=True), gr.update(visible=False) break elif "red_envelope_withdraw_tool" in res["content"]: chat_history.append({"role": "assistant", "content": "请选择红包撤回是否成功"}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=True) break def on_radio2_select(choice, chat_history, log_text): tool_result = f"tool_result: 用户选择红包:{choice}" messages.append({"role": "user", "content": tool_result}) chat_history.append({"role": "user", "content": choice}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False) while True: log_text += "\n" + "思考中...." res = skill_agent.call(messages) # print("*-" * 50) # print(messages, res) if res["type"] == "answer": log_text += "\n" + "回复生成中...." chat_history.append({"role": "assistant", "content": res["content"]}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False) break elif res["type"] == "skill": messages.append({"role": "assistant", "content": res["raw_content"]}) log_text += "\n" + f"读取skill({res["content"]})信息中...." with open("skills/资金撤回类问题解答/Skill.md", "r", encoding='utf-8') as f: reference = f.read() reference = "Skill信息:" + reference messages.append({"role": "user", "content": reference}) elif res["type"] == "md": messages.append({"role": "assistant", "content": res["raw_content"]}) log_text += "\n" + f"读取markdown({res["content"]})信息中...." if "红包资金撤回" in res["content"]: with open("skills/资金撤回类问题解答/红包资金撤回问题解答思路.md", "r", encoding='utf-8') as f: reference = f.read() reference = "参考markdown信息:" + reference messages.append({"role": "user", "content": reference}) else: log_text += "\n" + f"读取失败" chat_history.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"}) reference = "参考markdown信息:读取失败,信息缺失" messages.append({"role": "user", "content": reference}) messages.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False) break elif res["type"] == "tool": log_text += "\n" + f"发送选项工具({res["content"]})" if "bill_search_tool" in res["content"]: chat_history.append({"role": "assistant", "content": "请选择你想咨询的交易"}) yield "", chat_history, log_text, gr.update(visible=True), gr.update(visible=False), gr.update(visible=False) break elif "red_envelope_search_tool" in res["content"]: chat_history.append({"role": "assistant", "content": "请选择你想撤回的红包"}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=True), gr.update(visible=False) break elif "red_envelope_withdraw_tool" in res["content"]: chat_history.append({"role": "assistant", "content": "请选择红包撤回是否成功"}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=True) break def on_radio3_select(choice, chat_history, log_text): tool_result = f"tool_result: 用户红包撤回结果:{choice}, 当前用户还有10个红包可撤回" messages.append({"role": "user", "content": tool_result}) chat_history.append({"role": "user", "content": choice}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False) while True: log_text += "\n" + "思考中...." res = skill_agent.call(messages) # print("*-" * 50) # print(messages, res) if res["type"] == "answer": log_text += "\n" + "回复生成中...." chat_history.append({"role": "assistant", "content": res["content"]}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False) break elif res["type"] == "skill": messages.append({"role": "assistant", "content": res["raw_content"]}) log_text += "\n" + f"读取skill({res["content"]})信息中...." with open("skills/资金撤回类问题解答/Skill.md", "r", encoding='utf-8') as f: reference = f.read() reference = "Skill信息:" + reference messages.append({"role": "user", "content": reference}) elif res["type"] == "md": messages.append({"role": "assistant", "content": res["raw_content"]}) log_text += "\n" + f"读取markdown({res["content"]})信息中...." if "红包资金撤回" in res["content"]: with open("skills/资金撤回类问题解答/红包资金撤回问题解答思路.md", "r", encoding='utf-8') as f: reference = f.read() reference = "参考markdown信息:" + reference messages.append({"role": "user", "content": reference}) else: log_text += "\n" + f"读取失败" chat_history.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"}) reference = "参考markdown信息:读取失败,信息缺失" messages.append({"role": "user", "content": reference}) messages.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False) break elif res["type"] == "tool": log_text += "\n" + f"发送选项工具({res["content"]})" if "bill_search_tool" in res["content"]: chat_history.append({"role": "assistant", "content": "请选择你想咨询的交易"}) yield "", chat_history, log_text, gr.update(visible=True), gr.update(visible=False), gr.update(visible=False) break elif "red_envelope_search_tool" in res["content"]: chat_history.append({"role": "assistant", "content": "请选择你想撤回的红包"}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=True), gr.update(visible=False) break elif "red_envelope_withdraw_tool" in res["content"]: chat_history.append({"role": "assistant", "content": "请选择红包撤回是否成功"}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=True) break def clear_msg(): global messages messages = [{"role":"system","content":skill_agent.get_system_prompt()}] with gr.Blocks() as demo: with gr.Row(): with gr.Column(scale=2): chatbot = gr.Chatbot() msg = gr.Textbox() clear = gr.ClearButton([msg, chatbot]) radio1 = gr.Radio(choices=["红包交易1", "收钱码交易2", "余额提现交易3"], interactive=True, visible=False) radio2 = gr.Radio(choices=["红包交易1,已撤回", "红包交易2,未撤回", "红包交易3,已领取"], interactive=True, visible=False) radio3 = gr.Radio(choices=["红包撤回成功", "红包撤回失败"], interactive=True, visible=False) with gr.Column(scale=1): log_display = gr.Textbox( label="执行日志", interactive=False, max_lines=20, lines=20 ) def respond(message, chat_history, log_text): chat_history.append({"role": "user", "content": message}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False) messages.append({"role":"user","content":message}) while True: log_text += "\n" + "思考中...." res = skill_agent.call(messages) # print("*-" * 50) print(messages, res) if res["type"] == "answer": log_text += "\n" + "回复生成中...." chat_history.append({"role": "assistant", "content": res["content"]}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False) break elif res["type"] == "skill": messages.append({"role": "assistant", "content": res["raw_content"]}) log_text += "\n" + f"读取skill({res["content"]})信息中...." with open("skills/资金撤回类问题解答/Skill.md", "r", encoding='utf-8') as f: reference = f.read() reference = "Skill信息:" + reference messages.append({"role": "user", "content": reference}) elif res["type"] == "md": messages.append({"role": "assistant", "content": res["raw_content"]}) log_text += "\n" + f"读取markdown({res["content"]})信息中...." if "红包资金撤回" in res["content"]: with open("skills/资金撤回类问题解答/红包资金撤回问题解答思路.md", "r", encoding='utf-8') as f: reference = f.read() reference = "参考markdown信息:" + reference messages.append({"role": "user", "content": reference}) else: log_text += "\n" + f"读取失败" chat_history.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"}) reference = "参考markdown信息:读取失败,信息缺失" messages.append({"role": "user", "content": reference}) messages.append({"role": "assistant", "content": "很抱歉,关于这方面的内容我暂时无法回答您,您看还有别的问题吗?"}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False) break elif res["type"] == "tool": log_text += "\n" + f"发送选项工具({res["content"]})" if "bill_search_tool" in res["content"]: chat_history.append({"role": "assistant", "content": "请选择你想咨询的交易"}) yield "", chat_history, log_text, gr.update(visible=True), gr.update(visible=False), gr.update(visible=False) break elif "red_envelope_search_tool" in res["content"]: chat_history.append({"role": "assistant", "content": "请选择你想撤回的红包"}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=True), gr.update(visible=False) break elif "red_envelope_withdraw_tool" in res["content"]: chat_history.append({"role": "assistant", "content": "请选择红包撤回是否成功"}) yield "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=True) break # return "", chat_history, log_text, gr.update(visible=False), gr.update(visible=False), gr.update(visible=False) msg.submit(respond, [msg, chatbot, log_display], [msg, chatbot, log_display, radio1, radio2, radio3]) clear.click(clear_msg) radio1.change( on_radio1_select, [radio1, chatbot, log_display], [msg, chatbot, log_display, radio1, radio2, radio3], queue=True ) radio2.change( on_radio2_select, [radio2, chatbot, log_display], [msg, chatbot, log_display, radio1, radio2, radio3], # queue=True ) radio3.change( on_radio3_select, [radio3, chatbot, log_display], [msg, chatbot, log_display, radio1, radio2, radio3], # queue=True ) demo.launch(share=True)