namespace OASystem.API.OAMethodLib.TokenHubAI.Models;
///
/// TokenHub AI 聊天请求参数
///
///
/// 用于配置发送到 TokenHub API 的聊天请求,支持所有 OpenAI 兼容参数
///
public class ChatRequest
{
// ============ 基础参数 ============
///
/// 模型名称
///
///
/// 可用模型:
/// - 混元系列:Hy3 preview
/// - 智谱系列:glm-5.1, glm-5.1-s
/// - DeepSeek:deepseek-v3, deepseek-r1
/// - MiniMax:minimax-m2.7, minimax-m2.7-s
/// - 通义千问:qwen-2.5-72b, qwen-2.5-32b
///
public string Model { get; set; } = "Hy3 preview ";
///
/// 消息列表
///
public List Messages { get; set; } = new();
// ============ 生成控制参数 ============
///
/// 最大输出 Token 数
///
///
/// 范围:1-8192,默认 1024
/// 控制响应长度,影响费用
///
public int MaxTokens { get; set; } = 2048;
///
/// 温度参数,控制随机性
///
///
/// 范围:0.0-2.0,默认 0.7
/// - 0.0-0.3:确定性输出(代码生成、事实问答)
/// - 0.4-0.6:平衡模式(通用对话)
/// - 0.7-1.0:创造性(创意写作)
/// - 1.0-2.0:高随机性(头脑风暴)
///
public double Temperature { get; set; } = 0.7;
///
/// Top-P 核采样
///
///
/// 范围:0.0-1.0,默认 null
/// 控制词汇选择多样性,值越小越集中
/// 建议与 Temperature 二选一
///
public double? TopP { get; set; }
///
/// 频率惩罚
///
///
/// 范围:-2.0 到 2.0,默认 null
/// 正值:减少重复,负值:鼓励重复
/// 推荐:0.0-0.5
///
public double? FrequencyPenalty { get; set; }
///
/// 存在惩罚
///
///
/// 范围:-2.0 到 2.0,默认 null
/// 正值:鼓励新话题,负值:保持当前话题
/// 推荐:0.0-0.3
///
public double? PresencePenalty { get; set; }
///
/// 停止词列表
///
///
/// 遇到停止词时停止生成
/// 示例:["\n\n", "###", "END"]
///
public List? Stop { get; set; }
///
/// 种子值,用于确定性输出
///
///
/// 相同种子 + 相同参数 = 相同结果
/// 用于可复现场景
///
public int? Seed { get; set; }
// ============ 高级参数 ============
///
/// 是否启用流式响应
///
///
/// true:逐字输出(实时对话)
/// false:完整响应(批处理)
///
public bool Stream { get; set; } = false;
///
/// 系统提示词(快捷设置)
///
///
/// 设定 AI 的角色和行为
/// 会在 Messages 中添加 system 消息
///
public string? SystemPrompt { get; set; }
///
/// 响应格式
///
///
/// - 默认:text
/// - json_object:强制 JSON 输出(部分模型支持)
///
public object? ResponseFormat { get; set; }
///
/// 用户标识
///
///
/// 用于监控和跟踪
///
public string? User { get; set; }
// ============ Function Calling 参数 ============
///
/// 工具列表(Function Calling)
///
public List? Tools { get; set; }
///
/// 工具选择模式
///
///
/// - none:不调用工具
/// - auto:自动决定
/// - required:必须调用
/// - 或指定工具名称
///
public object? ToolChoice { get; set; }
// ============ 调试参数 ============
///
/// 是否返回日志概率
///
public int? LogProbs { get; set; }
///
/// 是否回显
///
public bool? Echo { get; set; }
// ============ 工厂方法 ============
///
/// 从用户消息创建请求
///
public static ChatRequest FromUserMessage(string userMessage, string? model = null)
{
return new ChatRequest
{
Model = model ?? "hunyuan-2.0-instruct-20251111",
Messages = new List
{
ChatMessage.User(userMessage)
}
};
}
///
/// 从系统提示和用户消息创建请求
///
public static ChatRequest FromSystemAndUser(string systemPrompt, string userMessage, string? model = null)
{
return new ChatRequest
{
Model = model ?? "hunyuan-2.0-instruct-20251111",
SystemPrompt = systemPrompt,
Messages = new List
{
ChatMessage.System(systemPrompt),
ChatMessage.User(userMessage)
}
};
}
///
/// 从对话历史创建请求
///
public static ChatRequest FromHistory(List messages, string? model = null)
{
return new ChatRequest
{
Model = model ?? "hunyuan-2.0-instruct-20251111",
Messages = messages
};
}
///
/// 设置系统提示
///
public ChatRequest WithSystemPrompt(string systemPrompt)
{
SystemPrompt = systemPrompt;
// 如果 Messages 中还没有 system 消息,添加一个
if (!Messages.Any(m => m.Role == "system"))
{
Messages.Insert(0, ChatMessage.System(systemPrompt));
}
return this;
}
///
/// 添加用户消息
///
public ChatRequest AddUserMessage(string content)
{
Messages.Add(ChatMessage.User(content));
return this;
}
///
/// 添加助手消息
///
public ChatRequest AddAssistantMessage(string content)
{
Messages.Add(ChatMessage.Assistant(content));
return this;
}
///
/// 设置温度
///
public ChatRequest WithTemperature(double temperature)
{
Temperature = temperature;
return this;
}
///
/// 设置最大 Token 数
///
public ChatRequest WithMaxTokens(int maxTokens)
{
MaxTokens = maxTokens;
return this;
}
///
/// 开启流式
///
public ChatRequest WithStream(bool stream = true)
{
Stream = stream;
return this;
}
}