main
黄海 5 months ago
parent 3cd9cdf22f
commit 5bb2e22d42

@ -25,7 +25,7 @@ class MarkdownGenerator:
self.course_name = course_name self.course_name = course_name
self.template_path = template_path or DEFAULT_TEMPLATE self.template_path = template_path or DEFAULT_TEMPLATE
self.output_path = output_path or DEFAULT_OUTPUT_DIR / f"{course_name}.md" self.output_path = output_path or DEFAULT_OUTPUT_DIR / f"{course_name}.md"
self.client = OpenAI(api_key=API_KEY, base_url=MODEL_URL) # 初始化OpenAI客户端 self.client = OpenAI(api_key=MODEL_API_KEY, base_url=MODEL_URL) # 初始化OpenAI客户端
self._validate_paths() self._validate_paths()
@ -55,7 +55,7 @@ class MarkdownGenerator:
) )
return self.client.chat.completions.create( return self.client.chat.completions.create(
model=MODEL_R1, model=MODEL_NAME,
messages=[ messages=[
{"role": "system", "content": system_prompt}, {"role": "system", "content": system_prompt},
{"role": "user", "content": f"请生成《{self.course_name}》教学大纲"} {"role": "user", "content": f"请生成《{self.course_name}》教学大纲"}

@ -1,13 +1,12 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json import json
import time import time
from pathlib import Path
from typing import Dict, Tuple from typing import Dict, Tuple
from aliyunsdkcore.acs_exception.exceptions import ClientException, ServerException from aliyunsdkcore.acs_exception.exceptions import ClientException, ServerException
from aliyunsdkcore.client import AcsClient from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest from aliyunsdkcore.request import CommonRequest
from Config import *
# 服务常量配置 # 服务常量配置
CONFIG = { CONFIG = {
"REGION_ID": "cn-shanghai", "REGION_ID": "cn-shanghai",
@ -169,8 +168,8 @@ def transcribe_audio_file(
def ShiBie(audio_url, output_path): def ShiBie(audio_url, output_path):
# 配置参数(应通过环境变量或配置文件获取) # 配置参数(应通过环境变量或配置文件获取)
CREDENTIALS = { CREDENTIALS = {
"access_key_id": "LTAI5tE4tgpGcKWhbZg6C4bh", "access_key_id": ALY_AK,
"access_key_secret": "oizcTOZ8izbGUouboC00RcmGE8vBQ1", "access_key_secret": ALY_SK,
"app_key": "OIpiw501l4o6MYEe", "app_key": "OIpiw501l4o6MYEe",
"audio_url":audio_url, "audio_url":audio_url,
"output_path": output_path "output_path": output_path

@ -1,5 +1,4 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from pathlib import Path
from typing import Optional, Tuple, Iterator from typing import Optional, Tuple, Iterator
from openai import OpenAI, APIError, APITimeoutError from openai import OpenAI, APIError, APITimeoutError
import time import time
@ -11,9 +10,9 @@ class ContentAnalyzer:
def __init__( def __init__(
self, self,
api_key: str = API_KEY, api_key: str = MODEL_API_KEY,
base_url: str = MODEL_URL, base_url: str = MODEL_URL,
model: str = MODEL_R1, model: str = MODEL_NAME,
max_retries: int = 10, max_retries: int = 10,
initial_timeout: int = 300 initial_timeout: int = 300
): ):

@ -8,6 +8,7 @@ from alibabacloud_ocr_api20210707 import models as ocr_api_20210707_models
from alibabacloud_ocr_api20210707.client import Client as ocr_api20210707Client from alibabacloud_ocr_api20210707.client import Client as ocr_api20210707Client
from alibabacloud_tea_openapi import models as open_api_models from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util import models as util_models from alibabacloud_tea_util import models as util_models
from Config import *
class RecognizeHandwriting: class RecognizeHandwriting:
@ -18,8 +19,8 @@ class RecognizeHandwriting:
def create_client() -> ocr_api20210707Client: def create_client() -> ocr_api20210707Client:
# 安全建议:建议将密钥移到环境变量中 # 安全建议:建议将密钥移到环境变量中
config = open_api_models.Config( config = open_api_models.Config(
access_key_id=os.getenv('ALIYUN_ACCESS_KEY', 'LTAI5tE4tgpGcKWhbZg6C4bh'), access_key_id=ALY_AK,
access_key_secret=os.getenv('ALIYUN_ACCESS_SECRET', 'oizcTOZ8izbGUouboC00RcmGE8vBQ1') access_key_secret=ALY_SK
) )
config.endpoint = f'ocr-api.cn-hangzhou.aliyuncs.com' config.endpoint = f'ocr-api.cn-hangzhou.aliyuncs.com'
return ocr_api20210707Client(config) return ocr_api20210707Client(config)

@ -8,7 +8,7 @@ from Config import *
class EnglishEssayAnalyzer: class EnglishEssayAnalyzer:
def __init__(self): def __init__(self):
self.client = OpenAI( self.client = OpenAI(
api_key=API_KEY, api_key=MODEL_API_KEY,
base_url=MODEL_URL base_url=MODEL_URL
) )
@ -28,7 +28,7 @@ class EnglishEssayAnalyzer:
"""流式分析作文(新增关键方法)""" """流式分析作文(新增关键方法)"""
try: try:
stream = self.client.chat.completions.create( stream = self.client.chat.completions.create(
model=MODEL_R1, model=MODEL_NAME,
messages=[{ messages=[{
"role": "user", "role": "user",
"content": self._build_prompt(essay) "content": self._build_prompt(essay)

@ -1,17 +1,22 @@
from pathlib import Path from pathlib import Path
# 阿里云中用来调用deepseek r1的密钥
API_KEY = "sk-01d13a39e09844038322108ecdbd1bbc"
# 固定配置项 # 固定配置项
MODEL_R1 = "deepseek-r1" # 阿里云中用来调用deepseek r1的密钥
MODEL_V3 = "deepseek-v3" MODEL_API_KEY = "sk-01d13a39e09844038322108ecdbd1bbc"
MODEL_NAME = "deepseek-r1"
#MODEL_NAME='qwen-plus'
MODEL_URL='https://dashscope.aliyuncs.com/compatible-mode/v1' MODEL_URL='https://dashscope.aliyuncs.com/compatible-mode/v1'
# 华为云
HW_API_KEY='2R7vrjfIZO1chcfk4V3zDscx2Ms4I4kdoY7XSFnxa8Z2RNfAztg8qrXXKkwJGZWvMtS4qnN782WmaY4xZfMhyg'
HW_API_URL= url = "https://infer-modelarts-cn-southwest-2.modelarts-infer.com/v1/infers/952e4f88-ef93-4398-ae8d-af37f63f0d8e/v1/chat/completions"
HW_MODEL_NAME='DeepSeek-R1'
# 阿里云的配置信息
ALY_AK='LTAI5tE4tgpGcKWhbZg6C4bh'
ALY_SK='oizcTOZ8izbGUouboC00RcmGE8vBQ1'
# 正确路径拼接方式 # 正确路径拼接方式
mdWorkingPath = Path(__file__).parent / 'md-file' / 'readme' mdWorkingPath = Path(__file__).parent / 'md-file' / 'readme'
DEFAULT_TEMPLATE = mdWorkingPath / 'default.md' # 使用 / 运算符 DEFAULT_TEMPLATE = mdWorkingPath / 'default.md' # 使用 / 运算符
DEFAULT_OUTPUT_DIR = mdWorkingPath / 'output' # 使用 / 运算符 DEFAULT_OUTPUT_DIR = mdWorkingPath / 'output' # 使用 / 运算符
# print(f"模板路径:{DEFAULT_TEMPLATE}")
# print(f"输出目录:{DEFAULT_OUTPUT_DIR}")

@ -1,35 +1,57 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import re
import time import time
from typing import Iterator, Tuple from typing import Iterator, Tuple
from openai import OpenAI from openai import OpenAI
from openai.types.chat import ChatCompletionChunk from openai.types.chat import ChatCompletionChunk
from Config import API_KEY, MODEL_R1, MODEL_URL from Config import *
class KnowledgeGraph: class KnowledgeGraph:
def __init__(self, content: str): def __init__(self, shiti_content: str):
self.content = content self.shiti_content = shiti_content
self.client = OpenAI(api_key=API_KEY, base_url=MODEL_URL) self.client = OpenAI(api_key=HW_API_KEY, base_url=HW_API_URL)
def _generate_stream(self) -> Iterator[ChatCompletionChunk]: def _generate_stream(self) -> Iterator[ChatCompletionChunk]:
"""流式生成内容"""
system_prompt = '''回答以下内容: system_prompt = '''回答以下内容:
1. 这道题目有哪些知识点哪些能力点 1. 这道题目有哪些知识点哪些能力点
2. 生成Neo4j 5.26.2的插入语句''' 2. 生成Neo4j 5.26.2的插入语句'''
return self.client.chat.completions.create( return self.client.chat.completions.create(
model=MODEL_R1, model=MODEL_NAME,
messages=[ messages=[
{"role": "system", "content": system_prompt}, {"role": "system", "content": system_prompt},
{"role": "user", "content": self.content} {"role": "user", "content": self.shiti_content}
], ],
stream=True, stream=True,
timeout=300 timeout=300
) )
def run(self) -> Tuple[bool, str]: def _extract_cypher(self, content: str) -> str:
"""执行生成流程(返回状态和完整内容)""" """从内容中提取Cypher语句修正版"""
# 匹配包含cypher的代码块支持可选语言声明
pattern = r"```(?:cypher)?\n(.*?)```"
matches = re.findall(pattern, content, re.DOTALL)
processed = []
for block in matches:
# 清理每行:移除注释和首尾空格
cleaned_lines = []
for line in block.split('\n'):
line = line.split('//')[0].strip() # 移除行尾注释
if line: # 保留非空行
cleaned_lines.append(line)
if cleaned_lines:
processed.append('\n'.join(cleaned_lines))
return ';\n\n'.join(processed) if processed else ""
def run(self) -> Tuple[bool, str, str]:
"""执行生成流程返回状态、完整内容、Cypher语句"""
start_time = time.time() start_time = time.time()
spinner = ['', '', '', '', '', '', '', '', '', ''] spinner = ['', '', '', '', '', '', '', '', '', '']
content_buffer = [] content_buffer = []
cypher_script = ""
try: try:
print(f"🚀 开始生成知识点和能力点的总结和插入语句") print(f"🚀 开始生成知识点和能力点的总结和插入语句")
@ -48,16 +70,20 @@ class KnowledgeGraph:
if content_buffer: if content_buffer:
full_content = ''.join(content_buffer) full_content = ''.join(content_buffer)
cypher_script = self._extract_cypher(full_content)
print(f"\n\n✅ 生成成功!耗时 {int(time.time() - start_time)}") print(f"\n\n✅ 生成成功!耗时 {int(time.time() - start_time)}")
print("\n================ 完整结果 ================") print("\n================ 完整结果 ================")
print(full_content) print(full_content)
print("========================================") print("\n================ Cypher语句 ===============")
return True, full_content print(cypher_script if cypher_script else "未检测到Cypher语句")
return False, "" print("==========================================")
return True, full_content, cypher_script
return False, "", ""
except Exception as e: except Exception as e:
print(f"\n\n❌ 生成失败:{str(e)}") print(f"\n\n❌ 生成失败:{str(e)}")
return False, str(e) return False, str(e), ""
if __name__ == '__main__': if __name__ == '__main__':
@ -66,9 +92,9 @@ if __name__ == '__main__':
把7个完全相同的小长方形拼成如图的样子已知每个小长方形的长是10厘米则拼成的大长方形的周长是多少厘米 把7个完全相同的小长方形拼成如图的样子已知每个小长方形的长是10厘米则拼成的大长方形的周长是多少厘米
''' '''
kg = KnowledgeGraph(shiti_content) kg = KnowledgeGraph(shiti_content)
success, result = kg.run() # 获取返回结果 success, result, cypher = kg.run()
# 如果需要进一步处理结果 if success and cypher:
if success: with open("knowledge_graph.cypher", "w", encoding="utf-8") as f:
with open("result.txt", "w", encoding="utf-8") as f: f.write(cypher)
f.write(result) print("\nCypher语句已保存至 knowledge_graph.cypher")

@ -0,0 +1,4 @@
CREATE (r1:Rectangle {id: 1, length: 10, width: 7.5, description: '小长方形'})
CREATE (big:Rectangle {id: 2, length: 30, width: 17.5, perimeter: 95, description: '由7个小长方形拼接而成的大长方形'})
CREATE (r1)-[:PART_OF {quantity: 3, orientation: '横向'}]->(big)
CREATE (r1)-[:PART_OF {quantity: 4, orientation: '纵向'}]->(big)

@ -0,0 +1,35 @@
**知识点与能力点分析:**
1. **几何图形认知**:理解长方形的基本属性(长、宽、周长)。
2. **空间想象能力**:通过文字描述想象图形的拼接方式,构建几何模型。
3. **代数应用**:设定未知数,建立方程求解小长方形的宽。
4. **逻辑推理**:通过面积或边长的等量关系推导变量,整合信息得出最终周长。
5. **问题分解**:将复杂图形问题拆解为小长方形的排列组合与尺寸计算。
---
**Neo4j 5.26.2 中文插入语句:**
```cypher
// 创建小长方形节点
CREATE (s1:小长方形 {名称: '小长方形1', 长: 10, 宽: 7.5}),
(s2:小长方形 {名称: '小长方形2', 长: 10, 宽: 7.5}),
(s3:小长方形 {名称: '小长方形3', 长: 10, 宽: 7.5}),
(s4:小长方形 {名称: '小长方形4', 长: 10, 宽: 7.5}),
(s5:小长方形 {名称: '小长方形5', 长: 10, 宽: 7.5}),
(s6:小长方形 {名称: '小长方形6', 长: 10, 宽: 7.5}),
(s7:小长方形 {名称: '小长方形7', 长: 10, 宽: 7.5});
// 创建大长方形节点
CREATE (b:大长方形 {名称: '拼接后的大长方形', 长: 30, 宽: 17.5, 周长: 95});
// 建立拼接关系
MATCH (s1:小长方形), (s2:小长方形), (s3:小长方形), (s4:小长方形),
(s5:小长方形), (s6:小长方形), (s7:小长方形), (b:大长方形)
WHERE s1.名称 IN ['小长方形1', '小长方形2', '小长方形3']
AND s2.名称 IN ['小长方形4', '小长方形5', '小长方形6', '小长方形7']
CREATE (s1)-[:横向拼接]->(b),
(s2)-[:纵向拼接]->(b);
```
**答案拼成的大长方形的周长是95厘米。**

@ -0,0 +1,32 @@
# coding=utf-8
import requests
import json
import urllib3
from Config import *
if __name__ == '__main__':
# 禁止警告
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# Send request.
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer '+HW_API_KEY # 把yourApiKey替换成真实的API Key
}
data = {
"model": HW_MODEL_NAME,
"max_tokens": 20,
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你好"}
],
"stream": False,
"temperature": 1.0
}
resp = requests.post(HW_API_URL, headers=headers, data=json.dumps(data), verify=False)
# Print result.
print(resp.status_code)
print(resp.text)
Loading…
Cancel
Save