目录

前言

Python脚本

.NET调用

结尾


        

前言

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 os
from openai import OpenAI
#这两行对应.net那边编码问题,所以需要 
import sys, io
sys.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交互的过程

引入地址​​​​​​​

更多推荐