首页 > 编程语言 >C#实现一个HttpClient集成通义千问-测试代码入手学习参数配置

C#实现一个HttpClient集成通义千问-测试代码入手学习参数配置

时间:2024-12-06 23:28:06浏览次数:5  
标签:jsonContent 千问 stream C# content 测试代码 response string

测试代码入手学习参数配置

准备测试代码

我们学习从测试代码开始,选择一个模型

选择的大模型:通义千问2-VL-开源版-7B

然后再API示例中,找到C#的示例代码
在这里插入图片描述

测试代码:

using System.Net.Http.Headers;
using System.Text;

class Program
{
    private static readonly HttpClient httpClient = new HttpClient();

    static async Task Main(string[] args)
    {
        // 若没有配置环境变量,请用百炼API Key将下行替换为:string? apiKey = "sk-xxx";
        string? apiKey = Environment.GetEnvironmentVariable("DASHSCOPE_API_KEY");

        if (string.IsNullOrEmpty(apiKey))
        {
            Console.WriteLine("API Key 未设置。请确保环境变量 'DASHSCOPE_API_KEY' 已设置。");
            return;
        }

        // 设置请求 URL 和内容
        string url = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions";
        // 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
        string jsonContent = @"{
            ""model"": ""qwen-plus"",
            ""messages"": [
                {
                    ""role"": ""system"",
                    ""content"": ""You are a helpful assistant.""
                },
                {
                    ""role"": ""user"", 
                    ""content"": ""你是谁?""
                }
            ]
        }";

        // 发送请求并获取响应
        string result = await SendPostRequestAsync(url, jsonContent, apiKey);

        // 输出结果
        Console.WriteLine(result);
    }

    private static async Task<string> SendPostRequestAsync(string url, string jsonContent, string apiKey)
    {
        using (var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"))
        {
            // 设置请求头
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            // 发送请求并获取响应
            HttpResponseMessage response = await httpClient.PostAsync(url, content);

            // 处理响应
            if (response.IsSuccessStatusCode)
            {
                return await response.Content.ReadAsStringAsync();
            }
            else
            {
                return $"请求失败: {response.StatusCode}";
            }
        }
    }
}

修改配置

  1. 修改代码中apikey为自己的key,也可以改成自己配置在环境变量中的key
  2. 接着修改请求体jsonContent 字符串里面的json对象了,修改model为我们用的这个大模型代码,模型下面有个模型的代码就是他请求的model,可以点击复制一下

https://bailian.console.aliyun.com/#/model-market/detail/qwen2-vl-7b-instruct
在这里插入图片描述

  1. 修改jsonContent 里面的messages对象,这个就是对话的消息内容
    1. 消息第一条为system消息,系统消息,给这次对话的助手设定一个角色
    2. 第二条是user消息,用户消息,为用户发给模型的消息内容

设置完成之后的jsonContent 如下:

在这里插入图片描述

然后就可以执行了

效果:

看到返回的消息了

在这里插入图片描述

修改消息内容

我们可以随意编辑messages里的消息内容content

在这里插入图片描述

效果:

在这里插入图片描述

测试流式输出

修改jsonContent参数,设置stream为true

    string jsonContent =
        @"{
    ""model"": ""qwen2-vl-7b-instruct"",
    ""stream"": true,
 
    ""messages"":messagesContent
}";

然后修改响应处理,使用流来接收,读取一行就输出

            //流式输出
            // 处理响应
            if (response.IsSuccessStatusCode)
            {
                using (Stream stream = await response.Content.ReadAsStreamAsync())
                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                {
                    string line;
                    while ((line = await reader.ReadLineAsync()) != null)
                    {
                        File.AppendAllText("test.txt", line);
                        Console.WriteLine(line);

                        Thread.Sleep(10);
                    }
                }
            }
            else
            {
                Console.WriteLine(
                    $"请求失败: {response.StatusCode} - {await response.Content.ReadAsStringAsync()}"
                );
            }

效果:

在这里插入图片描述

设置流式输出的参数

设置stream_options参数,查看token使用数量

增加配置include_usage为true

  "stream_options":{
       "include_usage": true
  } 

完整的请求体

  string jsonContent =
      @"{
  ""model"": ""qwen2-vl-7b-instruct"",
  ""stream"": true,
  ""stream_options"":{
       ""include_usage"": true
  },   
  ""messages"": [
      {
          ""role"": ""system"",
          ""content"": ""你是一个AI助手.""
      },
      {
          ""role"": ""user"", 
          ""content"": ""你会写C#程序吗?写一个简单的实例""
      }
  ]
}";

