首页 > 其他分享 >开源模型应用落地-glm模型小试-glm-4-9b-chat-tools使用(五)

开源模型应用落地-glm模型小试-glm-4-9b-chat-tools使用(五)

时间:2024-11-08 13:18:30浏览次数:7  
标签:function glm 模型 9b chat 小试 tool

一、前言

    GLM-4是智谱AI团队于2024年1月16日发布的基座大模型,旨在自动理解和规划用户的复杂指令,并能调用网页浏览器。其功能包括数据分析、图表创建、PPT生成等,支持128K的上下文窗口,使其在长文本处理和精度召回方面表现优异,且在中文对齐能力上超过GPT-4。与之前的GLM系列产品相比,GLM-4在各项性能上提高了60%,并且在指令跟随和多模态功能上有显著强化,适合于多种应用场景。尽管在某些领域仍逊于国际一流模型,GLM-4的中文处理能力使其在国内大模型中占据领先地位。该模型的研发历程自2020年始,经过多次迭代和改进,最终构建出这一高性能的AI系统。

    在开源模型应用落地-glm模型小试-glm-4-9b-chat-快速体验(一)已经掌握了glm-4-9b-chat的基本入门。

    在开源模型应用落地-glm模型小试-glm-4-9b-chat-批量推理(二)已经掌握了glm-4-9b-chat的批量推理。

    在开源模型应用落地-glm模型小试-glm-4-9b-chat-Gradio集成(三)已经掌握了如何集成Gradio进行页面交互。

    在开源模型应用落地-glm模型小试-glm-4-9b-chat-vLLM集成(四)已经掌握了如何使用vLLM进行推理加速。

    本篇将介绍如何集成vLLM环境下,正确使用tools。


二、术语

2.1.GLM-4-9B

    是智谱 AI 推出的一个开源预训练模型,属于 GLM-4 系列。它于 2024 年 6 月 6 日发布,专为满足高效能语言理解和生成任务而设计,并支持最高 1M(约两百万字)的上下文输入。该模型拥有更强的基础能力,支持26种语言,并且在多模态能力上首次实现了显著进展。

GLM-4-9B的基础能力包括:

- 中英文综合性能提升 40%,在特别的中文对齐能力、指令遵从和工程代码等任务中显著增强

- 较 Llama 3 8B 的性能提升,尤其在数学问题解决和代码编写等复杂任务中表现优越

- 增强的函数调用能力,提升了 40% 的性能

- 支持多轮对话,还支持网页浏览、代码执行、自定义工具调用等高级功能,能够快速处理大量信息并给出高质量的回答

2.2.GLM-4-9B-Chat

    是智谱 AI 在 GLM-4-9B 系列中推出的对话版本模型。它设计用于处理多轮对话,并具有一些高级功能,使其在自然语言处理任务中更加高效和灵活。

2.3.vLLM

    vLLM是一个开源的大模型推理加速框架,通过PagedAttention高效地管理attention中缓存的张量,实现了比HuggingFace Transformers高14-24倍的吞吐量。

2.4.Tools

    是用于执行特定任务或功能的工具。在人工智能领域,特别是在大语言模型(如GPT)中,工具通常指的是外部程序、API或服务,这些工具可以帮助模型完成特定的操作或获取信息。

工具可以包括:

1. API接口:允许模型访问外部数据源或服务,如天气信息、股票市场数据等。

2. 计算工具:用于执行复杂的数学计算或数据分析。

3. 数据库:存储和检索信息的系统,模型可以通过查询数据库来获取所需的数据。

4. 图像处理工具:用于分析和处理图像数据的程序。

5. 自然语言处理工具:用于文本分析、情感分析等的专用工具。


三、前置条件

3.1.基础环境及前置条件

    本篇示例基于vLLM环境,请参照:开源模型应用落地-glm模型小试-glm-4-9b-chat-vLLM集成(四)进行环境部署   


四、技术实现

4.1.客户端实现

# -*- coding: utf-8 -*-
import json

from openai import OpenAI

base_url = "http://127.0.0.1:8000/v1/"
client = OpenAI(api_key="EMPTY", base_url=base_url)
MODEL_PATH = "/data/model/glm-4-9b-chat"


def get_current_weather(region):
    if '广州' == region:
        return '目前我市多云间晴,局部有阵雨,气温29~32℃,吹轻微的东南风。'
    else:
        return '目前我市暴雨,气温30~33℃。'

tools = [
        {
            "type": "function",
            "function": {
                "name": "get_current_weather",
                "description": "获取给定位置的当前天气",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "region": {
                            "type": "string",
                            "description": "城市,例如:北京",
                        }
                    },
                    "required": ["region"],
                },
            },
        }
    ]

mappings = {'get_current_weather':get_current_weather}

