瀏覽代碼

fix

master
winter 10 月之前
當前提交
8dadc487ed
共有 7 個文件被更改,包括 490 次插入0 次删除
  1. +112
    -0
      baichuanAgent.py
  2. +41
    -0
      bb.py
  3. +30
    -0
      config.py
  4. +130
    -0
      gptAgent.py
  5. +157
    -0
      server.py
  6. +4
    -0
      start.sh
  7. +16
    -0
      stop.sh

+ 112
- 0
baichuanAgent.py 查看文件

@@ -0,0 +1,112 @@
#! /usr/bin/python
import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options
import os
import datetime
import openai
import asyncio
from tornado.web import RequestHandler
from tornado.options import define,options
from tornado.websocket import WebSocketHandler
import openai_async
import config
import json
import traceback
import aiohttp

def clearBaiChuanContent(content):
for ck in config.agentBaiChuanFilterMoel['filterKeys']:
content = content.replace(ck,'xx')
return content


async def talkBaiChuanWithStream(self,message):
print("{} says {}".format(self.request.remote_ip,message))
#url = "https://api.baichuan-ai.com/v1/chat/completions"
#api_key = config.agentServer['agentBaiChuanApiKey']
url = "https://api.baichuan-ai.com/v1/chat/completions"
api_key = "9f7d5847897f8090195cdc2c3249d0a7"
try:
_msg = json.loads(message)
try:
if 'model' in _msg :
_baichuanModel = _msg['model']
_real_msg = _msg['messages']
else:
_baichuanModel = 'Baichuan2'
_real_msg = _msg
except Exception as gmex:
_baichuanModel = 'Baichuan2'
_real_msg = _msg

_data = {
"model": _baichuanModel,
"messages": _real_msg,
"stream": True
}
#json_data = json.dumps(_data)
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + api_key
}
#http_client = tornado.httpclient.AsyncHTTPClient()
async with aiohttp.ClientSession() as http_client:
async with http_client.post(url,headers=headers,json=_data) as resp:
isDone=False
while True:
chunk = await resp.content.read(2048)
if not chunk:
break
chunk_str = chunk.decode()
#print('chunk_str {}',chunk_str)
con_list = chunk_str.strip('\n').split('data:')
for con in con_list:
con = con.strip()
if con == "":
continue
elif con == '[DONE]':
isDone=True
break
else:
con_dict = json.loads(con)
for con_cho in con_dict['choices']:
self.my_replay_content=self.my_replay_content+con_cho['delta']['content']
#print('resp',resp)
#print("1111111111111111111")
print("response {}",self.my_replay_content)
if config.agentBaiChuanFilterMoel['isOpen']:
if resp is not None:
cContent = clearBaiChuanContent(self.my_replay_content)
self.my_replay_content=''
if isDone:
cContent = cContent+"___talk_end___"
await self.write_message(cContent)
#await self.write_message(currentLineContents)
else:
if role_conent is not None:
print('')
else:
self.my_replay_content=''
await self.write_message("___talk_end___")
else:
if resp is not None:
_cont = self.my_replay_content
if isDone:
_cont = _cont+"___talk_end___"
self.my_replay_content=''
await self.write_message(_cont)
else:
self.my_replay_content=''
await self.write_message("___talk_end___")
else:
self.my_replay_content=''
await self.write_message("___talk_end___")

except Exception as es:
print('onMessage error',es)
self.close()


+ 41
- 0
bb.py 查看文件

@@ -0,0 +1,41 @@
#! /usr/bin/python
import requests
import json

def do_request():
url = "https://api.baichuan-ai.com/v1/chat/completions"
api_key = "9f7d5847897f8090195cdc2c3249d0a7"

data = {
"model": "Baichuan2",
"messages": [
{
"role": "user",
"content": "世界第一高峰是"
}
],
"stream": True
}

json_data = json.dumps(data)

headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + api_key
}

response = requests.post(url, data=json_data, headers=headers, timeout=60)

if response.status_code == 200:
print("请求成功!")
print("响应body:", response.text)
print("请求成功,X-BC-Request-Id:", response.headers.get("X-BC-Request-Id"))
else:
print("请求失败,状态码:", response.status_code)
print("请求失败,body:", response.text)
print("请求失败,X-BC-Request-Id:", response.headers.get("X-BC-Request-Id"))

if __name__ == "__main__":
do_request()


+ 30
- 0
config.py 查看文件

@@ -0,0 +1,30 @@
#! /usr/bin/python
#服务配置###
agentServer = {
'port':9999,
'threads':1,
'agentApiKey':'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',
'agentBaiChuanApiKey':'9f7d5847897f8090195cdc2c3249d0a7'
}

