当前位置: 首页 > news >正文

大语言模型实践——基于现有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:

大模型输出结果:

以上,欢迎交流及批评。 


拥抱变化,探索未知。

共勉。

相关文章:

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

基于现有的API平台做一些实用的AI小应用。 API服务商:阿里云百炼 云服务器:阿里云(2核2GB) 部署框架:gradio 调用框架:openai 语言:Python (注:若搭建网站或API接口…...

获取程序运行目录 (jar运行目录)

FileSystems.getDefault().getPath("").toAbsolutePath().toString() 和 Path.get(MyClass.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParent() 这两个代码片段在Java中用于获取不同的路径,尤其在打包为JAR文件运行时会有显…...

Elasticsearch:如何使用 Elastic 检测恶意浏览器扩展

作者:来着 Elastic Aaron Jewitt 当你的 CISO 询问你的任何工作站上是否安装过特定的浏览器扩展时,你多快能得到正确答案?恶意浏览器扩展是一个重大威胁,许多组织无法管理或检测。这篇博文探讨了 Elastic Infosec 团队如何使用 os…...

Oracle CDB自动处理表空间不足脚本

之前我曾经发过一个自动处理表空间的脚本,可以通过定时任务自动处理表空间不足的问题;但是之前那个脚本没有涵盖CDB模式下的PDB,这里将脚本做了一下更新,可以处理CDB模式下多PDB的表空间问题。 传统模式的脚本请参考这个链接 Or…...

java-list深入理解(流程图)

List源码学习: 此篇文章使用流程图和源码方式,理解List的源码,方便记忆 核心逻辑流程图: #mermaid-svg-BBrPrDuqUdLMtHvj {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BBrPrDuqUdLMtHvj .error-icon{fill:#…...

Vue 中的 keep-alive 组件是什么?

Vue 中的 keep-alive 组件 keep-alive 是 Vue.js 提供的一个内置组件,用于在组件切换时缓存组件的状态。它可以有效提高用户体验,特别是在需要频繁切换视图的场景中,例如在 SPA(单页面应用)中。 目录 什么是 keep-alive如何使用 keep-alive属性介绍实际示例注意事项总结…...

单元测试的入门实践与应用

单元测试的目的是验证代码中最小的可测试单元(通常为函数或方法)是否按预期运行。它应当独立于系统的其他部分,并专注于特定的功能。 在软件开发中,单元测试是确保代码质量与可维护性的核心环节。优秀的单元测试不仅能帮助开发者…...

【大模型】硅基流动对接DeepSeek使用详解

目录 一、前言 二、硅基流动介绍 2.1 硅基流动平台介绍 2.1.1 平台是做什么的 2.2 主要特点与功能 2.2.1 适用场景 三、硅基流动快速使用 3.1 账户注册 3.2 token获取 3.2.1 获取token技巧 四、Cherry-Studio对接DeepSeek 4.1 获取 Cherry-Studio 4.2 Cherry-Stud…...

[Windows] PDF补丁丁v1.1.0.4627绿色版

[Windows] PDF补丁丁 链接:https://pan.xunlei.com/s/VOIdp50MV2BkOrFott_SCev1A1?pwdvbw4# PDFPatcher 是一款专门用于编辑 PDF 文件的软件,其主要功能包括添加、删除、修改、替换和提取 PDF 文件中的文本、图像、页面等内容,以及支持密码…...

Oracle 变更redo log文件位置

更改Oracle数据库的Redo log文件位置,可以按照以下步骤操作。 1.查询当前Redo log文件信息 select * from v$log; select * from v$logfile;通过查询结果可知Redo log文件放在/oradata/redofile 目录下。 2.拷贝redo log文件到新的位置/Data/redolog $cd /orada…...

使用Redis实现业务信息缓存(缓存详解,缓存更新策略,缓存三大问题)

一、什么是缓存? 缓存是一种高效的数据存储方式,它通过将数据保存在内存中来提供快速的读写访问。这种机制特别适用于需要高速数据访问的应用场景,如网站、应用程序和服务。在处理大量数据和高并发请求时, 缓存能显著提高性能和用户体验。 Redis就是一款常用的缓存中间件。…...

已验证正常,Java输入字符串生成PDF文件

Java输入字符串生成PDF文件过程&#xff1a; 在Java开发中&#xff0c;如何将字符串转换为 PDF 是一个常见的需求。网上找了很多例子都无法生成&#xff0c;经过多次尝试&#xff0c;终于实现了&#xff0c;特此记录一下。 1、引入pom.xml 添加所需的依赖 <dependency>&…...

android手机安装deepseek-r1:1.5b

序 本文主要展示一下如何在android手机上安装deepseek-r1:1.5b 步骤 安装termux 到https://termux.dev/cn/index.html去下载 然后执行termux-setup-storage以获取手机存储权限 安装构建依赖 pkg install git cmake golang下载ollama git clone --depth 1 https://gitee.…...

51单片机俄罗斯方块清屏函数

/************************************************************************************************************** * 名称&#xff1a;LED_Clr * 功能&#xff1a;清屏 * 参数&#xff1a;NULL * 返回&#xff1a;NULL * 备注&#xff1a;temp数组为动态显示数据&#xff…...

PLSQL: 存储过程,用户自定义函数[oracle]

注意: raise notice是高斯的输出语句; DBMS_OUT_PUT.PUT_LINE是oracle的输出语句 存储过程 Stored Procedure 存储过程可以封装数据访问逻辑&#xff0c;使得应用程序可以通过调用存储过程来执行这些逻辑&#xff0c;而不是直接执行SQL语句。这有助于提高代码的可重用性、可…...

深度学习-医学影像诊断

以下以使用深度学习进行医学影像&#xff08;如 X 光片&#xff09;的肺炎诊断为例&#xff0c;为你展示基于 PyTorch 框架的代码实现。我们将构建一个简单的卷积神经网络&#xff08;CNN&#xff09;模型&#xff0c;使用公开的肺炎 X 光影像数据集进行训练和评估。 1. 安装必…...

备战蓝桥杯:双指针(滑动窗口)算法之逛花展

P1638 逛画展 - 洛谷 | 计算机科学教育新生态 这道题我们只要用一个kind和一个mp[N]的数组就能解决了 我们的解法1就是暴力枚举&#xff0c;先固定2&#xff0c;从2开始找连续的满足所有种类的最短的子数组&#xff0c;然后固定5&#xff0c;3&#xff0c;1&#xff0c;3&…...

Linux如何设置软件开机启动呢?

有很多软件&#xff0c;我们安装完之后&#xff0c;服务器一旦重启&#xff0c;软件也需要我们手动再次启动&#xff0c;有很多的软件我们不想手动重启&#xff0c;例如Redis、Mysql、MQ等&#xff0c;那我们怎么配置软件跟着服务器也一起启动呢&#xff0c;今天就给大家带来软…...

Vue(3)

一.生命周期及其四个阶段 Vue生命周期&#xff1a;一个Vue实例从创建到销毁的整个过程 生命周期四个阶段&#xff1a;①创建②挂载③更新④销毁 <body><div id"app"><h3>{{ title }}</h3><div><button click"count--"&…...

11vue3实战-----封装缓存工具

11vue3实战-----封装缓存工具 1.背景2.pinia的持久化思路3.以localStorage为例解决问题4.封装缓存工具 1.背景 在上一章节&#xff0c;实现登录功能时候&#xff0c;当账号密码正确&#xff0c;身份验证成功之后&#xff0c;把用户信息保存起来&#xff0c;是用的pinia。然而p…...

IPD的势、道、法、术、器

目录 简介 一、势&#xff1a;为什么 IPD 是必然选择&#xff1f; 二、道&#xff1a;IPD 的底层哲学 三、法与术&#xff1a;从战略到执行的具体路径 四、器&#xff1a;让流程真正落地的工具与组织 不是每家公司都需要全套 IPD&#xff0c;但每家公司都需要 IPD 思维 简…...

top50 BF16算力(TFLOPS) 显卡排行榜 天梯图

排名显卡型号BF16算力(TFLOPS)售价(元)单TFLOPS价格(元)1B200(SXM)45002200000488.892H200(SXM)19801200000606.063MI300X1307750000573.834H100 SXM519501100000564.105RTX PRO 6000 Blackwell1150780000678.266H100 PCIe 80GB1560850000544.877RTX 50906803400050.008A100 80…...

从电磁炉到户外电源:拆解单相SVPWM如何让你的逆变器更安静、更高效

从电磁炉到户外电源&#xff1a;单相SVPWM如何实现静音与高效的双重突破当你深夜用电磁炉煮面时&#xff0c;是否曾被突然的蜂鸣声吓一跳&#xff1f;或是发现户外电源给设备充电时&#xff0c;散热风扇的噪音盖过了山林鸟鸣&#xff1f;这些常见问题背后&#xff0c;隐藏着一个…...

BLE蓝牙扫描深度剖析:扫描原理、核心参数、前后台差异

一、前言BLE设备交互分为两大角色&#xff1a;广播端&#xff08;外设Peripheral&#xff09;与扫描端&#xff08;中心Central&#xff09;。上一篇博客详解了四大广播模式&#xff0c;本文聚焦配套核心能力——BLE扫描机制。绝大多数蓝牙开发疑难问题&#xff1a;前台能扫后台…...

一次搞懂内存取证:用Volatility3和Cobalt Strike分析工具复现VNCTF‘来一把紧张刺激的CS’

实战内存取证&#xff1a;从Volatility3到Cobalt Strike信标分析全解析 在网络安全事件响应中&#xff0c;内存取证往往是发现高级威胁的最后一道防线。当攻击者使用文件无落地的技术时&#xff0c;传统的磁盘取证可能一无所获&#xff0c;而内存中却保留着攻击行为的完整痕迹。…...

文件-语言-系统:基础IO-2.0——IO重定向接口,语言层缓冲区,系统级缓冲区。内核级分析!

bit::Shadow✧(≖ ◡ ≖✿ 目录 重定向接口dup2() ">" ">>" "<" 函数原型 输出重定向1和2的使用 文件描述符表 ./a.out运行&#xff1a; "./a.out >"默认重定向是fd 1 合并标准输入输出 缓冲区 什么是缓冲…...

ZTE光猫工厂模式解锁:5分钟开启隐藏功能的终极指南

ZTE光猫工厂模式解锁&#xff1a;5分钟开启隐藏功能的终极指南 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 核心关键词&#xff1a;ZTE光猫工厂模式解锁 长尾关键词&#xff1a; ZT…...

BetterJoy终极指南:3分钟让你的Switch手柄变身PC游戏神器

BetterJoy终极指南&#xff1a;3分钟让你的Switch手柄变身PC游戏神器 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.c…...

用PyTorch复现FactorVAE:一个能同时预测收益和风险的量化模型实战教程

用PyTorch实战FactorVAE&#xff1a;构建收益与风险双预测的量化模型 在量化投资领域&#xff0c;传统线性因子模型正逐渐被非线性机器学习方法所取代。然而金融数据特有的低信噪比特性&#xff0c;使得直接从市场数据中提取有效因子成为一项艰巨挑战。本文将深入探讨如何利用P…...

Taotoken的稳定性与低延迟在实时对话应用中的实际体验

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken的稳定性与低延迟在实时对话应用中的实际体验 在开发需要快速响应的AI聊天应用时&#xff0c;后端API的稳定性和延迟表现是…...