当前位置:首页 > 数码 > 大言语模型插件配置在携程Python通常中的运行与摸索 (语言模型有什么用)

大言语模型插件配置在携程Python通常中的运行与摸索 (语言模型有什么用)

admin3个月前 (04-26)数码21

作者简介

成学,携程初级安保研发工程师,关注/target=_blankclass=infotextkey>Python/Golang后端开发、大言语模型等畛域。

一、背景

2023年终,科技圈最火爆的话题莫过于大言语模型了,它是一种全新的聊天机器人模型,除了能应答基本的日常聊天外,还能胜任如文案编写、旅行布局等各项上班。

携程信息安所有也紧跟时代步伐,在携程外部推出基于大言语模型的智能聊天机器人,并颁布网页版1.0,让一切程里人可以方便无门槛地享用大言语模型带来的便利。在经营半年多后,咱们宽泛搜集了用户的经常使用感触以及倡导,结合当下大言语模型的开展进程,新推出了网页版2.0,相较于1.0版本,简化了页面展现,参与了历史会话保留、自定义对话设置、允许插件、绘图等配置。

其中插件配置可以裁减大言语模型的共性化才干,让其锦上添花,开发者可以依据特定需求定义特定插件供用户经常使用。目前网页版2.0版本允许10多种插件,如搜查插件可以对输入的疑问启动联网查问;Base64插件可以对Base64内容启动解密等。那么这些插件是如何成功的呢?让咱们一摸索竟吧。

二、需求调研

2.1FunctionCalling

目前多个大言语模型都推出了FunctionCalling(函数调用)才干,用于协助开发者经过API模式成功相似于插件的才干。经过FunctionCalling,咱们可以将多个自定义的函数形容连同提出的疑问一同传给大言语模型,它会剖析这些函数形容与提问内容的关系性,并将最关系的函数及对应的函数传参一同前往,咱们再口头函数对应的业务逻辑,即可失掉疑问的答案。

FunctionCalling的大体经常使用流程如下:

举个例子,咱们的疑问是当天上海天气如何,大言语模型自身不能联网,不知道以后上海的天气信息,但是依照FunctionCalling的经常使用步骤,咱们可以回答这个疑问:

由此可以看出FunctionCalling(函数调用)的实质就是应用大言语模型的文字剖析才干,在提供的一系列函数中,找出能够回答疑问的最适合的函数,函数外部的详细逻辑则交给开发者自己成功,而不是大言语模型成功。

再进一步剖析可以发现,假设没有FunctionCalling,其实经过prompt揭示咱们也可以成功FunctionCalling的配置,例如prompt相似于我有一些函数,定义为xxxx,我想知道当天上海天气如何,请通知我用哪个函数可以解答这个疑问,并通知我函数的传参。当然这个prompt效果并不必定很好,每团体的prompt也不尽相反,那么FunctionCalling这个配置就应运而生了,针对这种场景启动调优并规范了函数的定义和前往格局,繁难了开发者的经常使用。

2.2如何成功异步

在定义插件时,有一些插件如Ping插件、IP扫描插件等,因为网络耗时或口头自身比拟慢,提问后不可立马前往结果,所以须要经常使用异步的模式,等后盾服务口头成功后,再把结果前往给前端。关于这种场景,咱们须要主意向前端推送信息,罕用的方法就是经常使用WebSocket。

WebSocket是从5开局提供的一种阅读器与主机启动全双工通讯的网络技术,它的目的是在阅读器和主机之间建设一个不受限的双向通讯的通道。比如说,主机可以在恣意时辰发送信息给阅读器。它不是一种全新的协定,而是应用了HTTP协定来建设衔接,属于运行层协定。

它具有如下好处:

除了WebSocket,咱们还可以选用经常使用socketIO。Socket.IO也可以成功客户端和服务段之间双向通讯。但与WebSocket不同的是,socketIO是一个第三方库,他具有WebSocket的基本配置,同时也增强了一些的配置。比如:

但须要强调的是:Socket.IO与WebSocket并不能兼容,虽然Socket.IO确真实或许的状况下经常使用WebSocket启动传输,但它为每个数据包参与了额外的元数据。因此WebSocket客户端将不可成功衔接到Socket.IO主机,而Socket.IO客户端也将不可衔接到普通WebSocket主机。

socketIO服务衔接时,可以在f12中看到衔接的环节:

