|
|
|
@ -0,0 +1,84 @@
|
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
import time
|
|
|
|
|
from typing import Iterator, Optional
|
|
|
|
|
|
|
|
|
|
from dashscope import Generation
|
|
|
|
|
from dashscope.api_entities.dashscope_response import DashScopeAPIResponse
|
|
|
|
|
|
|
|
|
|
from Config import *
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class KnowledgeGraph:
|
|
|
|
|
def __init__(
|
|
|
|
|
self,
|
|
|
|
|
shiti_content: str,
|
|
|
|
|
):
|
|
|
|
|
"""
|
|
|
|
|
初始化生成器
|
|
|
|
|
"""
|
|
|
|
|
self.shiti_content = shiti_content
|
|
|
|
|
|
|
|
|
|
def _generate_stream(self) -> Iterator[DashScopeAPIResponse]:
|
|
|
|
|
"""流式生成内容"""
|
|
|
|
|
system_prompt = (
|
|
|
|
|
'''
|
|
|
|
|
回答以下内容:
|
|
|
|
|
1、这道题目有哪些知识点,哪些能力点
|
|
|
|
|
2、我准备把你返回的知识点和能力点,存入到neo4j中去,版本是neo4j-community-5.26.2,生成插入到数据库中的语句
|
|
|
|
|
'''
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
return Generation.call(
|
|
|
|
|
model=MODEL_R1,
|
|
|
|
|
api_key=API_KEY,
|
|
|
|
|
messages=[
|
|
|
|
|
{"role": "system", "content": system_prompt},
|
|
|
|
|
{"role": "user", "content": shiti_content}
|
|
|
|
|
],
|
|
|
|
|
result_format='message',
|
|
|
|
|
stream=True,
|
|
|
|
|
incremental_output=True
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def run(self) -> bool:
|
|
|
|
|
"""执行生成流程"""
|
|
|
|
|
start_time = time.time()
|
|
|
|
|
spinner = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']
|
|
|
|
|
content_buffer = []
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
print(f"🚀 开始生成知识点和能力点的总结和插入语句")
|
|
|
|
|
responses = self._generate_stream()
|
|
|
|
|
|
|
|
|
|
for idx, response in enumerate(responses):
|
|
|
|
|
# 显示进度
|
|
|
|
|
print(f"\r{spinner[idx % 10]} 生成中({int(time.time() - start_time)}秒)", end="")
|
|
|
|
|
|
|
|
|
|
if response.status_code == 200 and response.output:
|
|
|
|
|
if chunk := response.output.choices[0].message.content:
|
|
|
|
|
content_buffer.append(chunk)
|
|
|
|
|
if len(content_buffer) == 1:
|
|
|
|
|
print("\n\n📝 内容生成开始:")
|
|
|
|
|
print(chunk, end="", flush=True)
|
|
|
|
|
|
|
|
|
|
# 保存结果
|
|
|
|
|
if content_buffer:
|
|
|
|
|
print(f"\n\n✅ 生成成功!耗时 {int(time.time() - start_time)}秒")
|
|
|
|
|
return True
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"\n\n❌ 生成失败:{str(e)}")
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
shiti_content='''
|
|
|
|
|
下面是一道小学三年级的数学题目,巧求周长:
|
|
|
|
|
把7个完全相同的小长方形拼成如图的样子,已知每个小长方形的长是10厘米,则拼成的大长方形的周长是多少厘米?
|
|
|
|
|
'''
|
|
|
|
|
KnowledgeGraph = KnowledgeGraph(shiti_content)
|
|
|
|
|
KnowledgeGraph.run()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|