当前位置: 首页 > news >正文

湘潭做网站 联系磐石网络关于动漫网站建设规划表

湘潭做网站 联系磐石网络,关于动漫网站建设规划表,搜索引擎优化的方式,盐城做网站哪家最好多轮对话功能实现 视频教程实现原理消息的类型 功能开发消息类修改请求体修改发送请求函数修改用户消息输入 多轮对话的token消息完整文档消息类型 视频教程 .NetAI开发入门HttpClient实现通义千问集成-多轮对话功能实现 实现原理 一直保留更新messages 现在设置的meessages只…

多轮对话功能实现

  • 视频教程
  • 实现原理
    • 消息的类型
  • 功能开发
    • 消息类
    • 修改请求体
    • 修改发送请求函数
    • 修改用户消息输入
  • 多轮对话的token
  • 消息完整文档
    • 消息类型

视频教程

.Net+AI开发入门HttpClient实现通义千问集成-多轮对话功能实现

实现原理

一直保留更新messages

在这里插入图片描述

现在设置的meessages只设置了两条内容

  1. system:系统消息,给AI设置一个角色,
  2. user:用户消息,你提的问题

消息的类型

根据OpenAI API官网,消息有以下几种类型

在这里插入图片描述

我们现在主要用的就三个:

  • System Message :系统消息,用于指定模型的目标或角色(放在messages第一位)
  • User Message:用户消息,用户发送给模型的消息。
  • Assistant Message:助手消息,模型对用户消息的回复。

实现的效果:

messages:
system:xx
user:xxx
assistant:xxx
user:xxx
assistant:xxx

功能开发

消息类

创建一个消息类

 public class ChatMessage{public string role { get; set; }public string message { get; set; }}

修改请求体

修改请求体,将message内容改成一个占位字符串,用于后面修改

在这里插入图片描述

增加一个消息集合messages 用于存储消息

   List<ChatMessage> messages = new List<ChatMessage>();messages.Add(new ChatMessage() { role = "system", content = "你是一个C#高手" });

修改发送请求函数

