如何利用通义千问查询阿里云资源

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
视觉智能开放平台,视频资源包5000点
简介: 本篇文章详细阐述了如何利用LangChain框架构建一款Python工具,该工具能够调用通义千问大模型来查询和获取阿里云资源信息。

本文内容改编自【通义千问API入门教程】,实验代码采用Python语言编写

作为阿里云开发者,我们常常需要查询阿里云上的资源信息,比如ECS、RDS等资源详情或产品说明。以往我们只能在官网上按步骤一页一页找到控制中心,再查到资源页面,节奏略显拖沓。如今,我们已经进入大模型时代,有什么办法可以更简便快捷的获取这些信息呢?能不能让大模型来做这件事?于是,基于LangChain的Agent架构,我们尝试制作了一个实现上述想法的大模型Agent,让大模型可以协助您查询您在阿里云上开通了哪些资源。您可以进入Jupyter Notebook环境来运行本章的代码,查询您在阿里云的资源使用情况,也可以将代码加入到您的工程项目中,利用阿里云控制API实现更多功能,我们欢迎您将实验结果分享出来。

本文我们将使用灵积API调用通义千问大模型,并利用阿里云控制API来查询您的阿里云资源。

学习之前

  • 本文假设你已经初步了解并使用过 python、git,因此不会涉及如何安装 python、pip、git 等基础工具。
  • 本文侧重于如何将大模型 API 应用到工作中,因此并不不会详细介绍大模型以及机器学习的基础概念。

1. 准备工作

1.1. 环境配置

在开始本章的学习之前,你可以先安装一下必要的依赖,以便运行相关代码:

pip install dashscope==1.13.6
pip install langchain==0.1.0
pip install langchain_core==0.1.8
pip install langchainhub==0.1.14
pip install langchain-experimental==0.0.49
pip install beautifulsoup4==4.12.2
pip install html2text==2020.1.16
pip install alibabacloud_cloudcontrol20220830==1.1.0

1.2. 账号准备

首先,您需要前往 官网创建 API Key。接下来,请获取你的 DASHSCOPE_API_KEY;同时,请于RAM访问控制查询和创建您的阿里云AK/SK。

MacOS or Linux

您可以使用以下命令行导入环境变量

export DASHSCOPE_API_KEY="sk-****"
export ALIBABA_CLOUD_ACCESS_KEY_ID="<your access key id>"
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="<your access key secret>"

Windows

可以在终端使用SET命令设置环境变量

set DASHSCOPE_API_KEY=sk-****
set ALIBABA_CLOUD_ACCESS_KEY_ID=your access key id
set ALIBABA_CLOUD_ACCESS_KEY_SECRET=your access key secret

或者在PowerShell中使用以下命令行配置环境变量

$Env:DASHSCOPE_API_KEY = "sk-****"
$Env:ALIBABA_CLOUD_ACCESS_KEY_ID = "<your access key id>"
$Env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "<your access key secret>"

Jupyter Notebook

您可以使用os.environ方法,在代码开头设置临时环境变量。

2. 搭建云资源查询AGENT

2.1. 创建阿里云资源查询API工具

# 阿里云资源查询工具

# -*- coding: utf-8 -*-
import json
import os
from typing import Any
from langchain_core.tools import BaseTool
from alibabacloud_cloudcontrol20220830.client import Client as cloudcontrol20220830Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_cloudcontrol20220830 import models as cloudcontrol_20220830_models
from alibabacloud_tea_util import models as util_models


class AliyunResourceTool(BaseTool):
    """查询阿里云资源的工具"""

    name: str = "阿里云的云资源查询工具"
    description: str = (
        "用于查询账号下的阿里云的源信息,需要指通过 json 指定产品名 product、资源类型 resource、地域 region。"
        "ECS 的默认资源为 Instance,VPC 的默认资源为 VPC。"
        "region 只能是某一个指定的地域,参考格式:cn-hangzhou、cn-beijing、us-east-1"
    )

    def _run(self, params) -> Any:
        params_dict = json.loads(params)
        request_path = f'/api/v1/providers/Aliyun/products/{params_dict["product"]}/resources/{params_dict["resource"]}'
        get_resources_request = cloudcontrol_20220830_models.GetResourcesRequest(
            region_id=params_dict.get("region") or 'cn-hangzhou',
            max_results=2
        )
        runtime = util_models.RuntimeOptions()
        headers = {
   }
        try:
            config = open_api_models.Config(
                access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
            )
            # Endpoint 请参考 https://api.aliyun.com/product/cloudcontrol
            config.endpoint = f'cloudcontrol.aliyuncs.com'
            client = cloudcontrol20220830Client(config)
            # 复制代码运行请自行打印 API 的返回值
            result = client.get_resources_with_options(request_path, get_resources_request, headers, runtime)
            return result.body
        except Exception as error:
            # 错误 message
            print(error)
            return '查询失败'

