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

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活


1. Python 对接方法

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

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

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

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

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 请求如下:

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 作为响应结果,格式如下:

{
"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 是具体响应内容,choices[0][“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 秒)

4. 多轮对话

如果需要进行多轮对话,并且要求 AI 给出上下文相关联的回答,那么必须将前面所有交互的问题、回答,以及本次的新问题,一起拼接在 messages 数组中,发送给 DeepSeek 进行处理。原理如下图:

在这里插入图片描述

  • Python 多轮对话
from openai import OpenAI

client = OpenAI(
    api_key="DEEPSEEK_API_KEY",
    base_url="https://api.deepseek.com")

messages = []

while True:
    q = input("Q: ")
    question = {"role": "user", "content": q}
    messages.append(question)

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

    answer = response.choices[0].message
    messages.append(answer)
    print("A: " + answer.content)
    print("\n")

在这里插入图片描述

  • LabVIEW 多轮对话

将上文 LabVIEW 程序封装成 子VI,并引出输入端 messages 数组,以及输出端 message。
采用 While 循环 + 事件结构,以移位寄存器存储 messages 数组,拼接所有历史问答。

在这里插入图片描述

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秣厉科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值