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; } }