2.2. 创建通义千问AGENT

# 定义 大模型工具

# -*- coding: utf-8 -*-
import sys
from langchain import hub
from langchain.agents import AgentExecutor
from langchain.agents import create_react_agent
from langchain_community.llms import Tongyi

class MyAgent():
    def __init__(self):
        self.agent_executor=self.assemble_agent_executor()

    def assemble_agent_executor(self):
        model = Tongyi()
        model.model_name = 'qwen-max'
        model.model_kwargs = {
   'temperature': 0.5}

        tools = [
            AliyunResourceTool(),
        ]

        prompt = hub.pull("hwchase17/react")

        agent = create_react_agent(model, tools, prompt)
        agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
        return agent_executor

    def ask(self, question):
        result = self.agent_executor.invoke({
   'input': question})
        return result['output']

llm = MyAgent()

2.3. 阿里云资源查询

下面我们尝试利用上述代码工具来查询阿里云资源,API应用详情点击

2.3.1. 使用工具查询ECS资源

首先测试Agent初始化是否成功,是否能查询“杭州的ECS实例信息”。本账号并没有关联ECS实例,所以查询结果为空。

llm.ask("杭州的ECS实例什么时候到期")

输出内容

> Entering new AgentExecutor chain...
 需要使用阿里云的云资源查询工具来获取ECS实例的信息,包括到期时间
Action: 阿里云的云资源查询工具
Action Input: {"product": "ECS", "resource": "Instance", "region": "cn-hangzhou"}
{'maxResults': 2, 'requestId': '3A02BE18-DA09-576D-BD98-68FDAD75DDDF', 'resources': [], 'totalCount': 0} 根据API返回结果,当前在杭州地域下没有ECS实例。
Final Answer: 目前在杭州地域下没有到期的ECS实例。如果有实例并需要查询其到期时间,请确保输入正确的region信息,并且该账号下在对应地域存在ECS实例。

> Finished chain.
'目前在杭州地域下没有到期的ECS实例。如果有实例并需要查询其到期时间,请确保输入正确的region信息,并且该账号下在对应地域存在ECS实例。'

由于本章使用的测试账号没有开通ECS服务,因此反馈没有查询到ECS实例。

您可以查看云服务产品信息通过阿里云权益中心购买的 99 元/年的经济型 2核2G ECS 实例,新老客户都可以购买,并且后续可以 99 元续费。您可以参考阿里云便宜服务器优惠合集参与优惠活动

2.3.2. 查询更多阿里云资源

接下来,我们在不做任何代码改动的情况下查询VPC信息。理论上我们可以查询API应用范围的所有资源。

llm.ask("我在上海有没有VPC,如有请返回数量")

输出内容

> Entering new AgentExecutor chain...
 需要查询我在上海地区的VPC资源
Action: 阿里云的云资源查询工具
Action Input: {"product": "VPC", "resource": "VPC", "region": "cn-shanghai"}
{'maxResults': 2, 'requestId': 'BC5C3BBE-762F-5451-830C-40FB15E806EC', 'resources': [], 'totalCount': 0} 查询结果显示在上海地区没有VPC资源
Final Answer: 您在上海地区目前没有VPC资源。

> Finished chain.
'您在上海地区目前没有VPC资源。'

2.3.3. 通义千问无需工具就能回答的问题

最后,我们看看大模型是如何回答不在API范围内的问题的,这里我们将询问ECS的定价策略,通义千问能直接给出合理的答案。

ans= llm.ask("ECS服务如何定价")

输出内容

> Entering new AgentExecutor chain...
 提供的工具对回答该问题帮助较小,我将不使用工具直接作答。
Final Answer: 阿里云函数计算服务(Function Compute)的定价模式基于以下几个方面:

1. **计费单位**:函数计算以 GB-s(GB 内存每秒)为计费单位。即您的函数运行时消耗的内存大小乘以运行时间(以秒计)。

2. **资源使用**:
   - **内存**:您可以根据实际需求配置函数运行所需的最小和最大内存,价格会随着内存规格不同而变化。
   - **执行时间**:函数每次执行的实际耗时,精确到毫秒级计费,但不足 1ms 的部分不收费。
   - **请求次数**:除了按量计费的资源使用外,函数计算还有免费额度的调用次数。