####过滤###
agentFilterMoel = {
'isOpen':True,
'filterKeys':['Gpt','gPt','gpT','GPt','GpT','GPT','gpt','Openai','openAI','oPENAI','OpEnAi','OPENAI','oPenAi','OpENAI','openai','oPEnAi','OpEnai','oPENai','OPENai','OpENai','openAi','oPENAi','OpENaI','OPENaI','oPEnaI','OpEnAI','OPENAI','OpenAI','OpenAi'],
'oneMessageSplit':[',','.',',','。','?','?','!','!']
}

agentBaiChuanFilterMoel = {
'isOpen':False,
'filterKeys':['Gpt','gPt','gpT','GPt','GpT','GPT','gpt','Openai','openAI','oPENAI','OpEnAi','OPENAI','oPenAi','OpENAI','openai','oPEnAi','OpEnai','oPENai','OPENai','OpENai','openAi','oPENAi','OpENaI','OPENaI','oPEnaI','OpEnAI','OPENAI','OpenAI','OpenAi'],
'oneMessageSplit':[',','.',',','。','?','?','!','!']
}

###上下文####
agentTextual = {
'isOpen':False,
'talkCounts':3,
'resultCounts':3
}



+ 130
- 0
gptAgent.py 查看文件

@@ -0,0 +1,130 @@
#! /usr/bin/python
import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options
import os
import datetime
import openai
import asyncio
from tornado.web import RequestHandler
from tornado.options import define,options
from tornado.websocket import WebSocketHandler
import openai_async
import config
import json

openai.api_key = config.agentServer['agentApiKey'];

def clearContent(content):
for ck in config.agentFilterMoel['filterKeys']:
content = content.replace(ck,'SmartChat')
return content


async def talkGPTWithStream(self,message):
print("{} says {}".format(self.request.remote_ip,message))
try:
_msg = json.loads(message)
try:
if 'model' in _msg :
_gptModel = _msg['model']
_real_msg = _msg['messages']
#print("msg is {}".format(type(_real_msg)))
if _gptModel == '4':
_gptModel = 'gpt-4-0314'
elif _gptModel == '3':
_gptModel = 'gpt-3.5-turbo'
else:
print(_gptModel)
#_gptModel = 'gpt-3.5-turbo'
else:
_gptModel = 'gpt-3.5-turbo'
_real_msg = _msg
except Exception as gmex:
_gptModel = 'gpt-3.5-turbo'
_real_msg = _msg
#print(_msg)
async for chunk in await openai.ChatCompletion.acreate(
model=_gptModel,
#model='gpt-4-0314',
#messages=[{'role': 'user', 'content': message}],
messages=_real_msg,
temperature=0.8,
max_tokens=4000,
stream=True # this time, we set stream=True
):
content = chunk["choices"][0].get("delta", {}).get("content")
role_conent = chunk["choices"][0].get("delta", {}).get("role")
#print("response {}",content)
if config.agentFilterMoel['isOpen']:
if content is not None:
###如果是结尾
if content in config.agentFilterMoel['oneMessageSplit']:
self.my_replay_content = self.my_replay_content+content
self.currentIsSend=True
else:
self.my_replay_content = self.my_replay_content + content
self.currentIsSend=False

if self.currentIsSend:
####过滤关键字
cContent = clearContent(self.my_replay_content)
self.my_replay_content='';
await self.write_message(cContent)
#await self.write_message(currentLineContents)
else:
if role_conent is not None:
print('')
else:
await self.write_message("___talk_end___")
else:
if content is not None:
await self.write_message(content)
else:
if role_conent is not None:
print('')
else:
await self.write_message("___talk_end___")
except Exception as es:
print('onMessage error',es)
self.close()


async def talkGPT(self,message):
print("{} says {}".format(self.request.remote_ip,message))
try:
_msg = json.loads(message)
try:
if 'model' in _msg :
_gptModel = _msg['model']
_real_msg = _msg['messages']
#print("msg is {}".format(type(_real_msg)))
if _gptModel == '4':
_gptModel = 'gpt-4-0314'
elif _gptModel == '3':
_gptModel = 'gpt-3.5-turbo-0125'
else:
_gptModel = 'gpt-3.5-turbo-0125'
else:
_gptModel = 'gpt-3.5-turbo-0125'
_real_msg = _msg
except Exception as gmex:
_gptModel = 'gpt-3.5-turbo-0125'
_real_msg = _msg
response = await openai.Completion.acreate(
model= _gptModel,
prompt= _real_msg,
temperature=0,
max_tokens=4000,
top_p=1,
frequency_penalty=0.5,
presence_penalty=0
)
#print(f"response:{response}")
response_text = response['choices'][0]['text']
await self.write_message(response_text+"___talk_end___")
except Exception as es:
print('onMessage error',es)
self.close()

+ 157
- 0
server.py 查看文件

@@ -0,0 +1,157 @@
#! /usr/bin/python
import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options
import os
import datetime
import openai
import asyncio
from tornado.web import RequestHandler
from tornado.options import define,options
from tornado.websocket import WebSocketHandler
import openai_async
import config
import gptAgent
import baichuanAgent

#define("port",default=9999,type=int)