def function_chat(messages):

    response = client.chat.completions.create(
        model=MODEL_PATH,
        messages=messages,
        tools=tools,
        stream=False,
        max_tokens=8192,
        temperature=0.9,
        presence_penalty=1.2,
        top_p=0.1,
        tool_choice="auto"
    )
  
   
    tool_calls = response.choices[0].message.tool_calls

    if tool_calls is not None and len(tool_calls) > 0:
        messages.append({
            "role": "assistant",
            "tool_calls": tool_calls
        })

        tool_call = tool_calls[0]

        function_name = tool_call.function.name
        function_args = tool_call.function.arguments
        json_obj = json.loads(function_args)
        function_value = json_obj['region']
        function = mappings[function_name]
        function_response = function(function_value)

        messages.append({
            'role': 'tool',
            'name': function_name,
            'content': function_response,
        })

        response = client.chat.completions.create(
            model=MODEL_PATH,
            messages=messages,
            tools=tools,
            stream=True,
            max_tokens=8192,
            temperature=0.45,
            presence_penalty=1.2,
            top_p=0.9
        )

        for chunk in response:
            msg = chunk.choices[0].delta.content
            print(msg,end='',flush=True)
    else:
        print(response.choices[0].message.content)

if __name__ == "__main__":

    messages = [
        {
            "role": "system", "content": "请根据我输入的城市,返回当前天气情况"
        },
        {
            "role": "user", "content": "广州"
        }
    ]
    function_chat(messages)

4.2.客户端调用

说明:

第一次模型调用返回的数据格式为:

