背景信息
阿里云检索分析服务 Elasticsearch 版是100%兼容开源的分布式检索、分析套件。提供 Elasticsearch、Kibana、Logstash、Beats 等开源全托管的产品服务能力。为结构化/非结构化数据提供低成本、高性能及可靠性的检索、分析平台级产品服务。具备读写分离、存算分离、弹性伸缩、智能化运维、免费的X-Pack高级商业特性等产品特性。
PAI-EAS 是阿里云的模型在线服务平台,支持用户将模型一键部署为在线推理服务或 AI-Web 应用,可以一键部署 LLM 推理、AIGC 等热门服务应用。PAI-EAS 适用于实时推理、近实时异步推理等多种 AI 推理场景,具备 Serverless 自动扩缩容和完整运维监控体系能力。
LangChain 是一个开源的框架,可以让 AI 开发人员将像通义千问这样的大语言模型(LLM)和外部数据结合起来,从而在尽可能少消耗计算资源的情况下,获得更好的性能和效果。通过 LangChain 将输入的用户知识文件进行自然语言处理存储在向量数据库中。每次推理用户的输入会首先在知识库中查找与输入问题相近的答案,并将知识库答案与用户输入一起输入 EAS 的大模型服务中生成基于知识库的定制答案。
第一步:开通检索分析服务 Elasticsearch 版
在开始使用时,需要购买一台 检索分析服务 Elasticsearch 版实例。
1.进入阿里云官网,找到 产品 -> 大数据计算 ->检索分析服务 Elasticsearch 版->管理控制台
2.左侧导航栏 “Elasticsearch 实例” ,点击创建实例。
3.基础配置:选择 阿里云Elasticsearch - 通用商业版8.x版本 - 通用场景,点击下一步。
4.集群配置:按需选择可用区数量和实例规格,点击下一步。
5.网络及系统配置:按需选择专有网络及交换机(所配置的专用网络需与 PAI-EAS 服务保持一致),配置实例名称和登录密码 - 下一步
然后点击确认订单:购买之后,返回“管理控制台”等待实例启动。
6。待状态变为“正常”,点击实例进入查看调用信息,记录私网地址和端口。
第二步:利用 EAS 部署 LLM 大模型推理服务
利用 PAI-EAS 部署大模型推理服务,具体操作步骤如下。
2.在PAI EAS 模型在线服务页面,单击部署服务。
3.在部署服务页面,配置以下关键参数。
参数 | 描述 |
服务名称 | 自定义服务名称。本案例使用的示例值为:chatllm_llama2_13b。 |
部署方式 | 选择镜像部署AI-Web应用。 |
镜像选择 | 在PAI平台镜像列表中选择chat-llm-webui,镜像版本选择2.0。由于版本迭代迅速,部署时镜像版本选择最高版本即可。 |
运行命令 | 服务运行命令: 如果使用chatglm2-6b模型进行部署:python webui/webui_server.py --port=8000 --model-path=THUDM/chatglm2-6b 如果使用通义千问-7b模型进行部署:python webui/webui_server.py --port=8000 --model-path=Qwen/Qwen-7B-Chat 如果使用llama2-7b模型进行部署:python webui/webui_server.py --port=8000 --model-path=meta-llama/Llama-2-7b-chat-hf 如果使用llama2-13b模型进行部署:python webui/webui_server.py --port=8000 --model-path=meta-llama/Llama-2-13b-chat-hf --precision=fp16 端口号输入:8000 |
资源组种类 | 选择公共资源组。 |
资源配置方法 | 选择常规资源配置。 |
资源配置选择 | 必须选择GPU类型,实例规格推荐使用ml.gu7i.c8m30.1-gu30。7b的模型可以跑在GU30/A10/P100机型上。13b的模型务必跑在gn6e的V100或A100的机型上。 |
专有网络配置 | 保持与Elasticsearch创建时的VPC一致! |
4.单击部署,等待一段时间即可完成模型部署。
5.进入服务详情页中,点击查看调用信息,查看服务调用中 VPC 地址调用的的 API 和 token。
第三步:利用 Langchain 将业务串联并启动可视化 WEBUI 开源代码与公开镜像
GIthub 开源代码地址:https://github.com/aigc-apps/LLM_Solution/tree/master
我们提供了最方便快捷的部署方式,直接在 PAI-EAS 中选择平台镜像即可。
使用流程
1. PAI-EAS 部署 chatbot-langchain 的 webui 服务
参数 | 描述 |
服务名称 | 自定义服务名称。本案例使用的示例值为:chatbot_langchain_vpc。 |
部署方式 | 选择镜像部署AI-Web应用。 |
镜像选择 | 在PAI平台镜像列表中选择chatbot-langchain,镜像版本选择1.0。由于版本迭代迅速,部署时镜像版本选择最高版本即可。 |
运行命令 | 服务运行命令:uvicorn webui:app --host 0.0.0.0 --port 8000 端口号输入:8000 |
资源组种类 | 选择公共资源组。 |
资源配置方法 | 选择常规资源配置。 |
资源配置选择 | 选择CPU机型:ecs.c7.4xlarge额外系统盘:60G |
专有网络配置 | 保持与 Elasticsearch 创建时的VPC一致! |
2. 待状态变为“运行中”后,查看Web应用,进入WebUI
3. Settings:用户配置相关参数
{ "embedding": { "model_dir": "embedding_model/", "embedding_model": "SGPT-125M-weightedmean-nli-bitfit", "embedding_dimension": 768 }, "EASCfg": { "url": "http://xx.pai-eas.aliyuncs.com/api/predict/chatllm_demo_glm2", "token": "xxxxxxx==" }, "vector_store": "Elasticsearch", "ElasticSearchCfg": { "ES_URL": "http://es-cn-xxx.elasticsearch.aliyuncs.com:9200", "ES_USER": "elastic", "ES_PASSWORD": "password", "ES_INDEX": "test_index" }, }
{ "embedding": { "model_dir": "embedding_model/", "embedding_model": "SGPT-125M-weightedmean-nli-bitfit", "embedding_dimension": 768 }, "EASCfg": { "url": "http://xx.pai-eas.aliyuncs.com/api/predict/chatllm_demo_glm2", "token": "xxxxxxx==" }, "vector_store": "Elasticsearch", "ElasticSearchCfg": { "ES_URL": "http://es-cn-xxx.elasticsearch.aliyuncs.com:9200", "ES_USER": "elastic", "ES_PASSWORD": "password", "ES_INDEX": "test_index" }, }
4. Upload:用户上传知识库文档
5. Chat:知识问答
6. API 调用
查看调用信息,记录 URL 和 Token
curl -X 'POST' 'http://chatbot-langchain.xx.cn-beijing.pai-eas.aliyuncs.com/config' -H 'Authorization: xxxx==' -H 'accept: application/json' -H 'Content-Type: multipart/form-data' -F 'file=@config_es.json' {"response": "success"}
import requests EAS_URL = 'http://chatbot-langchain.xx.cn-beijing.pai-eas.aliyuncs.com' def test_post_api_config: url = EAS_URL + '/config' headers = { 'Authorization': 'xxxxx==', } files = {'file': (open('config_es.json', 'rb'))} response = requests.post(url, headers=headers, files=files) if response.status_code != 200: raise ValueError(f'Error post to {url}, code: {response.status_code}') ans = response.json return ans['response']
curl -X 'POST' 'http://chatbot-langchain.xx.cn-beijing.pai-eas.aliyuncs.com/uploadfile' -H 'Authorization: xxxx==' -H 'accept: application/json' -H 'Content-Type: multipart/form-data' -F 'file=@docs/PAI.txt;type=text/plain' {"response": "success"}
import requests EAS_URL = 'http://chatbot-langchain.xx.cn-beijing.pai-eas.aliyuncs.com' def test_post_api_uploafile: url = EAS_URL + '/uploadfile' headers = { 'Authorization': 'xxxxx==', } files = {'file': (open('docs/PAI.txt', 'rb'))} response = requests.post(url, headers=headers, files=files) if response.status_code != 200: raise ValueError(f'Error post to {url}, code: {response.status_code}') ans = response.json return ans['response'] # success
curl -X 'POST' 'http://chatbot-langchain.xx.cn-beijing.pai-eas.aliyuncs.com/chat/vectorstore' -H 'Authorization: xxxx==' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{"question": "什么是机器学习PAI?"}' curl -X 'POST' 'http://chatbot-langchain.xx.cn-beijing.pai-eas.aliyuncs.com/chat/llm' -H 'Authorization: xxxx==' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{"question": "什么是机器学习PAI?"}' curl -X 'POST' 'http://chatbot-langchain.xx.cn-beijing.pai-eas.aliyuncs.com/chat/langchain' -H 'Authorization: xxxx==' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{"question": "什么是机器学习PAI?"}'
import requests EAS_URL = 'http://chatbot-langchain.xx.cn-beijing.pai-eas.aliyuncs.com' def test_post_api_chat: url = EAS_URL + '/chat/vectorstore' # url = EAS_URL + '/chat/llm' # url = EAS_URL + '/chat/langchain' headers = { 'accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': 'xxxxx==', } data = { 'question': '什么是机器学习PAI?' } response = requests.post(url, headers=headers, json=data) if response.status_code != 200: raise ValueError(f'Error post to {url}, code: {response.status_code}') ans = response.json return ans['response']
7. 效果演示
本文为阿里云原创内容,未经允许不得转载