基于阿里云DashScope API构建智能对话指南

news2025/5/24 18:10:44

背景

公司想对接AI智能体,用于客服系统,经过调研和实施,觉得DashScope 符合需求。
阿里云推出的DashScope灵积模型服务为开发者提供了便捷高效的大模型接入方案。本文将详细介绍如何基于DashScope API构建一个功能完善的智能对话系统,包含流式对话、工具调用等高级特性。

项目背景与技术选型

我们的项目目标是构建一个企业级智能客服系统,需要满足以下核心需求:

  • 支持多轮自然语言对话
  • 实现低延迟的流式响应
  • 可扩展的工具调用能力
  • 稳定的生产环境部署

经过技术评估,我们选择了阿里云DashScope服务,主要基于以下优势:

  1. 模型多样性:提供QWEN系列等多种大语言模型
  2. API兼容性:兼容OpenAI API格式,降低迁移成本
  3. 性能保障:阿里云基础设施确保服务稳定性
  4. 成本效益:相比自建模型集群更具性价比

模型地址:https://help.aliyun.com/zh/model-studio/videos/yi-large-quick-start

在这里插入图片描述

核心代码实现与优化

基础对话功能实现

我们首先实现了基础的对话功能模块,这是整个系统的核心:


import json
from typing import List, Dict, Optional
import requests
from pydantic import BaseModel
from utils.LogHandler import log


# 配置管理使用Pydantic模型,便于验证和文档化
class DashScopeConfig(BaseModel):
    base_url: str = "https://dashscope.aliyuncs.com/compatible-mode/v1"
    api_key: str
    default_model: str = "qwen-plus"
    timeout: int = 30
    max_retries: int = 3


class GPTChatResponse(BaseModel):
    content: str
    tool_calls: Optional[List[Dict]] = None


def gpt_chat(
        messages: List[Dict[str, str]],
        config: DashScopeConfig,
        model: Optional[str] = None,
        temperature: Optional[float] = None,
        max_tokens: Optional[int] = 512
) -> str:
    """
    标准对话API实现
    :param messages: 对话消息列表
    :param config: 服务配置
    :param model: 指定模型,默认使用配置中的default_model
    :param temperature: 生成多样性控制
    :param max_tokens: 最大输出token数
    :return: 模型生成的文本内容
    """
    headers = {
        'Content-Type': 'application/json',
        'Authorization': f'Bearer {config.api_key}'
    }

    payload = {
        'model': model or config.default_model,
        'messages': messages,
        'max_tokens': max_tokens,
    }

    if temperature is not None:
        payload['temperature'] = temperature

    for attempt in range(config.max_retries):
        try:
            resp = requests.post(
                f"{config.base_url}/chat/completions",
                headers=headers,
                json=payload,
                timeout=config.timeout
            )
            resp.raise_for_status()
            json_data = resp.json()

            if choices := json_data.get('choices'):
                if len(choices) > 0:
                    return choices[0]['message']['content']

            raise ValueError("No valid response from model")

        except requests.exceptions.RequestException as e:
            log.error(f"Attempt  {attempt + 1} failed: {str(e)}")
            if attempt == config.max_retries - 1:
                raise


if  __name__ == "__main__":
    config = DashScopeConfig(api_key="sk-xxxxxx")
    messages = [
        {"role": "system", "content": "你是一名专业客服人员"},
        {"role": "user", "content": "怎么处理客户争吵问题"}
    ]
    response = gpt_chat(messages, config)
    print(response)

在这里插入图片描述

流式对话高级实现

为提升用户体验,我们实现了流式对话功能,并进行了多项优化:


import json
from typing import List, Dict, Optional
import requests
from pydantic import BaseModel
from utils.LogHandler import log


# 配置管理使用Pydantic模型,便于验证和文档化
class DashScopeConfig(BaseModel):
    base_url: str = "https://dashscope.aliyuncs.com/compatible-mode/v1"
    api_key: str
    default_model: str = "qwen-plus"
    timeout: int = 30
    max_retries: int = 3


class GPTChatResponse(BaseModel):
    content: str
    tool_calls: Optional[List[Dict]] = None


