使用 Flask 快速构建 基于langchain 和 chatGPT的 PDF摘要总结

简介

这里不对 langchain 和 chatGPT 进行介绍,仅对实现过程进行整理

环境

Python >=3.8
Flask2.2.3
Jinja2
3.1.2
langchain0.0.143
openai
0.27.4

实现 总结功能

使用 langchain 和 openai 接口实现总结功能
实现逻辑:通过text_splitter 将pdf 分块,送入 langchain 的summarize_chain中进行处理

同样也可以使用 OpenAIEmbeddings 来实现,文档地址:langchain 官方文档

创建文件:summarize.py

from langchain import PromptTemplate
from langchain.callbacks import get_openai_callback
from langchain.chains.summarize import load_summarize_chain
from langchain.text_splitter import RecursiveCharacterTextSplitterdef summarize_docs(docs, doc_url, llm):print(f'You have {len(docs)} document(s) in your {doc_url} data')print(f'There are {len(docs[0].page_content)} characters in your document')text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)split_docs = text_splitter.split_documents(docs)print(f'You have {len(split_docs)} split document(s)')prompt_template = """Write a concise summary of the following:{text}CONCISE SUMMARY IN CHINESE:"""PROMPT = PromptTemplate(template=prompt_template, input_variables=["text"])chain = load_summarize_chain(llm, chain_type="map_reduce", verbose=False, return_intermediate_steps=True,map_prompt=PROMPT, combine_prompt=PROMPT)response = ""with get_openai_callback() as cb:response = chain({"input_documents": split_docs}, return_only_outputs=True)print(f"Total Tokens: {cb.total_tokens}")print(f"Prompt Tokens: {cb.prompt_tokens}")print(f"Completion Tokens: {cb.completion_tokens}")print(f"Successful Requests: {cb.successful_requests}")print(f"Total Cost (USD): ${cb.total_cost}")return response

创建接口

使用 Flask 框架创建简单的接口
创建文件server.py

import osfrom flask import Flask, request, make_response, render_template
from langchain import OpenAI
from langchain.document_loaders import PyPDFLoaderfrom summarize import summarize_docsapp = Flask(__name__)@app.route('/summarize', methods=['POST'])
def summarize():index_path = "./upload"if 'file' not in request.files:return "Please send a POST request with a file", 400uploaded_file = request.files["file"]filename = uploaded_file.filenamefilepath = os.path.join(index_path, os.path.basename(filename))uploaded_file.save(filepath)llm = OpenAI(temperature=0, openai_api_key=OPENAI_API_KEY, model_name="text-davinci-003",openai_api_base=OPENAI_API_BASE)loader = PyPDFLoader(filepath)pages = loader.load_and_split()result = summarize_docs(pages, filepath, llm)return make_response(str(result.get("output_text"))), 200if __name__ == '__main__':if not os.path.exists('./upload'):os.makedirs('./upload')# 这里输入 openai 的 key os.environ["OPENAI_API_KEY"] = "sk-XXXXXXXXXXXXXXXXXXXXXXXXX"OPENAI_API_KEY = os.environ['OPENAI_API_KEY']# 如果有域名代理可以使用这里# OPENAI_API_BASE = 'https://XXXX/v1'# 指定项目地址和端口号,这里需要和 web.xml 中对应app.run(port=19100, host='127.0.0.1')

创建页面

server.py 中添加路由地址

@app.route('/')
def index():msg = "welcome to pdf summarize."return render_template("web.html", data=msg)

