摘要生成器(Gradio界面)
摘要生成器(Gradio)
任务背景
该任务是构建一个基于大语言模型(LLM)的文本摘要工具,允许用户输入任意文章并通过AI模型生成简洁的摘要。任务通过Gradio框架实现交互式Web界面,用户可调整生成参数(如温度参数),并支持导出摘要结果。
核心功能
- 文本摘要生成:用户输入文章后,模型根据预设提示词生成概括性内容。
- 参数控制:通过温度参数调节生成结果的创造性(温度值越高,输出越多样化)。
- 交互界面:提供直观的输入输出区域、重置对话和导出结果的功能。
- 结果保存:支持将对话记录和原文导出为JSON文件。
技术要点
- 模型调用:使用OpenAI兼容的API(如阿里云DashScope)调用大语言模型(如
qwen-turbo)。 - Web框架:借助Gradio快速构建可视化界面,简化用户操作流程。
- 数据持久化:通过JSON文件保存生成结果,便于后续分析或复用。
完整代码
import json
from typing import List, Tupleimport openai
import gradio as gr# 设置API密钥(示例为阿里云DashScope)
OPENAI_API_KEY = "TripleH"
client = openai.OpenAI(api_key=OPENAI_API_KEY,base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 阿里云API端点
)# 预设摘要提示词
prompt_for_summarization = "请将以下文章概括成几句话。"def reset() -> List:"""重置对话历史"""return []def interact_summarization(prompt: str, article: str, temp=1.0) -> List[Tuple[str, str]]:"""调用模型生成摘要:param prompt: 提示词:param article: 待摘要文章:param temp: 温度参数(控制输出多样性)"""input = f"{prompt}\n{article}"response = client.chat.completions.create(model="qwen-turbo",messages=[{'role': 'user', 'content': input}],temperature=temp,)return [(input, response.choices[0].message.content)]def export_summarization(chatbot: List[Tuple[str, str]], article: str) -> None:"""导出对话记录和原文到JSON文件"""target = {"chatbot": chatbot, "article": article}with open("files/part1.json", "w") as file:json.dump(target, file)# 构建Gradio界面
with gr.Blocks() as demo:gr.Markdown("# 第1部分:摘要\n填写任何你喜欢的文章,让聊天机器人为你总结!")chatbot = gr.Chatbot()prompt_textbox = gr.Textbox(label="提示词", value=prompt_for_summarization, visible=False)article_textbox = gr.Textbox(label="文章", interactive=True, value="填充")with gr.Column():gr.Markdown("# 温度调节\n温度用于控制聊天机器人的输出。温度越高,响应越具创造性。")temperature_slider = gr.Slider(0.0, 2.0, 1.0, step=0.1, label="温度")with gr.Row():sent_button = gr.Button(value="发送")reset_button = gr.Button(value="重置")with gr.Column():gr.Markdown("# 保存结果\n当你对结果满意后,点击导出按钮保存结果。")export_button = gr.Button(value="导出")# 绑定按钮事件sent_button.click(interact_summarization, inputs=[prompt_textbox, article_textbox, temperature_slider], outputs=[chatbot])reset_button.click(reset, outputs=[chatbot])export_button.click(export_summarization, inputs=[chatbot, article_textbox])demo.launch(debug=True)
