Commit 513df6d1 by 赵增煜

增加文心一言采集

parent 1b0cfeb8
......@@ -3,10 +3,11 @@ from flask.cli import AppGroup
from applications.extensions import db
from applications.models import AiFileParser
from applications.common.utils.kimi_ai import KimiAi
from applications.common.utils.yiyan_ai import YiyanAi
parser_cli = AppGroup("parser")
@parser_cli.command("init")
@parser_cli.command("kimi_init")
def init():
def kimi_init():
# 常驻脚本扫描数据库中是否存在未解析文件
window = KimiAi()
window.open_url('https://kimi.moonshot.cn')
......@@ -18,7 +19,7 @@ def init():
# path = os.path.join(*path_parts)
# print(path)
db.session.commit()
file_parser_list = AiFileParser.query.filter(AiFileParser.status==0).all()
file_parser_list = AiFileParser.query.filter(AiFileParser.status==0,AiFileParser.parser_engine=="kimi").all()
print(len(file_parser_list),file_parser_list)
if len(file_parser_list) > 0 :
for file_parser in file_parser_list:
......@@ -31,7 +32,7 @@ def init():
# print(path)
# exit()
# prompt = f"现在需要你帮我把编号为{file_parser.file_id}的pdf中表格数据识别解析出来,表格数据存在键值对对应关系,需要包含表头信息(表头信息中包含pdf编号)和表体信息信息(商品list格式),以markdown的json格式输出,只输出解析后的json数据"
prompt = f"pdf编号:{file_parser.file_id},解析pdf,识别出来的内容以json格式返回,json中需包含pdf编号,商品可能存在多条,货物(商品)信息为list格式可包含多商品,表头信息包含如下字段发货人、发货人编号、统一社会信用码、收货人、离境口岸、运抵国、指运港、件数、总毛重、总净重,表体信息包含如下字段商品编号、商品名称、规格型号、数量、单位、单价、总价、原产国、目的国、境内货源地、包装种类、数量、毛重、净重,识别不到的信息为空值,并且只有一个表头,如果pdf中存在多个报关单则把信息拆分成多个json返回"
prompt = f"pdf编号:{file_parser.file_id},解析阅读pdf,识别出来的内容以list[json]格式返回,json中需包含pdf编号,商品可能存在多条,货物(商品)信息为list格式可包含多商品,表头信息包含如下字段发货人、发货人编号、统一社会信用码、收货人、离境口岸、运抵国、指运港、件数、毛重(单位千克,同一框中数字)、净重(单位千克,同一框中数字),表体信息包含如下字段项号、商品编号、商品名称、规格型号、数量、单位、单价、总价、原产国、目的国、境内货源地、包装种类、数量、毛重、净重,识别不到的信息为空值,并且只有一个表头"
res = window.parser(path, prompt)
AiFileParser.query.filter_by(id=file_parser.id).update({ "status": 2,"kimi_ai_parser": res.strip()},synchronize_session=False)
db.session.commit()
......@@ -42,8 +43,45 @@ def init():
time.sleep(10)
continue
@parser_cli.command("yiyan_init")
def yiyan_init():
# 常驻脚本扫描数据库中是否存在未解析文件
window = YiyanAi()
window.open_url('https://yiyan.baidu.com/')
# print("等待40s,先登录!")
time.sleep(40)
while True:
# path_parts = ["D:", "www", "ImageAiParser", "upload", "pdf", "20240812110609.pdf"]
# path = os.path.join(*path_parts)
# print(path)
db.session.commit()
file_parser_list = AiFileParser.query.filter(AiFileParser.status==0,AiFileParser.parser_engine=="yiyan").all()
print(len(file_parser_list),file_parser_list)
if len(file_parser_list) > 0 :
for file_parser in file_parser_list:
print(file_parser.id, file_parser.file_path)
path_parts = json.loads(file_parser.file_path)
if path_parts[0].endswith(':') and not path_parts[0].endswith(os.sep):
path_parts[0] += os.sep
path = os.path.join(*path_parts)
print(path_parts)
# print(path)
# exit()
# prompt = f"现在需要你帮我把编号为{file_parser.file_id}的pdf中表格数据识别解析出来,表格数据存在键值对对应关系,需要包含表头信息(表头信息中包含pdf编号)和表体信息信息(商品list格式),以markdown的json格式输出,只输出解析后的json数据"
# prompt = f"pdf编号:{file_parser.file_id},解析阅读pdf,识别出来的内容以list[json]格式返回,json中需包含pdf编号,商品可能存在多条,货物(商品)信息为list格式可包含多商品,表头信息包含如下字段发货人、发货人编号、统一社会信用码、收货人、离境口岸、运抵国、指运港、件数、毛重(单位千克,同一框中数字)、净重(单位千克,同一框中数字),表体信息包含如下字段项号、商品编号、商品名称、规格型号、数量、单位、单价、总价、原产国、目的国、境内货源地、包装种类、数量、毛重、净重,识别不到的信息为空值,并且只有一个表头"
prompt = f"pdf编号:{file_parser.file_id},解析阅读pdf理解pdf中报关单表格信息,识别出来的内容以list[json]格式返回,json中需包含pdf编号,报关单商品详情可能存在多条,报关单商品详情为list格式可包含多商品,报关单头部信息包含如下字段 :发货人、统一社会信用码(由18位数字或大写拉丁字母组成)、收货人、件数(纯数字)、毛重(千克)、净重(千克),报关单商品详情包含如下字段:项号、商品编号、商品名称、规格型号、数量(纯数字包括浮点型)、单位(千克、kg、pcs、个)、单价(纯数字包含浮点型)、总价(纯数字包含浮点型)、货币(USD、RMB等)、原产国、毛重、净重......,识别不到的信息为空值。"
res = window.parser(path, prompt)
AiFileParser.query.filter_by(id=file_parser.id).update({ "status": 2,"kimi_ai_parser": res.strip()},synchronize_session=False)
db.session.commit()
# db.session.expire(AiFileParser)
time.sleep(10)
else:
print("没有未解析文件")
time.sleep(10)
continue
@parser_cli.command("")
def test():
......
......@@ -9,6 +9,7 @@ class AiFileParser(db.Model):
gpt_ai_parser = db.Column(db.Text, nullable=False)
kimi_ai_parser = db.Column(db.Text, nullable=False)
file_id = db.Column(db.String(255), nullable=False)
parser_engine = db.Column(db.String(255), nullable=False)
prompt_id = db.Column(db.Integer, nullable=False)
status = db.Column(db.Integer, nullable=False)
create_date = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间')
......
......@@ -16,7 +16,7 @@ def test():
# script_path = Path(__file__).resolve()
# script_dir = script_path.parent
# script_dir = script_path.parent
@bp.get("/ai_index_page")
def ai_index_page():
......@@ -104,7 +104,8 @@ def upload():
return fail_api(msg=f"文件上传异常: {e}")
file_code = request.form.get('file_code')
print(file_code)
parser_engine = request.form.get('parser_engine')
print(file_code,parser_engine)
project_root = current_app.config.get('PROJECT_ROOT')
full_directory = project_root + upload_pdf_directory
now = get_current_datetime()
......@@ -120,6 +121,7 @@ def upload():
new_ai_file_parser = AiFileParser(
file_path=json.dumps(path_list),
file_id = file_code,
parser_engine = parser_engine,
status = 0,
)
db.session.add(new_ai_file_parser)
......@@ -134,7 +136,8 @@ def base64_upload():
data = request.json
base64_pdf = data.get('pdf_base64')
file_code = data.get('file_code')
print(file_code)
parser_engine = data.get('parser_engine')
print(file_code,parser_engine)
if base64_pdf is None or file_code is None:
return jsonify({'error': 'Missing PDF or file_code'}), 400
......@@ -162,6 +165,7 @@ def base64_upload():
new_ai_file_parser = AiFileParser(
file_path=json.dumps(path_list),
file_id = file_code,
parser_engine = parser_engine,
status = 0,
)
db.session.add(new_ai_file_parser)
......
......@@ -30,7 +30,9 @@
<tr>
<td>
<div class="layui-form-item">
<pre>
{{data.kimi_ai_parser}}
</pre>
</div>
</td>
</tr>
......
......@@ -17,9 +17,20 @@
</div>
<div class="main-container">
<div class="layui-btn-container">
<label class="layui-form-label">F</label>
<label class="layui-form-label">FILE_CODE</label>
<div class="layui-input-block">
<input type="text" name="file_code" lay-verify="file_code" autocomplete="off" placeholder="请输入策略名称" id="layui-input-file-code" class="layui-input">
<input type="text" name="file_code" lay-verify="file_code" autocomplete="off" placeholder="file_code" id="layui-input-file-code" class="layui-input">
</div>
</div>
</div>
<div class="main-container">
<div class="layui-btn-container">
<label class="layui-form-label">解析AI</label>
<div class="layui-input-block">
<select name="parser_engine" lay-verify="required">
<option value="kimi" selected>kimi</option>
<option value="yiyan">文心一言</option>
</select>
</div>
</div>
</div>
......@@ -62,6 +73,7 @@
,before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
this.data={
file_code:$("#layui-input-file-code").val(),
parser_engine:$('select[name="parser_engine"]').val()
}
},
done: function(res){
......
This diff is collapsed. Click to expand it.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment