腾讯云AI代码助手编程挑战赛——5分钟用混元大模型生成AI对话机器人

作品简介

这段代码是一个简单的聊天机器人实现,它使用了腾讯云的 Hunyuan 服务来生成对话回复。主要代码由腾讯云AI代码助手生成,如果说两年前AI生成代码会生成很多幻觉的东西,但是在今天,描述清楚需求的情况下,基本上已经 80%可用了。
以下是代码的主要部分和功能的介绍(代码在文末)

技术架构

环境配置与依赖管理

Python环境:代码是用Python编写的,依赖于Python的标准库和第三方库。
第三方库:
tencentcloud:腾讯云的SDK,用于与腾讯云的Hunyuan服务进行交互。
gradio:用于快速创建Web界面,使得用户可以通过浏览器与聊天机器人互动。

日志记录

使用Python的logging模块来记录信息和错误,有助于调试和监控应用的运行状态。

腾讯云Hunyuan服务集成

认证:通过credential.Credential类使用从环境变量中获取的SecretIdSecretKey进行身份验证。
客户端配置:使用ClientProfileHttpProfile来配置Hunyuan服务的客户端。
API调用:通过hunyuan_client.HunyuanClient实例调用Hunyuan服务的API

业务逻辑

获取Hunyuan客户端:get_hunyuan_client函数负责初始化并返回一个Hunyuan客户端实例。
获取聊天补全内容:get_chat_completion函数接受用户消息,构建API请求,调用Hunyuan服务,并解析响应以获取机器人的回复。

用户界面

使用Gradio库创建一个简单的Web界面,允许用户输入他们的消息,并显示机器人的回复。
界面包括:
一个文本输入框,用户可以在其中输入他们的消息。
一个文本输出框,用于显示Hunyuan的回复。
界面的标题和描述提供了关于如何使用界面的信息。

主程序流程

在__main__块中,首先初始化Hunyuan客户端。
如果客户端初始化成功,创建并启动Gradio界面。
技术栈总结
编程语言:Python
大模型:腾讯云Hunyuan
前端界面:Gradio
日志记录:Python logging模块
异常处理:Python异常处理机制
运行流程
用户运行脚本,初始化Hunyuan客户端。
如果客户端初始化成功,Gradio界面启动并在浏览器中打开。
用户在界面的输入框中输入消息。
消息被发送到chatbot_interface函数,该函数调用get_chat_completion来获取回复。
回复显示在界面的输出框中。
这段代码展示了一个简单的聊天机器人后端和前端的集成,使用了云服务进行智能回复,并通过Web界面与用户交互。

实现过程

开发环境、开发流程

申请购买混元大模型API

本项目使用的混元大模型,购买地址点击混元大模型,如果是学习体验用的话hunyuan-standard就够用在这里插入图片描述
购买完大模型后,需要在云控制台申请一下 API id 和 secret,步骤可以参考混元API 密钥申请
产品开发了解点击混元大模型API 文档
申请到API 密钥后需要,配置永久环境变量
export TENCENTCLOUD_SECRET_ID='your_secret_id'
export TENCENTCLOUD_SECRET_KEY='your_secret_key'
安装所需的requirments
pip install --upgrade tencentcloud-sdk-python gradio

运行项目

关键技术解析

腾讯云AI代码助手在上述过程中的助力

安装腾讯云AI 代码助手,点击安装步骤AI 代码助手安装步骤
生成基本测试功能,封装函数,优化代码,增加功能,生成前端界面

使用说明

python chatbot.py
浏览器输入 http://127.0.0.1:7860
然后输入提问点击 submit

效果展示

在这里插入图片描述

import os
import json
import logging
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.hunyuan.v20230901 import hunyuan_client, models
import gradio as gr

# 配置日志记录
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# 配置信息
ENDPOINT = "hunyuan.tencentcloudapi.com"

def get_hunyuan_client():
    """
           初始化并返回一个 HunyuanClient 对象。

           :return: HunyuanClient 对象
           :raises: ValueError, TencentCloudSDKException
           """
    try:
        # 从环境变量中获取腾讯云的 SecretId 和 SecretKey
        secret_id = os.environ.get('TENCENTCLOUD_SECRET_ID')
        secret_key = os.environ.get('TENCENTCLOUD_SECRET_KEY')

        if not secret_id or not secret_key:
            logger.error("TENCENTCLOUD_SECRET_ID 或 TENCENTCLOUD_SECRET_KEY 环境变量未设置")
            raise ValueError("缺少必要的环境变量")

        # 实例化一个认证对象
        cred = credential.Credential(secret_id, secret_key)

        # 实例化 http 选项
        httpProfile = HttpProfile()
        httpProfile.endpoint = "hunyuan.tencentcloudapi.com"

        # 实例化 client 选项
        clientProfile = ClientProfile()
        clientProfile.httpProfile = httpProfile

        # 实例化 HunyuanClient 对象
        client = hunyuan_client.HunyuanClient(cred, "", clientProfile)
        logger.info("成功初始化 HunyuanClient")
        return client
    except TencentCloudSDKException as e:
        logger.error(f"腾讯云SDK异常: {e}")
        raise
    except Exception as e:
        logger.error(f"发生错误: {e}")
        raise

def get_chat_completion(client, message):
    """
       使用 Hunyuan 客户端获取聊天补全内容。
       """
    try:
        req = models.ChatCompletionsRequest()
        params = {
            "Model": "hunyuan-functioncall",
            "Stream": False,
            "Messages": [
                {
                    "Role": "user",
                    "Content": message
                }
            ],
            # ...(其他参数保持不变)
        }
        req.from_json_string(json.dumps(params))
        resp = client.ChatCompletions(req)
        resp_content = json.loads(resp.to_json_string())['Choices'][0]['Message']['Content']
        return resp_content  # 假设响应中包含 Content 字段
    except TencentCloudSDKException as e:
        logger.error(f"腾讯云SDK异常: {e}")
        return None
    except Exception as e:
        logger.error(f"发生错误: {e}")
        return None

# Gradio 界面定义
def chatbot_interface(message):
    if message.strip() == '':
        return "请输入一些内容。"
    content = get_chat_completion(client, message)
    if content:
        return content
    else:
        return "未能获取到回复内容。"

if __name__ == "__main__":
    client = get_hunyuan_client()
    if client:
        # 创建 Gradio 界面
        demo = gr.Interface(
            fn=chatbot_interface,
            inputs=gr.Textbox(lines=2, placeholder="输入您想要聊天的内容..."),
            outputs=gr.Textbox(placeholder="HunYuan 的回复将显示在这里..."),
            title="Boya 的 聊天机器人",
            description="与 Boya 聊天机器人进行对话。输入 '退出' 来结束对话。"
        )

        demo.launch()

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