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

背景

公司想对接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

核心代码实现与优化

基础对话功能实现

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

python 复制代码
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)

流式对话高级实现

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

python 复制代码
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能力提供了可靠选择。

相关推荐
牛奶咖啡133 天前
云计算平台应用实践——云计算与云平台
云计算·云平台·云平台的三大服务模式·云计算与云平台的关系·laas paas saas·云平台的主流架构·国内外的主流云平台对比与选型
逐流人4 天前
手工建集群到全自动发布:k8s集群部署与DevOps流水线整合实战
ci/cd·云原生·kubernetes·云计算·devops
wz97544 天前
走进云计算:从硬件到云平台,读懂数字化底层基石
云计算
Kari115 天前
企业大模型RAG知识库从0到1搭建指南:腾讯云ADP+JOTO实战
人工智能·云计算·腾讯云
Kari115 天前
企业级智能体平台怎么选:腾讯云ADP与其他主流技术路线的架构对比
架构·云计算·腾讯云
无所畏俱的老尹7 天前
Agent 落地为什么需要影子对照:同输入只读双跑、写动作变提案、差异报警,比直接切全量更安全
人工智能·机器学习·云计算·aigc·devops
逐流人7 天前
DevOps 入门实战(一):从 CI/CD 概念到 Jenkins 自动构建部署
运维·云原生·云计算·jenkins·devops
SaaS_Product8 天前
OneDrive中的文件批量迁移到Zoho网盘
经验分享·云计算·saas·onedrive
Zhang2857329 天前
跨境业务选AWS区域避坑指南:美东、美西、新加坡、东京怎么选?
云计算·aws
DolitD10 天前
UE像素流与云渲染技术方案对比分析
3d·云原生·ue5·云计算·图形渲染