最终效果:

最后多一条显示token数量
在这里插入图片描述

视频教程

<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="94UABvKq-1733487162908" src="https://player.bilibili.com/player.html?aid=113586785556853"></iframe>

.Net+AI开发入门HttpClient实现通义千问集成-从测试代码入门学习

标签:jsonContent,千问,stream,C#,content,测试代码,response,string
From: https://blog.csdn.net/qq_39427511/article/details/144299472

相关文章

  • 【滑动窗口】codeforces 1290 A. Mind Control
    题意第一行输入一个正整数\(T(1\leqT\leq1000)\),表示共有\(T\)组测试用例。对于每一组测试用例:第一行输入三个正整数\(n,m,k(1\leqm\leqn\leq3500,0\leqk\leqn-1)\),且保证\(n\)之和不超过\(3500\),第二行输入\(n\)个整数\(a_i(1\leqa_i\leq10^9......
  • C# 串口通信利器 SerialPortStream库
    学习备忘-源自 https://mp.weixin.qq.com/s/hDVD9Ij22KSHm7TUmETcmQ前言物联网(IoT)和嵌入式系统的开发中,串口通信是一项不可或缺的技术。C#作为一种广泛使用的编程语言,同样支持多种方式进行串口通信。其中,SerialPortStream 库因其简单易用的API和强大的功能成为了众多开发者......
  • Procrastination is not lazy, not habbit, not distraction, but as a self-protec
    Perfectionismcanveryeasilyleadtoprocrastination.Whenyouspend10hoursstudyingjusttograsp2hours'worthofmaterial,youmaystillfeellikeyoudon'tfullyunderstandthecontent.Yoursubconsciousthenestimatesthisasa"st......
  • C# SerialPort 串口通讯
    学习备忘-源自https://mp.weixin.qq.com/s/xO7yCpNj3zG8lfqyz4ARVw前言串口通信在.NET平台下创建C#串口通信程序,.NET2.0提供了串口通信的功能,其命名空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。创建C#串口通信程序之命名空间S......
  • YOLOv8-ultralytics-8.2.103部分代码阅读笔记-augment.py
    augment.pyultralytics\data\augment.py目录augment.py1.所需的库和模块2.classBaseTransform: 3.classCompose: 4.classBaseMixTransform: 5.classMosaic(BaseMixTransform): 6.classMixUp(BaseMixTransform): 7.classRandomPerspective: 8.classRand......
  • 用一篇博文带你了解c++和python两种编程语言到底有什么区别?
      成长路上不孤单......
  • 【gRPC】gRPC基础:初识与安装
    1.gRPC是什么gRPC是一种现代化开源的高性能RPC框架,能够运行于任意环境之中。最初由谷歌进行开发。它使用HTTP/2作为传输协议。在gRPC里,客户端可以像调用本地方法一样直接调用其他机器上的服务端应用程序的方法,帮助你更容易创建分布式应用程序和服务。与许多RPC系统一样,gR......
  • 探索Volc Engine MaaS:快速入门指南
    探索VolcEngineMaaS:快速入门指南VolcEngine的MaaS(ModelasaService)是一种强大的服务,允许开发者使用其LLM(大语言模型)实现多种自然语言处理任务。在这篇文章中,我们将指导您如何开始使用VolcEngine的MaaS模型,通过简单的步骤和代码示例展示其应用。1.引言VolcEngine......
  • 一文了解MySQL写缓冲Change Buffer(定义 作用 执行过程 触发时机 业务场景)
    MySQL的数据存储包含内存与磁盘两个部分,内存缓冲区bufferpool以页为单位,缓存最热的数据页datapage与索引页indexpage,InnoDB以变种LRU算法管理缓冲池,并且解决了预读失效和缓冲池污染的问题。对于读请求,缓冲池可以减少磁盘IO,提升性能,那么写请求呢?思考2个场景:场景1:假设要......
  • 堆排序(c基础)
    voidMaxHeap(int*H,inti,intN){ intl=2*i+1; intr=2*i+2; intmax; if(l<N&&H[l]>H[i])max=l; elsemax=i; if(r<N&&H[r]>H[max])max=r; inttemp=0; if(max!=i) { intp=H[i];......