From 8a6e754fe08ee4ea0996f0caa56df69f466c9a0b Mon Sep 17 00:00:00 2001 From: DIng <1442618363@qq.com> Date: Wed, 11 Dec 2024 15:29:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E5=8C=96=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- asr/funasr/ASR_client.py | 2 +- asr/funasr/funasr_client_api.py | 4 ++-- cache_data/input.wav | Bin 43052 -> 43052 bytes config.json | 4 ++-- core/socket_bridge_service.py | 2 +- fay.db | Bin 36864 -> 40960 bytes gui/static/js/index.js | 4 ++-- gui/static/js/setting.js | 4 ++-- gui/templates/setting.html | 2 +- gui/window.py | 2 +- llm/VllmGPT.py | 6 +++--- llm/agent/tools/SendWX.py | 2 +- llm/nlp_ChatGLM3.py | 2 +- llm/nlp_VisualGLM.py | 2 +- llm/nlp_privategpt.py | 2 +- main.py | 2 +- system.conf | 10 +++++----- test/ollama/README.md | 2 +- test/ovr_lipsync/ffmpeg/doc/ffmpeg-all.html | 4 ++-- .../ffmpeg/doc/ffmpeg-protocols.html | 4 ++-- test/ovr_lipsync/ffmpeg/doc/ffplay-all.html | 4 ++-- test/ovr_lipsync/ffmpeg/doc/ffprobe-all.html | 4 ++-- test/python_connector_demo/remote_audio.py | 2 +- test/rasa/actions/actions.py | 4 ++-- test/test_human_ws_api.py | 2 +- test/test_nlp.py | 2 +- tts/gptsovits.py | 2 +- tts/gptsovits_v3.py | 2 +- utils/openai_api/langchain_openai_api.py | 2 +- utils/openai_api/openai_api.py | 2 +- utils/openai_api/openai_api_request.py | 12 ++++++------ utils/openai_api/openai_request.py | 2 +- utils/openai_api/readme.txt | 8 ++++---- utils/openai_api/zhipu_api_request.py | 2 +- 34 files changed, 55 insertions(+), 55 deletions(-) diff --git a/asr/funasr/ASR_client.py b/asr/funasr/ASR_client.py index 9cbf51e..cf5bdb7 100644 --- a/asr/funasr/ASR_client.py +++ b/asr/funasr/ASR_client.py @@ -6,7 +6,7 @@ import argparse import json parser = argparse.ArgumentParser() -parser.add_argument("--host", type=str, default="192.168.1.111", required=False, help="host ip, localhost, 0.0.0.0") +parser.add_argument("--host", type=str, default="127.0.0.1", required=False, help="host ip, localhost, 0.0.0.0") parser.add_argument("--port", type=int, default=10197, required=False, help="grpc server port") parser.add_argument("--chunk_size", type=int, default=160, help="ms") parser.add_argument("--vad_needed", type=bool, default=True) diff --git a/asr/funasr/funasr_client_api.py b/asr/funasr/funasr_client_api.py index f6768c9..6daebd5 100644 --- a/asr/funasr/funasr_client_api.py +++ b/asr/funasr/funasr_client_api.py @@ -27,13 +27,13 @@ class Funasr_websocket_recognizer(): ''' parser = argparse.ArgumentParser() - parser.add_argument("--host", type=str, default="192.168.1.111", required=False, help="host ip, localhost, 0.0.0.0") + parser.add_argument("--host", type=str, default="127.0.0.1", required=False, help="host ip, localhost, 0.0.0.0") parser.add_argument("--port", type=int, default=10194, required=False, help="grpc server port") parser.add_argument("--chunk_size", type=int, default=160, help="ms") parser.add_argument("--vad_needed", type=bool, default=True) args = parser.parse_args() - def __init__(self, host="192.168.1.111", + def __init__(self, host="127.0.0.1", port="10197", is_ssl=True, chunk_size="0, 10, 5", diff --git a/cache_data/input.wav b/cache_data/input.wav index aa2c4aa2852000af1999b3893e1e697ab1fd4c05..20c3f23b0a04e89a9d84e7f3d58ae57f4fe6fe8e 100644 GIT binary patch literal 43052 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 delta 76 zcmZoTz|^pSX@WHCb_NCp&WQ^4K!#pj#Kx2b{Cv#(AAo`koczD}zwv+AENJkMfAeSg f&-{#AHb2*w4PcgM%9+gGV85|ZjcIdE(-d9+p;H-) diff --git a/gui/static/js/index.js b/gui/static/js/index.js index 874878f..6e97143 100644 --- a/gui/static/js/index.js +++ b/gui/static/js/index.js @@ -234,7 +234,7 @@ class FayInterface { panelMsg: '', panelReply: '', robot:'static/images/Normal.gif', - base_url: 'http://192.168.1.111:5000', + base_url: 'http://127.0.0.1:5000', play_sound_enabled: false, source_record_enabled: false }; @@ -246,7 +246,7 @@ class FayInterface { }, methods: { initFayService() { - this.fayService = new FayInterface('ws://192.168.1.111:10003', this.base_url, this); + this.fayService = new FayInterface('ws://127.0.0.1:10003', this.base_url, this); this.fayService.connectWebSocket(); this.fayService.websocket.addEventListener('open', () => { this.loadUserList(); diff --git a/gui/static/js/setting.js b/gui/static/js/setting.js index b004527..e1533e6 100644 --- a/gui/static/js/setting.js +++ b/gui/static/js/setting.js @@ -170,7 +170,7 @@ new Vue({ }], automatic_player_status: false, automatic_player_url: "", - host_url: "http://192.168.1.111:5000" + host_url: "http://127.0.0.1:5000" }; }, created() { @@ -179,7 +179,7 @@ new Vue({ }, methods: { initFayService() { - this.fayService = new FayInterface('ws://192.168.1.111:10003', this.host_url, this); + this.fayService = new FayInterface('ws://127.0.0.1:10003', this.host_url, this); this.fayService.connectWebSocket(); }, getData() { diff --git a/gui/templates/setting.html b/gui/templates/setting.html index 8517c6d..e5ebcdc 100644 --- a/gui/templates/setting.html +++ b/gui/templates/setting.html @@ -106,7 +106,7 @@ active-color="#13ce66" inactive-color="#ff4949"> 自动播放: - +
diff --git a/gui/window.py b/gui/window.py index dc775c9..76a9d6c 100644 --- a/gui/window.py +++ b/gui/window.py @@ -27,7 +27,7 @@ class MainWindow(QMainWindow): #清空缓存 profile = QWebEngineProfile.defaultProfile() profile.clearHttpCache() - self.browser.load(QUrl('http://192.168.1.111:5000')) + self.browser.load(QUrl('http://127.0.0.1:5000')) self.setCentralWidget(self.browser) MyThread(target=self.runnable).start() diff --git a/llm/VllmGPT.py b/llm/VllmGPT.py index 1bd6119..45b75f1 100644 --- a/llm/VllmGPT.py +++ b/llm/VllmGPT.py @@ -4,7 +4,7 @@ import requests class VllmGPT: - def __init__(self, host="192.168.1.111", + def __init__(self, host="127.0.0.1", port="8000", model="THUDM/chatglm3-6b", max_tokens="1024"): @@ -17,7 +17,7 @@ class VllmGPT: def question(self,cont): chat_list = [] - url = "http://192.168.1.111:8101/v1/completions" + url = "http://127.0.0.1:8101/v1/completions" req = json.dumps({ "model": "THUDM/chatglm3-6b", "prompt": cont, @@ -51,6 +51,6 @@ class VllmGPT: return res['choices'][0]['message']['content'] if __name__ == "__main__": - vllm = VllmGPT('192.168.1.111','8101','Qwen-7B-Chat') + vllm = VllmGPT('127.0.0.1','8101','Qwen-7B-Chat') req = vllm.question2("你叫什么名字啊今年多大了") print(req) diff --git a/llm/agent/tools/SendWX.py b/llm/agent/tools/SendWX.py index 30dc15f..ccf9c5d 100644 --- a/llm/agent/tools/SendWX.py +++ b/llm/agent/tools/SendWX.py @@ -4,7 +4,7 @@ from langchain.tools import BaseTool import requests import json -url = "http://192.168.1.111:4008/send" +url = "http://127.0.0.1:4008/send" headers = {'Content-Type': 'application/json'} data = { "message": "你好", diff --git a/llm/nlp_ChatGLM3.py b/llm/nlp_ChatGLM3.py index ed892b9..c0c25a5 100644 --- a/llm/nlp_ChatGLM3.py +++ b/llm/nlp_ChatGLM3.py @@ -25,7 +25,7 @@ def question(cont, uid=0, observation=""): content = { "prompt":"请简单回复我。" + cont, "history":chat_list} - url = "http://192.168.1.111:8000/v1/completions" + url = "http://127.0.0.1:8000/v1/completions" req = json.dumps(content) headers = {'content-type': 'application/json'} r = requests.post(url, headers=headers, data=req) diff --git a/llm/nlp_VisualGLM.py b/llm/nlp_VisualGLM.py index c5131e0..3efcc3f 100644 --- a/llm/nlp_VisualGLM.py +++ b/llm/nlp_VisualGLM.py @@ -25,7 +25,7 @@ def question(cont, uid=0, observation=""): filepath = os.path.join(current_working_directory, "data", filename) cv2.imwrite(filepath, img) content["image"] = filepath - url = "http://192.168.1.111:8080" + url = "http://127.0.0.1:8080" print(content) req = json.dumps(content) headers = {'content-type': 'application/json'} diff --git a/llm/nlp_privategpt.py b/llm/nlp_privategpt.py index 38caa40..04dcc47 100644 --- a/llm/nlp_privategpt.py +++ b/llm/nlp_privategpt.py @@ -2,7 +2,7 @@ import hashlib import os from pgpt_python.client import PrivateGPTApi -client = PrivateGPTApi(base_url="http://192.168.1.111:8001") +client = PrivateGPTApi(base_url="http://127.0.0.1:8001") index_name = "knowledge_data" folder_path = "llm/privategpt/knowledge_base" diff --git a/main.py b/main.py index 96aa67f..94e8fe9 100644 --- a/main.py +++ b/main.py @@ -120,7 +120,7 @@ if __name__ == '__main__': contentdb.init_db() #ip替换 - if config_util.fay_url != "192.168.1.111": + if config_util.fay_url != "127.0.0.1": replace_ip_in_file("gui/static/js/index.js", config_util.fay_url) replace_ip_in_file("gui/static/js/setting.js", config_util.fay_url) diff --git a/system.conf b/system.conf index 80eb004..c1fbc84 100644 --- a/system.conf +++ b/system.conf @@ -4,7 +4,7 @@ #建议使用funasr,请依照asr/funasr/README>md的说明启动 ASR_mode = funasr #ASR二选一(需要运行fay/test/funasr服务)集成达摩院asr项目、感谢中科大脑算法工程师张聪聪提供集成代码 -local_asr_ip=192.168.1.111 +local_asr_ip=127.0.0.1 local_asr_port=10197 # ASR二选一(第1次运行建议用这个,免费3个月), 阿里云 实时语音识别 服务密钥(必须)https://ai.aliyun.com/nls/trans @@ -58,7 +58,7 @@ gpt_base_url=https://api.zyai.online/v1 #gpt model engine 如:gpt-3.5-turbo、moonshot-v1-8k gpt_model_engine=gpt-3.5-turbo -#gpt(fastgpt)代理(可为空,填写例子:192.168.1.111:7890) +#gpt(fastgpt)代理(可为空,填写例子:127.0.0.1:7890) proxy_config= #通义星尘 服务密钥(NLP多选1) https://xingchen.aliyun.com/ @@ -66,7 +66,7 @@ xingchen_api_key= xingchen_characterid= #ollama服务 (NLP多选1) -#ollama_ip 可以填写 192.168.1.111 或者 localhost +#ollama_ip 可以填写 127.0.0.1 或者 localhost ollama_ip = localhost #ollama_model 可以填写 qwen:latest , llama2:latest , yi:lastest , pi:latest , gemma:latest ollama_model = gemma:latest @@ -75,8 +75,8 @@ ollama_model = gemma:latest coze_bot_id= coze_api_key= -#启动模式common、web(服务器或docker请使用web方式,通过http://192.168.1.111:5000控制) +#启动模式common、web(服务器或docker请使用web方式,通过http://127.0.0.1:5000控制) start_mode=web #服务器主动地址 -fay_url = 192.168.1.111 \ No newline at end of file +fay_url = 127.0.0.1 \ No newline at end of file diff --git a/test/ollama/README.md b/test/ollama/README.md index 9e2ac89..bea28f8 100644 --- a/test/ollama/README.md +++ b/test/ollama/README.md @@ -19,7 +19,7 @@ ollama pull qwen:latest #阿里开源模型 ``` chat_module=ollama_api -ollama_ip = 192.168.1.111 +ollama_ip = 127.0.0.1 ollama_model = phi:latest # llama2:latest , yi:lastest , pi:latest , gemma:latest (开源大语言模型多选1) ``` 服务配置 diff --git a/test/ovr_lipsync/ffmpeg/doc/ffmpeg-all.html b/test/ovr_lipsync/ffmpeg/doc/ffmpeg-all.html index a72711a..2d58c04 100644 --- a/test/ovr_lipsync/ffmpeg/doc/ffmpeg-all.html +++ b/test/ovr_lipsync/ffmpeg/doc/ffmpeg-all.html @@ -23099,12 +23099,12 @@ an external server.

Example: Create a localhost stream on port 5555:

-
ffmpeg -re -i input -f mpegts zmq:tcp://192.168.1.111:5555
+
ffmpeg -re -i input -f mpegts zmq:tcp://127.0.0.1:5555
 

Multiple clients may connect to the stream using:

-
ffplay zmq:tcp://192.168.1.111:5555
+
ffplay zmq:tcp://127.0.0.1:5555
 

Streaming to multiple clients is implemented using a ZeroMQ Pub-Sub pattern. diff --git a/test/ovr_lipsync/ffmpeg/doc/ffmpeg-protocols.html b/test/ovr_lipsync/ffmpeg/doc/ffmpeg-protocols.html index cba6377..b892318 100644 --- a/test/ovr_lipsync/ffmpeg/doc/ffmpeg-protocols.html +++ b/test/ovr_lipsync/ffmpeg/doc/ffmpeg-protocols.html @@ -2622,12 +2622,12 @@ an external server.

Example: Create a localhost stream on port 5555:

-
ffmpeg -re -i input -f mpegts zmq:tcp://192.168.1.111:5555
+
ffmpeg -re -i input -f mpegts zmq:tcp://127.0.0.1:5555
 

Multiple clients may connect to the stream using:

-
ffplay zmq:tcp://192.168.1.111:5555
+
ffplay zmq:tcp://127.0.0.1:5555
 

Streaming to multiple clients is implemented using a ZeroMQ Pub-Sub pattern. diff --git a/test/ovr_lipsync/ffmpeg/doc/ffplay-all.html b/test/ovr_lipsync/ffmpeg/doc/ffplay-all.html index 70765d1..2c57444 100644 --- a/test/ovr_lipsync/ffmpeg/doc/ffplay-all.html +++ b/test/ovr_lipsync/ffmpeg/doc/ffplay-all.html @@ -11528,12 +11528,12 @@ an external server.

Example: Create a localhost stream on port 5555:

-
ffmpeg -re -i input -f mpegts zmq:tcp://192.168.1.111:5555
+
ffmpeg -re -i input -f mpegts zmq:tcp://127.0.0.1:5555
 

Multiple clients may connect to the stream using:

-
ffplay zmq:tcp://192.168.1.111:5555
+
ffplay zmq:tcp://127.0.0.1:5555
 

Streaming to multiple clients is implemented using a ZeroMQ Pub-Sub pattern. diff --git a/test/ovr_lipsync/ffmpeg/doc/ffprobe-all.html b/test/ovr_lipsync/ffmpeg/doc/ffprobe-all.html index 7a2d64c..528af1d 100644 --- a/test/ovr_lipsync/ffmpeg/doc/ffprobe-all.html +++ b/test/ovr_lipsync/ffmpeg/doc/ffprobe-all.html @@ -11892,12 +11892,12 @@ an external server.

Example: Create a localhost stream on port 5555:

-
ffmpeg -re -i input -f mpegts zmq:tcp://192.168.1.111:5555
+
ffmpeg -re -i input -f mpegts zmq:tcp://127.0.0.1:5555
 

Multiple clients may connect to the stream using:

-
ffplay zmq:tcp://192.168.1.111:5555
+
ffplay zmq:tcp://127.0.0.1:5555
 

Streaming to multiple clients is implemented using a ZeroMQ Pub-Sub pattern. diff --git a/test/python_connector_demo/remote_audio.py b/test/python_connector_demo/remote_audio.py index 1ba3d12..8229b22 100644 --- a/test/python_connector_demo/remote_audio.py +++ b/test/python_connector_demo/remote_audio.py @@ -58,7 +58,7 @@ def receive_audio(client): if __name__ == "__main__": client = socket.socket() - client.connect(("192.168.1.111", 10001)) + client.connect(("127.0.0.1", 10001)) # client.send(b"User")#指定用户名 # client.send(b"False")#不回传音频(可以通过websocket 10003数字人接口接收音频http路径和本地路径) time.sleep(1) diff --git a/test/rasa/actions/actions.py b/test/rasa/actions/actions.py index 8a32a58..99f8ab0 100644 --- a/test/rasa/actions/actions.py +++ b/test/rasa/actions/actions.py @@ -62,7 +62,7 @@ class ActionGPTResponse(Action): current_chat={'role': 'user', 'content': tracker.latest_message.get("text")} history.append(current_chat) - url = "http://192.168.1.111:8101/v1/chat/completions" + url = "http://127.0.0.1:8101/v1/chat/completions" req = json.dumps({ "model": "THUDM/chatglm3-6b", "messages": history, @@ -168,7 +168,7 @@ class ActionAskProblem(Action): current_chat={'role': 'user', 'content': tracker.latest_message.get("text")} history.append(current_chat) - url = "http://192.168.1.111:8101/v1/chat/completions" + url = "http://127.0.0.1:8101/v1/chat/completions" req = json.dumps({ "model": "THUDM/chatglm3-6b", "messages": history, diff --git a/test/test_human_ws_api.py b/test/test_human_ws_api.py index d4c2ebd..1d7434e 100644 --- a/test/test_human_ws_api.py +++ b/test/test_human_ws_api.py @@ -10,7 +10,7 @@ import queue # 配置项 config = { "enable_auto_get": True, # 设置是否启用主动获取播放项 - "url" : "192.168.1.111" #服务端Url + "url" : "127.0.0.1" #服务端Url } audio_queue = queue.Queue() diff --git a/test/test_nlp.py b/test/test_nlp.py index 8e3cb3f..e5bbd06 100644 --- a/test/test_nlp.py +++ b/test/test_nlp.py @@ -2,7 +2,7 @@ import requests import json def test_gpt(prompt): - url = 'http://192.168.1.111:5000/v1/chat/completions' # 替换为您的接口地址 + url = 'http://127.0.0.1:5000/v1/chat/completions' # 替换为您的接口地址 headers = { 'Content-Type': 'application/json', 'Authorization': f'Bearer YOUR_API_KEY', # 如果您的接口需要身份验证 diff --git a/tts/gptsovits.py b/tts/gptsovits.py index 57ed857..ef15ed4 100644 --- a/tts/gptsovits.py +++ b/tts/gptsovits.py @@ -12,7 +12,7 @@ class Speech: pass def to_sample(self, text, style) : - url = "http://192.168.1.111:9880" + url = "http://127.0.0.1:9880" data = { "text": text, "text_language": "zh", diff --git a/tts/gptsovits_v3.py b/tts/gptsovits_v3.py index 5467bfd..9125eef 100644 --- a/tts/gptsovits_v3.py +++ b/tts/gptsovits_v3.py @@ -15,7 +15,7 @@ class Speech: pass def to_sample(self, text, style) : - url = "http://192.168.1.111:9880/tts" + url = "http://127.0.0.1:9880/tts" data = { "text": text, # str.(required) text to be synthesized "text_lang": "zh", # str.(required) language of the text to be synthesized diff --git a/utils/openai_api/langchain_openai_api.py b/utils/openai_api/langchain_openai_api.py index 3728150..55be7e1 100644 --- a/utils/openai_api/langchain_openai_api.py +++ b/utils/openai_api/langchain_openai_api.py @@ -17,7 +17,7 @@ def initialize_llm_chain(messages: list): template = "{input}" prompt = PromptTemplate.from_template(template) - endpoint_url = "http://192.168.1.111:8000/v1/chat/completions" + endpoint_url = "http://127.0.0.1:8000/v1/chat/completions" llm = ChatGLM3( endpoint_url=endpoint_url, max_tokens=8096, diff --git a/utils/openai_api/openai_api.py b/utils/openai_api/openai_api.py index 2067175..8e5d544 100644 --- a/utils/openai_api/openai_api.py +++ b/utils/openai_api/openai_api.py @@ -3,7 +3,7 @@ import openai # 设置OpenAI API的密钥 # openai.api_key = os.getenv("OPENAI_API_KEY") -openai.base_url = "http://192.168.1.111:8000/v1/chat/completions" +openai.base_url = "http://127.0.0.1:8000/v1/chat/completions" # 定义API请求的数据 data = { "model": "chatglm3-6b", diff --git a/utils/openai_api/openai_api_request.py b/utils/openai_api/openai_api_request.py index 7cfdcde..1372d9b 100644 --- a/utils/openai_api/openai_api_request.py +++ b/utils/openai_api/openai_api_request.py @@ -12,7 +12,7 @@ and handle responses. from openai import OpenAI -base_url = "http://192.168.1.111:8000/v1/" +base_url = "http://127.0.0.1:8000/v1/" client = OpenAI(api_key="EMPTY", base_url=base_url) @@ -197,25 +197,25 @@ if __name__ == "__main__": # embedding() # function_chat() -# curl -X POST "http://192.168.1.111:8000/v1/chat/completions" \ +# curl -X POST "http://127.0.0.1:8000/v1/chat/completions" \ # -H "Content-Type: application/json" \ # -d "{\"model\": \"chatglm3-6b\", \"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字\"}], \"stream\": false, \"max_tokens\": 100, \"temperature\": 0.8, \"top_p\": 0.8}" -# curl -X POST "http://192.168.1.111:8000/v1/completions" \ +# curl -X POST "http://127.0.0.1:8000/v1/completions" \ # -H 'Content-Type: application/json' \ # -d '{"prompt": "请用20字内回复我.你今年多大了", "history": []}' -# curl -X POST "http://192.168.1.111:8000/v1/completions" \ +# curl -X POST "http://127.0.0.1:8000/v1/completions" \ # -H 'Content-Type: application/json' \ # -d '{"prompt": "请用20字内回复我.你今年多大了", "history": [{"你好","你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。"}]}' -# curl -X POST "http://192.168.1.111:8000/v1/completions" \ +# curl -X POST "http://127.0.0.1:8000/v1/completions" \ # -H 'Content-Type: application/json' \ # -d '{"prompt": "请用20字内回复我.你今年多大了", "history": [["你好","你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。"]]}' -# curl -X POST "http://192.168.1.111:8000/v1/completions" \ +# curl -X POST "http://127.0.0.1:8000/v1/completions" \ # -H 'Content-Type: application/json' \ # -d '{"prompt": "请用20字内回复我.你今年多大了", "history": ["你好"]}' diff --git a/utils/openai_api/openai_request.py b/utils/openai_api/openai_request.py index 1ea02ba..76c4a5e 100644 --- a/utils/openai_api/openai_request.py +++ b/utils/openai_api/openai_request.py @@ -22,7 +22,7 @@ def question(cont): content = { "prompt":"请简单回复我。" + cont, "history":chat_list} - url = "http://192.168.1.111:8000/v1/completions" + url = "http://127.0.0.1:8000/v1/completions" req = json.dumps(content) headers = {'content-type': 'application/json'} r = requests.post(url, headers=headers, data=req) diff --git a/utils/openai_api/readme.txt b/utils/openai_api/readme.txt index 61b9116..a39bda5 100644 --- a/utils/openai_api/readme.txt +++ b/utils/openai_api/readme.txt @@ -7,10 +7,10 @@ conda install pytorch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 pytorch-cuda= 启动 python -m vllm.entrypoints.openai.api_server --tensor-parallel-size=1 --trust-remote-code --max-model-len 1024 --model THUDM/chatglm3-6b -python -m vllm.entrypoints.openai.api_server --host 192.168.1.111 --port 8101 --tensor-parallel-size=1 --trust-remote-code --max-model-len 1024 --model THUDM/chatglm3-6b +python -m vllm.entrypoints.openai.api_server --host 127.0.0.1 --port 8101 --tensor-parallel-size=1 --trust-remote-code --max-model-len 1024 --model THUDM/chatglm3-6b 测试 -curl http://192.168.1.111:8101/v1/completions \ +curl http://127.0.0.1:8101/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "THUDM/chatglm3-6b", @@ -20,12 +20,12 @@ curl http://192.168.1.111:8101/v1/completions \ }' 多轮对话 -curl -X POST "http://192.168.1.111:8101/v1/completions" \ +curl -X POST "http://127.0.0.1:8101/v1/completions" \ -H "Content-Type: application/json" \ -d "{\"model\": \"THUDM/chatglm3-6b\",\"prompt\": \"你叫什么名字\", \"history\": [{\"role\": \"user\", \"content\": \"你出生在哪里.\"}, {\"role\": \"assistant\", \"content\": \"出生在北京\"}]}" 多轮对话 -curl -X POST "http://192.168.1.111:8101/v1/chat/completions" \ +curl -X POST "http://127.0.0.1:8101/v1/chat/completions" \ -H "Content-Type: application/json" \ -d "{\"model\": \"THUDM/chatglm3-6b\", \"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字\"}], \"stream\": false, \"max_tokens\": 100, \"temperature\": 0.8, \"top_p\": 0.8}" diff --git a/utils/openai_api/zhipu_api_request.py b/utils/openai_api/zhipu_api_request.py index 5987a36..537d48f 100644 --- a/utils/openai_api/zhipu_api_request.py +++ b/utils/openai_api/zhipu_api_request.py @@ -14,7 +14,7 @@ variable formate as xxx.xxx (just for check, not need a real key). from zhipuai import ZhipuAI -base_url = "http://192.168.1.111:8000/v1/" +base_url = "http://127.0.0.1:8000/v1/" client = ZhipuAI(api_key="EMP.TY", base_url=base_url)