| import gradio as gr |
| |
| |
| 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) |
| |
| |
| 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) |
| |
| |
| 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) |
| |
| |
| 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(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 |
| |
|
|
| 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], |
| |
| ) |
|
|
| radio3.change( |
| on_radio3_select, |
| [radio3, chatbot, log_display], |
| [msg, chatbot, log_display, radio1, radio2, radio3], |
| |
| ) |
|
|
| |
|
|
| demo.launch(share=True) |
|
|