大语言模型实践——基于现有API的二次开发

基于现有的API平台做一些实用的AI小应用。

API服务商:阿里云百炼

云服务器:阿里云(2核2GB)

部署框架:gradio

调用框架:openai

语言:Python

(注:若搭建网站或API接口出现调用异常,会立即关闭停止使用)

1、搭建个人DeepSeek-v3、R1网站

搭建代码(DeepSeek-v3)如下,目前DP官网无法充值,后续其官网稳定可以使用官网API进行调用,当下使用阿里云百炼中集成的接口进行调用:

import gradio as gr
from openai import OpenAI
import yamldef get_apikey(path = "apikey.yaml"):with open(path, 'r') as f:config = yaml.safe_load(f)res = config["apikey"]return resdef deepseek_academic_repeat(question):client = OpenAI(api_key = get_apikey()['dashscope'],base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1")response = client.chat.completions.create(model="deepseek-v3",messages=[{"role": "user", "content": f"{question}"},],max_tokens=4096,temperature=1.0,stream=False)# print(response.choices[0].message.content)return response.choices[0].message.contentinterface = gr.Interface(fn=deepseek_academic_repeat,                 # 润色函数inputs=[gr.Textbox(label="输入", placeholder="问题输入",lines=20),],# 输入框outputs=gr.Textbox(label="DeepSeek-v3回复",lines=20), # 输出框title="临时DeepSeek",           # 应用标题description="基于阿里云Dashscope中集成的DeepSeek-v3接口实现对DP-v3的使用" # 应用描述
)if __name__ == "__main__":interface.launch(server_name="0.0.0.0", server_port=5566, share=True)  # 指定端口号

结果如下:

公网可直接访问

(DeepSeek-v3):临时DeepSeekhttp://47.94.104.2:5566/http://47.94.104.2:5566/(DeepSeek-r1): 临时DeepSeek-R1http://47.94.104.2:3344/http://47.94.104.2:3344/

2、基于文本生成模型搭建学术风格润色网站

基于大语言模型实现学术风格润色网站。使用DeepSeek-v3模型。

搭建代码如下:

import gradio as gr
from openai import OpenAI
import yamldef get_apikey(path = "apikey.yaml"):with open(path, 'r') as f:config = yaml.safe_load(f)res = config["apikey"]return resdef deepseek_academic_repeat(question):client = OpenAI(api_key = get_apikey()['dashscope'],base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1")academic_prompt = """# 角色 # 你是一个学术科技论文修改专家,你需要对用户输入论文进行润色或修改,使其符合学术写作规范。# 任务 # 对用户上传文本进行润色和修改,主要从以下几个角度进行:1、使用正式的学术语言,避免口语化表达确保逻辑清晰。2、论述严谨,增强论证的说服力。3、确保描述的视角的一致性,保持与笔者的描述视角相同。4、改进句子结构,使其更简洁和规范。5、增强术语的使用,确保准确表达领域内的概念和观点。6、检查拼写、语法和标点符号错误,确保文本的语言准确无误。# 限制 # 不得编造。输出语言与输入语言保持严格一致。# 输出 # 只输出润色的结果,不输入任何其他的无关内容。"""response = client.chat.completions.create(model="deepseek-v3",messages=[{"role": "system", "content": academic_prompt},{"role": "user", "content": f"{question}"},],max_tokens=2024,temperature=0.15,stream=False)# print(response.choices[0].message.content)return response.choices[0].message.contentinterface = gr.Interface(fn=deepseek_academic_repeat,                 # 润色函数inputs=[gr.Textbox(label="输入文本", placeholder="请输入需要润色的文本",lines=20),],# 输入框outputs=gr.Textbox(label="润色后的文本",lines=20), # 输出框title="文本润色工具",           # 应用标题description="在左侧输入需要润色的文本,右侧将显示润色后的文本。" # 应用描述
)if __name__ == "__main__":interface.launch(server_name="0.0.0.0", server_port=8443, share=True)  # 指定端口号

公网可直接访问

文本润色工具:

文本润色工具http://47.94.104.2:8443/http://47.94.104.2:8443/

