【番外】04:Python 和 LabVIEW 对接 DeepSeek API

文章目录

  • [1. Python 对接方法](#1. Python 对接方法)
  • [2. 协议参数分析](#2. 协议参数分析)
  • [3. LabVIEW 对接方法](#3. LabVIEW 对接方法)

1. Python 对接方法

在 Python 中,可以通过 OpenAI 的格式来访问 DeepSeek 模型。

使用前,需要先登录 DeepSeek 开放平台,申请一个 api_key ,并充值一定金额。

网址:https://platform.deepseek.com

以对话 API 为例,代码如下:

python 复制代码
from openai import OpenAI

client = OpenAI(
    api_key="DEEPSEEK_API_KEY",			# 替换成自己的 api_key.
    base_url="https://api.deepseek.com")

response = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[
        {"role": "user", "content": "Hello"},
    ],
    stream=False,
    reasoning_effort="high",
    extra_body={"thinking": {"type": "enabled"}}
)

print(response.choices[0].message.content)

2. 协议参数分析

对于上文的 Python 范例,我们通过在 openai 底层代码中的关键位置加一些 print(),探明其等效的 HTTPS 请求如下:

python 复制代码
URL:		https://api.deepseek.com/chat/completions
Method:		POST

Header:		"content-type" : "application/json"
			"authorization" : "Bearer api_key"

Body:		b'''
			{"model": "deepseek-v4-pro",
			"messages": [
						{"role": "user", "content": "Hello!"}
						],
			"thinking": {"type": "enabled"},
			"reasoning_effort": "high",
			"stream": false}
			
			'''

注意:

(1)Header 还有很多,上面只列出了必须的 2 项,其余的不必写入请求;

(2)authorization 的值为 "Bearer + 空格 + 自己的api_key",固定格式,大小写也必须一致;

(3)Body 为 JSON 格式的二进制字符串,其中涉及的布尔值 (true 和 false),必须小写;

发送请求后,DeepSeek 服务器返回 JSON 作为响应结果,格式如下:

python 复制代码
{
"id":"5f70d312-2bbf-4826-8305-a5175ffff1e4",
"object":"chat.completion",
"created":1779367066,
"model":"deepseek-v4-pro",

"choices":[{"index":0,
			"message":{"role":"assistant",
					   "content":"Hi there! How can I help you today?",
					   "reasoning_content":"We need to respond to the user's greeting. The user said \"Hello!\" in the conversation. It's a simple greeting. My response should be friendly and engaging, offering assistance. I'll reply warmly and ask how I can help."
					   },
			"logprobs":null,
			"finish_reason":"stop"}],
			
"usage":{"prompt_tokens":6,
		 "completion_tokens":59,
		 "total_tokens":65,
		 "prompt_tokens_details":{"cached_tokens":0},
		 "completion_tokens_details":{"reasoning_tokens":48},
		 "prompt_cache_hit_tokens":0,
		 "prompt_cache_miss_tokens":6},	
		 	 
"system_fingerprint":"fp_9954b31ca7_prod0820_fp8_kvcache_20260402"
}

其中,choices 是具体响应内容,choices0"message""content" 是AI的回答,紧随其后的 "reasoning_content" 是 AI 的思考过程(它心里的小九九)。usage 统计了本次请求消耗的 tokens 数量。


3. LabVIEW 对接方法

在 LabVIEW 中,我们采用底层 HTTPS 协议来对接 DeepSeek API。

相关函数位于:Functions >> Data Communication >> Protocols >> HTTP Client ,如下图。

根据上文所述的协议参数,调用相关VI,实现等效的 HTTPS 请求。如下图。

至此,基本对接方法已经实现。接下来,我们进行一些优化。

  • 优化1:JOSN 格式转化

在前面的 VI 中,我们直接用一大段JSON字符串来描述请求参数。这对于参数修改与接口封装很不方便。

现在,改用 LabVIEW 的簇结构来组织请求参数,然后再调用 Flatten To JSON 函数,转换成JSON字符串,传递给 POST 进行发送。

与此同时,对于服务器返回的响应,调用 Unflatten From JSON 函数,从中提取出我们所需的 message 数据。

提取路径为:choices -> 0 -> message

优化后的程序框图如下:

  • 优化2:中文及特殊字符的处理

DeepSeek 支持动态语言切换。只要你在发送的请求中使用中文来描述问题,那么返回的响应也将是中文的结果。

但是,DeepSeek 的请求与响应都是 UTF-8 编码,而大多数 LabVIEW 采用与操作系统一致的中文编码(比如,中国大陆为 GBK 编码)。为了能与 DeepSeek 适配,我们需要将请求字符串统一转换成 UTF-8 编码。同时,再将返回的响应转换为系统编码,从而保证中文正常显示。

LabVIEW 自带一对互逆的转换函数:Text to UTF-8 和 UTF-8 to Text ,可以用来实现上述转换功能。

(虽然是自带的,但它们不在任何选板中,很难找到。有需要的读者,请下载本文附带的范例,从中拷贝使用。)

好消息: JSON 转化函数自带编码转换功能。

如果您采用上文所述的 JSON 转化来处理请求参数与返回响应的话,那么恭喜您,通常不必再进行 UTF-8 编码转换了。

因为 Flatten To JSON 函数本身就会将 LabVIEW 簇中的中文转成UTF-8 编码。同时 Unflatten From JSON 函数本身就能将 UTF-8 编码的 JSON 字符串转化成系统编码的 LabVIEW 变量。

坏消息: DeepSeek 喜欢卖萌,常常返回表情符号。

DeepSeek 返回的响应中,如果出现无法解码的符号,会导致 Unflatten From JSON 函数报错。

这与中文编码无关,纯英文对话时,也可能返回表情符号。就像这样:

解决办法:

对于 DeepSeek 返回的字符串,先用 UTF-8 to Text 解码,再用 Text to UTF-8 编码,最后传递给 Unflatten From JSON 进行转换。

这个看似无用的 "反复" 操作,实际上会提前过滤非法字符,并替换成双问号 (??) ,从而避免直接传递给 Unflatten From JSON 发生报错。优化后的程序框图如下:

  • 其他优化
    DeepSeek 服务器有时会很忙碌,或者由于问题过于复杂,导致响应超时。您可以通过 POST 函数的下方接线端,设置自定义的超时时间。(默认为 10000 毫秒,即 10 秒)

相关推荐
我的xiaodoujiao8 分钟前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
qetfw27 分钟前
MXU:Tauri 2 + React 的 MaaFramework 跨平台 GUI 源码
前端·python·react.js·前端框架·开源项目·效率工具
用户8356290780511 小时前
Python 实现 Excel 页面布局与打印设置自动化
后端·python
一次旅行1 小时前
Python+大模型端到端自动化日报系统
开发语言·python·自动化
天天爱吃肉82182 小时前
【电源拆解:跟着问答逐一认识开关适配器PCB元器件】
大数据·人工智能·python·功能测试·嵌入式硬件·汽车
_Jimmy_2 小时前
AI应用开发工程师面试题库
人工智能·python·深度学习·机器学习·知识图谱
用户8356290780512 小时前
Python 实现 Excel 命名范围(Named Range)的创建与管理
后端·python
dreamer_83992 小时前
AI智能合同比对系统:从零搭建实战教程
人工智能·python
AOwhisky3 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发
观察员3 小时前
带你用一个 Python 图书系统,通关封装继承多态
python