增加知识库文件上传、修改操作

This commit is contained in:
Tiger Ren 2024-10-15 15:42:29 +08:00
parent 678a0a8988
commit 62a5b5396d
3 changed files with 86 additions and 2 deletions

View File

@ -2,11 +2,14 @@ import logging,json
from flask import Blueprint, request, Response
from app.services.zhipu_service import ZhipuService
from app.services.zhipu_alltool_service import ZhipuAlltoolService
from app.services.zhipu_file_service import ZhipuFileService
from app.utils.prompt_repository import PromptRepository # Add this import
zhipu_controller = Blueprint('zhipu_controller', __name__)
zhipu_service = ZhipuService()
zhipu_alltool_service = ZhipuAlltoolService()
zhipu_file_service = ZhipuFileService()
logger = logging.getLogger(__name__)
@zhipu_controller.route('/zhipu/stream', methods=['POST'])
@ -128,4 +131,19 @@ def alltool_classify_non_stream():
message = data.get('message', '')
response = zhipu_alltool_service.func_call_classify(message)
print(f'response: {response}')
return response
return response
@zhipu_controller.route('/zhipu/file', methods=['POST'])
def submit_report():
username = "user"
data = request.json
report_text = data.get('report_text', '')
project_name = data.get('project_name', '')
prefix = data.get('prefix', '')
submit_result = zhipu_file_service.submit_file(prefix=prefix,project_name=project_name, file_content=report_text)
return submit_result
@zhipu_controller.route('/zhipu/file/list', methods=['POST'])
def get_file_list():
file_list = zhipu_file_service.get_file_list()
return file_list

View File

@ -0,0 +1,64 @@
from zhipuai import ZhipuAI
from datetime import datetime
import pytz, io, logging, json, re
logger = logging.getLogger(__name__)
class ZhipuFileService:
def __init__(self):
self.app_secret_key = "d54f764a1d67c17d857bd3983b772016.GRjowY0fyiMNurLc"
def submit_file(self, prefix, project_name, file_content: str) -> dict:
"""
Uploads a file to the Zhipu API and returns the file ID.
"""
file_list = self.get_file_list()
current_date = datetime.now().strftime('%Y-%m-%d')
base_filename = f"{prefix}-{project_name}-{current_date}"
next_version = self.get_next_version(file_list, base_filename)
filename = f"{base_filename}_v{next_version}.txt"
client = ZhipuAI(api_key=self.app_secret_key) # 请填写您自己的APIKey
file_obj = io.BytesIO(file_content.encode('utf-8'))
file_tuple = (filename, file_obj, 'text/plain')
result = client.files.create(
file=file_tuple,
purpose="retrieval" , #支持retrieval、batch、fine-tune、file-extract
knowledge_id="1843318172036575232",
)
# logger.info("File uploaded result:", result)
if result.successInfos and len(result.successInfos) > 0:
return {"status": "success", "document_id": result.successInfos[0]['documentId'], "filename": filename}
elif result.failedInfos and len(result.failedInfos) > 0:
return {"status": "failed", "error": result.failedInfos[0].get('reason', 'Unknown error'), "filename": filename}
else:
return {"status": "unknown", "error": "No success or failure information provided", "filename": filename}
def get_file_list(self):
client = ZhipuAI(api_key=self.app_secret_key) # 请填写您自己的APIKey
result = client.knowledge.document.list(
purpose="retrieval", #支持retrieval
knowledge_id="1843318172036575232"
)
file_list = []
if result and hasattr(result, 'list'):
for doc in result.list:
file_list.append({
'id': doc.id,
'filename': doc.name
})
return file_list
def get_next_version(self, file_list, base_filename):
versions = [1] # Start with version 1 if no existing versions
for file in file_list:
match = re.match(rf'{re.escape(base_filename)}_v(\d+)', file['filename'])
if match:
versions.append(int(match.group(1)))
return max(versions) + 1

View File

@ -15,4 +15,6 @@ SQLAlchemy==2.0.35
typing_extensions==4.12.2
Werkzeug==3.0.4
zipp==3.20.2
zhipuai==2.0.1
zhipuai==2.1.5.20230904
pytz==2024.2
flask-debug==0.4.3