Merge pull request #32 from Cp0204/ai_comment

移除openai依赖,优化代理方式,优化日志显示
This commit is contained in:
6dylan6 2023-04-22 13:56:23 +08:00 committed by GitHub
commit f45b5c2562
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 35 additions and 27 deletions

View File

@ -5,7 +5,7 @@
# @File : auto_comment.py # @File : auto_comment.py
# 多账号评价,异常处理 # 多账号评价,异常处理
# 2023/3/28 修复乱码 # 2023/3/28 修复乱码
# 2023/4/19 当存在OPENAI_API_KEY环境变量时启用AI评价网络环境问题自行想办法国外机或配置ProxyUrl HTTP代理 # 2023/4/19 当存在OPENAI_API_KEY环境变量时启用AI评价网络支持1.环境变量OPENAI_API_BASE_URL反向代理、2.ProxyUrl代理、3.环境支持直连
''' '''
new Env('自动评价'); new Env('自动评价');
8 8 2 1 * https://raw.githubusercontent.com/6dylan6/auto_comment/main/jd_comment.py 8 8 2 1 * https://raw.githubusercontent.com/6dylan6/auto_comment/main/jd_comment.py
@ -34,21 +34,11 @@ except:
os.system('pip3 install jieba &> /dev/null') os.system('pip3 install jieba &> /dev/null')
os.system('pip3 install zhon &> /dev/null') os.system('pip3 install zhon &> /dev/null')
os.system('pip3 install requests &> /dev/null') os.system('pip3 install requests &> /dev/null')
os.system('pip3 install openai &> /dev/null')
import jieba import jieba
import jieba.analyse import jieba.analyse
#import yaml #import yaml
from lxml import etree from lxml import etree
import requests import requests
import openai
if "OPENAI_API_KEY" in os.environ:
print('已启用AI评价');
try:
import openai
except:
print('安装openai模块')
os.system('pip3 install openai &> /dev/null')
# constants # constants
CONFIG_PATH = './config.yml' CONFIG_PATH = './config.yml'
@ -176,16 +166,24 @@ def generation(pname, _class=0, _type=1, opts=None):
# ChatGPT评价生成 # ChatGPT评价生成
def generation_ai(pname, _class=0, _type=1, opts=None): def generation_ai(pname, _class=0, _type=1, opts=None):
os.environ['http_proxy'] = os.getenv("ProxyUrl") # 当存在 OPENAI_API_BASE_URL 时,使用反向代理
os.environ['https_proxy'] = os.getenv("ProxyUrl") api_base_url = os.environ.get("OPENAI_API_BASE_URL", "https://api.openai.com")
openai.api_key = os.getenv("OPENAI_API_KEY") api_key = os.environ["OPENAI_API_KEY"]
prompt = f"{pname} 写一段此商品的评价,简短、口语化" prompt = f"{pname} 写一段此商品的评价,简短、口语化"
response = openai.ChatCompletion.create( response = requests.post(
model="gpt-3.5-turbo", f"{api_base_url}/v1/chat/completions",
messages=[{"role": "user", "content": prompt}], headers={
max_tokens=1024, "Content-Type": "application/json",
"Authorization": f"Bearer {api_key}",
},
json={
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": prompt}],
"max_tokens": 1024,
}
) )
return 5, response.choices[0].message.content.strip() response_text = response.json()
return 5, response_text["choices"][0]["message"]["content"].strip()
# 查询全部评价 # 查询全部评价
@ -273,7 +271,7 @@ def sunbw(N, opts=None):
opts['logger'].debug('Commenting on items') opts['logger'].debug('Commenting on items')
for i, Order in enumerate(reversed(Order_data)): for i, Order in enumerate(reversed(Order_data)):
if i + 1 > 10: if i + 1 > 10:
opts['logger'].info(f'\t已评价10个订单跳出') opts['logger'].info(f'\n已评价10个订单跳出')
break break
try: try:
oid = Order.xpath('tr[@class="tr-th"]/td/span[3]/a/text()')[0] oid = Order.xpath('tr[@class="tr-th"]/td/span[3]/a/text()')[0]
@ -293,7 +291,7 @@ def sunbw(N, opts=None):
idx = 0 idx = 0
for oname, pid in zip(oname_data, pid_data): for oname, pid in zip(oname_data, pid_data):
pid = re.findall('(?<=jd.com/)[(0-9)*?]+',pid)[0] pid = re.findall('(?<=jd.com/)[(0-9)*?]+',pid)[0]
opts['logger'].info(f'\t开始第{i+1}个订单: {oid}') opts['logger'].info(f'\n开始第{i+1}个订单: {oid}')
opts['logger'].debug('pid: %s', pid) opts['logger'].debug('pid: %s', pid)
opts['logger'].debug('oid: %s', oid) opts['logger'].debug('oid: %s', oid)
xing, Str = generation(oname, opts=opts) xing, Str = generation(oname, opts=opts)
@ -426,7 +424,7 @@ def review(N, opts=None):
opts['logger'].debug('Commenting on items') opts['logger'].debug('Commenting on items')
for i, Order in enumerate(reversed(Order_data)): for i, Order in enumerate(reversed(Order_data)):
if i + 1 > 10: if i + 1 > 10:
opts['logger'].info(f'\t已评价10个订单跳出') opts['logger'].info(f'\n已评价10个订单跳出')
break break
oname = Order.xpath('td[1]/div/div[2]/div/a/text()')[0] oname = Order.xpath('td[1]/div/div[2]/div/a/text()')[0]
_id = Order.xpath('td[3]/div/a/@href')[0] _id = Order.xpath('td[3]/div/a/@href')[0]
@ -439,7 +437,7 @@ def review(N, opts=None):
"").split('&orderId=') "").split('&orderId=')
opts['logger'].debug('pid: %s', pid) opts['logger'].debug('pid: %s', pid)
opts['logger'].debug('oid: %s', oid) opts['logger'].debug('oid: %s', oid)
opts['logger'].info(f'\t开始第{i+1}个订单: {oid}') opts['logger'].info(f'\n开始第{i+1}个订单: {oid}')
_, context = generation(oname, _type=0, opts=opts) _, context = generation(oname, _type=0, opts=opts)
opts['logger'].info(f'追评内容:{context}') opts['logger'].info(f'追评内容:{context}')
data1 = { data1 = {
@ -513,11 +511,11 @@ def Service_rating(N, opts=None):
opts['logger'].debug('Commenting on items') opts['logger'].debug('Commenting on items')
for i, Order in enumerate(reversed(Order_data)): for i, Order in enumerate(reversed(Order_data)):
if i + 1 > 10: if i + 1 > 10:
opts['logger'].info(f'\t已评价10个订单跳出') opts['logger'].info(f'\n已评价10个订单跳出')
break break
#oname = Order.xpath('td[1]/div[1]/div[2]/div/a/text()')[0] #oname = Order.xpath('td[1]/div[1]/div[2]/div/a/text()')[0]
oid = Order.xpath('td[1]/span[3]/a/text()')[0] oid = Order.xpath('td[1]/span[3]/a/text()')[0]
opts['logger'].info(f'\t开始第{i+1}个订单: {oid}') opts['logger'].info(f'\n开始第{i+1}个订单: {oid}')
opts['logger'].debug('oid: %s', oid) opts['logger'].debug('oid: %s', oid)
url1 = (f'https://club.jd.com/myJdcomments/insertRestSurvey.action' url1 = (f'https://club.jd.com/myJdcomments/insertRestSurvey.action'
f'?voteid=145&ruleid={oid}') f'?voteid=145&ruleid={oid}')
@ -542,7 +540,7 @@ def Service_rating(N, opts=None):
opts['logger'].info(f'提交成功!') opts['logger'].info(f'提交成功!')
else: else:
opts['logger'].debug('Skipped sending comment request in dry run') opts['logger'].debug('Skipped sending comment request in dry run')
#opts['logger'].info("\t " + pj1.text) #opts['logger'].info("\n " + pj1.text)
opts['logger'].debug('Sleep time (s): %.1f', SERVICE_RATING_SLEEP_SEC) opts['logger'].debug('Sleep time (s): %.1f', SERVICE_RATING_SLEEP_SEC)
time.sleep(SERVICE_RATING_SLEEP_SEC) time.sleep(SERVICE_RATING_SLEEP_SEC)
N['服务评价'] -= 1 N['服务评价'] -= 1
@ -696,6 +694,16 @@ if __name__ == '__main__':
else: else:
logger.info("没有设置变量PC_COOKIE请添加电脑端CK到环境变量") logger.info("没有设置变量PC_COOKIE请添加电脑端CK到环境变量")
sys.exit(1) sys.exit(1)
if "OPENAI_API_KEY" in os.environ:
logger.info('已启用AI评价')
if "OPENAI_API_BASE_URL" in os.environ:
logger.info(' - 使用 OpenAI API 代理:' + os.environ["OPENAI_API_BASE_URL"])
elif os.environ.get("ProxyUrl").startswith("http"):
os.environ['http_proxy'] = os.getenv("ProxyUrl")
os.environ['https_proxy'] = os.getenv("ProxyUrl")
logger.info(' - 使用QL配置文件ProxyUrl代理' + os.environ["ProxyUrl"])
else:
logger.info(' - 未使用代理请确认当前网络环境可直连api.openai.com')
try: try:
i = 1 i = 1
for ck in cks: for ck in cks:
@ -720,7 +728,7 @@ if __name__ == '__main__':
} }
logger.debug('Builtin HTTP request header: %s', headers) logger.debug('Builtin HTTP request header: %s', headers)
logger.debug('Starting main processes') logger.debug('Starting main processes')
print ('\n开始第 '+ str(i) +'个账号评价。。。\n') logger.info('\n开始第 '+ str(i) +' 个账号评价...\n')
main(opts) main(opts)
i += 1 i += 1
# NOTE: It needs 3,000 times to raise this exception. Do you really want to # NOTE: It needs 3,000 times to raise this exception. Do you really want to