总共分为5步:

{"sid":"FSDjX-WRwSA4zTZMALqx",//会话的ID,它必定蕴含在后续一切HTTP恳求的查问参数中"upgrades":["websocket"],//数组蕴含主机允许的一切更好传输的列表"pingInterval":25000,//心跳检测时期,25秒"pingTimeout":20000//#心跳超时时期,20秒}

三、基本成功

以下成功案例基于国际开源大言语模型ChatGLM3,ChatGLM3是智谱AI和清华大学KEG试验室联结颁布的对话预训练模型。

3.1定义各种插件

依据ChatGLM3模型的插件规范,定义插件的关系信息,这里举2个例子,Google搜查(同步插件)、Ping(异步插件)。

all_plugins={"google":{"name_cn":"谷歌搜查",#中文称号"sync":True,#能否同步口头"message":"{result}",#前往给用户的信息#info内容为合乎ChatGLM3functioncall规范的函数定义"info":{"name":"google",#函数名"description":"当疑问须要启动实时搜查(如当天的日期或许当天的天气等)时,或许不可回答时,经常使用google搜查",#函数形容"parameters":{"type":"object","properties":{"key":{#传参参数名"type":"string",#参数数据类型"description":"搜查的关键词"#参数形容}},"required":["keyword"]#必填参数}}},"ping":{"name_cn":"ping","sync":False,"message":"经常使用ping插件,因为该义务口头时期比拟长,成功后我会被动将结果发送给您。请耐烦期待。假设您有其余疑问,可以继续提问。","info":{"name":"ping","description":"经常使用ping工具对IP地址启动ping测试","parameters":{"type":"object","properties":{"addr":{"type":"string","description":"被ping的ip或许域名"}},"required":["addr"]}}}}

定义插件对应的函数成功:

classFunctions:@classmethoddefping(cls,**kwargs):"""ping成功"""#省略ping的代码成功pass@classmethoddefgoogle(cls,**kwargs):"""google搜查成功"""#查问关键字keyword=kwargs['keyword']#搜查结果search_context=[]#经常使用googleapi搜查res=server['service'].cse().list(q=keyword,cx=server['cx'],).execute()#遍历搜查结果forrowinres.get('items',[]):#提取每条搜查结果的简明信息search_context.end(row['snippet'])#汇总搜查结果和疑问组成promptprompt=[{"role":"user","content":f"请结合以下内容,回答疑问:{keyword}n"+"n".join(search_context)}]#调用大言语模型生成答案returnreply_text(prompt)

3.2经常使用FunctionCalling成功插件配置

大体逻辑为:将插件信息和用户提问一同发送给大言语模型的API,失掉与之婚配的插件,再调用插件对应的函数,失掉结果前往给用户。以下代码为简化的ChatGLM3示例代码:

importtorchfromtransformersimportAutoTokenizer,AutoModeldefmain():"""经常使用插件时回复文字"""DEVICE='cuda'iftorch.cuda.is_available()else'cpu'tokenizer=AutoTokenizer.from_pretrained('/home/chatglm3-6b',t_remote_code=True)model=AutoModel.from_pretrained('/home/chatglm3-6b',trust_remote_code=True).to(DEVICE).eval()#汇总一切的插件信息tools=[plugin['info']forplugininall_plugins.values()]#将插件信息设置在对话历史中history=[{"role":"system","content":"Answerthefollowingquestionsasbestasyoucan.Youhaveaccesstothefollowingtools:","tools":tools}]#调用functioncallingresponse,_=model.chat(tokenizer,query,history=history)#失掉婚配的插件称号plugin_name=response.get("name","")#失掉婚配的插件参数arguments=response.get("parameters",{})#没有婚配到插件则分开ifnotplugin_name:returnNone#失掉插件完整信息plugin=all_plugins[plugin_name]#经常使用反射机制失掉插件对应的函数对象func=getattr(Functions,plugin_name)#口头函数并前往结果res=func(**arguments)returnres

3.3异步插件的成功

本名目Web后端经常使用的框架为flask,经常使用socketIO成功异步交互,须要装置对应的库:flask_socketio,启动时,在flask的app上经常使用SocketIO包装一下即可,这样在同一个端口上同时开启了http服务和socketIO服务,上方只展现基本关键代码:

fromflaskimportFlaskfromflask_socketioimportSocketIO#flask原始appweb_app=Flask(__name__,static_folder=Config.STATIC_PATH)#socketIO包装appsocketio=SocketIO(web_app,,logger=True)#可监听衔接和断开@socketio.on('connect')defhandle_connect():print("connect")@socketio.on('disconnect')defhandle_disconnect():print("disconnect")#本地启动appif__name__=='__main__':socketio.run(web_app,address,port,allow_unsafe_werkzeug=True)

在socketIO中调用emit(event,*args,**kwargs)方法即可给指定指标(event,本名目对应为user)发送信息。

咱们经过functioncalling失掉到对应插件时,假设是同步插件,则立刻口头对应函数,假设是异步插件,应该异步开启口头对应函数,并立马完结以后会话,等异步函数口头成功后被动发送信息给前端用户,因此咱们须要修正一下上方的插件代码:

defmain(user,question):"""经常使用插件时回复文字"""...代码同上#经常使用反射机制失掉插件对应的函数对象func=getattr(Functions,plugin_name)#判别插件能否同步ifplugin['sync']:#同步的插件,间接调用函数res=func(**arguments)else:#异步的插件,这里经常使用线程池示例口头异步义务thread_pool=ThreadPool(3)#定义回调函数,接纳到结果后推送给前端defcallback(result):#推送给前端socketio.emit(user,f"义务结果为:{result}")#异步伐用res=thread_pool.apply_async(func,kwds=arguments,callback=callback)returnres

四、未来布局

4.1更多的插件

上述插件案例只是插件配置的冰山一角,经过该配置咱们可以定义各种适用的插件,目前携程信息安所有的大言语模型智能聊天机器人只是允许一些基本的插件,也欢迎大家给咱们提出贵重的倡导,群策群力,一同开收回更多适用好用的插件。

4.2每个用户的自定义插件

目前的插件配置可以允许咱们这些名目的开发者成功自定义插件,这些插件也必定提早写入名目中,并不能允许终端用户间接自定义自己的插件。后续咱们会调研可行性打算,让终端的用户自己编写对应的插件代码,成功每个用户都能定义自己的插件。


python中用到哪些软件

一、Python代码编辑器

1、sublime Text

sublime Text是一款非常流行的代码编辑器,支持Python代码编辑,同时兼容所有平台,并且丰富的插件扩展了语法和编辑功能,迅捷小巧,具有良好的兼容性,很受编程人士的喜爱。

Vim和VI是一种模型编辑器,它将文本查看从文本编辑中分离,VIM在原始VI之上做了诸多改进,包括可扩展模型和就地代码构建,VIMScripts可用于各种Python开发任务。

3、Visual Studio Code

Visual Studio Code是一款兼容Linux、Mac OS X和Windows平台的全功能代码编辑器,可扩展并且可以对几乎所有任务进行配置,对于Python的支持可以在Visual Studio Code中安装插件,只需快速点击按钮即可成功安装,且可自动识别Python安装和库。

二、Python集成开发环境

PyCharm是唯一一款专门面向Python的全功能集成开发环境,同样拥有付费版和免费开源版,PyCharm不论是在Windows、Mac OS X系统中,还是在Linux系统中都支持快速安装和使用。

PyCharm直接支持Python开发环境,打开一个新的文件然后就可以开始编写代码,也可以在PyCharm中直接运行和调试Python程序,它还支持源码管理和项目,并且其拥有众多便利和支持社区,能够快速掌握学习使用。

Spyder是一款为了数据科学工作流做了优化的开源Python集成开发环境,它是附在Anaconda软件包管理器发行版中的,Spyder拥有大部分集成开发环境该具备的功能,如强大语法高亮功能的代码编辑器、Python代码补全以及集成文件浏览器,其还具有其他Python编辑环境中所不具备的变量浏览器功能,十分适合使用Python的数据科学家们。

Thonny是针对新手的一款集成开发环境,适用于全部主流平台,默认情况下,Thonny会和自带捆绑的Python版本一起安装,十分方便新手使用。

如何在Visual Studio Code 中运行 Python

1、首先需要确保安装了VScode的Python插件,打开Python脚本,可以直接拖入,点击文件,点击首选项里的用户设置,这时候会用户设置配置文件。

语言模型有什么用

<imgclass=ikqb_imgsrc=https: = ab31bb051c59f39c6387adab44bede0a1?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc="

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: 大言语模型