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

【003】调用Kimi实现AI对话,流式内容输出_#py

调用Kimi实现AI对话,流式内容输出

  • 前言
  • 1. 实现流式输出的主要代码块
  • 2. 完整代码

前言

流式输出(Streaming),一言以蔽之,就是每当 Kimi 大模型生成了一定数量的 Tokens 时(通常情况下,这个数量是 1 Token),立刻将这些 Tokens 传输给客户端,而不再是等待所有 Tokens 生成完毕后再传输给客户端。当你与 Kimi 智能助手 进行对话时,Kimi 智能助手的回复是按字符逐个“跳”出来的,这即是流式输出的表现之一,流式输出能让用户第一时间看到 Kimi 大模型输出的第一个 Token,减少用户的等待时间。

1. 实现流式输出的主要代码块

本文代码根据【002】调用kimi实现文件上传并进行分析_#py进行改进的,因此以下不再讲述重复的内容,仅对改进和优化的代码进行补充。

本次改进的内容主要基于InputContent这个函数实现的,以下是该函数的完整示例。

    def InputContent(self, content):
        """
        这里由原来的对话能力的直接输出的方式,改为流式输出(内容是时时输出的,一段段的进行展示)
        主要实现通过内部开关的stream=Ture来实现,内容输出参考for循环
        把历史记录添加进对话中,保证对话的连续性
        """

        self.messages.append({"role": "user", "content": content})
        completion = self.client.chat.completions.create(
            model="moonshot-v1-8k",
            messages=self.messages,
            temperature=0.3,
            stream=True,  # <-- 注意这里,我们通过设置 stream=True 开启流式输出模式
        )

        # 当启用流式输出模式(stream=True),SDK 返回的内容也发生了变化,我们不再直接访问返回值中的 choice
        # 而是通过 for 循环逐个访问返回值中每个单独的块(chunk)
        content_text = ""
        print("Kimi AI: ", end="")  # 回答的开头
        for chunk in completion:
            # 在这里,每个 chunk 的结构都与之前的 completion 相似,但 message 字段被替换成了 delta 字段
            delta = chunk.choices[0].delta  # <-- message 字段被替换成了 delta 字段
            if delta.content:
                # 我们在打印内容时,由于是流式输出,为了保证句子的连贯性,我们不人为地添加
                # 换行符,因此通过设置 end="" 来取消 print 自带的换行符。
                print(delta.content, end="")
                content_text = content_text + delta.content
        print("\n")     # 创建一个换行

        # 为了让 Kimi 大模型拥有完整的记忆,我们必须将 Kimi 大模型返回给我们的消息也添加到 messages 中, Kimi在对话中的角色是assistant
        self.messages.append({'role': 'assistant', 'content': content_text})
        # 返回回答内容
        return content_text

2. 完整代码

点击传送门 抵达资源地址。


http://www.kler.cn/news/365112.html

相关文章:

  • springboot3.x.x 集成 连接SQL Server 2008 驱动版本和SSL套接字问题的解决
  • Linux 字符设备驱动 之 无法归类的《杂项设备驱动》
  • sqlyog连接MySQL8.4报1251错误
  • DockerCompose快速部署Java项目、nginx前端和mysql数据库到centos虚拟机
  • LeetCode_509. 斐波那契数_java
  • Redis 命令集 (超级详细)
  • Rust的move关键字在线程中的使用
  • 网络爬虫-Python网络爬虫和C#网络爬虫
  • 对于 前端 解释下 node.js的必要性
  • Python 工具 之 使用 Flask 简单创建一个 Http Post (带参请求) 服务 API
  • picgo的gitee图床配置
  • Vue3+Vite实现Excel表格去重
  • RHCE-web篇
  • 企业科技展厅以科技创新为驱动,重塑品牌形象
  • 音视频同步版本【基于外部时钟】--版本的优化,现在视频可以正常至播放结束
  • 二值图像的生成与修改:OpenCV 实践指南
  • 空间转录组 | ​Stereo-seq在疾病中的应用研究
  • 系统架构设计师考试内容
  • Apple Vision Pro市场表现分析:IDC最新数据揭示的真相
  • 从蚂蚁金服面试题窥探STW机制
  • 经开区2023年信息学竞赛试题
  • 2024.10月19日- 关于Vue2的 Ajax
  • C#从零开始学习(面向对象)(3)
  • 【模型学习】
  • 利用Spring Boot实现信息化教学平台
  • 博弈论 C++