namespace Dpz.Core.Service.Network.Models;

/// <summary>
/// Chat Completion 流式响应块
/// </summary>
[Obsolete("use IOpenAiService")]
public class StreamCompletionChunk
{
    [JsonPropertyName("id")]
    public string Id { get; set; } = string.Empty;

    [JsonPropertyName("object")]
    public string Object { get; set; } = string.Empty;

    [JsonPropertyName("created")]
    public long Created { get; set; }

    [JsonPropertyName("model")]
    public string Model { get; set; } = string.Empty;

    [JsonPropertyName("provider")]
    public string? Provider { get; set; }

    [JsonPropertyName("choices")]
    public List<StreamCompletionChoice> Choices { get; set; } = [];

    [JsonPropertyName("usage")]
    public Usage? Usage { get; set; }
}

/// <summary>
/// 流式响应中的选择项
/// </summary>
[Obsolete("use IOpenAiService")]
public class StreamCompletionChoice
{
    [JsonPropertyName("index")]
    public int Index { get; set; }

    [JsonPropertyName("delta")]
    public DeltaMessage Delta { get; set; } = new();

    [JsonPropertyName("logprobs")]
    public object? LogProbs { get; set; }

    [JsonPropertyName("finish_reason")]
    public string? FinishReason { get; set; }

    [JsonPropertyName("native_finish_reason")]
    public string? NativeFinishReason { get; set; }
}

/// <summary>
/// 流式响应中的增量消息
/// </summary>
[Obsolete("use IOpenAiService")]
public class DeltaMessage
{
    [JsonPropertyName("role")]
    public string? Role { get; set; }

    [JsonPropertyName("content")]
    public string? Content { get; set; }

    [JsonPropertyName("reasoning")]
    public string? Reasoning { get; set; }

    [JsonPropertyName("reasoning_details")]
    public List<ReasoningDetail>? ReasoningDetails { get; set; }
}

/// <summary>
/// 推理详情(用于Claude的思考功能)
/// </summary>
[Obsolete("use IOpenAiService")]
public class ReasoningDetail
{
    [JsonPropertyName("type")]
    public string Type { get; set; } = string.Empty;

    [JsonPropertyName("data")]
    public string Data { get; set; } = string.Empty;

    [JsonPropertyName("id")]
    public string? Id { get; set; }

    [JsonPropertyName("format")]
    public string? Format { get; set; }

    [JsonPropertyName("index")]
    public int? Index { get; set; }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

代码解释

这是一个用于处理 OpenAI Chat Completion 流式响应的数据模型文件,定义了一系列用于反序列化 JSON 响应的 C# 类。

主要组成部分:

1. StreamCompletionChunk (流式响应块)

表示流式响应中的一个数据块,包含:

  • Id: 响应的唯一标识符
  • Object: 对象类型标识
  • Created: Unix 时间戳
  • Model: 使用的模型名称
  • Provider: 服务提供商(可选)
  • Choices: 响应选项列表
  • Usage: Token 使用情况(可选)

2. StreamCompletionChoice (流式响应选择项)

表示每个响应块中的具体选择,包含:

  • Index: 选择项索引
  • Delta: 增量消息内容(流式传输的核心)
  • LogProbs: 日志概率信息(可选)
  • FinishReason: 完成原因(如 "stop", "length" 等)
  • NativeFinishReason: 原生完成原因(可选)

3. DeltaMessage (增量消息)

流式传输中的消息增量,包含:

  • Role: 角色(如 "assistant", "user")
  • Content: 消息内容片段
  • Reasoning: 推理过程(用于某些高级模型)
  • ReasoningDetails: 详细推理信息列表

4. ReasoningDetail (推理详情)

特别为 Claude 等模型的思考功能设计,包含:

  • Type: 推理类型
  • Data: 推理数据
  • Id: 标识符(可选)
  • Format: 格式说明(可选)
  • Index: 索引(可选)

关键特性:

  • 所有类都标记为 [Obsolete],建议使用 IOpenAiService 替代
  • 使用 JsonPropertyName 特性映射 JSON 字段名
  • 支持流式响应的增量更新模式
  • 兼容 OpenAI 和类似服务的 API 格式

使用场景:

用于处理 AI 对话流式响应,允许实时接收和显示 AI 生成的内容,而不需要等待完整响应。

评论加载中...