当前位置:   article > 正文

【AI】ChatGLM3-6B模型API调用测试_chatglm api

chatglm api

之前将ChatGLM6B模型下载到本地运行起来了:ChatGLM3-6B上手体验;如果想要用在项目中,那么可以使用API调用的方式进行操作,尤其当你的项目还是不同语言的异构的场景下,其他服务需要调用的时候就可以直接通过请求服务来获取了。

1.运行API模式

ChatGLM3-6B的官方代码里有运行API的bat文件,可以直接点击运行即可,如果在Linux系统或者通过docker部署的方式运行,可以运行openai_api_demo目录下的 openai_api.py文件。
模型默认运行在8000端口

2.接口介绍

接口url :http://127.0.0.1:8000/v1/chat/completions
请求参数

        "functions": functions,  # 函数定义
        "model": model,  # 模型名称
        "messages": messages,  # 会话历史
        "stream": use_stream,  # 是否流式响应
        "max_tokens": 100,  # 最多生成字数
        "temperature": 0.8,  # 温度
        "top_p": 0.8,  # 采样概率
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

请求的方式有流式和非流式请求,对应请求参数中stream的True和False,请求方式的处理可以参照官方给出的方法

import requests
import json

base_url = "http://127.0.0.1:8000"


def create_chat_completion(model, messages, functions, use_stream=False):
   data = {
       "functions": functions,  # 函数定义
       "model": model,  # 模型名称
       "messages": messages,  # 会话历史
       "stream": use_stream,  # 是否流式响应
       "max_tokens": 100,  # 最多生成字数
       "temperature": 0.8,  # 温度
       "top_p": 0.8,  # 采样概率
   }

   response = requests.post(f"{base_url}/v1/chat/completions", json=data, stream=use_stream)
   if response.status_code == 200:
       if use_stream:
           # 处理流式响应
           for line in response.iter_lines():
               if line:
                   decoded_line = line.decode('utf-8')[6:]
                   try:
                       response_json = json.loads(decoded_line)
                       content = response_json.get("choices", [{}])[0].get("delta", {}).get("content", "")
                       print(content)
                   except:
                       print("Special Token:", decoded_line)
       else:
           # 处理非流式响应
           decoded_line = response.json()
           content = decoded_line.get("choices", [{}])[0].get("message", "").get("content", "")
           print(content)
   else:
       print("Error:", response.status_code)
       return None
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

3.不同的调用方式

ChatGLM3支持工具调用,api接口也支持了这一特性

  1. 简单对话
def simple_chat(use_stream=True):
    functions = None
    chat_messages = [
        {
            "role": "system",
            "content": "You are ChatGLM3, a large language model trained by Zhipu.AI. Follow the user's instructions carefully. Respond using markdown.",
        },
        {
            "role": "user",
            "content": "你好,给我讲一个故事,大概100字"
        }
    ]
    create_chat_completion("chatglm3-6b", messages=chat_messages, functions=functions, use_stream=use_stream)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  1. 工具调用
def function_chat(use_stream=True):
    functions = [
        {
            "name": "get_current_weather",
            "description": "Get the current weather in a given location.",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city and state, e.g. Beijing",
                    },
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
                },
                "required": ["location"],
            },
        }
    ]
    chat_messages = [
        {
            "role": "user",
            "content": "波士顿天气如何?",
        },
        {
            "role": "assistant",
            "content": "get_current_weather\n ```python\ntool_call(location='Beijing', unit='celsius')\n```",
            "function_call": {
                "name": "get_current_weather",
                "arguments": '{"location": "Beijing", "unit": "celsius"}',
            },
        },
        {
            "role": "function",
            "name": "get_current_weather",
            "content": '{"temperature": "12", "unit": "celsius", "description": "Sunny"}',
        },
        # ... 接下来这段是 assistant 的回复和用户的回复。
        # {
        #     "role": "assistant",
        #     "content": "根据最新的天气预报,目前北京的天气情况是晴朗的,温度为12摄氏度。",
        # },
        # {
        #     "role": "user",
        #     "content": "谢谢",
        # }
    ]
    create_chat_completion("chatglm3-6b", messages=chat_messages, functions=functions, use_stream=use_stream)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  1. 命令行调用测试
def chatincmd(use_stream=True):
    while True:
        functions = None
        content = input("Question:")
        chat_messages = [
            {
                "role": "user",
                "content": content
            }
        ]
        create_chat_completion("chatglm3-6b", messages=chat_messages, functions=functions, use_stream=use_stream)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/348535
推荐阅读
相关标签
  

闽ICP备14008679号