增加一个result,获取流式输出的content完整内容,返回完整的助手消息内容,用于后续添加到messages中

 private static async Task<string> SendPostRequestAsync(string url,string jsonContent,string apiKey){using (var content = new StringContent(jsonContent, Encoding.UTF8, "application/json")){// 发送请求并获取响应HttpResponseMessage response = await httpClient.PostAsync(url, content);// 处理响应if (response.IsSuccessStatusCode){string result = "";using (Stream stream = await response.Content.ReadAsStreamAsync())using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)){string line;while ((line = await reader.ReadLineAsync()) != null){if (string.IsNullOrEmpty(line))continue;string data = line.Substring(6);if (data == "[DONE]"){//结束标志break;}var streamObject = JsonSerializer.Deserialize<StreamObject>(data);if (streamObject.choices.Count() > 0){var contentRes = streamObject.choices[0].delta.content;Console.Write(contentRes);result += contentRes;}if (streamObject.usage != null){Console.WriteLine($"Usage: prompt_tokens:{streamObject.usage.prompt_tokens}, completion_tokens:{streamObject.usage.completion_tokens}, total_tokens:{streamObject.usage.total_tokens}");}Thread.Sleep(200);}Console.WriteLine();}return result;// return await response.Content.ReadAsStringAsync();}else{Console.WriteLine($"请求失败: {response.StatusCode}");return $"请求失败: {response.StatusCode}";}}}

将httpclient设置请求头的代码拿到一开始,只设置一次

在这里插入图片描述

修改用户消息输入

  1. 修改用户消息,改成用户直接在控制台上输入,输入之后再加入到消息中
  2. 然后将消息集合messages序列化成字符串,替换掉jsonContent里面的消息占位符messagesContent,再发送出去
  3. 接收到模型返回的助手消息之后,将助手消息也添加到messages中去,role为"assistant"
  4. 然后下次发送,这些消息累加一起再发送
  while (true){Console.Write("User:");var usermessage = Console.ReadLine();if (string.IsNullOrEmpty(usermessage)){continue;}if (usermessage == "exit"){break;}var user = new ChatMessage() { role = "user", content = usermessage };messages.Add(user);var str = JsonSerializer.Serialize(messages);var send = jsonContent.Replace("messagesContent", str);// 发送请求并获取响应Console.WriteLine("assistant:");var result = await SendPostRequestAsync(url, send, apiKey);messages.Add(new ChatMessage() { role = "assistant", content = result });}

多轮对话的token

多轮对话的token是持续累加的,第二次发送的时候相当于第一次发送和返回的消息也发送了,都算在第二次发送的token中

在这里插入图片描述


消息完整文档

以下详细内容来着OpenAI API翻译

https://platform.openai.com/docs/api-reference/chat/create

消息类型

系统消息 (System message)

object

  • content (字符串或数组) 必填

    系统消息的内容。

  • role (字符串) 必填

    消息作者的角色,此处为 "system"

  • name (字符串) 可选

    用于区分相同角色参与者的可选名称。


用户消息 (User message)

object

  • content (字符串或数组) 必填

    用户消息的内容。

  • role (字符串) 必填

    消息作者的角色,此处为 "user"

  • name (字符串) 可选

    用于区分相同角色参与者的可选名称。

助手消息 (Assistant message)

object

  • content (字符串或数组) 可选

    助手消息的内容。除非指定 tool_callsfunction_call,否则必填。

  • refusal (字符串或 null) 可选

    助手的拒绝消息。

  • role (字符串) 必填

    消息作者的角色,此处为 "assistant"

  • name (字符串) 可选

    用于区分相同角色参与者的可选名称。

  • audio (对象或 null) 可选

    与助手之前的音频响应相关的数据。

    • id (字符串)必填

      唯一标识模型生成的音频响应。

  • tool_call (数组) 必填

    模型生成的工具调用列表(例如函数调用)。

    • id (字符串)必填

      具调用的唯一 ID。

    • type (字符串)必填

      工具类型,目前仅支持 function

    • function (对象)必填

      模型调用的函数。

      • name (字符串)必填

        要调用的函数名称。

      • arguments (字符串)必填

        模型以 JSON 格式生成的函数调用参数。

        • 注意:模型生成的参数可能无效,或者包含未在函数定义中描述的参数。
        • 建议: 在调用函数之前,应在代码中验证参数
  • function_call 已弃用 (对象 或者 null) 选填

    模型生成的工具调用列表(例如函数调用)。

    • name (字符串)必填

      要调用的函数名称。

    • arguments (字符串)必填

      模型以 JSON 格式生成的函数调用参数。


工具消息 (Tool message)

object

  • role (字符串) 必填

    消息作者的角色,此处为 "tool"

  • content (字符串或数组) 必填

    工具消息的内容。

  • tool_call_id (字符串) 必填

    对应工具调用的消息 ID。


函数消息 (Function message)

(已弃用)

object

  • role (字符串) 必填

    消息作者的角色,此处为 "function"

  • content (字符串或 null) 必填

    函数消息的内容。

  • name (字符串) 必填

    函数名称。

http://www.yayakq.cn/news/677139/

相关文章:

  • 纪检监察信息网站建设app是干什么用的
  • 龙口建网站公司哪家好外贸人才网论坛
  • app网站开发报价桂林网站建设科技有限公司
  • 创建网站需要哪些工作wordpress怎么看
  • 南京市工程建设交易中心网站网站建站中关键字搜索怎么弄
  • 深圳夫博网站建设有限公司网页html代码
  • 调兵山网站网页版梦幻西游仙玉做什么划算
  • 石狮建设局网站wordpress++xml
  • 南宁学做网站网站建设新方向
  • 龙岗网站建设icxun制作网页时用的最多的图像文件
  • 合肥商城网站开发网站布局策划案
  • wordpress注入文件吉林关键词排名优化软件
  • 衡水做网站价格免费源码资源源码站入口
  • 公众号开发 网站建设重庆市建设工程信息网行业协会
  • 内部网络网站怎么做网店怎么运营和推广
  • 网站备案中心linux建设网站
  • 宁波自助建站模板长春 网站 设计公司
  • 帮别人做网站必须要开公司冯站长之家官网
  • 企业外贸网站建设西安知名的集团门户网站建设公司
  • 做高级电工题的网站网站开发公司 优帮云
  • 保险网站导航广州seo营销培训
  • 网站必须做百度推广才能被别人搜到吗ps怎么做网页制作
  • 松江老城做网站discuz论坛模板
  • 山西手动网站建设推广做网站怎么偷源码做网站
  • 网站主机查询网页制作图片显示不出来
  • 长沙制作网站的公司注册公司名称的要求
  • 网站内容上传要求怎样把网站提交到百度
  • 全程营销网站建设公司网站排名提升软件
  • 阿克苏市建设银行网站个人空间网页设计html
  • 河北廊坊做网站如何做小程序微信