def gpt_stream_chat(
        messages: List[Dict[str, str]],
        config: DashScopeConfig,
        model: Optional[str] = None,
        tools: Optional[List[Dict]] = None,
        on_content: Optional[callable] = None
) -> GPTChatResponse:
    """
    流式对话实现,支持实时内容处理和工具调用
    :param messages: 对话消息列表
    :param config: 服务配置
    :param model: 指定模型
    :param tools: 可用工具列表
    :param on_content: 内容回调函数
    :return: GPTChatResponse对象
    """
    headers = {
        'Content-Type': 'application/json',
        'Authorization': f'Bearer {config.api_key}'
    }

    payload = {
        'model': model or config.default_model,
        'messages': messages,
        'stream': True
    }

    if tools:
        payload['tools'] = tools

    content_list = []
    tool_calls = None

    try:
        resp = requests.post(
            f"{config.base_url}/chat/completions",
            headers=headers,
            json=payload,
            stream=True,
            timeout=config.timeout
        )
        resp.raise_for_status()

        for line in resp.iter_lines():
            if not line or line == b'data: [DONE]':
                continue

            try:
                chunk = json.loads(line.decode('utf-8')[6:])
                delta = chunk['choices'][0]['delta']

                # 处理推理过程内容
                if content := delta.get('reasoning_content'):
                    if on_content:
                        on_content(content, 'reasoning')
                    content_list.append(content)

                    # 处理最终回复内容
                if content := delta.get('content'):
                    if on_content:
                        on_content(content, 'content')
                    content_list.append(content)

                    # 处理工具调用
                if 'tool_calls' in delta:
                    tool_calls = delta['tool_calls']
                    if tool_calls and 'name' in str(tool_calls):
                        break

            except json.JSONDecodeError:
                log.warning(f"Failed  to decode chunk: {line}")
                continue

    except requests.exceptions.RequestException as e:
        log.error(f"Stream  request failed: {str(e)}")
        raise

    return GPTChatResponse(content=''.join(content_list), tool_calls=tool_calls)


def handle_stream_content(content: str, content_type: str):
    print(content, end='', flush=True)  # 实时输出,不换行


if __name__ == "__main__":
    config = DashScopeConfig(api_key="sk-xxxxxxxxxxxxxxxxxxxxxx")
    messages = [
        {"role": "system", "content": "你是一名专业客服人员"},
        {"role": "user", "content": "你好?"}
    ]
    response = gpt_stream_chat(messages, config, on_content=handle_stream_content)
    # print(response.content)

在这里插入图片描述

结束

我们成功构建了基于阿里云DashScope的高效智能对话系统。这套方案不仅适用于客服场景,也可扩展应用于智能助手、内容生成等多种AI应用场景。DashScope服务的稳定性和易用性为中小企业快速部署AI能力提供了可靠选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2384776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

九州未来十三载:开源赋能 智启未来

2012年,九州未来以“开源赋能云边变革”为使命,开启中国开放云边基础架构服务的探索之路。十三载坚守深耕,我们始终以开源为翼,以算力为基,在科技浪潮中砥砺前行,见证并推动着AI时代的算力变革。 坚守初心丨…

2025年AI搜索引擎发展洞察:技术革新与市场变革

引言:AI搜索的崛起与市场格局重塑 2024-2025年,AI搜索市场迎来了前所未有的变革期。随着DeepSeek-R1等先进大语言模型的推出,传统搜索引擎、AI原生搜索平台以及各类内容平台纷纷加速智能化转型,推动搜索技术从基础信息检索向深度…

dify调用Streamable HTTP MCP应用

一、概述 上一篇文章,介绍了使用python开发Streamable HTTP MCP应用,链接:https://www.cnblogs.com/xiao987334176/p/18872195 接下来介绍dify如何调用MCP 二、插件 安装插件 需要安装2个插件,分别是:Agent 策略(支持 …

HCIP实验五

一、实验拓扑图: 二、实验需求分析: 1. PreVal策略:要求确保R4通过R2到达192.168.10.0/24 ,需在R4上针对去往该网段路由配置PreVal策略,为经R2的路径赋予更高优先值,影响本地路由表选路。 2. AS Path策略…

vivado fpga程序固化

一般下载到fpga上的程序在掉电之后就会丢失,如果想要掉电之后程序不丢失,就需要将比特流文件固化到板载的flash上。 以下以我的7a100t开发板为例,介绍程序固化的流程 点击OK就可以下载了。 一个奇怪的问题 有一次我的一个工程固化之后&…