3、结合OCR实现PDF全文润色并输出本地

第一步,在云服务上开发功能,并将该功能部署为API接口。

主要需要实现的功能包括,图片文字提取(OCR),润色(大模型)并输出。OCR使用Qwen的视觉大模型(Qwen-VL)实现,润色使用Qwen-Max实现。

功能开发如下:

from openai import OpenAI
import time
import yaml,json
from fastapi import FastAPI
from pydantic import BaseModel
import uvicornapp = FastAPI()def get_apikey(path = "/root/MyProj/apikey.yaml"):with open(path, 'r') as f:config = yaml.safe_load(f)res = config["apikey"]return resdef qwen_ocr(base64_image_code,addr_type):# 获取今天的年月日today = time.strftime("%Y-%m-%d", time.localtime())# print(today)if today == "2025-05-03":print("free test is ending!")return {"res": "free test is ending!"}client = OpenAI(api_key=get_apikey()['dashscope'],base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",)completion = client.chat.completions.create(model="qwen-vl-ocr",messages=[{"role": "user","content": [{"type": "image_url","image_url": f"data:image/{addr_type};base64,{base64_image_code}","min_pixels": 28 * 28 * 4,"max_pixels": 1280 * 784},# 目前为保证识别效果,模型内部会统一使用"Read all the text in the image."作为text的值,用户输入的文本不会生效。{"type": "text", "text": "Read all the text in the image."},]}])res_dict = json.loads(completion.model_dump_json())res_text = res_dict['choices'][0]['message']['content']return {"ocr_res": res_text}def qwen_max_repeat(content):client = OpenAI(api_key=get_apikey()['dashscope'],base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",)completion = client.chat.completions.create(model="qwen-max-2025-01-25",messages=[{"role": "system","content": """# 角色 # 你是一个学术科技论文修改专家,你需要对用户输入论文进行润色或修改,使其符合学术写作规范。# 任务 # 对用户上传文本进行润色和修改,主要从以下几个角度进行:1、使用正式的学术语言,避免口语化表达确保逻辑清晰。2、论述严谨,增强论证的说服力。3、确保描述的视角的一致性,保持与笔者的描述视角相同。4、改进句子结构,使其更简洁和规范,删除不必要的重复内容或过于冗长的表述。5、增强术语的使用,确保准确表达领域内的概念和观点。6、检查拼写、错别字、语法和标点符号错误,确保文本的语言准确无误。# 限制 # 不得编造。输出语言与输入语言保持严格一致。# 输出 # 只输出润色的结果,不输入任何其他的无关内容。并整理输出的排版与格式,包括缩进和换行等。"""},{"role": "user","content": f"""{content}"""}],max_tokens=4096,temperature=0.12,stream=False)res = json.loads(completion.model_dump_json())return {"response": res["choices"][0]["message"]["content"]}class paper_revision_input(BaseModel):base64_image_code: straddr_type: str@app.post("/paper_revision")
def main_process(func_input: paper_revision_input):content = qwen_ocr(func_input.base64_image_code, func_input.addr_type)out = qwen_max_repeat(content)return out["response"]if __name__ == "__main__":uvicorn.run(app, host="0.0.0.0", port=99)

接口为:http://47.94.104.2:99/paper_revision

第二步,在本地调用此服务

技术流程为:pdf读取--分割图像--图像文字识别--润色--输出

