import gradio as gr import random import time from typing import List from langchain.embeddings.openai import OpenAIEmbeddings from langchain.vectorstores import FAISS from langchain.chains import RetrievalQA from langchain.chat_models import ChatOpenAI enable_chat = False # 初始化为False def toggle_enable_chat(): global enable_chat enable_chat = not enable_chat return f"Enable Chat set to {enable_chat}" def initialize_aliyun_qa_bot(vector_store_dir: str="aliyun_qa"): print(vector_store_dir) db = FAISS.load_local(vector_store_dir, OpenAIEmbeddings()) print(db) llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0) global ALIYUN_BOT ALIYUN_BOT = RetrievalQA.from_chain_type(llm, retriever=db.as_retriever(search_type="similarity_score_threshold", search_kwargs={"score_threshold": 0.8})) # 返回向量数据库的检索结果 ALIYUN_BOT.return_source_documents = True return ALIYUN_BOT def aliyun_chat(message, history): print(f"[message]{message}") print(f"[history]{history}") # TODO: 从命令行参数中获取 global enable_chat ans = ALIYUN_BOT({"query": message}) # 如果检索出结果,或者开了大模型聊天模式 # 返回 RetrievalQA combine_documents_chain 整合的结果 if ans["source_documents"] or enable_chat: print(f"[result]{ans['result']}") print(f"[source_documents]{ans['source_documents']}") return ans["result"] # 否则输出套路话术 else: return "基于现有文档数据,无法回答你的问题,请您联系对应的阿里云企业咨询顾问。" def launch_gradio(): # 创建 ChatInterface 和其他组件 chat_interface = gr.ChatInterface( fn=aliyun_chat, title="企业数字化转型咨询顾问(aliyun)问答机器人", examples=["阿里云有没有成熟的方法或者模板能够供我们去把业务价值和底座组件对应起来?","我们要建设中交二航局的数字化底座,阿里云有什么建议","公共云上,EMR和MaxCompute的使用量多少?","阿里公共云上能用maxcompute吗?"], description='
问答数据基于阿里云咨询QA文档 请以官方文档为准。
'+'
\ 精益价值logo
', # cache_examples=True, # retry_btn=None, # undo_btn=None, chatbot=gr.Chatbot(height=450), ) # 创建一个简单的按钮界面来触发 toggle_enable_chat 函数 toggle_chat_interface = gr.Interface( fn=toggle_enable_chat, inputs=gr.Button("Toggle Chat"), outputs="text" ) # 使用 TabbedInterface 来组合聊天界面和设置界面 demo = gr.TabbedInterface([chat_interface, toggle_chat_interface], ["Chat", "Settings"]) demo.launch(auth=("admin", "leanvalue")) demo.deploy() if __name__ == "__main__": # 初始化机器人 initialize_aliyun_qa_bot("aliyun_qa") # 启动 Gradio 服务 launch_gradio()