class IndexHandler(RequestHandler):
def get(self):
self.render("index.html")

class ChatHandler(WebSocketHandler):

users = set() #用来存在在线用户的容器

def open(self):
print('进来了')
self.users.add(self) #建立连接后添加到用户容器中
for u in self.users:
print("user count{}".format(len(self.users)))
u.write_message(u"[%s]-[%s]-进入" % (self.request.remote_ip,datetime.datetime.now().strftime("%d/%m/%Y")))
print("{} enter".format(self.request.remote_ip))

def on_message(self,message):
for u in self.users: # 向所有用户广播消息
u.write_message(u"[%s]-[%s]-说:%s" % (self.request.remote_ip,datetime.datetime.now().strftime("%d/%m/%Y"),message))
print("{} says {}".format(self.request.remote_ip,message))

def on_close(self):
print('离开了')
self.users.remove(self)
for u in self.users:
u.write_message(u"[%s]-[%s]-离开" % (self.request.remote_ip,datetime.datetime.now().strftime("%d/%m/%Y")))
print("{} leave".format(self.request.remote_ip))

def check_orign(self,orign):
#接受所有跨域
return True

# parsed_orign = urllib.parse.urlparse(orign)
# return parsed_orign.netloc.endswith(".malls.iformall.com")

#openai.api_key = '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';
class gptAgentStreamHandler(WebSocketHandler):

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.my_replay_content = ""
self.currentIsSend=False
self.currentIsAll=False

async def open(self):
print("{} connect".format(self.request.remote_ip))

async def on_message(self,message):
await gptAgent.talkGPTWithStream(self,message)
def on_close(self):
print("{} leave".format(self.request.remote_ip))

async def check_orign(self,orign):
#接受所有跨域
return True

# parsed_orign = urllib.parse.urlparse(orign)
# return parsed_orign.netloc.endswith(".malls.iformall.com")

class gptAgentHandler(WebSocketHandler):

async def open(self):
print("{} connect".format(self.request.remote_ip))

async def on_message(self,message):
await gptAgent.talkGPT(self,message)
def on_close(self):
print("{} leave".format(self.request.remote_ip))

async def check_orign(self,orign):
#接受所有跨域
return True

# parsed_orign = urllib.parse.urlparse(orign)
# return parsed_orign.netloc.endswith(".malls.iformall.com")

class gptBaiChuanStreamHandler(WebSocketHandler):

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.my_replay_content = ""
self.currentIsSend=False
self.currentIsAll=False

async def open(self):
print("{} connect".format(self.request.remote_ip))

async def on_message(self,message):
await baichuanAgent.talkBaiChuanWithStream(self,message)
def on_close(self):
print("{} leave".format(self.request.remote_ip))

async def check_orign(self,orign):
#接受所有跨域
return True
async def main():
tornado.options.parse_command_line()
app = tornado.web.Application([
(r"/index",IndexHandler),
(r"/wss/chat",ChatHandler),
(r"/talk",gptAgentHandler),
(r"/",gptAgentStreamHandler),
(r"/baichuan",gptBaiChuanStreamHandler)
],
static_path = os.path.join(os.path.dirname(__file__),"static"),
template_path = os.path.join(os.path.dirname(__file__),"template"),
debug = True
)
http_server = tornado.httpserver.HTTPServer(app,xheaders=True)
#http_server.listen(options.port)
http_server.bind(config.agentServer['port'])
http_server.start(config.agentServer['threads'])
await asyncio.Event().wait()
if __name__ == '__main__':
asyncio.run(main())

#if __name__ == '__main__':
#tornado.options.parse_command_line()
#app = tornado.web.Application([
# (r"/index",IndexHandler),
# (r"/wss/chat",ChatHandler),
# #(r"/",gptAgentHandler)
# (r"/",gptAgentStreamHandler)
# ],
# static_path = os.path.join(os.path.dirname(__file__),"static"),
# template_path = os.path.join(os.path.dirname(__file__),"template"),
# debug = True
#)
#http_server = tornado.httpserver.HTTPServer(app,xheaders=True)
##http_server.listen(options.port)
#http_server.bind(options.port)
#http_server.start(1)
#tornado.ioloop.IOLoop.current().start()

+ 4
- 0
start.sh 查看文件

@@ -0,0 +1,4 @@
#!/bin/bash
nohup ./server.py > nohup.log 2>&1 &



+ 16
- 0
stop.sh 查看文件

@@ -0,0 +1,16 @@
#!/bin/bash
PID=`ps -ef | grep /usr/bin/python | grep server.py | awk '{print \$2}'`
echo "ps -ef | grep /usr/bin/python | grep server.py | awk '{print \$2}'";
echo "KILL PID: $PID";
if [ "$PID"x != ""x ]; then
kill -9 $PID
if [ $? -eq 0 ]; then
echo "Kill $1 SUCCESS"
else
echo "Kill $1 FAILED"
exit 1;
fi
fi




Loading…
取消
儲存