import io
from PIL import Image
import base64
import requests
from tqdm import tqdm# ===== pdf2img optional Method 1 ===== # 
# from pdf2image import convert_from_path     # 该方法需要安装poppler,linux下较为方便,在win则较为麻烦,win下建议使用方法2。
# def read_pdf2ImgLs(pdf_path) -> list:
#     images_ls = convert_from_path(pdf_path,dpi=300)
#     return images_ls# ===== pdf2img optional Method 2 ===== # 
import fitz # pip install pymupdf
def read_pdf2ImgLs(pdf_path) -> list:pdf = fitz.open(pdf_path)images_ls = []zoom_x = 2.0zoom_y = 2.0for i,pg in enumerate(pdf):mat = fitz.Matrix(zoom_x, zoom_y)pix = pg.get_pixmap(matrix=mat)img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)images_ls.append(img)return images_lsdef PILimage2base64(image):buffered = io.BytesIO()image_type = 'PNG'image.save(buffered, format=image_type)return base64.b64encode(buffered.getvalue()).decode(),image_typedef paper_revision(pdf_path):# 设置输出txt路径output_txt = 'output.txt'image_ls = read_pdf2ImgLs(pdf_path)for page,image in enumerate(tqdm(image_ls, desc='Processing pages')):base64code,addr_type = PILimage2base64(image)input_data = {"base64_image_code": base64code,"addr_type": addr_type,}repeat_response = requests.post('http://47.94.104.2:99/paper_revision',json=input_data,)assert repeat_response.status_code == 200result = repeat_response.content.decode('utf-8')cleaned_string = result.strip('"')decoded_string = cleaned_string.replace('\\n', '\n').replace('\\\\', '\\')with open(output_txt, 'a', encoding='utf-8') as f:f.write(decoded_string+'\n')f.write(f'(page:{page+1})\n')if __name__ == '__main__':paper_revision('test_file.pdf')

调用结果:

输出结果:

原始pdf:

大模型输出结果:

以上,欢迎交流及批评。 


拥抱变化,探索未知。

共勉。

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

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

相关文章

STM32 RTC 实时时钟说明

目录 背景 RTC(实时时钟)和后备寄存器 32.768HZ 如何产生1S定时 RTC配置程序 第一次上电RTC配置 第1步、启用备用寄存器外设时钟和PWR外设时钟 第2步、使能RTC和备份寄存器访问 第3步、备份寄存器初始化 第4步、开启LSE 第5步、等待LSE启动后稳定状态 第6步、配置LSE为…

Prometheus监控系列 | blackbox_exporter配置实战

Prometheus监控系列 | blackbox_exporter配置实战 1. blackbox简介2. blackbox_exporter部署2.1. 下载安装包2.2. 配置启动文件3. blackbox_exporter配置文件详解3.1. HTTP监控3.2. TCP监控3.3. ICMP监控4. 监控域名SSL证书的到期时间5. 配置Prometheus配置文件6. Grafana监控展…

Node.js 中实现多任务下载的并发控制策略

1、背景与需求 在实际开发中,我们常常需要从多个源下载文件,例如从多个服务器下载图片、视频或音频文件。如果不加以控制,同时发起过多的下载任务可能会导致服务器过载,甚至引发网络拥堵。因此,合理控制并发数量是实现…

HTML应用指南:利用POST请求获取接入比亚迪业态的充电桩位置信息

在新能源汽车快速发展的今天,充电桩的分布和可用性成为了影响用户体验的关键因素之一。比亚迪作为全球领先的新能源汽车制造商,不仅在车辆制造方面取得了卓越成就,也在充电基础设施建设上投入了大量资源。为了帮助用户更方便地找到比亚迪充电桩的位置,本篇文章,我们将探究…

【经验分享】Linux 系统安装后内核参数优化

在 Linux 系统安装后,进行内核优化有助于提升系统的性能、稳定性和安全性。以下是一些常见的内核优化操作: 修改/etc/sysctl.conf 文件 执行sysctl -p使配置生效。 kernel.shmmax 135185569792 kernel.shmall 4294967296 fs.aio-max-nr 3145728 fs.fi…

【2024 CSDN博客之星】技术洞察类:从DeepSeek-V3的成功,看MoE混合专家网络对深度学习算法领域的影响(MoE代码级实战)

目录 一、引言 1.1 本篇文章侧重点 1.2 技术洞察—MoE(Mixture-of-Experts,混合专家网络) 二、MoE(Mixture-of-Experts,混合专家网络) 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场…

防火墙是什么?详解网络安全的关键守护者

当今信息化时代,企业和个人在享受数字生活带来的便利时,也不可避免地面对各种潜在的风险。防火墙作为网络安全体系中的核心组件,就像一道牢不可破的防线,保护着我们的数据和隐私不受外界威胁的侵害。那么防火墙是什么?…

