人工智能AI

使用函数计算调用通义千问大模型实现AI对话

2024-01-13  本文已影响0人  梅西爱骑车

前提条件

开通DashScope并创建API-KEY

步骤一:创建Web函数

  1. 登录函数计算控制台,在左侧导航栏,单击函数

  2. 在顶部菜单栏,选择地域,然后在函数页面,单击创建函数

  3. 创建函数页面,按需选择创建函数的方式,配置以下配置项,然后单击创建

    • 创建函数的方式:Web函数

    • 基本设置:填写函数名称

    • 函数代码:配置函数的运行环境和代码相关信息。

      • 运行环境Debian 10

      • 代码上传方式使用示例代码

      • 启动命令python3 app.py

      • 监听端口:9000。

    • 高级配置单实例并发度设置为100,函数角色选择AliyunFCServerlessDevsRole,其他配置使用默认值。

    • 环境变量:添加变量DASHSCOPE_API_KEY,值为获取到的API-KEY。

步骤二:编写并部署通义千问AI对话代码

函数创建成功后,您可以开始编写使用通义千问的AI对话代码。

  1. 在函数详情页面,单击代码页签,在代码编辑器中编写代码。

    以下代码是以Python为例,通过调用通义千问模型对一个用户指令进行响应。
    单轮问答——prompt方式

import dashscope
import random

from flask import abort
from flask import Flask
from flask import request
from http import HTTPStatus

app = Flask(__name__)


def call_with_prompt(prompt):
    response = dashscope.Generation.call(
        model=dashscope.Generation.Models.qwen_turbo,
        prompt=prompt
    )
    # The response status_code is HTTPStatus.OK indicate success,
    # otherwise indicate request is failed, you can get error code
    # and message from code and message.
    if response.status_code == HTTPStatus.OK:
        print(response.output)  # The output text
        print(response.usage)  # The usage information
    else:
        print(response.code)  # The error code.
        print(response.message)  # The error message.
    return response


@app.route("/invoke", methods=['POST', 'GET'])
def index():
    bytes = request.stream.read()
    if bytes:
        payload = str(bytes, encoding='utf-8')
        print("Request Payload: " + payload)
        return call_with_prompt(payload)
    else:
        abort(403)

   
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=9000)

多轮会话——通过messages调用

from http import HTTPStatus
from dashscope import Generation
from dashscope.api_entities.dashscope_response import Role


def conversation_with_messages():
    messages = [{'role': Role.SYSTEM, 'content': 'You are a helpful assistant.'},
                {'role': Role.USER, 'content': '如何学习千义通问?'}]
    response = Generation.call(
        Generation.Models.qwen_turbo,
        messages=messages,
        result_format='message',  # set the result to be "message" format.
    )
    if response.status_code == HTTPStatus.OK:
        print(response)
        # append result to messages.
        messages.append({'role': response.output.choices[0]['message']['role'],
                         'content': response.output.choices[0]['message']['content']})
    else:
        print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
            response.request_id, response.status_code,
            response.code, response.message
        ))
    messages.append({'role': Role.USER, 'content': '千义通问有SDK吗?'})
    # make second round call
    response = Generation.call(
        Generation.Models.qwen_turbo,
        messages=messages,
        result_format='message',  # set the result to be "message" format.
    )
    if response.status_code == HTTPStatus.OK:
        print(response)
    else:
        print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
            response.request_id, response.status_code,
            response.code, response.message
        ))


if __name__ == '__main__':
    conversation_with_messages()

使用在线IDE安装DashScope SDK。

选择IDE的Terminal > New Terminal。

在Terminal输入pip3 install dashscope -t .安装DashScope SDK。


多出很多下载的内容

SDK安装完成后,单击部署代码。

步骤三:测试函数

在函数详情页面,单击测试页签,填写好事件名称和事件内容,然后单击测试函数,执行完成后,可以直接查看执行结果。


配置测试参数
prompt

执行单轮对话测试:

{
    "code": "",
    "message": "",
    "output": {
        "choices": null,
        "finish_reason": "stop",
        "text": "通常,大语言模型的学习需要大量的数据和计算资源。在实践中,可以使用深度学习技术来训练一个大型的语言模型,包括RNN、LSTM等,并利用GPU进行加速。此外,还可以使用预训练模型,如BERT和GPT系列,这些模型可以在较少的数据上达到良好的效果。"
    },
    "request_id": "2f5f6ec9-e1a7-998a-bf33-3d739dc86a44",
    "status_code": 200,
    "usage": {
        "input_tokens": 7,
        "output_tokens": 66,
        "total_tokens": 73
    }
}

多轮对话返回结果:

{
    "RequestId": "1-65a23a5f-15c49df0-ce93caa84ab4",
    "Code": "CAExited",
    "Message": "Function instance exited unexpectedly(code 0) with start command 'python3 app.py '.\nLogs:{\"status_code\": 200, \"request_id\": \"22c8529c-3c35-9762-a4d6-7b85b4819443\", \"code\": \"\", \"message\": \"\", \"output\": {\"text\": null, \"finish_reason\": null, \"choices\": [{\"finish_reason\": \"stop\", \"message\": {\"role\": \"assistant\", \"content\": \"千义通问是一种基于人工智能的问答系统,它可以帮助人们快速获取有用的信息。为了学习千义通问,您可以从以下几个方面入手:\\n\\n1. 阅读有关千义通问的资料,了解它的基本原理和功能。\\n\\n2. 练习使用千义通问,熟悉它的界面、操作方法以及查询技巧。\\n\\n3. 尝试使用千义通问解决实际问题,并根据实际情况调整搜索策略。\\n\\n4. 与其他千义通问用户交流,分享经验心得。\\n\\n总之,学习千义通问需要花费一定的时间和精力,但只要您坚持不懈,就一定能够掌握它!\"}}]}, \"usage\": {\"input_tokens\": 13, \"output_tokens\": 134, \"total_tokens\": 147}}\r\n{\"status_code\": 200, \"request_id\": \"039b9f3f-530b-9d67-80a4-a74cabd329f4\", \"code\": \"\", \"message\": \"\", \"output\": {\"text\": null, \"finish_reason\": null, \"choices\": [{\"finish_reason\": \"stop\", \"message\": {\"role\": \"assistant\", \"content\": \"是的,千义通问提供了丰富的SDK,支持多种编程语言,包括C++、Java、Python等,方便开发者在自己的项目中集成千义通问的功能。此外,千义通问还提供了一系列工具,可以帮助开发者轻松地将SDK应用到自己的项目中。\"}}]}, \"usage\": {\"input_tokens\": 155, \"output_tokens\": 61, \"total_tokens\": 216}}"
}

使用postman测试结果:


上一篇下一篇

猜你喜欢

热点阅读