创建工程
This commit is contained in:
40
src/config.py
Normal file
40
src/config.py
Normal file
@@ -0,0 +1,40 @@
|
||||
"""Configuration loader."""
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
CONFIG_PATH = Path(__file__).parent.parent / "config.json"
|
||||
|
||||
DEFAULT_CONFIG: dict[str, str] = {
|
||||
"language": "Chinese",
|
||||
"raw_dir": "raw",
|
||||
"wiki_dir": "wiki",
|
||||
}
|
||||
|
||||
|
||||
def load_config() -> dict[str, str]:
|
||||
"""
|
||||
加载项目配置。
|
||||
|
||||
返回
|
||||
-------
|
||||
dict[str, str]
|
||||
配置字典,包含 language、raw_dir、wiki_dir 等键。
|
||||
"""
|
||||
if CONFIG_PATH.is_file():
|
||||
with CONFIG_PATH.open(encoding="utf-8") as f:
|
||||
user_config = json.load(f)
|
||||
config = {**DEFAULT_CONFIG, **user_config}
|
||||
else:
|
||||
config = DEFAULT_CONFIG.copy()
|
||||
|
||||
return config
|
||||
|
||||
|
||||
def get_language() -> str | None:
|
||||
"""获取配置的语言设置,"auto" 返回 None 以启用自动检测。"""
|
||||
config = load_config()
|
||||
language = config.get("language", "auto")
|
||||
if language.lower() == "auto":
|
||||
return None
|
||||
return language
|
||||
115
src/main.py
Normal file
115
src/main.py
Normal file
@@ -0,0 +1,115 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# 辅助函数
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def language_rule(source_content: str, configured_language: str | None = None) -> str:
|
||||
"""
|
||||
生成语言规则提示。
|
||||
|
||||
参数
|
||||
----------
|
||||
source_content : str
|
||||
用于语言检测回退的源文档文本。
|
||||
configured_language : str | None
|
||||
明确配置的输出语言(如 "Chinese"、"English"、"auto")。
|
||||
传入 ``None`` 或 ``"auto"`` 以自动检测。
|
||||
|
||||
返回
|
||||
-------
|
||||
str
|
||||
语言规则提示字符串。
|
||||
"""
|
||||
if configured_language and configured_language.lower() != "auto":
|
||||
return f"使用 {configured_language} 语言输出分析报告。"
|
||||
|
||||
# 简单的语言检测回退
|
||||
if source_content and any("\u4e00" <= char <= "\u9fff" for char in source_content[:500]):
|
||||
return "源文档包含中文内容,使用简体中文输出分析报告。"
|
||||
|
||||
return "使用与源文档相同的语言输出分析报告。"
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 主函数:build_analysis_prompt
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def build_analysis_prompt(
|
||||
purpose: str,
|
||||
index: str,
|
||||
source_content: str = "",
|
||||
configured_language: str | None = None,
|
||||
) -> str:
|
||||
"""
|
||||
第一步提示:AI 阅读源文档并生成结构化分析报告。
|
||||
这是「讨论」步骤——AI 在撰写 wiki 页面之前先对源文档进行推理。
|
||||
|
||||
参数
|
||||
----------
|
||||
purpose : str
|
||||
wiki/purpose.md 的内容(可能为空)。
|
||||
index : str
|
||||
wiki/index.md 的内容(可能为空)。
|
||||
source_content : str
|
||||
用于语言检测回退的源文档文本。
|
||||
configured_language : str | None
|
||||
显式覆盖语言设置。传入 ``None`` 时从配置文件读取。
|
||||
|
||||
返回
|
||||
-------
|
||||
str
|
||||
完整的系统提示字符串。
|
||||
"""
|
||||
from config import get_language
|
||||
|
||||
if configured_language is None:
|
||||
configured_language = get_language()
|
||||
parts: list[str] = [
|
||||
"你是一位专业研究分析师。阅读源文档并产出一份结构化的分析报告。",
|
||||
"不要输出思维链、隐藏推理或思考过程。在内部进行推理,只撰写简洁的最终分析。",
|
||||
"",
|
||||
language_rule(source_content, configured_language),
|
||||
"",
|
||||
"你的分析需要包含:",
|
||||
"",
|
||||
"## 关键实体",
|
||||
"列出文档中提到的人物、组织、产品、数据集、工具、芯片、算法等。对于每一项:",
|
||||
"- 名称和类型",
|
||||
"- 在源文档中的角色(核心还是边缘)",
|
||||
"- 是否可能已存在于 wiki 中(查阅索引)",
|
||||
"",
|
||||
"## 关键概念",
|
||||
"列出理论、方法、技术、现象。对于每一项:",
|
||||
"- 名称和简要定义",
|
||||
"- 为什么在源文档中重要",
|
||||
"- 是否可能已存在于 wiki 中",
|
||||
"",
|
||||
"## 主要论点与发现",
|
||||
"- 核心主张或结果是什么?",
|
||||
"- 有什么证据支持这些主张?",
|
||||
"- 证据的强度如何?",
|
||||
"",
|
||||
"## 与现有 Wiki 的关联",
|
||||
"- 源文档与哪些现有页面相关?",
|
||||
"- 它是否强化、挑战或扩展了现有知识?",
|
||||
"",
|
||||
"## 矛盾与张力",
|
||||
"- 源文档中是否有任何内容与现有 wiki 内容冲突?",
|
||||
"- 是否存在内部矛盾或注意事项?",
|
||||
"",
|
||||
"## 建议",
|
||||
"- 应该创建或更新哪些 wiki 页面?",
|
||||
"- 应该强调什么,弱化什么?",
|
||||
"- 是否有任何需要向用户指出的开放性问题?",
|
||||
"",
|
||||
"分析要全面但简洁,专注于真正重要的内容。",
|
||||
"",
|
||||
"如果提供了文件夹上下文,请将其作为分类的提示——文件夹结构通常反映了用户的组织意图(例如,'papers/energy' 表示该文件是与能源相关的论文)。",
|
||||
"",
|
||||
f"## Wiki 目的(供参考)\n{purpose}" if purpose else "",
|
||||
(f"## 当前 Wiki 索引(用于检查现有内容)\n{index}" if index else ""),
|
||||
]
|
||||
|
||||
# 过滤空字符串并用换行符连接
|
||||
return "\n".join(part for part in parts if part)
|
||||
Reference in New Issue
Block a user