Windows系统下设置Vivado默认版本:让工程文件按需打开

在FPGA开发过程中,我们常常需要在一台电脑上安装多个不同版本的Vivado软件,以满足不同项目的需求。然而,当双击打开一个Vivado工程文件(.xpr)时,系统默认会调用一个固定的版本,这可能并不是我们…

DeepSeek模型架构及优化内容

DeepSeek v1版本 模型结构 DeepSeek LLM基本上遵循LLaMA的设计: 采⽤Pre-Norm结构,并使⽤RMSNorm函数. 利⽤SwiGLU作为Feed-Forward Network(FFN)的激活函数,中间层维度为8/3. 去除绝对位置编码,采⽤了…

蓝桥杯---N字形变换(leetcode第6题)题解

文章目录 1.问题重述2.例子分析3.思路讲解4.代码分析 1.问题重述 这个题目可以是Z字形变换,也可以叫做N字形变换: 给定我们一串字符,我们需要把这串字符按照先往下写,再往右上方去写,再往下去写,再往右上…

vscode无法ssh连接远程机器解决方案

远程服务器配置问题 原因:远程服务器的 SSH 服务配置可能禁止了 TCP 端口转发功能,或者 VS Code Server 在远程服务器上崩溃。 解决办法 检查 SSH 服务配置:登录到远程服务器,打开 /etc/ssh/sshd_config 文件,确保以下…

LogicFlow自定义节点:矩形、HTML(vue3)

效果: LogicFlow 内部是基于MVVM模式进行开发的,分别使用preact和mobx来处理 view 和 model,所以当我们自定义节点的时候,需要为这个节点定义view和model。 参考官方文档:节点 | LogicFlow 1、自定义矩形节点 custo…

19.3 连接数据库

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 ​​​​​​​需要北风数据库的请留言自己的信箱。 连接数据库使用OleDbConnection(数据连接)类&#xff…

19.2 C#数据库操作概览

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 需要北风数据库的请留言自己的信箱。 C#对数据的处理主要集中在System.Data命名空间。 对数据操作会使用到以下几个类&#xff1a…

YOLOv11实时目标检测 | 摄像头视频图片文件检测

在上篇文章中YOLO11环境部署 || 从检测到训练https://blog.csdn.net/2301_79442295/article/details/145414103#comments_36164492,我们详细探讨了YOLO11的部署以及推理训练,但是评论区的观众老爷就说了:“博主博主,你这个只能推理…

JavaEE架构

一.架构选型 1.VM架构 VM架构通常指的是虚拟机(Virtual Machine)的架构。虚拟机是一种软件实现的计算机系统,它模拟了物理计算机的功能,允许在单一物理硬件上运行多个操作系统实例。虚拟机架构主要包括以下几个关键组件&#xff…

[笔记] 汇编杂记(持续更新)

文章目录 前言举例解释函数的序言函数的调用栈数据的传递 总结 前言 举例解释 // Type your code here, or load an example. int square(int num) {return num * num; }int sub(int num1, int num2) {return num1 - num2; }int add(int num1, int num2) {return num1 num2;…

如何在Linux中设置定时任务(cron)

在Linux系统中,定时任务是自动执行任务的一种非常方便的方式,常常用于定期备份数据、更新系统或清理日志文件等操作。cron是Linux下最常用的定时任务管理工具,它允许用户根据设定的时间间隔自动执行脚本和命令。在本文中,我们将详…

【MySQL】我在广州学Mysql 系列—— 数据备份与还原

ℹ️大家好,我是练小杰,今天周一,过两天就是元宵节了,今年元宵节各位又要怎么过呢!! 本文主要对Mysql数据库中的数据备份与还原内容进行讨论!! 回顾:👉【MySQ…

【redis】数据类型之hash

Redis中的Hash数据类型是一种用于存储键值对集合的数据结构。与Redis的String类型不同,Hash类型允许你将多个字段(field)和值(value)存储在一个单独的key下,从而避免了将多个相关数据存储为多个独立的key。…