【AI】ChatGLM3-6B模型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,  # 采样概率

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

import requests
import jsonbase_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

3.不同的调用方式

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

  1. 简单对话
def simple_chat(use_stream=True):functions = Nonechat_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. 工具调用
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. 命令行调用测试
def chatincmd(use_stream=True):while True:functions = Nonecontent = input("Question:")chat_messages = [{"role": "user","content": content}]create_chat_completion("chatglm3-6b", messages=chat_messages, functions=functions, use_stream=use_stream)

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

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

相关文章

vue和react diff的详解和不同

diff算法 简述:第一次对比真实dom和虚拟树之间的同层差别,后面为对比新旧虚拟dom树之间的同层差别。 虚拟dom 简述:js对象形容模拟真实dom 具体: 1.虚拟dom是存在内存中的js对象,利用内存的高效率运算。虚拟dom属…

LeetCode 20 有效的括号

题目描述 有效的括号 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一…

微积分-三角函数4

2.4三角恒等式 让我们来回顾一下三角函数 sin ⁡ ( θ ) y r , cos ⁡ ( θ ) x r , tan ⁡ ( θ ) y x sec ⁡ ( θ ) 1 cos ⁡ ( θ ) , csc ⁡ ( θ ) 1 sin ⁡ ( θ ) , cot ⁡ 1 tan ⁡ ( θ ) \sin(\theta)\frac{y}{r},\cos(\theta)\frac{x}{r},\tan(…

二叉搜索树、AVL、红黑树

文章目录 二叉搜索树2. avl树3. 红黑树 二叉搜索树 找一个节点的前驱和后继: 前驱:如果节点有左子树,找左子树的最大值,如果没有左子树,找最近一个自右而来的节点 后继:如果节点有右子树,找右…

智能图像编辑软件Luminar Neo mac提供多种调整和滤镜选项

Luminar Neo mac是一款由Skylum公司开发的AI技术图像编辑软件,旨在为摄影师和视觉艺术家提供创意图像编辑解决方案。Luminar Neo拥有强大的AI技术和丰富的后期处理工具,可帮助用户快速轻松地实现从基本到高级的图像编辑需求。 Luminar Neo提供了多种调整…

同步与互斥(二)

一、谁上锁就由谁解锁? 互斥量、互斥锁,本来的概念确实是:谁上锁就得由谁解锁。 但是FreeRTOS并没有实现这点,只是要求程序员按照这样的惯例写代码。 main函数创建了2个任务: 任务1&#xff1…

先进制造身份治理现状洞察:从手动运维迈向自动化身份治理时代

在新一轮科技革命和产业变革的推动下,制造业正面临绿色化、智能化、服务化和定制化发展趋势。为顺应新技术革命及工业发展模式变化趋势,传统工业化理论需要进行修正和创新。其中,对工业化水平的判断标准从以三次产业比重标准为主回归到工业技…

Kubernetes 容器编排(7)

离线业务编排详解 在线业务和离线业务 在线业务 Deployment、StatefulSet以及 DaemonSet 这三个编排概念的共同之处是:它们主要编排的对象,都是"在线业务",即:Long Running Task(长作业)。比如…

尚硅谷 java 2023(基础语法)笔记

一、变量与运算符 1、HelloWorld的编写和执行 class HelloChina{public static void main(String[] args){System.out.println("hello,world!!你好,中国!");} } 总结: 1. Java程序编写和执行的过程: 步骤1&#xff1…

Pytorch采坑记录:DDP 损失和精度比 DP 差,多卡GPU比单卡GPU效果差

结论:调大学习率或者调小多卡GPU的batch_size 转换DDP模型后模型的整体学习率和batch_size都要变。 当前配置::1GPU:学习率0.1,batch_size64 如果8GPU还按之前1GPU配置:8GPU:学习率0.1&#x…

HackTheBox - Medium - Linux - Sandworm (我的创作纪念日

Sandworm Sandworm 是一台中等难度的 Linux 机器,它托管了一个具有“PGP”验证服务的 Web 应用程序,该服务容易受到服务器端模板注入 (SSTI) 的攻击,导致“Firejail”监狱内的远程代码执行 (RCE&#xff0…

12、Qt:用QProcess类启动外部程序:简单使用

一、说明 简单使用:在一个函数中,使用QProcess类的临时对象调用可执行文件exe,只有这个exe执行完了,这个函数才往下执行,一次性打印出exe所有输出信息;复杂使用:创建QProcess类的全局对象&…

STM32F4的DHT11初始化与实例分析

STM32—— DHT11 本文主要涉及STM32F4 的DHT11的使用以及相关时序的介绍,最后有工程下载地址。 文章目录 STM32—— DHT11一、 DHT11的介绍1.1 DHT11的经典电路 二、DHT11的通信2.1 DHT11的传输数据格式2.2 DHT11 通信分步解析 三、 DHT11 代码3.1 引脚图3.2 电路图…

阿里云林立翔:基于阿里云 GPU 的 AIGC 小规模训练优化方案

云布道师 本篇文章围绕生成式 AI 技术栈、生成式 AI 微调训练和性能分析、ECS GPU 实例为生成式 AI 提供算力保障、应用场景案例等相关话题展开。 生成式 AI 技术栈介绍 1、生成式 AI 爆发的历程 在 2022 年的下半年,业界迎来了生成式 AI 的全面爆发&#xff0c…

【接口测试】HTTP接口详细验证清单

概述 当我们在构建、测试、发布一套新的HTTP API时,包括我在内的大多数人都不知道他们所构建的每一个组件的复杂性和细微差别。 即使你对每一个组件都有深刻的理解,也可能会有太多的信息在你的脑海中出现。 以至于我们不可能一下把所有的信息进行梳理…

pycharm下执行conda命令提示无法识别解决方案

1 问题描述 win10环境命令行执行conda命令,报命令无法识别,错误信息如下: PS D:\code\cv> conda activate pt conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径&a…

python基础语法总结

基础是深入必不可少的,如果没有基础的支持,后面都是浮云,就像情侣之间,没有感情基础是不会有好结果的,物资基础是靠两个人打拼的,所以学习就像谈恋爱,两个人要学会沟通,才能修成正果…

高效编写软件测试报告的关键技巧

引言: 软件测试报告是测试团队与开发团队之间沟通的重要工具,它记录了测试过程中的发现、问题和建议。一个清晰、准确、高效的软件测试报告可以帮助开发团队更好地理解测试结果,并及时修复问题。本文将介绍一些高效编写软件测试报告的关键技巧…

循环神经网络中的梯度消失或梯度爆炸问题产生原因分析(二)

上一篇中讨论了一般性的原则,这里我们具体讨论通过时间反向传播(backpropagation through time,BPTT)的细节。我们将展示目标函数对于所有模型参数的梯度计算方法。 出于简单的目的,我们以一个没有偏置参数的循环神经…

在Linux环境下模拟实现命令解释器用c语言实现mypwd「粉丝答疑」

粉丝提问 Solution 要在 Linux 环境下用 C 语言模拟实现一个命令解释器,包含mypwd, mymkdir, myrmdir, mycd, mylist, mycp, mydate, mycreate, mydelete, exit等基本命令,需要按照以下步骤进行: 理解每个命令的功能: mypwd: 显示…