3. **冷启动**:首次创建或长时间未被调用后重新调用时可能会产生额外的冷启动费用,具体取决于函数的运行环境和镜像大小。

4. **免费额度**:阿里云为每个账号提供了一定额度的免费资源包,包括一定的函数调用次数、GB-s 计算资源以及一定数量的免费日志存储空间等。

5. **长期优惠**:对于持续运行的函数实例,可以采用预留实例(RI)的方式获得更优惠的价格。

为了获取最新的、详细的定价信息,请直接访问阿里云函数计算官网的定价页面,那里会有详尽且实时更新的价格列表和计费示例说明。

> Finished chain.

2.3.4. 封装成文件来执行

上述代码我们封装在文件 aliyun_resource_agent.py 中,你可以使用如下的指令来执行

python aliyun_resource_agent.py "我在上海有没有VPC,如有请返回数量"

输出内容

问题:我在上海有没有VPC

> Entering new AgentExecutor chain...
 需要查询用户在上海的VPC资源
Action: 阿里云的云资源查询工具
Action Input: {"product": "VPC", "resource": "VPC", "region": "cn-shanghai"}
{'maxResults': 2, 'requestId': '99B869A2-8F8C-53A8-AC0C-F53DD4571BC9', 'resources': [], 'totalCount': 0} 根据查询结果,用户在上海没有VPC资源
Final Answer: 您在上海没有VPC资源。

> Finished chain.
您在上海没有VPC资源。

3. 参考资料


本文代码

继续学习

本文作者:星舰

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
人工智能 JSON 自然语言处理
基于阿里云通义千问的AI模型应用开发指南
阿里云通义千问是阿里巴巴集团推出的多模态大语言模型平台,提供了丰富的API和接口,支持多种AI应用场景,如文本生成、图像生成和对话交互等。本文将详细介绍阿里云通义千问的产品功能,并展示如何使用其API来构建一个简单的AI应用,包括程序代码和具体操作流程,以帮助开发者快速上手。
559 3
|
2天前
|
存储 自然语言处理 关系型数据库
基于阿里云通义千问开发智能客服与问答系统
在企业的数字化转型过程中,智能客服系统已成为提高客户满意度和降低运营成本的重要手段。阿里云的通义千问作为一款强大的大语言模型,具有自然语言理解、对话生成、知识检索等能力,非常适合用来开发智能客服与问答系统。 通过本博客,我们将演示如何基于阿里云的通义千问模型,结合阿里云相关产品如函数计算(FC)、API网关、RDS等,搭建一个功能齐全的智能客服系统。
31 5
|
4月前
|
自然语言处理 开发者
通义千问继续开源!阿里云38篇论文被顶会ACL 2024录用
通义千问继续开源!阿里云38篇论文被顶会ACL 2024录用
131 8
|
5月前
|
SQL 人工智能 JavaScript
|
5月前
|
人工智能
|
人工智能 自然语言处理 搜索推荐
2023云栖大会 | 阿里云发布通义千问2.0
今天,阿里云正式发布千亿级参数大模型通义千问2.0。在10个权威测评中,通义千问2.0多方面性能超过GPT-3.5,正在加速追赶GPT-4。 此外,通义千问APP在各大手机应用市场正式上线,所有人都可通过APP直接体验最新模型能力。 过去6个月,通义千问2.0在性能上取得巨大飞跃,相比4月发布的1.0版本,通义千问2.0在复杂指令理解、文学创作、通用数学、知识记忆、幻觉抵御等能力上均有显著提升。目前,通义千问的多方面性能已经超过GPT-3.5,加速追赶GPT-4。
2705 0
2023云栖大会 | 阿里云发布通义千问2.0
|
6月前
|
自然语言处理 Java 测试技术
使用PostMan请求阿里云通义千问大模型
本文介绍如果通过postman调用阿里云通义千问API,然后介绍如果使用多语言集成,最后介绍了快速使用postman压测创建的API请求。
1138 2
|
7月前
|
存储 人工智能 自然语言处理
阿里云的通义千问
5月更文挑战第15天
|
7月前
|
自然语言处理 API 数据安全/隐私保护
通过阿里云Milvus和通义千问快速构建基于专属知识库的问答系统
本文展示了如何使用阿里云向量检索 Milvus 版和灵积(Dashscope)提供的通用千问大模型能力,快速构建一个基于专属知识库的问答系统。在示例中,我们通过接入灵积的通义千问 API 及文本嵌入(Embedding)API 来实现 LLM 大模型的相关功能。
通过阿里云Milvus和通义千问快速构建基于专属知识库的问答系统