前言

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交互的过程

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