OpenCV CUDA模块图像特征检测与描述------图像中快速检测特征点类cv::cuda::FastFeatureDetector

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::FastFeatureDetector 是 OpenCV 的 CUDA 加速模块中的一部分,用于在图像中快速检测特征点。FAST(Features fro…

SpringMVC(结合源码浅析工作流程)

SpringMVC 概念 Spring MVC 是基于前端控制器(Front Controller)设计模式的 Web 框架,在 Web 应用中指一个统一的入口,用来接收所有客户端请求,并统一进行分发、处理。在 SpringMVC 中,前端控制器就是 Di…

学习STC51单片机13(芯片为STC89C52RC)

我去,兄弟们我们今天来学习一个牛逼 的硬件,它叫超声波测距模块HC—SR04 硬件:HC—SR04 哎,想当初最想要玩的就是这个模块,科技感十足,那现在就让我们玩玩吧 超声波测距传感器 原理就是说需要给Trig 10u…

Claude 4 系列 Opus 4 与 Sonnet 4正式发布:Claude 4新特性都有哪些?

随着 Claude 4 系列(Opus 4 与 Sonnet 4)的正式发布,Anthropic 把自家大模型从“会聊天”推进到“能当自主代理”──不仅推理更深、上下文更长,还内置代码执行、多模态理解、工具调用等一揽子全新能力;同时&#xff0…

深度“求索”:DeepSeek+Dify构建个人知识库

目录 前言 环境部署 安装Docker 安装Dify 配置Dify 部署知识库 创建应用 前言 在当今数字化信息爆炸的时代,数据隐私和个性化知识管理成为企业和个人关注的焦点。Dify,作为一款备受瞩目的开源 AI 应用开发平台,为用户提供了完整的私有…

基于R语言的空间异质性数据分析技术

在自然和社会科学领域,存在大量与地理或空间相关的数据,这些数据通常具有显著的空间异质性。传统的统计学方法在处理这类数据时往往力不从心。基于R语言的一系列空间异质性数据分析方法,如地理加权回归(GWR)、地理加权…

网络学习-TCP协议(七)

一、TCP协议 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 1、三次握手 客户端: 1、先发起连接,发送SYN置1,seqnum12345(随机值)----半连接…

基于微信小程序的高校校园微活动管理系统设计与实现(源码+定制+开发)高校微信小程序校园活动发布与互动平台开发 面向大学生群体的校园活动移动平台设计与实现

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

云计算与大数据进阶 | 27、存储系统如何突破容量天花板?可扩展架构的核心技术与实践—— 分布式、弹性扩展、高可用的底层逻辑(上)

数据中心里,存储系统是至关重要的组成部分。由于相关硬件组件与存储操作系统的多样性和复杂性,如何在保证存储稳定、安全、可靠的同时,实现灵活扩展和自服务,一直是困扰数据中心全面云化的难题。 简单来说,现在的难题…

IvorySQL-WASM:免安装的数据库探索之旅

简介 为了降低社区用户的使用门槛,提升使用体验,IvorySQL 社区特别推出了 IvorySQL-WASM 项目,帮助用户快速在线 Demo。 IvorySQL-WASM 基于开源的 Postgres-WASM 框架开发。它允许用户直接在网页浏览器中体验 IvorySQL,无需本地…

飞牛fnNAS远程映射盘符

目录 一、NAS、PC端配置Zerotier 二、使用网上邻居 三、使用WebDAV 1.开启WebDAV 2.PC上安装RaiDrive并设置 如果能将NAS作为本机一个盘符来使用,一定会令我非常方便。如果是本地,可以很方便实现。 将飞牛NAS映射为本地盘符,常用两种方式,一种是网上邻居,另一种是We…

Java设计模式:探索编程背后的哲学

设计模式是软件开发中的一种常见方法,它为常见问题提供了解决方案。在Java世界中,设计模式的应用尤为广泛。本文将深入探讨Java设计模式的起源、分类和实际应用,帮助读者更好地理解和应用这些模式。设计模式不仅是编程的技术,更是…

Docker部署OpenSearch集群

OpenSearch 简介 OpenSearch 是一款开源的搜索与分析引擎,最初由亚马逊 AWS 开发,于 2021 年 9 月将其移交至 Linux 基金会旗下的 OpenSearch 软件基金会,此后实现了社区主导的治理模式。其具有高性能、可扩展性强、兼容性强等优点&#xff…

【AS32X601驱动系列教程】PLIC_中断应用详解

平台中断控制器(Platform Level Interrupt Controller,PLIC)是国科安芯AS32系列MCU芯片的中断控制器,主要对中断源进行采样,优先级仲裁和分发。各外设中断统一连到PLIC,PLIC统一管理并输出中断请求到内核。…

python学习打卡day34

DAY 34 GPU训练及类的call方法 知识点回归: CPU性能的查看:看架构代际、核心数、线程数GPU性能的查看:看显存、看级别、看架构代际GPU训练的方法:数据和模型移动到GPU device上类的call方法:为什么定义前向传播时可以直…