创建目录 templates, 并创建 html 文件 web.html:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>文件上传</title><style>body {font-family: Arial, sans-serif;margin: 0;padding: 0;background-color: #f5f5f5;}.container {max-width: 600px;margin: 0 auto;padding: 20px;background-color: #fff;border-radius: 10px;box-shadow: 0 0 10px rgba(0, 0, 0, .2);}h1 {margin-top: 0;font-size: 32px;color: #333;text-align: center;}form {display: flex;flex-direction: column;align-items: center;}input[type="file"] {margin-bottom: 20px;font-size: 16px;color: #333;padding: 10px;border: 1px solid #ccc;border-radius: 5px;background-color: #fff;box-shadow: 0 0 5px rgba(0, 0, 0, .1);}button {padding: 10px;background-color: #4CAF50;color: #fff;border: none;border-radius: 5px;cursor: pointer;transition: background-color .2s;}button:hover {background-color: #3e8e41;}.result {margin-top: 20px;padding: 20px;background-color: #f1f1f1;border-radius: 5px;white-space: pre-wrap;}.progress {margin-top: 20px;width: 100%;height: 20px;background-color: #f1f1f1;border-radius: 5px;overflow: hidden;box-shadow: 0 0 5px rgba(0, 0, 0, .1);}.bar {width: 0;height: 100%;background-color: #4CAF50;transition: width .2s;}</style></head><body><div class="container"><h1>文件上传</h1><!-- 指定项目地址和端口号,这里需要和启动地址、断开和接口对应 --><form id="upload-form" method="POST" action="http://127.0.0.1:19100/summarize" enctype="multipart/form-data"><input type="file" name="file"><button type="submit">生成摘要</button></form><div class="progress"><div class="bar"></div></div><h2>返回结果</h2><div>目前响应时间较长,700k 文件响应时间为22秒,请耐心等待</div><div class="result"><div id="result-text"></div></div><div>页面生成 power by openai chatGPT-3.5</div></div><script>const form = document.querySelector('#upload-form');const progressBar = document.querySelector('.bar');form.addEventListener('submit', async (event) => {event.preventDefault();const formData = new FormData(form);const xhr = new XMLHttpRequest();xhr.upload.addEventListener('progress', (event) => {const percent = (event.loaded / event.total) * 100;progressBar.style.width = percent + '%';});xhr.onreadystatechange = () => {if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {progressBar.style.width = '0';document.querySelector('#result-text').textContent = xhr.responseText;}};xhr.open(form.method, form.action);xhr.send(formData);});</script></body>
</html>

运行展示

完成后整体项目结构如下:
在这里插入图片描述
运行效果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15561.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABAP编程错误-ITAB_DUPLICATE_KEY

問題描述&#xff1a;SO:1100002326訂單修改存檔時&#xff0c;未更新資料&#xff1b;查看ST22發生ITAB_DUPLICATE_KEY的錯誤 處理歩驟&#xff1a; 1.在FQM_FLOW的Table&#xff0c;在ORIGIN_DOCUMENT_ID欄位用訂單號可查出相關的資料&#xff0c;其中DELETED為空白的2筆資料…

SAPSQL_IN_ITAB_ILLEGAL_OPTION dump

Created by Jerry Wang, last modified on Mar 31, 2014 这个runtime error的意思是NM( not empty )被不正确的传入了OPEN SQL的IN keyword里。 我们可以发现domain BAPIOPTION的value range里是不包含NM的。 如果直接在UI上给OBJECT_FAMILY指定NM的search attribute: 点searc…

iTab推荐:ProcessOn-你的创意小帮手

iTab推荐&#xff1a;ProcessOn-你的创意小帮手 如果你是创意工作者&#xff0c;经常需要整理自己的思路&#xff0c;那么一定不要错过这款宝藏软件&#xff0c;它可以帮你大幅提升效率&#xff0c;快速整理自己的idea&#xff1b; 可能你已经听过它了&#xff0c;即ProcessO…

兼顾美观和实用的标签页插件——iTab

兼顾美观和实用的标签页插件——iTab 闲来网上冲浪&#xff0c;被b站一个视频的标题吸引&#xff1a;“【【良心巨制】我一个人肝出来的iTab新标签页&#xff0c;可能是2022年最值得期待的浏览器扩展了-哔哩哔哩】”&#xff08;视频链接&#xff1a;https://b23.tv/2v5hcom&a…

【好物安利】给大家安利一款好用的浏览器插件-iTab

今天给大家安利一款我最近一直在用的浏览器起始页插件-itab。 这款起始页插件&#xff0c;除过可以内置Google&#xff0c;百度等众多搜索引擎外&#xff0c;还聚集了日历、天气、头条新闻、壁纸、倒计时类似iOS小组件和常用网站等等功能&#xff0c;并且这个起始页插件的审美…

【工具】工具推荐-Edge浏览器新标签页插件———iTab

向大家推荐一款我自己用了很长时间的插件——itab 理由一&#xff1a;页面清新简介 点击时间可以切换几件模式 理由二&#xff1a;便捷切换搜索引擎 理由三&#xff1a;无限添加网站图标 更多优点,可以看一下作者本人的视频 【良心巨制】我一个人肝出来的iTab新标签页&#…

iTab新标签页重磅更新 |这些功能绝对有你想要的新体验!

01 写在前面 csdn的朋友们&#xff0c;你好哦&#xff0c;我是iTab 插件的独立开发者&#xff0c;今天给大家安利一下我做的这款桌面插件。 首先要告诉大家一个好消息&#xff1a; 最近iTab新标签页被Edge 浏览器商店官方热门&#x1f525;推荐啦。 在此&#xff0c;特别感谢…

SAP DUMP ITAB_ILLEGAL_SORT_ORDER

1. 报错界面 2. 报错原因 ls_style TYPE lvc_s_styl.是排序表,APPEND的数据时必须遵守主键的排序 3. 解决方法 方法1:使用语法: INSERT wa_style INTO TABLE lt_style ,程序将自动按照字段排序插入到对应行 (建议使用方法)

录屏居然也可以用iTab新标签页

一直以来&#xff0c;如何在浏览器录屏&#xff0c;都是一个不太好解决的问题&#xff1b;网上的录屏软件&#xff0c;要么是付费的&#xff0c;要么有很多广告&#xff0c;操作非常繁琐&#xff0c;功能乱七八糟的&#xff1b;相信你也被相同的事情所烦恼&#xff0c;不妨尝试…

iTab新标签页,一款个性化的浏览器起始页插件

神奇插件&#xff0c;还你一个干净整洁的起始页&#xff01; 今天给大家推荐一款超令人惊喜的个性化浏览器起始页插件 iTab ,它是一款让你不受广告干扰的卡片式起始页插件。相信很多人的起始页插件都有为广告所烦恼的经历&#xff0c;而这款插件则可以为你解决困扰&#xff01;…

iTab插件谷歌浏览器安装、使用(程序员、开发、设计、摸鱼神器)

iTab介绍&#xff08;卡片式小组件&#xff0c;好看又好用&#xff09; iTab&#xff0c;一个标签页美化插件&#xff0c;安装之后&#xff0c;可以取代浏览器默认的标签页&#xff0c;效果如下。 iTab 最大的特色在于&#xff0c;加入了 iOS 上的小组件的设计&#xff0c;让它…

iTab!一款超级无敌好用的浏览器插件 简洁美观

iTab免费&#xff0c;纯净无干扰&#xff0c;没有任何广告和多余的信息&#xff0c;登录以后还能设置同步&#xff0c;可以把收藏家里的网站全都搬到iTab上&#xff0c;超级方便快捷&#xff01; 网友评论 用过了很多款标签页插件&#xff0c;都因为各种问题劝退了&#xff0…

个人开发作品分享:iTab新标签页

我是前端工程师&#xff0c;因为用了很多浏览器默认起始页&#xff0c;要么广告太多&#xff0c;要么呆板无趣&#xff0c;都满足不了我对美观和实用兼顾的需求&#xff0c;所以就自己动手做了一个。前后我一个人从设计产品到前后端开发连着熬夜肝了一个多月上架了这个iTab新标…

用iTab来私人订制属于你的新标签页面

是不是还在为浏览器新标签页功能单一而苦恼&#xff1f;是不是因为壁纸单一找不到优美的图片而感到心烦气躁&#xff1f;是不是为频频弹出的广告而感到苦恼&#xff1f;今天向大家推荐一款宝藏浏览器插件&#xff0c;满足你的所有需要&#xff01; iTab&#xff0c;一切皆有可能…

iTab浏览器插件,助你打造个性桌面

iTab浏览器插件&#xff0c;助你打造个性桌面 哈喽&#xff01;各位小伙伴们。随着互联网的高速发展&#xff0c;软件种类层出不穷&#xff0c;人们愈发注重其简便性、功能性、实用性等。今天我要向大家推荐一款非常好用的浏览器插件-iTab。 iTab拥有海量卡片应用&#xff0c;…

神级浏览器插件iTab新标签页

各位好&#xff0c;如果你还在用十年前的杂乱的导航页&#xff0c;那么你一定要看看这篇文章&#xff01;这篇文章将介绍一个改变你的浏览器主页的小插件&#xff0c;还给你一个干净清爽、潮流美观的浏览器主页。这款插件就是iTab&#xff0c;iTab是一款可以用于多种浏览器平台…

iTab 近期更新一览,快来看看有没有你最喜欢的新功能

Hi&#xff0c;iTab的朋友们&#xff0c;你们好哦。 给朋友们“汇报”一下我们近期所更新的功能&#xff0c; 看看有没有你最喜欢的部分。 01 微信扫码登陆 点击iTab【侧边栏】左上角头像时&#xff0c;可以微信扫码登陆&#xff0c;一键同步书签到云端账户&#xff0c;会极大…

ChatGPT来临,革新学习方式

近年来&#xff0c;人工智能技术的快速发展引发了广泛的关注&#xff0c;尤其是在教育领域。作为人工智能技术的重要应用之一&#xff0c;聊天机器人ChatGPT的问世&#xff0c;为学生和教师带来了更多的机会和挑战。在这篇文章中&#xff0c;我们将探讨ChatGPT如何革新学习方式…

(Chatgpt辅助)C语言移植Code128B条形码算法到LVGL8.3【附跑通代码】

&#xff08;Chatgpt辅助&#xff09;C语言移植Code128B条形码算法到LVGL8.3【附跑通代码】 <1>CODE128算法简介<2>C语言实现算法<3>LVGL绘图函数实现<4>ChatGPT使用有感 序言&#xff1a; 这篇博客是我在移植条形码过程中&#xff0c;发现CSDN以及Goo…

如何用ChatGPT生成思维导图

一、思维导图软件 XMind是一个非常出色的思维导图软件&#xff0c;具有简单易用、美观实用、多种导出、多平台支持等优点。 XMind的官网为www.xmind.net。 以下是一些可以用Markdown在线生成思维导图的网站&#xff1a; Mermaid Mermaid是一个基于JavaScript的开源项目&…