diff --git a/gradio_multiInputs.py b/gradio_multiInputs.py index f7ded82..52abde5 100644 --- a/gradio_multiInputs.py +++ b/gradio_multiInputs.py @@ -7,6 +7,13 @@ from dashscope import Generation dashscope.api_key = 'sk-73e9b0452a7e40048495d8ac8ab1afe4' # Vincent's API key +def pross_instruction(system, rag_dict): + """ + 使用format_map()替换字符串中的变量。 + """ + return system.format_map(rag_dict) + + def response(prompt, instruction): messages = [{'role': 'system', 'content': instruction}, {'role': 'user', 'content': prompt}] diff --git a/testGrDownload.py b/testGrDownload.py new file mode 100644 index 0000000..22ac21f --- /dev/null +++ b/testGrDownload.py @@ -0,0 +1,104 @@ +import gradio as gr +import pandas as pd +import tempfile +import csv +from http import HTTPStatus +import dashscope +from dashscope import Generation + + + + +def pross_instruction(system, rag_dict): + """ + 使用format_map()替换字符串中的变量。 + """ + return system.format_map(rag_dict) + + +def response(prompt, instruction): + messages = [{'role': 'system', 'content': instruction}, + {'role': 'user', 'content': prompt}] + + response = Generation.call(model='qwen-plus', + messages=messages, + seed=1234, + result_format='message', + stream=False, + incremental_output=False, + temperature=1.8, + top_p=0.9, + top_k=999 + ) + if response.status_code == HTTPStatus.OK: + message = response.output.choices[0]['message']['content'] + return message + else: + print('Request id: %s, Status code: %s, error code: %s, error message: %s' % ( + response.request_id, response.status_code, + response.code, response.message + )) + return f"Error: Could not generate response with Status code: {response.status_code}, error code: {response.code}" + + +def format_full_prompt(df): + # 为每个 row 创建 context + df['context'] = df.apply(lambda row: f"{row['RAG1']}-{row['RAG2']}", axis=1) + + # 准备用于 format 的字典 + format_dict = df[['business_use_mark', 'context', 'question']].apply(lambda x: dict(zip(x.index, x)), axis=1) + + # 使用 apply() 和 lambda 函数格式化 full_prompt 列 + df['full_prompt'] = df.apply(lambda row: row['full_prompt'].format(**format_dict[row.name]), axis=1) + + # 可选:删除临时创建的 context 列 + df.drop(columns=['context'], inplace=True) + return df + + +def process_xlsx(xlsx_file, instruction): + # 读取xlsx文件到pandas DataFrame + df = pd.read_excel(xlsx_file) + + # 格式化prompts + formatted_df = format_full_prompt(df) + + # 假设我们要处理的提示是DataFrame的'full_prompt'列 + formatted_df['Response'] = formatted_df['full_prompt'].apply(lambda prompt: response(prompt, instruction)) + + # 使用tempfile创建一个临时文件路径保存处理后的xlsx + tmp_path = tempfile.NamedTemporaryFile(delete=True, suffix='.xlsx').name + formatted_df.to_excel(tmp_path, index=False, engine='openpyxl') + + return formatted_df, tmp_path + + +def main(): + with gr.Blocks() as demo: + gr.Markdown("### 大模型xlsx处理工具") + with gr.Accordion("输入说明"): + gr.Markdown("请上传一个xlsx文件,文件应包含prompts。") + system_instruction = gr.Textbox(label="System Instruction", lines=2, + value="A conversation between a user and an LLM-based AI assistant. The assistant gives helpful and honest answers.") + + file_input = gr.File(label="上传xlsx文件") + submit_button = gr.Button("处理xlsx") + + output_table = gr.Dataframe(label="处理后的数据") + output_file = gr.File(label="下载处理后的文件") + clear_data = gr.ClearButton(components=[output_table, output_file], value="Clear processed data") + clear_all = gr.ClearButton(components=[file_input, output_table, output_file], value="Clear console") + def update_output(xlsx_file, instruction): + if xlsx_file is not None: + formatted_df, tmp_path = process_xlsx(xlsx_file, instruction) + return formatted_df, tmp_path # 返回DataFrame和文件路径 + + submit_button.click(fn=update_output, inputs=[file_input, system_instruction], + outputs=[output_table, output_file]) + + demo.launch() + + +if __name__ == "__main__": + main() +