Python和.NET交互-与最新DeepSeekV3.2大模型对话
·
前言
Python强大的AI生态基础,任何一出现就会有大量的脚本。然.NET虽然有SK框架封装的AI,似乎单薄了点。如果没有SK封装的AI脚本呢?那么就需要自己调用Python了,本篇通过它们交互演示下这个过程。
.NET SK AI
.NET SK与DeepSeekv3.2交互
using Microsoft.SemanticKernel;using Microsoft.SemanticKernel.ChatCompletion;using Microsoft.SemanticKernel.Connectors.OpenAI;
var kernel = Kernel.CreateBuilder() .AddOpenAIChatCompletion( modelId: "deepseek-ai/DeepSeek-V3.2", apiKey: "hf_xxxxxx", endpoint: new Uri("https://router.huggingface.co/v1") // 很关键! ) .Build();
var ai = kernel.GetRequiredService<IChatCompletionService>();var result = await ai.GetChatMessageContentAsync("你是谁?");Console.WriteLine(result);Console.ReadLine();
结果

Python脚本
Python有高达十几种调用dsv.32的方法,这里展示其中典型的两种脚本方式。这里对于dsv3.2_speciale和dsv3.2分别展示其中一种
其一:dsv3.2_speciale通过兼容openai的baseurl进行调用
from openai import OpenAI
client = OpenAI( api_key="sk-xxxxxxxx", # 替换为你的DeepSeek API密钥 base_url="https://api.deepseek.com/v3.2_speciale_expires_on_20251215", # 修改基础地址为DeepSeek-v3.2_speciale,其原本基础地址https://api.deepseek.com)
response = client.chat.completions.create( model="deepseek-reasoner", # 指定使用DeepSeek的模型 messages=[ {"role": "user", "content": "你好,请介绍一下你自己。"} ], stream=False)print(response.choices[0].message.content
其二:dsv3.2通过兼容openai的stream形式
import osfrom openai import OpenAI#这两行对应.net那边编码问题,所以需要 import sys, iosys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='ignore')
client = OpenAI( base_url="https://router.huggingface.co/v1", api_key="hf_xxxxx" #替换成自己的hugging face key)
stream = client.chat.completions.create( model="deepseek-ai/DeepSeek-V3.2", messages=[ { "role": "user", "content": "你是谁?" } ], stream=True,)
for chunk in stream: if not chunk.choices: continue
delta = chunk.choices[0].delta if delta is None or not hasattr(delta, "content"): continue
content = delta.content if content: print(content, end="")
.NET调用
.NET这边最稳妥的Python调用依然是Process.Start.把以上Python脚本保存下,就可以在.net里面调与deepseek交互了。
下面以.net调用python的deepseekv3.2脚本为例。
using BenchmarkDotNet.Attributes;using BenchmarkDotNet.Running;using Microsoft.Diagnostics.Runtime.AbstractDac;using System.Diagnostics;using System.Runtime.CompilerServices;using System.Text;using System.Diagnostics;public class Program{ public static void Main() { string pythonExe = @"D:\Python\python.exe"; string script = @"D:\PyCharm\PythonProject4\deepseek-v32--auto-python-openai-stream.py"; //string args = "123 456";
var psi = new ProcessStartInfo { FileName = pythonExe, Arguments = $"{script}", RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, CreateNoWindow = true, //这两行是编码的问题,所以需要加上 StandardOutputEncoding = Encoding.UTF8, StandardErrorEncoding = Encoding.UTF8 };
using var process = Process.Start(psi); string output = process!.StandardOutput.ReadToEnd(); string error = process.StandardError.ReadToEnd();
process.WaitForExit();
Console.WriteLine("Output:"); Console.WriteLine(output);
if (!string.IsNullOrEmpty(error)) { Console.WriteLine("Error:"); Console.WriteLine(error); } Console.ReadLine(); }}
结果

结尾
本篇展示了一个简单的Python/.NET与最新的DeepSeekv3.2交互的过程
更多推荐


所有评论(0)