ChatCompletion(id='chatcmpl-WlWBUCWec5E36PJnfY3WRAshAJ56z', choices=[Choice(finish_reason='tool_calls', index=0, message=ChatCompletionMessage(content=None, role='assistant', function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_NgIvxWE2LCNuhQMWh4X42QYG', function=Function(arguments='{"region": "广州"}', name='get_current_weather'), type='function', index=0)]))], created=1730951598, model='/data/model/glm-4-9b-chat', object='chat.completion', system_fingerprint='fp_gVTbBQb47', usage=CompletionUsage(completion_tokens=11, prompt_tokens=155, total_tokens=166))

将第一次模型调用返回的数据放入消息列表中:

{'role': 'assistant', 'tool_calls': [ChatCompletionMessageToolCall(id='call_cfsjowTzqEyt3I8VJqQCSzEb', function=Function(arguments='{"region": "广州"}', name='get_current_weather'), type='function', index=0)]}

将本地函数调用返回的数据放入消息列表中:

{'role': 'tool', 'name': 'get_current_weather', 'content': '目前我市多云间晴,局部有阵雨,气温29~32℃,吹轻微的东南风。'}

根据上述流程,进行第二次模型调用,返回的数据,为:

根据最新的API调用结果,目前广州市区天气情况为多云间晴,局部有阵雨,气温在29~32℃之间,风向为东南风,风力较小。希望这个信息对您有所帮助!

五、附带说明

5.1.测试不经过Tools的情况

修改示例代码的messages,调整提示语

调用结果:

返回的数据格式:

ChatCompletion(id='chatcmpl-oCjuODIHYvYeAvBZF91htbTb2lzdt', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='广州是中国广东省的省会,拥有丰富的历史文化和现代都市风貌。以下是一些广州的特色景点推荐:\n\n1. **白云山** - 广州著名的风景区,可以登山远眺整个广州市区,还可以参观庙宇和自然风光。\n\n2. **珠江夜游** - 乘坐游船游览珠江,欣赏两岸的夜景,是体验广州夜晚魅力的好方式。\n\n3. **陈家祠** - 也称为陈氏书院,是一座典型的岭南建筑风格的传统岭南园林,展示了广东传统工艺和民间艺术。\n\n4. **长隆旅游度假区** - 包括长隆野生动物世界、长隆水上乐园、长隆国际大马戏等多个主题公园,适合家庭游玩。\n\n5. **上下九步行街** - 是广州最繁华的商业街区之一,这里集合了各种购物、餐饮和小吃店,是品尝广式小吃的好去处。\n\n6. **北京路步行街** - 与上下九步行街相邻,同样是一条充满活力的商业街,有很多老字号店铺和历史遗迹。\n\n7. **广州塔(小蛮腰)** - 作为广州的地标性建筑,游客可以登顶观光,俯瞰整个城市的景色。\n\n8. **越秀公园** - 有五羊雕像、中山纪念碑等著名景点,是市民休闲的好地方。\n\n9. **荔湾湖公园** - 一个集湖泊、亭台楼阁于一体的古典园林,环境优美,适合散步和拍照。\n\n10. **沙面岛** - 这个位于珠江中的小岛上有着许多保存完好的欧陆风情建筑,是摄影爱好者的天堂。\n\n11. **华南植物园** - 中国最大的南亚热带植物种质资源库,适合喜欢大自然和植物的游客。\n\n12. **广州博物馆** - 了解广州的历史和文化,特别是关于孙中山先生的相关展览。\n\n这些景点涵盖了广州的自然景观、历史文化、娱乐休闲各个方面,可以让您全面地感受这座城市的魅力。', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None))], created=1730971915, model='/data/model/glm-4-9b-chat', object='chat.completion', service_tier=None, system_fingerprint='fp_ydVSwZedw', usage=CompletionUsage(completion_tokens=390, prompt_tokens=161, total_tokens=551, completion_tokens_details=None, prompt_tokens_details=None))

标签:function,glm,模型,9b,chat,小试,tool
From: https://blog.csdn.net/qq839019311/article/details/143600616

相关文章

  • 复制下来就能跑:Java智能问答系统-介绍与代码实践 - 基于springboot_springai_国产大模
    本文的目的是在5分钟内能把智能问答系统的原理和实践讲明白代码可执行,复制粘贴即可,可以快速跑起来。智能问答系统简介智能问答系统是一种人工智能应用,它能够理解用户提出的问题,并通过自然语言处理技术来分析和理解问题的含义。随后,系统会在其知识库中搜索相关信息,以生成......
  • Me-LLaMA——用于医疗领域的新型开源大规模语言模型
    摘要大规模语言模型的出现是提高病人护理质量和临床操作效率的一个重大突破。大规模语言模型拥有数百亿个参数,通过海量文本数据训练而成,能够生成类似人类的反应并执行复杂的任务。这在改进临床文档、提高诊断准确性和管理病人护理方面显示出巨大的潜力。然而,像ChatGPT和......
  • 计算机毕业设计 | SpringBoot智慧⾼校学术报告系统 AI写作大模型生成平台(附源码)
    1,项目介绍智慧⾼校学术报告系统是⼀个基于SpringBoot开发的标准JavaWeb项⽬。系统整体⻚⾯设计简约⼤⽓,巧妙融合了⽬前备受瞩⽬的AIGC⽣成式AI技术,选择了阿⾥通⽤千问⼤语⾔模型,以智能⽣成趣味报告标题和润⾊报告内容等⽅式,提升系统的整体品味。系统涵盖了丰富的......
  • [AI大模型通过以下方式重塑软件开发流程]
     •代码自动生成:AI驱动的代码生成工具可以根据开发者输入的需求或注释自动生成代码,减少了手动编写代码的时间和工作量,提高了编码效率。  •智能调试与测试:AI可以分析代码库、错误日志以及用户反馈,自动识别潜在的缺陷和错误,并给出修复建议。同时,AI还能自动生成测试......
  • 2024最新大模型入门自学资源汇总!收藏这一篇就够了!
    接触各种AI工具到现在也快两年了,今年和同学陆续做了一些AI应用的科普宣讲,在这过程中收集了不少自学资源,特地挑出一部分整理成以下的内容。扫描下方即可领取全部资料书籍大模型应用开发极简入门:基于GPT-4和ChatGPT首推今年年初出版的《大模型应用开发极简入门:基于GPT-4......
  • 大模型(LLMs)学习笔记——进阶知识
    一.生成式大模型简介1.什么是生成式大模型前排提示,文末有大模型AGI-CSDN独家资料包哦!生成式大模型(一般简称大模型LLMs)是指能用于创作新内容,例如文本、图片、音频以及视频的一类深度学习模型。相比普通深度学习模型,主要有两点不同:模型参数量更大,参数量都在Billion......
  • 大模型蓝皮书最新:2024人工智能大模型技术财务应用蓝皮书,报告共计:129页PDF无偿分享
    今天分享的是:2024人工智能大模型技术财务应用蓝皮书报告共计:129页《人工智能大模型技术财务应用蓝皮书》由智能财务研究院出品,探讨了人工智能大模型技术在财务领域的应用。大模型具有突出的“涌现”能力、统一的Prompt交互、高扩展性的应用框架和高成本的训练和推理过程......
  • 大模型(LLMs)学习笔记——基础知识
    一.大模型介绍1.目前主流的开源模型体系有哪些?前排提示,文末有大模型AGI-CSDN独家资料包哦!(1)CausalDecoder(因果解码器)介绍:从左到右的单项注意力代表模型:ChatGPT、LLaMA-7B、LLaMa系列。(2)PrefixDecoder(前缀解码器)介绍:输入双向注意力,输出单向注意力代表模型:ChatGLM、......
  • 大模型--训练 加速之 流水线并行Pipeline Parallelism-10
    目录1.参考2.概述3.目标4.模型并行4.流水线并行4.1切分micro-batch4.2re-materialization(activecheckpoint)5.实验效果5.1GPU数量VS模型大小ofModelParameter表示模型的参数量5.2GPU数量VS训练速度5.3Gpipe下时间消耗分布1.参考https://zhuanlan.zhihu.com/p/6......
  • 基于YOLOv8模型的塑料瓶目标检测系统(PyTorch+Pyside6+YOLOv8模型)
    摘要:基于YOLOv8模型的塑料瓶目标检测系统可用于日常生活中检测与定位塑料瓶目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集,使用Pysdie6库来搭建前端页面展示......