首页 > 编程语言 >C#实现一个HttpClient集成通义千问-流式输出内容提取

C#实现一个HttpClient集成通义千问-流式输出内容提取

时间:2024-12-09 11:56:38浏览次数:8  
标签:set 千问 get C# object choices tokens public HttpClient

返回对象处理

返回对象分析

根据流式返回的数据处理

在这里插入图片描述

内容对象

{
  "choices": [
    {
      "delta": { "content": "", "role": "assistant" },
      "index": 0,
      "logprobs": null,
      "finish_reason": null,
    },
  ],
  "object": "chat.completion.chunk",
  "usage": null,
  "created": 1733319748,
  "system_fingerprint": null,
  "model": "qwen2-vl-7b-instruct",
  "id": "chatcmpl-34615907-7d35-9f8a-993b-af7c94ea8717",
}

最后一条显示token的内容

{
  "choices": [],
  "object": "chat.completion.chunk",
  "usage": { "prompt_tokens": 29, "completion_tokens": 100, "total_tokens": 129 },
  "created": 1733319748,
  "system_fingerprint": null,
  "model": "qwen2-vl-7b-instruct",
  "id": "chatcmpl-34615907-7d35-9f8a-993b-af7c94ea8717",
}

将上面两个json内容合并生成一个对象类,主要就是choices字段和usage字段合并两个类就行了

具体操作就是复制json内容,切换到一个空的类文件中,然后在“编辑”→“选择性粘贴”→“将JSON 粘贴为类”操作,自动生产类,

在这里插入图片描述

将上面两个json都生成一遍,合并主类为StreamObject,得到json类如下

    public class StreamObject
    {
        public Choice[] choices { get; set; }
        public string _object { get; set; }
        public Usage usage { get; set; }
        public int created { get; set; }
        public object system_fingerprint { get; set; }
        public string model { get; set; }
        public string id { get; set; }
    }

    public class Choice
    {
        public Delta delta { get; set; }
        public object finish_reason { get; set; }
        public int index { get; set; }
        public object logprobs { get; set; }
    }

    public class Delta
    {
        public string content { get; set; }
    }

    public class Usage
    {
        public int prompt_tokens { get; set; }
        public int completion_tokens { get; set; }
        public int total_tokens { get; set; }
    }

流式对象反序列化

对返回的数据进行反序列化,然后判断choices数量,获取里面的content内容

额外的:可以sleep一下,可以看到像对话一样流式输出的效果了

在这里插入图片描述

 var streamObject = JsonSerializer.Deserialize<StreamObject>(data);
 if (streamObject.choices.Count() > 0)
 {
     var contentRes = streamObject.choices[0].delta.content;
     Console.Write(contentRes);
 }

效果:

显示提取出的内容

在这里插入图片描述

视频教程

<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="F7218D1F-1733708526719" src="https://player.bilibili.com/player.html?aid=113586802333458"></iframe>

.Net+AI开发入门HttpClient实现通义千问集成-流式输出内容提取和实现

标签:set,千问,get,C#,object,choices,tokens,public,HttpClient
From: https://blog.csdn.net/qq_39427511/article/details/144338545

相关文章

  • HCIE-17 网络安全技术(二) 防火墙高级特性
    目录双机热备在网络中部署防火墙双机时面临的问题防火墙双机热备简介防火墙双机热备关键组件防火墙双机热备关键组件:VRRP与VGMP防火墙双机热备关键组件:HRP及心跳线防火墙双机热备典型组网场景虚拟系统防火墙虚拟系统的应用场景防火墙虚拟系统概述虚拟接口虚拟系统访问根系统两个虚......
  • Go语言--Goroutines和channel 管道
    GoroutinesGo中的并发执行单位,类似于轻量级的线程。Goroutine的调度由Go运行时管理,用户无需手动分配线程。使用 go 关键字启动Goroutine。Goroutine是非阻塞的,可以高效地运行成千上万个Goroutine。且无序。 packagemainimport("fmt""tim......
  • .NET CORE Central Package Management (CPM) 整理
    前言CentralPackageManagement是netcore统一包管理工具,在微服务项目中,大量的项目可能会引用不同的dll版本。比如最常见的Newtonsoft.Json,有些是11,有些是最新12,后续不能进行维护在微服务项目中,后续的版本升级,大量的项目需要单独修改,有了统一管理工具,只需要维护一个地方即......
  • NocoBase 一周更新汇总:支持在阅读态字段字段上启用链接
    汇总2024.11.28-2024.12.05产品更新日志,最新发布可以前往我们的博客查看。上周我们发布了NocoBase1.4.0版本,带来简化插件管理、增强通知功能、用户数据同步、备份管理器等多项新特性。NocoBase目前更新包括的版本更新包括三个分支:main,next和develop。main:截止目前......
  • 你的Docker部署能更简单吗?GitLab集成与多进程管理又怎么做?
    前言文章开始前,先尝试回答几个问题:在日常工作中,程序的打包和部署方式流程是怎样的?如果使用Docker容器部署方式,是用原生Docker命令,还是Kaniko这类工具?除了业务服务外,如果还需要同时运行其他进程,应该怎么办?举个例子:除了主服务进程(比如Web服务器),还需要同时启动Nginx进程(用于......
  • 使用 Clojure 实现简单的图像边缘检测
    Clojure是一门函数式编程语言,运行于JVM平台,适合处理复杂数据和并发任务。在图像处理领域,Clojure的丰富库支持和简洁的语法能够有效实现基本图像处理任务。本文将使用Clojure实现基于Sobel算子的简单边缘检测。实现代码以下代码使用clojure.java.io和clojure.core.mat......
  • 针尖对麦芒!Anthropic 推出 Claude Android 可实时翻译!
    Anthropic,作为OpenAI的强劲对手,于本周二正式推出了专为Android用户设计的Claude应用程序,旨在通过拓宽Claude的接入平台,吸引用户从ChatGPT转向其服务。这款Android应用承袭了五月问世的iOS版本的设计理念,用户无需支付任何费用即可体验到Anthropic顶尖AI模型——Claude3.5Sonnet的......
  • 基于验证链(Chain of Verification)的大语言模型幻觉问题解决方案
    LLM(SEALONG:LLM(LargeLanguageModel)在长上下文推理任务中的自我改进)在生成内容时往往会遭遇一个棘手的问题——幻觉(Hallucination)。模型自信地输出虚假或误导性信息,对依赖其准确输出的开发者、工程师及用户构成了实质性的挑战。为解决这一问题,研究者提出了ChainofVerificat......
  • 使用 Crystal 语言实现图像反转处理
    什么是Crystal语言?Crystal是一种静态类型的编程语言,它的设计目标是提供高性能和良好的可读性。Crystal语言在语法上非常接近Ruby,但它通过编译生成高效的机器代码。Crystal的类型系统在编译时进行检查,这使得它在运行时提供接近C语言的性能,同时保持类似Ruby的简洁性。Cr......
  • 如何实现LLM的通用function-calling能力?
    众所周知,LLM的函数function-calling能力很强悍,解决了大模型与实际业务系统的交互问题。其本质就是函数调用。从openai官网摘图: 简而言之:LLM起到决策的作用,告知业务系统应该调用什么函数,以及入参是什么。业务系统负责实现对应的函数(比如本地实现,或者调用其他系统提供的服......