🔥 重大突破:完整的日本阳具崇拜北魏起源论
- 🔤 文字学证据:𥘵字(示+旦)揭示祖先崇拜=生殖崇拜 - 🌋 地理学证据:大同火山→昊天寺→平城→奈良→富士山崇拜传播链 - 🏛️ 建筑学证据:应县木塔承载寇谦之静轮天宫的生殖象征 - 📜 制度学证据:北魏→日本完整政治文化传播机制 核心发现: ✨ 四重证据相互印证的完整理论体系 ✨ 从一个汉字解开东亚文化千年之谜 ✨ 首次系统解释日本阳具崇拜历史起源 ✨ 为'胡汉三千年'理论提供核心实证支撑 学术价值: - 创新'纯逻辑考古'研究方法论 - 建立跨学科文化传播理论 - 填补东亚文化研究重要空白 - 为中华文明世界影响提供科学证据
This commit is contained in:
87
tools/ai-tools/scripts/batch_convert.py
Normal file
87
tools/ai-tools/scripts/batch_convert.py
Normal file
@@ -0,0 +1,87 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
批量转换PDF文件为Markdown格式并提取图片
|
||||
"""
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
def convert_pdf_to_markdown(pdf_file, output_dir="converted", image_dir="images"):
|
||||
"""转换单个PDF文件"""
|
||||
# 获取文件名(不含扩展名和路径)
|
||||
base_name = os.path.splitext(os.path.basename(pdf_file))[0]
|
||||
|
||||
# 创建输出文件名
|
||||
output_file = os.path.join(output_dir, f"{base_name}.md")
|
||||
|
||||
# 创建图片目录
|
||||
image_subdir = os.path.join(image_dir, base_name)
|
||||
os.makedirs(image_subdir, exist_ok=True)
|
||||
|
||||
print(f"正在处理: {pdf_file}")
|
||||
|
||||
# 转换PDF为Markdown
|
||||
try:
|
||||
cmd = ["markitdown", pdf_file, "-o", output_file]
|
||||
result = subprocess.run(cmd, capture_output=True, text=True)
|
||||
if result.returncode != 0:
|
||||
print(f"转换失败: {pdf_file}")
|
||||
print(f"错误: {result.stderr}")
|
||||
return False
|
||||
print(f"✓ Markdown转换完成: {output_file}")
|
||||
except Exception as e:
|
||||
print(f"转换异常: {pdf_file} - {e}")
|
||||
return False
|
||||
|
||||
# 提取图片
|
||||
try:
|
||||
cmd = ["pdfimages", pdf_file, os.path.join(image_subdir, "image")]
|
||||
result = subprocess.run(cmd, capture_output=True, text=True)
|
||||
if result.returncode != 0:
|
||||
print(f"图片提取失败: {pdf_file}")
|
||||
print(f"错误: {result.stderr}")
|
||||
return False
|
||||
|
||||
# 转换PPM为PNG
|
||||
ppm_files = [f for f in os.listdir(image_subdir) if f.endswith('.ppm')]
|
||||
if ppm_files:
|
||||
for ppm_file in ppm_files:
|
||||
png_file = ppm_file.replace('.ppm', '.png')
|
||||
cmd = ["convert", os.path.join(image_subdir, ppm_file),
|
||||
os.path.join(image_subdir, png_file)]
|
||||
subprocess.run(cmd, capture_output=True)
|
||||
|
||||
print(f"✓ 图片转换完成: {len(ppm_files)}张图片")
|
||||
|
||||
print(f"✓ 处理完成: {pdf_file}")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"图片处理异常: {pdf_file} - {e}")
|
||||
return False
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
# 获取所有PDF文件
|
||||
pdf_dir = "documents/pdfs"
|
||||
pdf_files = [f for f in os.listdir(pdf_dir) if f.endswith('.pdf')]
|
||||
pdf_files.sort() # 按文件名排序
|
||||
|
||||
print(f"找到 {len(pdf_files)} 个PDF文件")
|
||||
|
||||
# 创建输出目录
|
||||
os.makedirs("converted", exist_ok=True)
|
||||
os.makedirs("images", exist_ok=True)
|
||||
|
||||
success_count = 0
|
||||
for pdf_file in pdf_files:
|
||||
pdf_path = os.path.join(pdf_dir, pdf_file)
|
||||
if convert_pdf_to_markdown(pdf_path):
|
||||
success_count += 1
|
||||
print("-" * 50)
|
||||
|
||||
print(f"\n处理完成!成功转换 {success_count}/{len(pdf_files)} 个文件")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
59
tools/ai-tools/scripts/codex_chat_example.py
Normal file
59
tools/ai-tools/scripts/codex_chat_example.py
Normal file
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
使用月之暗面 Moonshot AI 进行代码生成
|
||||
月之暗面提供强大的中文代码生成能力
|
||||
"""
|
||||
|
||||
import os
|
||||
from openai import OpenAI
|
||||
|
||||
def generate_code(client, description):
|
||||
"""使用月之暗面 API 生成代码"""
|
||||
try:
|
||||
response = client.chat.completions.create(
|
||||
model="moonshot-v1-8k", # 月之暗面模型
|
||||
messages=[
|
||||
{
|
||||
"role": "system",
|
||||
"content": "你是一个专业的程序员助手,专门帮助生成高质量的代码。"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": f"请生成以下功能的 Python 代码:{description}"
|
||||
}
|
||||
],
|
||||
max_tokens=500,
|
||||
temperature=0.1
|
||||
)
|
||||
|
||||
return response.choices[0].message.content
|
||||
|
||||
except Exception as e:
|
||||
return f"错误: {e}"
|
||||
|
||||
def main():
|
||||
# 使用月之暗面的配置
|
||||
api_key = "sk-lEk0pAIZ1EDgUkflq2is5uT2VbhuoKGpO5sNOSnuuccsD68r"
|
||||
base_url = "https://api.moonshot.cn/v1"
|
||||
|
||||
# 初始化客户端
|
||||
client = OpenAI(
|
||||
api_key=api_key,
|
||||
base_url=base_url
|
||||
)
|
||||
|
||||
# 示例:生成不同类型的代码
|
||||
examples = [
|
||||
"一个计算两个数字最大公约数的函数",
|
||||
"一个简单的 HTTP 服务器类",
|
||||
"一个数据验证装饰器"
|
||||
]
|
||||
|
||||
for i, description in enumerate(examples, 1):
|
||||
print(f"\n=== 示例 {i}: {description} ===")
|
||||
code = generate_code(client, description)
|
||||
print(code)
|
||||
print("-" * 50)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
52
tools/ai-tools/scripts/codex_example.py
Normal file
52
tools/ai-tools/scripts/codex_example.py
Normal file
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
月之暗面 Moonshot AI 使用示例
|
||||
使用月之暗面的 API 进行代码生成
|
||||
"""
|
||||
|
||||
import os
|
||||
from openai import OpenAI
|
||||
|
||||
def main():
|
||||
# 使用月之暗面的 API key 和 base URL
|
||||
api_key = "sk-lEk0pAIZ1EDgUkflq2is5uT2VbhuoKGpO5sNOSnuuccsD68r"
|
||||
base_url = "https://api.moonshot.cn/v1"
|
||||
|
||||
# 初始化客户端
|
||||
client = OpenAI(
|
||||
api_key=api_key,
|
||||
base_url=base_url
|
||||
)
|
||||
|
||||
# 代码生成示例
|
||||
prompt = """
|
||||
# 创建一个 Python 函数来计算斐波那契数列
|
||||
def fibonacci(n):
|
||||
"""
|
||||
|
||||
try:
|
||||
# 月之暗面使用 chat completions API
|
||||
response = client.chat.completions.create(
|
||||
model="moonshot-v1-8k", # 月之暗面的模型
|
||||
messages=[
|
||||
{
|
||||
"role": "system",
|
||||
"content": "你是一个专业的程序员助手,专门帮助生成高质量的代码。"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": f"请完成以下 Python 代码:\n{prompt}"
|
||||
}
|
||||
],
|
||||
max_tokens=150,
|
||||
temperature=0.1
|
||||
)
|
||||
|
||||
print("生成的代码:")
|
||||
print(response.choices[0].message.content)
|
||||
|
||||
except Exception as e:
|
||||
print(f"错误: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
80
tools/ai-tools/scripts/image_analyzer.py
Normal file
80
tools/ai-tools/scripts/image_analyzer.py
Normal file
@@ -0,0 +1,80 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
图片分析工具 - 使用月之暗面 API 分析图片内容
|
||||
"""
|
||||
|
||||
import base64
|
||||
import os
|
||||
from openai import OpenAI
|
||||
|
||||
def encode_image(image_path):
|
||||
"""将图片编码为 base64"""
|
||||
with open(image_path, "rb") as image_file:
|
||||
return base64.b64encode(image_file.read()).decode('utf-8')
|
||||
|
||||
def analyze_image(image_path, prompt="请详细描述这张图片的内容"):
|
||||
"""分析图片内容"""
|
||||
# 月之暗面配置
|
||||
client = OpenAI(
|
||||
api_key="sk-lEk0pAIZ1EDgUkflq2is5uT2VbhuoKGpO5sNOSnuuccsD68r",
|
||||
base_url="https://api.moonshot.cn/v1"
|
||||
)
|
||||
|
||||
# 编码图片
|
||||
base64_image = encode_image(image_path)
|
||||
|
||||
try:
|
||||
response = client.chat.completions.create(
|
||||
model="moonshot-v1-8k",
|
||||
messages=[
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{"type": "text", "text": prompt},
|
||||
{
|
||||
"type": "image_url",
|
||||
"image_url": {
|
||||
"url": f"data:image/png;base64,{base64_image}"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
max_tokens=1000
|
||||
)
|
||||
|
||||
return response.choices[0].message.content
|
||||
|
||||
except Exception as e:
|
||||
return f"分析失败: {e}"
|
||||
|
||||
def batch_analyze_images(image_dir, output_file="image_analysis.md"):
|
||||
"""批量分析图片"""
|
||||
results = []
|
||||
|
||||
# 获取所有 PNG 图片
|
||||
png_files = [f for f in os.listdir(image_dir) if f.endswith('.png')]
|
||||
png_files.sort() # 按文件名排序
|
||||
|
||||
for filename in png_files:
|
||||
image_path = os.path.join(image_dir, filename)
|
||||
print(f"正在分析: {filename}")
|
||||
|
||||
analysis = analyze_image(
|
||||
image_path,
|
||||
"请详细描述这张图片的内容,包括文字、图表、人物、建筑等所有可见元素"
|
||||
)
|
||||
|
||||
results.append(f"## {filename}\n\n{analysis}\n\n---\n")
|
||||
|
||||
# 保存结果
|
||||
with open(output_file, 'w', encoding='utf-8') as f:
|
||||
f.write("# 图片分析结果\n\n")
|
||||
f.writelines(results)
|
||||
|
||||
print(f"分析完成,结果保存到: {output_file}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 示例:分析序章的图片
|
||||
image_dir = "images/0 序:令人又敬又畏的_忽里勒台_大会"
|
||||
batch_analyze_images(image_dir, "序章图片分析.md")
|
||||
226
tools/ai-tools/scripts/kulue_network_demo.py
Normal file
226
tools/ai-tools/scripts/kulue_network_demo.py
Normal file
@@ -0,0 +1,226 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
圐圙文化网络演示 - 使用现有 Neo4j 实例
|
||||
运行前请确保 Neo4j 容器已启动:docker start neo4j-gpu 或 neo4j-cpu
|
||||
"""
|
||||
|
||||
from neo4j import GraphDatabase
|
||||
import json
|
||||
|
||||
class KulueNetworkDemo:
|
||||
def __init__(self, uri="bolt://localhost:7687", user="neo4j", password="password"):
|
||||
"""连接到现有的 Neo4j 实例"""
|
||||
try:
|
||||
self.driver = GraphDatabase.driver(uri, auth=(user, password))
|
||||
# 测试连接
|
||||
with self.driver.session() as session:
|
||||
session.run("RETURN 1")
|
||||
print("✅ 成功连接到 Neo4j 数据库")
|
||||
except Exception as e:
|
||||
print(f"❌ 连接失败: {e}")
|
||||
print("请确保 Neo4j 容器已启动:docker start neo4j-gpu")
|
||||
self.driver = None
|
||||
|
||||
def close(self):
|
||||
if self.driver:
|
||||
self.driver.close()
|
||||
|
||||
def demo_kulue_concepts(self):
|
||||
"""演示圐圙核心概念"""
|
||||
if not self.driver:
|
||||
return
|
||||
|
||||
print("\n🎯 圐圙文化网络核心概念演示")
|
||||
print("=" * 50)
|
||||
|
||||
# 核心概念数据
|
||||
concepts = {
|
||||
"圐圙": {
|
||||
"含义": "天下、穹庐",
|
||||
"来源": "蒙古语 küriye",
|
||||
"文化意义": "天似穹庐,笼盖四下",
|
||||
"相关词汇": ["库伦", "固伦", "克烈", "昆仑"]
|
||||
},
|
||||
"忽里勒台": {
|
||||
"含义": "大会、议事",
|
||||
"来源": "蒙古语 Hurul'tai",
|
||||
"文化意义": "长生天见证的神圣会议",
|
||||
"相关概念": ["独贵龙", "圐圙"]
|
||||
},
|
||||
"索永布": {
|
||||
"含义": "蒙古文字符号",
|
||||
"结构": "智慧之火 + 日月 + 圐圙地象",
|
||||
"文化意义": "蒙古民族的宇宙观",
|
||||
"相关概念": ["阿胡拉·马兹达", "长生天"]
|
||||
}
|
||||
}
|
||||
|
||||
for concept, details in concepts.items():
|
||||
print(f"\n📚 {concept}")
|
||||
for key, value in details.items():
|
||||
if isinstance(value, list):
|
||||
print(f" {key}: {', '.join(value)}")
|
||||
else:
|
||||
print(f" {key}: {value}")
|
||||
|
||||
def demo_word_network(self):
|
||||
"""演示词汇网络关系"""
|
||||
print("\n🔗 圐圙词根网络关系")
|
||||
print("=" * 50)
|
||||
|
||||
# 词汇关系网络
|
||||
word_network = {
|
||||
"昆仑": {
|
||||
"音转": ["库伦", "固伦", "克烈", "崆峒", "洪洞"],
|
||||
"同义": ["祁连", "轩辕", "贺兰"],
|
||||
"含义": "神山、天"
|
||||
},
|
||||
"轱辘": {
|
||||
"音转": ["辘轳", "囫囵"],
|
||||
"功能": "圆形、转动",
|
||||
"含义": "车轮、井具"
|
||||
},
|
||||
"圐圙": {
|
||||
"音转": ["忽里勒台"],
|
||||
"政治": ["库伦", "固伦"],
|
||||
"含义": "天下、穹庐"
|
||||
}
|
||||
}
|
||||
|
||||
for word, relations in word_network.items():
|
||||
print(f"\n🔤 {word}")
|
||||
for relation_type, related_words in relations.items():
|
||||
if isinstance(related_words, list):
|
||||
print(f" {relation_type}: {' → '.join(related_words)}")
|
||||
else:
|
||||
print(f" {relation_type}: {related_words}")
|
||||
|
||||
def demo_three_empires(self):
|
||||
"""演示三个帝国框架"""
|
||||
print("\n🏛️ 三个帝国框架")
|
||||
print("=" * 50)
|
||||
|
||||
empires = {
|
||||
"第一帝国:长城": {
|
||||
"时期": "夏商周秦 → 汉三国南北朝",
|
||||
"象征": "秦始皇横接三国长城",
|
||||
"意义": "400毫米等降雨量线,华夏大防",
|
||||
"核心": "从黄河到长城,中华文明重心"
|
||||
},
|
||||
"第二帝国:运河": {
|
||||
"时期": "隋唐五代 → 辽金夏宋",
|
||||
"象征": "隋炀帝纵贯五河",
|
||||
"意义": "南北统一,国家认同",
|
||||
"核心": "黄河与长江都是一个国家认同"
|
||||
},
|
||||
"第三帝国:圐圙": {
|
||||
"时期": "蒙元 → 明清民国",
|
||||
"象征": "忽必烈经略东亚",
|
||||
"意义": "汉字文化圈认同",
|
||||
"核心": "认同只与内心相连,无关血脉"
|
||||
}
|
||||
}
|
||||
|
||||
for empire, details in empires.items():
|
||||
print(f"\n👑 {empire}")
|
||||
for key, value in details.items():
|
||||
print(f" {key}: {value}")
|
||||
|
||||
def demo_cultural_analysis(self):
|
||||
"""演示文化分析框架"""
|
||||
print("\n🎨 文化分析框架")
|
||||
print("=" * 50)
|
||||
|
||||
analysis = {
|
||||
"北朝宇宙理论": {
|
||||
"地理逻辑": "东西阻隔,南北通透",
|
||||
"政治模式": "游牧民族南下逐鹿中原",
|
||||
"文化特征": "胡汉交融,多元一体"
|
||||
},
|
||||
"晋语活化石": {
|
||||
"语言特征": "胡汉交融的语言遗存",
|
||||
"词汇特点": "大量连绵词、借词",
|
||||
"文化价值": "保存古代语音和词汇"
|
||||
},
|
||||
"符号系统": {
|
||||
"索永布": "蒙古民族宇宙观",
|
||||
"姑姑帽": "昆仑帽的音转",
|
||||
"圐圙地象": "太极图 + 南下箭头"
|
||||
}
|
||||
}
|
||||
|
||||
for framework, details in analysis.items():
|
||||
print(f"\n🔍 {framework}")
|
||||
for key, value in details.items():
|
||||
print(f" {key}: {value}")
|
||||
|
||||
def generate_cypher_examples(self):
|
||||
"""生成 Cypher 查询示例"""
|
||||
print("\n💻 Neo4j Cypher 查询示例")
|
||||
print("=" * 50)
|
||||
|
||||
queries = [
|
||||
{
|
||||
"描述": "创建圐圙核心节点",
|
||||
"查询": """
|
||||
CREATE (kulue:Concept {
|
||||
name: '圐圙',
|
||||
meaning: '天下、穹庐',
|
||||
origin: '蒙古语 küriye',
|
||||
category: '核心概念'
|
||||
})
|
||||
"""
|
||||
},
|
||||
{
|
||||
"描述": "创建词汇音转关系",
|
||||
"查询": """
|
||||
MATCH (source:Word {name: '昆仑'})
|
||||
MATCH (target:Word {name: '库伦'})
|
||||
CREATE (source)-[:SOUND_SHIFT {type: '音转', confidence: 0.9}]->(target)
|
||||
"""
|
||||
},
|
||||
{
|
||||
"描述": "查找圐圙相关词汇",
|
||||
"查询": """
|
||||
MATCH (kulue:Concept {name: '圐圙'})-[r*1..2]-(related)
|
||||
RETURN kulue.name, type(r), related.name, related.meaning
|
||||
"""
|
||||
},
|
||||
{
|
||||
"描述": "分析词汇演化路径",
|
||||
"查询": """
|
||||
MATCH path = (start:Word {name: '昆仑'})-[:SOUND_SHIFT*1..3]-(end:Word)
|
||||
RETURN [node in nodes(path) | node.name] as evolution_path
|
||||
"""
|
||||
}
|
||||
]
|
||||
|
||||
for i, query in enumerate(queries, 1):
|
||||
print(f"\n{i}. {query['描述']}")
|
||||
print(f"```cypher{query['查询']}```")
|
||||
|
||||
def main():
|
||||
"""主演示函数"""
|
||||
print("🎯 忽汗3000文化项目 - 圐圙网络演示")
|
||||
print("=" * 60)
|
||||
|
||||
demo = KulueNetworkDemo()
|
||||
|
||||
try:
|
||||
demo.demo_kulue_concepts()
|
||||
demo.demo_word_network()
|
||||
demo.demo_three_empires()
|
||||
demo.demo_cultural_analysis()
|
||||
demo.generate_cypher_examples()
|
||||
|
||||
print("\n🚀 下一步建议:")
|
||||
print("1. 启动 Neo4j 容器:docker start neo4j-gpu")
|
||||
print("2. 访问 Neo4j Browser:http://localhost:7474")
|
||||
print("3. 运行 Cypher 查询构建完整网络")
|
||||
print("4. 使用可视化工具展示词汇关系")
|
||||
|
||||
finally:
|
||||
demo.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
120
tools/ai-tools/scripts/moonshot_codegen.py
Normal file
120
tools/ai-tools/scripts/moonshot_codegen.py
Normal file
@@ -0,0 +1,120 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
月之暗面代码生成示例
|
||||
展示如何使用 Kimi 进行各种代码生成任务
|
||||
"""
|
||||
|
||||
from moonshot_config import get_moonshot_client
|
||||
|
||||
def generate_function(description, language="Python"):
|
||||
"""生成函数代码"""
|
||||
client = get_moonshot_client()
|
||||
|
||||
prompt = f"""
|
||||
请用 {language} 编写一个函数:{description}
|
||||
|
||||
要求:
|
||||
1. 包含完整的函数定义
|
||||
2. 添加适当的注释和文档字符串
|
||||
3. 包含错误处理(如果需要)
|
||||
4. 提供使用示例
|
||||
|
||||
请只返回代码,不要额外的解释。
|
||||
"""
|
||||
|
||||
try:
|
||||
response = client.chat.completions.create(
|
||||
model="moonshot-v1-8k",
|
||||
messages=[
|
||||
{
|
||||
"role": "system",
|
||||
"content": "你是一个专业的程序员,擅长编写高质量、可维护的代码。"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": prompt
|
||||
}
|
||||
],
|
||||
max_tokens=800,
|
||||
temperature=0.1
|
||||
)
|
||||
|
||||
return response.choices[0].message.content
|
||||
|
||||
except Exception as e:
|
||||
return f"生成失败: {e}"
|
||||
|
||||
def explain_code(code):
|
||||
"""解释代码功能"""
|
||||
client = get_moonshot_client()
|
||||
|
||||
prompt = f"""
|
||||
请详细解释以下代码的功能、逻辑和关键点:
|
||||
|
||||
```
|
||||
{code}
|
||||
```
|
||||
|
||||
请用中文回答,包括:
|
||||
1. 代码的主要功能
|
||||
2. 关键算法或逻辑
|
||||
3. 可能的改进建议
|
||||
"""
|
||||
|
||||
try:
|
||||
response = client.chat.completions.create(
|
||||
model="moonshot-v1-8k",
|
||||
messages=[
|
||||
{
|
||||
"role": "system",
|
||||
"content": "你是一个代码审查专家,擅长分析和解释代码。"
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": prompt
|
||||
}
|
||||
],
|
||||
max_tokens=600,
|
||||
temperature=0.2
|
||||
)
|
||||
|
||||
return response.choices[0].message.content
|
||||
|
||||
except Exception as e:
|
||||
return f"解释失败: {e}"
|
||||
|
||||
def main():
|
||||
print("=== 月之暗面代码生成示例 ===\n")
|
||||
|
||||
# 示例1:生成排序函数
|
||||
print("1. 生成快速排序函数:")
|
||||
print("-" * 40)
|
||||
code1 = generate_function("实现快速排序算法,对整数列表进行排序")
|
||||
print(code1)
|
||||
print("\n" + "=" * 60 + "\n")
|
||||
|
||||
# 示例2:生成数据处理函数
|
||||
print("2. 生成数据处理函数:")
|
||||
print("-" * 40)
|
||||
code2 = generate_function("读取CSV文件并计算数值列的统计信息(均值、中位数、标准差)")
|
||||
print(code2)
|
||||
print("\n" + "=" * 60 + "\n")
|
||||
|
||||
# 示例3:解释代码
|
||||
sample_code = """
|
||||
def fibonacci(n):
|
||||
if n <= 1:
|
||||
return n
|
||||
return fibonacci(n-1) + fibonacci(n-2)
|
||||
"""
|
||||
|
||||
print("3. 代码解释示例:")
|
||||
print("-" * 40)
|
||||
print("原代码:")
|
||||
print(sample_code)
|
||||
print("\n解释:")
|
||||
explanation = explain_code(sample_code)
|
||||
print(explanation)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
48
tools/ai-tools/scripts/moonshot_config.py
Normal file
48
tools/ai-tools/scripts/moonshot_config.py
Normal file
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
月之暗面 Moonshot AI 配置文件
|
||||
"""
|
||||
|
||||
from openai import OpenAI
|
||||
|
||||
# 月之暗面配置
|
||||
MOONSHOT_API_KEY = "sk-lEk0pAIZ1EDgUkflq2is5uT2VbhuoKGpO5sNOSnuuccsD68r"
|
||||
MOONSHOT_BASE_URL = "https://api.moonshot.cn/v1"
|
||||
|
||||
# 可用的模型
|
||||
MOONSHOT_MODELS = [
|
||||
"moonshot-v1-8k", # 8K 上下文
|
||||
"moonshot-v1-32k", # 32K 上下文
|
||||
"moonshot-v1-128k" # 128K 上下文
|
||||
]
|
||||
|
||||
def get_moonshot_client():
|
||||
"""获取月之暗面客户端"""
|
||||
return OpenAI(
|
||||
api_key=MOONSHOT_API_KEY,
|
||||
base_url=MOONSHOT_BASE_URL
|
||||
)
|
||||
|
||||
def test_connection():
|
||||
"""测试连接"""
|
||||
client = get_moonshot_client()
|
||||
|
||||
try:
|
||||
response = client.chat.completions.create(
|
||||
model="moonshot-v1-8k",
|
||||
messages=[
|
||||
{"role": "user", "content": "你好,请简单介绍一下你自己"}
|
||||
],
|
||||
max_tokens=100
|
||||
)
|
||||
|
||||
print("连接成功!")
|
||||
print("回复:", response.choices[0].message.content)
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"连接失败: {e}")
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_connection()
|
||||
143
tools/ai-tools/scripts/neo4j_queries.cypher
Normal file
143
tools/ai-tools/scripts/neo4j_queries.cypher
Normal file
@@ -0,0 +1,143 @@
|
||||
// 圐圙文化网络 - Neo4j Cypher 查询集合
|
||||
|
||||
// ===== 基础查询 =====
|
||||
|
||||
// 1. 查看所有词汇节点
|
||||
MATCH (w:Word)
|
||||
RETURN w.name, w.category, w.meaning, w.region, w.dynasty
|
||||
ORDER BY w.category, w.name;
|
||||
|
||||
// 2. 查看所有关系类型
|
||||
MATCH ()-[r]-()
|
||||
RETURN DISTINCT type(r) as relationship_types;
|
||||
|
||||
// ===== 圐圙词根网络分析 =====
|
||||
|
||||
// 3. 以"昆仑"为中心的词汇网络
|
||||
MATCH (center:Word {name: '昆仑'})-[r]-(connected:Word)
|
||||
RETURN center, r, connected;
|
||||
|
||||
// 4. 查找所有音转关系
|
||||
MATCH (source:Word)-[r:SOUND_SHIFT]->(target:Word)
|
||||
RETURN source.name as 源词, target.name as 目标词, r.type as 关系类型;
|
||||
|
||||
// 5. 查找音转路径(最多3步)
|
||||
MATCH path = (start:Word {name: '昆仑'})-[:SOUND_SHIFT*1..3]-(end:Word)
|
||||
RETURN
|
||||
start.name as 起点,
|
||||
[node in nodes(path) | node.name] as 路径,
|
||||
end.name as 终点,
|
||||
length(path) as 步数
|
||||
ORDER BY 步数;
|
||||
|
||||
// ===== 语义分析 =====
|
||||
|
||||
// 6. 按类别分组的词汇分布
|
||||
MATCH (w:Word)
|
||||
RETURN w.category as 类别, collect(w.name) as 词汇列表, count(w) as 数量
|
||||
ORDER BY 数量 DESC;
|
||||
|
||||
// 7. 按朝代分组的词汇演化
|
||||
MATCH (w:Word)
|
||||
RETURN w.dynasty as 朝代, collect(w.name) as 词汇, count(w) as 数量
|
||||
ORDER BY
|
||||
CASE w.dynasty
|
||||
WHEN '先秦' THEN 1
|
||||
WHEN '汉' THEN 2
|
||||
WHEN '唐' THEN 3
|
||||
WHEN '宋' THEN 4
|
||||
WHEN '元' THEN 5
|
||||
WHEN '明' THEN 6
|
||||
WHEN '清' THEN 7
|
||||
ELSE 8
|
||||
END;
|
||||
|
||||
// 8. 按地区分布的词汇地理分析
|
||||
MATCH (w:Word)
|
||||
WHERE w.region IS NOT NULL
|
||||
RETURN w.region as 地区, collect(w.name) as 词汇, count(w) as 数量
|
||||
ORDER BY 数量 DESC;
|
||||
|
||||
// ===== 高级分析查询 =====
|
||||
|
||||
// 9. 查找"圐圙"的完整关联网络
|
||||
MATCH (kulue:Word {name: '圐圙'})-[r*1..2]-(related:Word)
|
||||
RETURN kulue, r, related;
|
||||
|
||||
// 10. 查找同时具有音转和语义关系的词汇对
|
||||
MATCH (w1:Word)-[:SOUND_SHIFT]-(w2:Word)
|
||||
MATCH (w1)-[:SEMANTIC]-(w2)
|
||||
RETURN w1.name, w2.name, '既有音转又有语义关系' as 关系特征;
|
||||
|
||||
// 11. 查找每个类别中的核心词汇(关联最多的)
|
||||
MATCH (w:Word)-[r]-(connected:Word)
|
||||
WITH w, count(r) as connections
|
||||
WHERE connections > 1
|
||||
RETURN w.category as 类别, w.name as 核心词汇, w.meaning as 含义, connections as 关联数
|
||||
ORDER BY 类别, connections DESC;
|
||||
|
||||
// 12. 查找跨类别的关联模式
|
||||
MATCH (w1:Word)-[r]-(w2:Word)
|
||||
WHERE w1.category <> w2.category
|
||||
RETURN w1.category as 类别1, w2.category as 类别2, count(r) as 关联数
|
||||
ORDER BY 关联数 DESC;
|
||||
|
||||
// ===== 历史演化分析 =====
|
||||
|
||||
// 13. 三个帝国的词汇分布
|
||||
MATCH (w:Word)
|
||||
WITH w,
|
||||
CASE
|
||||
WHEN w.dynasty IN ['先秦', '秦汉', '汉', '三国', '南北朝'] THEN '长城帝国'
|
||||
WHEN w.dynasty IN ['隋唐', '隋', '唐', '五代', '辽', '金', '夏', '宋'] THEN '运河帝国'
|
||||
WHEN w.dynasty IN ['元', '明', '清', '民国'] THEN '圐圙帝国'
|
||||
ELSE '其他'
|
||||
END as empire
|
||||
RETURN empire as 帝国, collect(w.name) as 词汇, count(w) as 数量;
|
||||
|
||||
// 14. 查找词汇的时空分布模式
|
||||
MATCH (w:Word)
|
||||
RETURN w.dynasty as 朝代, w.region as 地区, collect(w.name) as 词汇
|
||||
ORDER BY w.dynasty, w.region;
|
||||
|
||||
// ===== 可视化查询 =====
|
||||
|
||||
// 15. 生成完整的圐圙网络图(用于可视化)
|
||||
MATCH (w:Word)-[r]-(connected:Word)
|
||||
RETURN w, r, connected;
|
||||
|
||||
// 16. 生成核心概念的星形图
|
||||
MATCH (core:Word {category: '核心'})-[r]-(related:Word)
|
||||
RETURN core, r, related;
|
||||
|
||||
// 17. 生成音转关系的有向图
|
||||
MATCH (source:Word)-[r:SOUND_SHIFT]->(target:Word)
|
||||
RETURN source, r, target;
|
||||
|
||||
// ===== 数据统计 =====
|
||||
|
||||
// 18. 网络统计信息
|
||||
MATCH (w:Word)
|
||||
WITH count(w) as total_words
|
||||
MATCH ()-[r]-()
|
||||
WITH total_words, count(r)/2 as total_relationships
|
||||
MATCH (w:Word)-[r]-(connected:Word)
|
||||
WITH total_words, total_relationships, w, count(r) as degree
|
||||
RETURN
|
||||
total_words as 总词汇数,
|
||||
total_relationships as 总关系数,
|
||||
avg(degree) as 平均度数,
|
||||
max(degree) as 最大度数,
|
||||
min(degree) as 最小度数;
|
||||
|
||||
// 19. 查找孤立节点(没有关系的词汇)
|
||||
MATCH (w:Word)
|
||||
WHERE NOT (w)-[]-()
|
||||
RETURN w.name as 孤立词汇, w.category as 类别;
|
||||
|
||||
// 20. 查找关联度最高的词汇(网络中心)
|
||||
MATCH (w:Word)-[r]-(connected:Word)
|
||||
WITH w, count(r) as degree
|
||||
ORDER BY degree DESC
|
||||
LIMIT 5
|
||||
RETURN w.name as 中心词汇, w.meaning as 含义, degree as 关联度;
|
||||
196
tools/ai-tools/scripts/neo4j_setup.py
Normal file
196
tools/ai-tools/scripts/neo4j_setup.py
Normal file
@@ -0,0 +1,196 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Neo4j 数据库设置和"圐圙"词根网络构建
|
||||
"""
|
||||
|
||||
from neo4j import GraphDatabase
|
||||
import json
|
||||
|
||||
class KulueNetworkBuilder:
|
||||
def __init__(self, uri="bolt://localhost:7687", user="neo4j", password="password"):
|
||||
self.driver = GraphDatabase.driver(uri, auth=(user, password))
|
||||
|
||||
def close(self):
|
||||
self.driver.close()
|
||||
|
||||
def clear_database(self):
|
||||
"""清空数据库"""
|
||||
with self.driver.session() as session:
|
||||
session.run("MATCH (n) DETACH DELETE n")
|
||||
|
||||
def create_kulue_network(self):
|
||||
"""创建圐圙词根网络"""
|
||||
|
||||
# 核心词汇数据
|
||||
kulue_words = [
|
||||
# 地理概念
|
||||
{"name": "昆仑", "category": "地理", "meaning": "神山", "region": "西域", "dynasty": "先秦"},
|
||||
{"name": "祁连", "category": "地理", "meaning": "天山", "region": "河西", "dynasty": "汉"},
|
||||
{"name": "轩辕", "category": "地理", "meaning": "黄帝丘", "region": "中原", "dynasty": "上古"},
|
||||
{"name": "贺兰", "category": "地理", "meaning": "天山", "region": "河套", "dynasty": "唐"},
|
||||
|
||||
# 器物概念
|
||||
{"name": "轱辘", "category": "器物", "meaning": "车轮", "region": "中原", "dynasty": "春秋"},
|
||||
{"name": "辘轳", "category": "器物", "meaning": "井具", "region": "西域", "dynasty": "汉"},
|
||||
{"name": "囫囵", "category": "器物", "meaning": "完整", "region": "中原", "dynasty": "宋"},
|
||||
|
||||
# 政治概念
|
||||
{"name": "库伦", "category": "政治", "meaning": "都城", "region": "蒙古", "dynasty": "元"},
|
||||
{"name": "固伦", "category": "政治", "meaning": "公主", "region": "满洲", "dynasty": "清"},
|
||||
{"name": "克烈", "category": "政治", "meaning": "部落", "region": "蒙古", "dynasty": "元"},
|
||||
|
||||
# 文化概念
|
||||
{"name": "崆峒", "category": "文化", "meaning": "仙山", "region": "陇右", "dynasty": "唐"},
|
||||
{"name": "洪洞", "category": "文化", "meaning": "移民", "region": "晋南", "dynasty": "明"},
|
||||
{"name": "窟窿", "category": "文化", "meaning": "石窟", "region": "西域", "dynasty": "北魏"},
|
||||
|
||||
# 核心概念
|
||||
{"name": "圐圙", "category": "核心", "meaning": "天下", "region": "蒙古", "dynasty": "元"},
|
||||
{"name": "忽里勒台", "category": "核心", "meaning": "大会", "region": "蒙古", "dynasty": "元"},
|
||||
]
|
||||
|
||||
# 创建词汇节点
|
||||
with self.driver.session() as session:
|
||||
for word in kulue_words:
|
||||
session.run("""
|
||||
CREATE (w:Word {
|
||||
name: $name,
|
||||
category: $category,
|
||||
meaning: $meaning,
|
||||
region: $region,
|
||||
dynasty: $dynasty
|
||||
})
|
||||
""", **word)
|
||||
|
||||
# 创建音转关系
|
||||
sound_relations = [
|
||||
("昆仑", "库伦", "音转"),
|
||||
("昆仑", "固伦", "音转"),
|
||||
("昆仑", "克烈", "音转"),
|
||||
("昆仑", "崆峒", "音转"),
|
||||
("昆仑", "洪洞", "音转"),
|
||||
("昆仑", "圐圙", "音转"),
|
||||
("轱辘", "辘轳", "音转"),
|
||||
("轱辘", "囫囵", "音转"),
|
||||
("圐圙", "忽里勒台", "音转"),
|
||||
]
|
||||
|
||||
with self.driver.session() as session:
|
||||
for source, target, relation in sound_relations:
|
||||
session.run("""
|
||||
MATCH (s:Word {name: $source})
|
||||
MATCH (t:Word {name: $target})
|
||||
CREATE (s)-[:SOUND_SHIFT {type: $relation}]->(t)
|
||||
""", source=source, target=target, relation=relation)
|
||||
|
||||
# 创建语义关系
|
||||
semantic_relations = [
|
||||
("昆仑", "祁连", "同义"),
|
||||
("昆仑", "轩辕", "同义"),
|
||||
("昆仑", "贺兰", "同义"),
|
||||
("轱辘", "辘轳", "功能相关"),
|
||||
("库伦", "固伦", "政治相关"),
|
||||
]
|
||||
|
||||
with self.driver.session() as session:
|
||||
for source, target, relation in semantic_relations:
|
||||
session.run("""
|
||||
MATCH (s:Word {name: $source})
|
||||
MATCH (t:Word {name: $target})
|
||||
CREATE (s)-[:SEMANTIC {type: $relation}]->(t)
|
||||
""", source=source, target=target, relation=relation)
|
||||
|
||||
def create_historical_context(self):
|
||||
"""创建历史背景节点"""
|
||||
|
||||
dynasties = [
|
||||
{"name": "先秦", "period": "公元前2070-前221", "empire": "长城"},
|
||||
{"name": "秦汉", "period": "公元前221-220", "empire": "长城"},
|
||||
{"name": "隋唐", "period": "581-907", "empire": "运河"},
|
||||
{"name": "宋元", "period": "960-1368", "empire": "圐圙"},
|
||||
{"name": "明清", "period": "1368-1912", "empire": "圐圙"},
|
||||
]
|
||||
|
||||
with self.driver.session() as session:
|
||||
for dynasty in dynasties:
|
||||
session.run("""
|
||||
CREATE (d:Dynasty {
|
||||
name: $name,
|
||||
period: $period,
|
||||
empire: $empire
|
||||
})
|
||||
""", **dynasty)
|
||||
|
||||
# 创建三个帝国节点
|
||||
empires = [
|
||||
{"name": "长城帝国", "symbol": "长城", "meaning": "华夏大防"},
|
||||
{"name": "运河帝国", "symbol": "运河", "meaning": "南北统一"},
|
||||
{"name": "圐圙帝国", "symbol": "圐圙", "meaning": "天下一家"},
|
||||
]
|
||||
|
||||
with self.driver.session() as session:
|
||||
for empire in empires:
|
||||
session.run("""
|
||||
CREATE (e:Empire {
|
||||
name: $name,
|
||||
symbol: $symbol,
|
||||
meaning: $meaning
|
||||
})
|
||||
""", **empire)
|
||||
|
||||
def query_kulue_network(self):
|
||||
"""查询圐圙网络的示例"""
|
||||
|
||||
queries = {
|
||||
"找到所有与'昆仑'相关的词汇": """
|
||||
MATCH (k:Word {name: '昆仑'})-[r]-(related:Word)
|
||||
RETURN k.name, type(r), related.name, related.meaning
|
||||
""",
|
||||
|
||||
"查找音转路径": """
|
||||
MATCH path = (start:Word)-[:SOUND_SHIFT*1..3]-(end:Word)
|
||||
WHERE start.name = '昆仑'
|
||||
RETURN path
|
||||
""",
|
||||
|
||||
"按类别统计词汇": """
|
||||
MATCH (w:Word)
|
||||
RETURN w.category, count(w) as count
|
||||
ORDER BY count DESC
|
||||
""",
|
||||
|
||||
"查找核心概念的关联": """
|
||||
MATCH (core:Word {category: '核心'})-[r]-(related:Word)
|
||||
RETURN core.name, type(r), related.name, related.category
|
||||
"""
|
||||
}
|
||||
|
||||
with self.driver.session() as session:
|
||||
for description, query in queries.items():
|
||||
print(f"\n=== {description} ===")
|
||||
result = session.run(query)
|
||||
for record in result:
|
||||
print(record)
|
||||
|
||||
def main():
|
||||
# 创建数据库连接
|
||||
builder = KulueNetworkBuilder()
|
||||
|
||||
try:
|
||||
print("清空数据库...")
|
||||
builder.clear_database()
|
||||
|
||||
print("创建圐圙词根网络...")
|
||||
builder.create_kulue_network()
|
||||
|
||||
print("创建历史背景...")
|
||||
builder.create_historical_context()
|
||||
|
||||
print("查询示例...")
|
||||
builder.query_kulue_network()
|
||||
|
||||
finally:
|
||||
builder.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
420
tools/ai-tools/scripts/neo4j_web_app.py
Normal file
420
tools/ai-tools/scripts/neo4j_web_app.py
Normal file
@@ -0,0 +1,420 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
圐圙文化网络 - Web 可视化应用
|
||||
使用 Flask + Neo4j + D3.js
|
||||
"""
|
||||
|
||||
from flask import Flask, render_template, jsonify, request
|
||||
from neo4j import GraphDatabase
|
||||
import json
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
class KulueNetworkAPI:
|
||||
def __init__(self, uri="bolt://localhost:7687", user="neo4j", password="password"):
|
||||
self.driver = GraphDatabase.driver(uri, auth=(user, password))
|
||||
|
||||
def close(self):
|
||||
self.driver.close()
|
||||
|
||||
def get_network_data(self):
|
||||
"""获取完整网络数据用于可视化"""
|
||||
with self.driver.session() as session:
|
||||
# 获取所有节点
|
||||
nodes_result = session.run("""
|
||||
MATCH (w:Word)
|
||||
RETURN w.name as name, w.category as category,
|
||||
w.meaning as meaning, w.region as region, w.dynasty as dynasty
|
||||
""")
|
||||
|
||||
nodes = []
|
||||
for record in nodes_result:
|
||||
nodes.append({
|
||||
'id': record['name'],
|
||||
'name': record['name'],
|
||||
'category': record['category'],
|
||||
'meaning': record['meaning'],
|
||||
'region': record['region'],
|
||||
'dynasty': record['dynasty']
|
||||
})
|
||||
|
||||
# 获取所有关系
|
||||
links_result = session.run("""
|
||||
MATCH (source:Word)-[r]-(target:Word)
|
||||
RETURN source.name as source, target.name as target,
|
||||
type(r) as type, r.type as subtype
|
||||
""")
|
||||
|
||||
links = []
|
||||
processed_pairs = set()
|
||||
|
||||
for record in links_result:
|
||||
source = record['source']
|
||||
target = record['target']
|
||||
|
||||
# 避免重复的无向边
|
||||
pair = tuple(sorted([source, target]))
|
||||
if pair not in processed_pairs:
|
||||
processed_pairs.add(pair)
|
||||
links.append({
|
||||
'source': source,
|
||||
'target': target,
|
||||
'type': record['type'],
|
||||
'subtype': record['subtype']
|
||||
})
|
||||
|
||||
return {'nodes': nodes, 'links': links}
|
||||
|
||||
def search_word(self, word_name):
|
||||
"""搜索特定词汇的关联"""
|
||||
with self.driver.session() as session:
|
||||
result = session.run("""
|
||||
MATCH (center:Word {name: $word})-[r]-(connected:Word)
|
||||
RETURN center, r, connected
|
||||
""", word=word_name)
|
||||
|
||||
data = []
|
||||
for record in result:
|
||||
center = record['center']
|
||||
relation = record['r']
|
||||
connected = record['connected']
|
||||
|
||||
data.append({
|
||||
'center': dict(center),
|
||||
'relation': {
|
||||
'type': relation.type,
|
||||
'properties': dict(relation)
|
||||
},
|
||||
'connected': dict(connected)
|
||||
})
|
||||
|
||||
return data
|
||||
|
||||
def get_categories_stats(self):
|
||||
"""获取类别统计"""
|
||||
with self.driver.session() as session:
|
||||
result = session.run("""
|
||||
MATCH (w:Word)
|
||||
RETURN w.category as category, count(w) as count
|
||||
ORDER BY count DESC
|
||||
""")
|
||||
|
||||
return [{'category': record['category'], 'count': record['count']}
|
||||
for record in result]
|
||||
|
||||
def get_sound_shift_paths(self, start_word):
|
||||
"""获取音转路径"""
|
||||
with self.driver.session() as session:
|
||||
result = session.run("""
|
||||
MATCH path = (start:Word {name: $start})-[:SOUND_SHIFT*1..3]-(end:Word)
|
||||
RETURN [node in nodes(path) | node.name] as path_nodes,
|
||||
length(path) as path_length
|
||||
ORDER BY path_length
|
||||
""", start=start_word)
|
||||
|
||||
return [{'path': record['path_nodes'], 'length': record['path_length']}
|
||||
for record in result]
|
||||
|
||||
# 创建API实例
|
||||
kulue_api = KulueNetworkAPI()
|
||||
|
||||
@app.route('/')
|
||||
def index():
|
||||
"""主页"""
|
||||
return render_template('index.html')
|
||||
|
||||
@app.route('/api/network')
|
||||
def get_network():
|
||||
"""获取网络数据API"""
|
||||
try:
|
||||
data = kulue_api.get_network_data()
|
||||
return jsonify(data)
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
@app.route('/api/search/<word>')
|
||||
def search_word(word):
|
||||
"""搜索词汇API"""
|
||||
try:
|
||||
data = kulue_api.search_word(word)
|
||||
return jsonify(data)
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
@app.route('/api/stats/categories')
|
||||
def get_categories():
|
||||
"""获取类别统计API"""
|
||||
try:
|
||||
data = kulue_api.get_categories_stats()
|
||||
return jsonify(data)
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
@app.route('/api/sound-shift/<word>')
|
||||
def get_sound_shift(word):
|
||||
"""获取音转路径API"""
|
||||
try:
|
||||
data = kulue_api.get_sound_shift_paths(word)
|
||||
return jsonify(data)
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
# HTML 模板
|
||||
html_template = '''
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>圐圙文化网络</title>
|
||||
<script src="https://d3js.org/d3.v7.min.js"></script>
|
||||
<style>
|
||||
body { font-family: Arial, sans-serif; margin: 0; padding: 20px; }
|
||||
.container { max-width: 1200px; margin: 0 auto; }
|
||||
.controls { margin-bottom: 20px; }
|
||||
.network-container { border: 1px solid #ccc; }
|
||||
.node { cursor: pointer; }
|
||||
.link { stroke: #999; stroke-opacity: 0.6; }
|
||||
.tooltip { position: absolute; background: rgba(0,0,0,0.8); color: white;
|
||||
padding: 10px; border-radius: 5px; pointer-events: none; }
|
||||
.legend { margin-top: 20px; }
|
||||
.legend-item { display: inline-block; margin-right: 20px; }
|
||||
.legend-color { width: 20px; height: 20px; display: inline-block; margin-right: 5px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>圐圙文化网络可视化</h1>
|
||||
|
||||
<div class="controls">
|
||||
<input type="text" id="searchInput" placeholder="搜索词汇...">
|
||||
<button onclick="searchWord()">搜索</button>
|
||||
<button onclick="resetView()">重置</button>
|
||||
</div>
|
||||
|
||||
<div id="network" class="network-container"></div>
|
||||
|
||||
<div class="legend" id="legend"></div>
|
||||
|
||||
<div id="info" style="margin-top: 20px;"></div>
|
||||
</div>
|
||||
|
||||
<div id="tooltip" class="tooltip" style="display: none;"></div>
|
||||
|
||||
<script>
|
||||
// 网络可视化代码
|
||||
const width = 1160;
|
||||
const height = 600;
|
||||
|
||||
const svg = d3.select("#network")
|
||||
.append("svg")
|
||||
.attr("width", width)
|
||||
.attr("height", height);
|
||||
|
||||
const g = svg.append("g");
|
||||
|
||||
// 缩放功能
|
||||
const zoom = d3.zoom()
|
||||
.scaleExtent([0.1, 3])
|
||||
.on("zoom", (event) => {
|
||||
g.attr("transform", event.transform);
|
||||
});
|
||||
|
||||
svg.call(zoom);
|
||||
|
||||
// 颜色映射
|
||||
const colorScale = d3.scaleOrdinal()
|
||||
.domain(['地理', '器物', '政治', '文化', '核心'])
|
||||
.range(['#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#1f77b4']);
|
||||
|
||||
let simulation, nodes, links;
|
||||
|
||||
// 加载网络数据
|
||||
async function loadNetwork() {
|
||||
try {
|
||||
const response = await fetch('/api/network');
|
||||
const data = await response.json();
|
||||
|
||||
nodes = data.nodes;
|
||||
links = data.links;
|
||||
|
||||
createVisualization();
|
||||
createLegend();
|
||||
|
||||
} catch (error) {
|
||||
console.error('加载数据失败:', error);
|
||||
}
|
||||
}
|
||||
|
||||
function createVisualization() {
|
||||
// 创建力导向图
|
||||
simulation = d3.forceSimulation(nodes)
|
||||
.force("link", d3.forceLink(links).id(d => d.id).distance(100))
|
||||
.force("charge", d3.forceManyBody().strength(-300))
|
||||
.force("center", d3.forceCenter(width / 2, height / 2));
|
||||
|
||||
// 绘制连线
|
||||
const link = g.append("g")
|
||||
.selectAll("line")
|
||||
.data(links)
|
||||
.enter().append("line")
|
||||
.attr("class", "link")
|
||||
.attr("stroke-width", d => d.type === 'SOUND_SHIFT' ? 3 : 1)
|
||||
.attr("stroke", d => d.type === 'SOUND_SHIFT' ? '#ff0000' : '#999');
|
||||
|
||||
// 绘制节点
|
||||
const node = g.append("g")
|
||||
.selectAll("circle")
|
||||
.data(nodes)
|
||||
.enter().append("circle")
|
||||
.attr("class", "node")
|
||||
.attr("r", d => d.category === '核心' ? 15 : 10)
|
||||
.attr("fill", d => colorScale(d.category))
|
||||
.call(d3.drag()
|
||||
.on("start", dragstarted)
|
||||
.on("drag", dragged)
|
||||
.on("end", dragended));
|
||||
|
||||
// 添加标签
|
||||
const label = g.append("g")
|
||||
.selectAll("text")
|
||||
.data(nodes)
|
||||
.enter().append("text")
|
||||
.text(d => d.name)
|
||||
.attr("font-size", "12px")
|
||||
.attr("dx", 15)
|
||||
.attr("dy", 4);
|
||||
|
||||
// 鼠标事件
|
||||
node.on("mouseover", function(event, d) {
|
||||
d3.select("#tooltip")
|
||||
.style("display", "block")
|
||||
.style("left", (event.pageX + 10) + "px")
|
||||
.style("top", (event.pageY - 10) + "px")
|
||||
.html(`<strong>${d.name}</strong><br/>
|
||||
类别: ${d.category}<br/>
|
||||
含义: ${d.meaning}<br/>
|
||||
地区: ${d.region}<br/>
|
||||
朝代: ${d.dynasty}`);
|
||||
})
|
||||
.on("mouseout", function() {
|
||||
d3.select("#tooltip").style("display", "none");
|
||||
})
|
||||
.on("click", function(event, d) {
|
||||
searchWord(d.name);
|
||||
});
|
||||
|
||||
// 更新位置
|
||||
simulation.on("tick", () => {
|
||||
link
|
||||
.attr("x1", d => d.source.x)
|
||||
.attr("y1", d => d.source.y)
|
||||
.attr("x2", d => d.target.x)
|
||||
.attr("y2", d => d.target.y);
|
||||
|
||||
node
|
||||
.attr("cx", d => d.x)
|
||||
.attr("cy", d => d.y);
|
||||
|
||||
label
|
||||
.attr("x", d => d.x)
|
||||
.attr("y", d => d.y);
|
||||
});
|
||||
}
|
||||
|
||||
function createLegend() {
|
||||
const legend = d3.select("#legend");
|
||||
const categories = ['地理', '器物', '政治', '文化', '核心'];
|
||||
|
||||
categories.forEach(category => {
|
||||
const item = legend.append("div").attr("class", "legend-item");
|
||||
item.append("div")
|
||||
.attr("class", "legend-color")
|
||||
.style("background-color", colorScale(category));
|
||||
item.append("span").text(category);
|
||||
});
|
||||
}
|
||||
|
||||
// 拖拽功能
|
||||
function dragstarted(event, d) {
|
||||
if (!event.active) simulation.alphaTarget(0.3).restart();
|
||||
d.fx = d.x;
|
||||
d.fy = d.y;
|
||||
}
|
||||
|
||||
function dragged(event, d) {
|
||||
d.fx = event.x;
|
||||
d.fy = event.y;
|
||||
}
|
||||
|
||||
function dragended(event, d) {
|
||||
if (!event.active) simulation.alphaTarget(0);
|
||||
d.fx = null;
|
||||
d.fy = null;
|
||||
}
|
||||
|
||||
// 搜索功能
|
||||
async function searchWord(word) {
|
||||
if (!word) word = document.getElementById('searchInput').value;
|
||||
if (!word) return;
|
||||
|
||||
try {
|
||||
const response = await fetch(`/api/search/${word}`);
|
||||
const data = await response.json();
|
||||
|
||||
// 高亮相关节点
|
||||
d3.selectAll(".node")
|
||||
.attr("stroke", d => {
|
||||
const isRelated = data.some(item =>
|
||||
item.center.name === d.name || item.connected.name === d.name
|
||||
);
|
||||
return isRelated ? "#000" : "none";
|
||||
})
|
||||
.attr("stroke-width", d => {
|
||||
const isRelated = data.some(item =>
|
||||
item.center.name === d.name || item.connected.name === d.name
|
||||
);
|
||||
return isRelated ? 3 : 0;
|
||||
});
|
||||
|
||||
// 显示搜索结果
|
||||
const info = d3.select("#info");
|
||||
info.html(`<h3>搜索结果: ${word}</h3>`);
|
||||
|
||||
if (data.length > 0) {
|
||||
const list = info.append("ul");
|
||||
data.forEach(item => {
|
||||
list.append("li")
|
||||
.html(`${item.connected.name} (${item.relation.type}) - ${item.connected.meaning}`);
|
||||
});
|
||||
} else {
|
||||
info.append("p").text("未找到相关词汇");
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('搜索失败:', error);
|
||||
}
|
||||
}
|
||||
|
||||
function resetView() {
|
||||
d3.selectAll(".node")
|
||||
.attr("stroke", "none")
|
||||
.attr("stroke-width", 0);
|
||||
|
||||
d3.select("#info").html("");
|
||||
document.getElementById('searchInput').value = "";
|
||||
}
|
||||
|
||||
// 页面加载时初始化
|
||||
loadNetwork();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
'''
|
||||
|
||||
# 创建模板目录和文件
|
||||
import os
|
||||
os.makedirs('templates', exist_ok=True)
|
||||
with open('templates/index.html', 'w', encoding='utf-8') as f:
|
||||
f.write(html_template)
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True, host='0.0.0.0', port=5000)
|
||||
55
tools/ai-tools/scripts/ocr_extractor.py
Normal file
55
tools/ai-tools/scripts/ocr_extractor.py
Normal file
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
OCR 文字提取工具
|
||||
需要安装: pip install pytesseract pillow
|
||||
"""
|
||||
|
||||
try:
|
||||
import pytesseract
|
||||
from PIL import Image
|
||||
import os
|
||||
|
||||
def extract_text_from_image(image_path):
|
||||
"""从图片中提取文字"""
|
||||
try:
|
||||
# 打开图片
|
||||
image = Image.open(image_path)
|
||||
|
||||
# 使用 OCR 提取文字
|
||||
text = pytesseract.image_to_string(image, lang='chi_sim+eng')
|
||||
|
||||
return text.strip()
|
||||
|
||||
except Exception as e:
|
||||
return f"OCR 失败: {e}"
|
||||
|
||||
def batch_ocr_images(image_dir, output_file="ocr_results.md"):
|
||||
"""批量 OCR 图片"""
|
||||
results = []
|
||||
|
||||
# 获取所有 PNG 图片
|
||||
png_files = [f for f in os.listdir(image_dir) if f.endswith('.png')]
|
||||
png_files.sort()
|
||||
|
||||
for filename in png_files:
|
||||
image_path = os.path.join(image_dir, filename)
|
||||
print(f"正在 OCR: {filename}")
|
||||
|
||||
text = extract_text_from_image(image_path)
|
||||
|
||||
if text:
|
||||
results.append(f"## {filename}\n\n```\n{text}\n```\n\n---\n")
|
||||
else:
|
||||
results.append(f"## {filename}\n\n*无文字内容*\n\n---\n")
|
||||
|
||||
# 保存结果
|
||||
with open(output_file, 'w', encoding='utf-8') as f:
|
||||
f.write("# OCR 文字提取结果\n\n")
|
||||
f.writelines(results)
|
||||
|
||||
print(f"OCR 完成,结果保存到: {output_file}")
|
||||
|
||||
except ImportError:
|
||||
print("需要安装 OCR 依赖:")
|
||||
print("pip install pytesseract pillow")
|
||||
print("还需要安装 tesseract 引擎")
|
||||
82
tools/ai-tools/scripts/openai_image_analyzer.py
Normal file
82
tools/ai-tools/scripts/openai_image_analyzer.py
Normal file
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
使用 OpenAI GPT-4V 分析图片
|
||||
需要设置 OPENAI_API_KEY 环境变量
|
||||
"""
|
||||
|
||||
import base64
|
||||
import os
|
||||
from openai import OpenAI
|
||||
|
||||
def encode_image(image_path):
|
||||
"""将图片编码为 base64"""
|
||||
with open(image_path, "rb") as image_file:
|
||||
return base64.b64encode(image_file.read()).decode('utf-8')
|
||||
|
||||
def analyze_image_with_gpt4v(image_path, prompt="请详细描述这张图片的内容"):
|
||||
"""使用 GPT-4V 分析图片"""
|
||||
# 检查 API key
|
||||
api_key = os.getenv('OPENAI_API_KEY')
|
||||
if not api_key:
|
||||
return "请设置 OPENAI_API_KEY 环境变量"
|
||||
|
||||
client = OpenAI(api_key=api_key)
|
||||
|
||||
# 编码图片
|
||||
base64_image = encode_image(image_path)
|
||||
|
||||
try:
|
||||
response = client.chat.completions.create(
|
||||
model="gpt-4o", # 或 "gpt-4-vision-preview"
|
||||
messages=[
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{"type": "text", "text": prompt},
|
||||
{
|
||||
"type": "image_url",
|
||||
"image_url": {
|
||||
"url": f"data:image/png;base64,{base64_image}"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
max_tokens=1000
|
||||
)
|
||||
|
||||
return response.choices[0].message.content
|
||||
|
||||
except Exception as e:
|
||||
return f"分析失败: {e}"
|
||||
|
||||
# 简单的本地图片描述工具
|
||||
def describe_image_locally(image_path):
|
||||
"""基于文件名和位置推测图片内容"""
|
||||
filename = os.path.basename(image_path)
|
||||
|
||||
# 根据文件名模式推测内容
|
||||
descriptions = {
|
||||
"image-000": "可能是标题页或封面",
|
||||
"image-001": "可能是目录或章节导航",
|
||||
"image-002": "可能是地图或示意图",
|
||||
# 可以根据实际情况添加更多
|
||||
}
|
||||
|
||||
base_name = filename.replace('.png', '')
|
||||
if base_name in descriptions:
|
||||
return descriptions[base_name]
|
||||
else:
|
||||
return f"图片 {filename},需要进一步分析"
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 测试单张图片
|
||||
test_image = "images/0 序:令人又敬又畏的_忽里勒台_大会/image-000.png"
|
||||
if os.path.exists(test_image):
|
||||
print("本地描述:", describe_image_locally(test_image))
|
||||
|
||||
# 如果有 OpenAI API key,尝试 GPT-4V
|
||||
if os.getenv('OPENAI_API_KEY'):
|
||||
print("GPT-4V 分析:", analyze_image_with_gpt4v(test_image))
|
||||
else:
|
||||
print("提示:设置 OPENAI_API_KEY 可使用 GPT-4V 分析")
|
||||
26
tools/ai-tools/scripts/setup_codex.sh
Normal file
26
tools/ai-tools/scripts/setup_codex.sh
Normal file
@@ -0,0 +1,26 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "OpenAI Codex 安装和配置脚本"
|
||||
echo "================================"
|
||||
|
||||
# 激活虚拟环境
|
||||
echo "激活虚拟环境..."
|
||||
source codex_env/bin/activate
|
||||
|
||||
# 检查安装
|
||||
echo "检查 OpenAI 库安装..."
|
||||
python -c "import openai; print(f'OpenAI 版本: {openai.__version__}')"
|
||||
|
||||
# 提示设置 API key
|
||||
echo ""
|
||||
echo "请设置你的 OpenAI API Key:"
|
||||
echo "1. 访问 https://platform.openai.com/api-keys"
|
||||
echo "2. 创建一个新的 API key"
|
||||
echo "3. 运行以下命令设置环境变量:"
|
||||
echo " export OPENAI_API_KEY='your-api-key-here'"
|
||||
echo ""
|
||||
echo "或者将其添加到你的 ~/.bashrc 或 ~/.zshrc 文件中"
|
||||
echo ""
|
||||
echo "测试安装:"
|
||||
echo "python codex_example.py"
|
||||
echo "python codex_chat_example.py"
|
||||
62
tools/ai-tools/scripts/update_image_references.py
Normal file
62
tools/ai-tools/scripts/update_image_references.py
Normal file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
更新Markdown文件中的图片引用
|
||||
将"下图"、"上图"、"图中"等文字引用替换为实际的图片链接
|
||||
"""
|
||||
|
||||
import re
|
||||
import os
|
||||
|
||||
def update_image_references(markdown_file, image_dir):
|
||||
"""更新Markdown文件中的图片引用"""
|
||||
|
||||
# 读取Markdown文件
|
||||
with open(markdown_file, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
# 获取图片文件列表
|
||||
image_files = [f for f in os.listdir(image_dir) if f.endswith('.png')]
|
||||
image_files.sort() # 按文件名排序
|
||||
|
||||
print(f"找到 {len(image_files)} 张图片")
|
||||
|
||||
# 先清理已有的图片引用(避免重复)
|
||||
content = re.sub(r'!\[.*?\]\([^)]+\)', '', content)
|
||||
|
||||
# 图片引用模式 - 更精确的匹配
|
||||
patterns = [
|
||||
(r'(?<!!)\b下图\b', '![下图]'),
|
||||
(r'(?<!!)\b上图\b', '![上图]'),
|
||||
(r'(?<!!)\b图中\b', '![图中]'),
|
||||
(r'(?<!!)\b此图\b', '![此图]'),
|
||||
(r'(?<!!)\b该图\b', '![该图]'),
|
||||
(r'(?<!!)\b图片\b', '![图片]'),
|
||||
(r'(?<!!)\b图像\b', '![图像]'),
|
||||
]
|
||||
|
||||
# 替换图片引用
|
||||
image_index = 0
|
||||
for pattern, replacement in patterns:
|
||||
# 找到所有匹配的位置
|
||||
matches = list(re.finditer(pattern, content))
|
||||
|
||||
for i, match in enumerate(matches):
|
||||
if image_index < len(image_files):
|
||||
# 替换为实际的图片链接
|
||||
image_path = f"{image_dir}/{image_files[image_index]}"
|
||||
new_reference = f"{replacement}({image_path})"
|
||||
content = content.replace(match.group(), new_reference, 1)
|
||||
image_index += 1
|
||||
print(f"替换 '{match.group()}' -> '{new_reference}'")
|
||||
|
||||
# 保存更新后的文件
|
||||
with open(markdown_file, 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
|
||||
print(f"更新完成,共替换了 {image_index} 个图片引用")
|
||||
|
||||
if __name__ == "__main__":
|
||||
markdown_file = "/home/ben/code/huhan3000/converted/0_序_令人又敬又畏的_忽里勒台_大会.md"
|
||||
image_dir = "/home/ben/code/huhan3000/images/0_序"
|
||||
|
||||
update_image_references(markdown_file, image_dir)
|
||||
757
tools/ai-tools/序章图片分析.md
Normal file
757
tools/ai-tools/序章图片分析.md
Normal file
@@ -0,0 +1,757 @@
|
||||
# 图片分析结果
|
||||
|
||||
## image-000.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-001.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-002.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-003.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-004.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-005.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-006.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-007.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-008.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-009.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-010.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-011.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-012.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-013.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-014.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-015.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-016.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-017.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-018.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-019.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-020.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-021.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-022.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-023.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-024.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-025.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-026.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-027.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-028.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-029.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-030.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-031.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-032.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-033.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-034.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-035.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-036.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-037.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-038.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-039.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-040.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-041.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-042.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-043.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-044.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-045.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-046.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-047.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-048.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-049.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-050.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-051.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-052.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-053.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-054.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-055.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-056.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-057.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-058.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-059.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-060.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-061.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-062.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-063.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-064.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-065.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-066.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-067.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-068.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-069.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-070.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-071.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-072.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-073.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-074.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-075.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-076.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-077.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-078.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-079.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-080.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-081.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-082.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-083.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-084.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-085.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-086.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-087.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-088.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-089.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-090.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-091.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-092.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-093.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-094.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-095.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-096.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-097.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-098.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-099.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-100.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-101.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-102.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-103.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-104.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-105.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-106.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-107.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-108.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-109.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-110.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-111.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-112.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-113.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-114.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-115.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-116.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-117.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-118.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-119.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-120.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-121.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-122.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-123.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-124.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-125.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-126.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-127.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-128.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-129.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-130.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-131.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-132.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-133.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-134.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-135.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-136.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-137.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-138.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-139.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-140.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-141.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-142.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-143.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-144.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-145.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-146.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-147.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-148.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-149.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
## image-150.png
|
||||
|
||||
分析失败: Error code: 400 - {'error': {'message': 'Invalid request: Image input not supported for model moonshot-v1-8k', 'type': 'invalid_request_error'}}
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user