import openai from llama_index import SimpleDirectoryReader, GPTVectorStoreIndex, Prompt from cnocr import CnOcr import gradio as gr import time ocr = CnOcr() history_max_len = 500 all_max_len = 2000 def get_embeddings_from_texts(openai_apikey,text): openai.api_key = openai_apikey response = openai.Embedding.create( input = text, model = "text-embedding-ada-002" ) return reponse['data'][0]['embedding'] def doc_index(txt, openai_apikey): openai.api_key = openai_apikey path = str(time.time()) import os os.mkdir(path) with open(path + '/doc.txt', mode = 'w', encoding = 'utf-8') as f: f.write(txt) documents = SimpleDirectoryReader(path).load_data() index = GPTVectorStoreIndex.from_documents(documents) template = ( "你是一个有用的助手,能够根据图片内容准确地回答问题,并且尽量做到简洁明了:\n" "\n" "{context_str}\n" "\n" "{query_str}\n" "请你回复用户。\n" ) qa_template = Prompt(template) query_engine = index.as_query_engine(text_qa_template = qa_template) return query_engine, gr.Textbox.update(visible = True), gr.Button.update(visible = True), gr.Markdown.update( value = '''建立索引成功,可以开始对话咯'''), gr.Chatbot.update(visible = True),0 def get_response(openai_apikey, msg, bot, query_engine): openai.api_key = openai_apikey query_str = '历史对话如下:\n' for his in bot: query_str += '用户:' + his[0] + '\n' query_str += 'bot:' + his[1] + '\n' query_str += '用户:' + msg + '\n' res = query_engine.query(query_str) print(res) bot.append([msg, str(res)]) return bot[max(0, len(bot) - 3):] def up_file(files): Doc_text_list = [] for idx, file in enumerate(files): print(file.name) return gr.Textbox.update(visible = True), gr.Button.update(visible = True), gr.Markdown.update(value = '点击“建立索引”开始对话',) with gr.Blocks() as demo: with gr.Row(): with gr.Column(): openai_apikey = gr.Textbox(label = 'openai api key', placeholder = '输入你的openai apikey') file = gr.File(file_types = ['.jpg'], label = '点击上传图片,格式需为jpg', file_count = 'multiple') txt = gr.Textbox(label = '图片解析结果', visible = False) with gr.Row(): index_bu = gr.Button(value = '点击建立索引', visible = False) query_engine = gr.State([]) with gr.Column(): md = gr.Markdown('点击左侧区域上传图片进行解析') chat_bot = gr.Chatbot(visible = False) msg_txt = gr.Textbox(value = '消息框', placeholder = '输入信息发送', visible = False) chat_bu = gr.Button(visible = False) file.change(up_file, [file], [txt, index_bu, md]) index_bu.click(doc_index, [openai_apikey, txt],[query_engine, msg_txt, chat_bu, md, chat_bot]) chat_bu.click(get_response, [openai_apikey, msg_txt, chat_bot, query_engine], [chat_bot]) if __name__ == "__main__": demo.queue().launch()