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

def get_apikey(path = "apikey.yaml"):
    with open(path, 'r') as f:
        config = yaml.safe_load(f)
    res = config["apikey"]
    return res

def 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.content

interface = 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 yaml

def get_apikey(path = "apikey.yaml"):
    with open(path, 'r') as f:
        config = yaml.safe_load(f)
    res = config["apikey"]
    return res

def 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.content

interface = 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 uvicorn

app = FastAPI()

def get_apikey(path = "/root/MyProj/apikey.yaml"):
    with open(path, 'r') as f:
        config = yaml.safe_load(f)
    res = config["apikey"]
    return res

def 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: str
    addr_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.0
    zoom_y = 2.0
    for 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_ls

def PILimage2base64(image):
    buffered = io.BytesIO()
    image_type = 'PNG'
    image.save(buffered, format=image_type)
    return base64.b64encode(buffered.getvalue()).decode(),image_type

def 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 == 200
        result = 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:

大模型输出结果:

以上,欢迎交流及批评。 


拥抱变化,探索未知。

共勉。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows逆向工程入门之进制拓展(BIN OCT DEC HEX)

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、进制基础 1. 什么是进制? 二、二进制、八进制、十六进制的定义和规则 1. 二进制 (Binary) 示例: 2. 八进制 (Octal) 示例: 3. 十六进制 (H…

【数据结构】_堆的实现

目录 1. 堆的实现 1.1 Heap.h 1.2 Heap.c 1.3 Test_Heap.c 专栏前文中,已经介绍了入堆及向上调整算法,出堆及向下调整算法,详情见下文: 【数据结构】_堆的结构及向上、向下调整算法-CSDN博客文章浏览阅读352次,点…

重启电脑之后vscode不见了

某天重启电脑之后发现vscode被删除 双击发现是 后面追溯到文件夹下面发现有一个文件夹的名字叫_ 把这个文件夹打开发现之前的包全在这里面 只需要把这个包里面的文件全部移到上一级即可

高级加密标准AES候选算法之一Crypton

目录 (1)轮密钥加 (2)列混合变换 (3)字节替代变换 (4)字节置换变换 Crypton的加密算法 Crypton的解密算法 密钥扩展算法 高级加密标准AES候选算法之一Crypton Crypton算法是由Chae Hoon Lim于1998年设计的,它是被接受为AES侯选者的15种分组密码之一。该算法是…

2025最新主流深度学习算法全解析

深度学习:开启智能时代的钥匙 在当今数字化时代,深度学习无疑是人工智能领域中最为耀眼的明星。它如同一把神奇的钥匙,开启了智能时代的大门,让计算机从简单的数据处理迈向了复杂的智能决策。深度学习通过构建具有多个层次的神经网…

51单片机(国信长天)矩阵键盘的基本操作

在CT107D单片机综合训练平台上,首先将J5处的跳帽接到1~2引脚,使按键S4~S19按键组成4X4的矩阵键盘。在扫描按键的过程中,发现有按键触发信号后(不做去抖动),待按键松开后,在数码管的第一位显示相应的数字:从左至右&…

如何在浏览器中搭建开源Web操作系统Puter的本地与远程环境

文章目录 前言1.关于Puter2.本地部署Puter3.Puter简单使用4. 安装内网穿透5.配置puter公网地址6. 配置固定公网地址 前言 嘿,小伙伴们!是不是每次开机都要像打地鼠一样不停地点击各种网盘和应用程序的登录按钮,感觉超级麻烦?更让…

【JavaScript】this 指向由入门到精通

this 的概念 this 在JavaScript 及其其他面向对象的编程语言中,存在的目的是为了提供一种在对象方法中引用当前对象的方式。 它为方法提供了对当前实例的引用,使得方法能够访问或者修改实例的成员变量。 注意点: this 的绑定和定位的位置…

javaEE-10.CSS入门

目录 一.什么是CSS ​编辑二.语法规则: 三.使用方式 1.行内样式: 2.内部样式: 3.外部样式: 空格规范 : 四.CSS选择器类型 1.标签选择器 2.类选择器 3.ID选择器 4.通配符选择器 5.复合选择器 五.常用的CSS样式 1.color:设置字体颜色 2.font-size:设置字体大小 3…

数据中台是什么?:架构演进、业务整合、方向演进

文章目录 1. 引言2. 数据中台的概念与沿革2.1 概念定义2.2 历史沿革 3. 数据中台的架构组成与关键技术要素解析3.1 架构组成3.2 关键技术要素 4. 数据中台与其他平台的对比详细解析 5. 综合案例:金融行业数据中台落地实践5.1 背景5.2 解决方案5.3 成果与价值 6. 方向…

Linux磁盘空间使用率100%(解决删除文件后还是显示100%)

本文适用于,删除过了对应的数据文件,查看还是显示使用率100%的情况 首先使用df -h命令查看各个扇区所占用的情况 一、先对系统盘下所有文件大小进行统计,是否真的是数据存储以达到了磁盘空间 在对应的扇区路径下使用du -sh * | sort -hr 命…

DeepSeek--教师备课效能100%

关键功能深度解析 深度思考(R1) 开启这个功能,就如同为 DeepSeek 赋予了深度思考的 “大脑”。当你向它咨询备课问题时,它会像经验丰富的教师一样,在 “脑海” 中梳理思路,不仅给出答案,还会展…

基于Java的自助多张图片合成拼接实战

目录 前言 一、图片合成需求描述 二、图片合成设计与实现 1、编程语言 2、基础数据准备 3、图片合成流程 4、图片合成实现 三、总结 前言 在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用。从社交媒体到电子商务,从在线教育到虚拟…

大模型基本原理(四)——如何武装ChatGPT

传统的LLM存在几个短板:编造事实、计算不准确、数据过时等,为了应对这几个问题,可以借助一些外部工具或数据把AI武装起来。 实现这一思路的框架包括RAG、PAL、ReAct。 1、RAG(检索增强生成) LLM生成的内容会受到训练…

电控--PWM

理论知识 脉宽调制(Pulse Width Modulation,PWM) 对脉冲信号的宽度改变并输出出来高频的PWM波可以让设备进行频繁开关、通断 PWM波形的参数 周期(T):完整脉冲循环时间(单位:秒)频率(f)&…

CNN卷积神经网络多变量多步预测,光伏功率预测(Matlab完整源码和数据)

代码地址:CNN卷积神经网络多变量多步预测,光伏功率预测(Matlab完整源码和数据) 标题:CNN卷积神经网络多变量多步预测,光伏功率预测 一、引言 1.1 研究背景及意义 随着全球能源危机的加剧和环保意识的提升&#xff…

在clion中对linux的工程进行远程调试

本地主机:windows 远程主机:ubuntu 0. 建立一个用于同步远程工程代码的文件夹 在windows上新建了一个iot_frame_0210文件夹,用于远程调试,远程的代码会被下载到这个本地目录。 调试的时候,如果修改文件,则不会直接…

使用sunshine和moonlight串流时的音频输出问题

设备:电脑和平板串流,把平板当副屏使用 1.如果启用安装steam音频驱动程序,则平板有声,电脑无声,在moonlight端可以设置平板和电脑同时发声,但是有点卡 2.只想电脑发声,平板无声 禁用安装steam…

postgresql 游标(cursor)的使用

概述 PostgreSQL游标可以封装查询并对其中每一行记录进行单独处理。当我们想对大量结果集进行分批处理时可以使用游标,因为一次性处理可能造成内存溢出。 另外我们可以定义函数返回游标类型变量,这是函数返回大数据集的有效方式,函数调用者…

深入探索人工智能的未来:DeepSeek R1与蓝耘智算平台的完美结合

在当今数字化时代,人工智能(AI)和机器学习(ML)正以前所未有的速度改变着我们的生活和工作方式。从智能语音助手到自动驾驶汽车,从精准医疗到金融风险预测,AI的应用无处不在。深度学习作为AI的核…