.NET 项目中接入豆包(字节跳动 AI)的能力,核心是通过调用豆包开放平台的 API 来实现。下面我会为你提供一个完整、可直接运行的 .NET 示例,涵盖从环境准备到 API 调用的全流程。

前置准备

  1. 获取 API Key:先前往字节跳动开放平台注册开发者账号,创建应用并申请豆包 API 的调用权限,获取 API KeySecret(不同版本的 API 可能仅需 API Key)。
  2. 环境要求:确保你的 .NET 项目基于 .NET Core 3.1 及以上版本(推荐 .NET 6/7/8)。

完整实现代码

以下示例使用 .NET 6 控制台项目演示,核心逻辑可直接复用至 ASP.NET Core 等项目中:

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

namespace DoubaoDotNetDemo
{
    // 定义请求参数模型(匹配豆包 API 格式)
    public class DoubaoRequest
    {
        /// <summary>
        /// 模型版本(如豆包的通用模型:doubao-pro)
        /// </summary>
        public string Model { get; set; } = "doubao-pro";
        
        /// <summary>
        /// 用户的提问内容
        /// </summary>
        public string Prompt { get; set; }
        
        /// <summary>
        /// 温度参数(0-1,值越高回答越随机)
        /// </summary>
        public float Temperature { get; set; } = 0.7f;
        
        /// <summary>
        /// 最大生成字符数
        /// </summary>
        public int MaxTokens { get; set; } = 1000;
    }

    // 定义响应结果模型
    public class DoubaoResponse
    {
        /// <summary>
        /// 响应状态码(200 为成功)
        /// </summary>
        public int Code { get; set; }
        
        /// <summary>
        /// 响应消息
        /// </summary>
        public string Message { get; set; }
        
        /// <summary>
        /// 响应数据
        /// </summary>
        public DoubaoResponseData Data { get; set; }
    }

    public class DoubaoResponseData
    {
        /// <summary>
        /// 豆包返回的回答内容
        /// </summary>
        public string Content { get; set; }
    }

    class Program
    {
        // 替换为你自己的 API Key
        private const string ApiKey = "你的豆包API Key";
        // 豆包 API 接口地址(以官方最新文档为准)
        private const string ApiUrl = "https://open.doubao.com/api/v1/chat/completions";

        static async Task Main(string[] args)
        {
            try
            {
                // 1. 创建 HttpClient 实例(推荐复用,避免频繁创建)
                using var httpClient = new HttpClient();
                // 2. 设置请求头(必选:Authorization 和 Content-Type)
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", ApiKey);
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                // 3. 构造请求参数
                var requestData = new DoubaoRequest
                {
                    Prompt = "请用C#写一个简单的冒泡排序",
                    Temperature = 0.5f,
                    MaxTokens = 2000
                };

                // 4. 序列化请求参数为 JSON
                var jsonContent = new StringContent(
                    JsonSerializer.Serialize(requestData),
                    Encoding.UTF8,
                    "application/json");

                // 5. 发送 POST 请求
                var response = await httpClient.PostAsync(ApiUrl, jsonContent);

                // 6. 验证响应状态
                response.EnsureSuccessStatusCode();

                // 7. 解析响应结果
                var responseContent = await response.Content.ReadAsStringAsync();
                var doubaoResponse = JsonSerializer.Deserialize<DoubaoResponse>(responseContent);

                // 8. 输出结果
                if (doubaoResponse?.Code == 200 && doubaoResponse.Data != null)
                {
                    Console.WriteLine("豆包回答:");
                    Console.WriteLine(doubaoResponse.Data.Content);
                }
                else
                {
                    Console.WriteLine($"请求失败:{doubaoResponse?.Message}");
                }
            }
            catch (HttpRequestException ex)
            {
                Console.WriteLine($"网络请求异常:{ex.Message}");
            }
            catch (JsonException ex)
            {
                Console.WriteLine($"JSON 解析异常:{ex.Message}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"未知异常:{ex.Message}");
            }

            Console.ReadLine();
        }
    }
}

关键代码解释

  1. 模型定义DoubaoRequestDoubaoResponse 类严格匹配豆包 API 的请求 / 响应格式(需以官方最新文档为准,若格式更新需同步调整)。
  2. HttpClient 使用:采用 using 声明保证资源释放,且设置了必要的请求头(Authorization 是核心,用于身份验证)。
  3. 异常处理:捕获了网络异常、JSON 解析异常等常见问题,避免程序崩溃,便于排查问题。
  4. 参数配置Temperature 控制回答的随机性,MaxTokens 限制回答长度,可根据需求调整。

注意事项

  1. API 地址和格式:豆包开放平台的 API 地址 / 参数格式可能会更新,务必以官方文档为准。
  2. API Key 安全:不要将 API Key 硬编码到代码中,生产环境建议通过配置文件(如 appsettings.json)或环境变量读取。
  3. 异步调用:示例中使用 async/await 异步调用,符合 .NET 最佳实践,避免阻塞主线程。
  4. 并发处理:若高并发场景调用,建议使用 HttpClientFactory 创建 HttpClient,而非每次创建新实例。

总结

  1. .NET 接入豆包的核心是通过 HttpClient 调用豆包开放平台的 REST API,关键是配置正确的请求头(含 API Key)和参数格式。
  2. 需提前获取有效的 API Key,并确保请求 / 响应模型与官方文档一致。
  3. 生产环境中要做好异常处理、API Key 安全管理和 HttpClient 复用,保证调用稳定性。
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