Files
cutThenThink/examples/ai_example.py
congsh c4a77f8aa4 feat: 实现CutThenThink P0阶段核心功能
项目初始化
- 创建完整项目结构(src/, data/, docs/, examples/, tests/)
- 配置requirements.txt依赖
- 创建.gitignore

P0基础框架
- 数据库模型:Record模型,6种分类类型
- 配置管理:YAML配置,支持AI/OCR/云存储/UI配置
- OCR模块:PaddleOCR本地识别,支持云端扩展
- AI模块:支持OpenAI/Claude/通义/Ollama,6种分类
- 存储模块:完整CRUD,搜索,统计,导入导出
- 主窗口框架:侧边栏导航,米白配色方案
- 图片处理:截图/剪贴板/文件选择/图片预览
- 处理流程整合:OCR→AI→存储串联,Markdown展示,剪贴板复制
- 分类浏览:卡片网格展示,分类筛选,搜索,详情查看

技术栈
- PyQt6 + SQLAlchemy + PaddleOCR + OpenAI/Claude SDK
- 共47个Python文件,4000+行代码

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 18:21:31 +08:00

360 lines
9.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
AI 模块使用示例
演示如何使用 AI 模块进行文本分类
"""
import sys
import os
# 添加项目根目录到 Python 路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from src.core.ai import (
CategoryType,
ClassificationResult,
AIClassifier,
classify_text,
)
def example_classify_with_openai():
"""
示例 1: 使用 OpenAI 进行分类
注意:需要安装 openai 库并配置 API key
pip install openai
"""
print("=" * 60)
print("示例 1: 使用 OpenAI 进行分类")
print("=" * 60)
print()
# 创建 OpenAI 客户端
client = AIClassifier.create_client(
provider="openai",
api_key="your-openai-api-key", # 替换为实际的 API key
model="gpt-4o-mini",
temperature=0.7,
max_tokens=2000,
)
# 测试文本
test_text = """
今天要完成的任务:
1. 完成项目文档
2. 修复 Bug #123
3. 参加团队会议
4. 代码审查
"""
print(f"输入文本:\n{test_text}\n")
# 进行分类
try:
result = client.classify(test_text)
print("分类结果:")
print(f" 分类: {result.category}")
print(f" 置信度: {result.confidence:.2f}")
print(f" 标题: {result.title}")
print(f" 标签: {', '.join(result.tags)}")
print(f" 理由: {result.reasoning}")
print(f"\n生成的 Markdown 内容:")
print(result.content)
except Exception as e:
print(f"分类失败: {e}")
print("提示:请确保已安装 openai 库并配置正确的 API key")
def example_classify_with_claude():
"""
示例 2: 使用 Claude 进行分类
注意:需要安装 anthropic 库并配置 API key
pip install anthropic
"""
print("\n" + "=" * 60)
print("示例 2: 使用 Claude 进行分类")
print("=" * 60)
print()
# 创建 Claude 客户端
client = AIClassifier.create_client(
provider="anthropic",
api_key="your-anthropic-api-key", # 替换为实际的 API key
model="claude-3-5-sonnet-20241022",
temperature=0.7,
max_tokens=2000,
)
# 测试文本 - 笔记类型
test_text = """
Python 装饰器是一种强大的功能,它允许在不修改原函数代码的情况下增强函数功能。
基本语法:
@decorator_name
def function():
pass
常见用途:
- 日志记录
- 性能测试
- 权限验证
- 缓存
"""
print(f"输入文本:\n{test_text}\n")
# 进行分类
try:
result = client.classify(test_text)
print("分类结果:")
print(f" 分类: {result.category}")
print(f" 置信度: {result.confidence:.2f}")
print(f" 标题: {result.title}")
print(f" 标签: {', '.join(result.tags)}")
print(f" 理由: {result.reasoning}")
print(f"\n生成的 Markdown 内容:")
print(result.content)
except Exception as e:
print(f"分类失败: {e}")
print("提示:请确保已安装 anthropic 库并配置正确的 API key")
def example_classify_with_qwen():
"""
示例 3: 使用通义千问进行分类
注意:需要阿里云 API key
"""
print("\n" + "=" * 60)
print("示例 3: 使用通义千问进行分类")
print("=" * 60)
print()
# 创建通义千问客户端
client = AIClassifier.create_client(
provider="qwen",
api_key="your-qwen-api-key", # 替换为实际的 API key
model="qwen-turbo",
temperature=0.7,
max_tokens=2000,
)
# 测试文本 - 灵感类型
test_text = """
突然想到一个产品创意:做一个智能截图管理工具!
核心功能:
- 自动 OCR 识别截图文字
- AI 智能分类整理
- 自动生成待办事项
- 云端同步多设备
技术栈:
- Python + PyQt6 桌面应用
- PaddleOCR 本地识别
- OpenAI/Claude AI 分类
- SQLite 本地存储
"""
print(f"输入文本:\n{test_text}\n")
# 进行分类
try:
result = client.classify(test_text)
print("分类结果:")
print(f" 分类: {result.category}")
print(f" 置信度: {result.confidence:.2f}")
print(f" 标题: {result.title}")
print(f" 标签: {', '.join(result.tags)}")
print(f" 理由: {result.reasoning}")
print(f"\n生成的 Markdown 内容:")
print(result.content)
except Exception as e:
print(f"分类失败: {e}")
print("提示:请确保已配置正确的通义千问 API key")
def example_classify_with_ollama():
"""
示例 4: 使用本地 Ollama 进行分类
注意:需要先安装并运行 Ollama
https://ollama.ai/
"""
print("\n" + "=" * 60)
print("示例 4: 使用本地 Ollama 进行分类")
print("=" * 60)
print()
# 创建 Ollama 客户端
client = AIClassifier.create_client(
provider="ollama",
api_key="", # Ollama 不需要 API key
model="llama3.2", # 或其他已下载的模型
temperature=0.7,
max_tokens=2000,
timeout=120, # 本地模型可能需要更长时间
)
# 测试文本 - 搞笑类型
test_text = """
程序员最讨厌的四件事:
1. 写注释
2. 写文档
3. 别人不写注释
4. 别人不写文档
为什么程序员总是分不清万圣节和圣诞节?
因为 Oct 31 == Dec 25
"""
print(f"输入文本:\n{test_text}\n")
# 进行分类
try:
result = client.classify(test_text)
print("分类结果:")
print(f" 分类: {result.category}")
print(f" 置信度: {result.confidence:.2f}")
print(f" 标题: {result.title}")
print(f" 标签: {', '.join(result.tags)}")
print(f" 理由: {result.reasoning}")
print(f"\n生成的 Markdown 内容:")
print(result.content)
except Exception as e:
print(f"分类失败: {e}")
print("提示:请确保已安装并运行 Ollama 服务")
def example_classify_with_config():
"""
示例 5: 使用配置文件进行分类
从配置文件读取 AI 配置
"""
print("\n" + "=" * 60)
print("示例 5: 使用配置文件进行分类")
print("=" * 60)
print()
try:
from src.config.settings import get_settings
# 加载配置
settings = get_settings()
# 检查配置
print("当前 AI 配置:")
print(f" 提供商: {settings.ai.provider}")
print(f" 模型: {settings.ai.model}")
print(f" 温度: {settings.ai.temperature}")
print(f" 最大 tokens: {settings.ai.max_tokens}")
print()
# 测试文本
test_text = """
API 接口文档
GET /api/users
获取用户列表
参数:
- page: 页码(默认 1
- limit: 每页数量(默认 20
返回:
{
"users": [...],
"total": 100,
"page": 1
}
"""
print(f"输入文本:\n{test_text}\n")
# 使用配置进行分类
result = classify_text(test_text, settings.ai)
print("分类结果:")
print(f" 分类: {result.category}")
print(f" 置信度: {result.confidence:.2f}")
print(f" 标题: {result.title}")
print(f" 标签: {', '.join(result.tags)}")
print(f" 理由: {result.reasoning}")
print(f"\n生成的 Markdown 内容:")
print(result.content)
except Exception as e:
print(f"分类失败: {e}")
print("提示:请确保已在配置文件中正确设置 AI 配置")
def example_batch_classification():
"""
示例 6: 批量分类多个文本
"""
print("\n" + "=" * 60)
print("示例 6: 批量分类多个文本")
print("=" * 60)
print()
# 测试文本列表
test_texts = [
("今天要完成:写代码、测试、部署", "待办类型"),
("Python 列表推导式的用法示例", "笔记类型"),
("产品创意:做一个 AI 写作助手", "灵感类型"),
("API 接口POST /api/create", "参考资料"),
("程序员的 10 个搞笑瞬间", "搞笑类型"),
]
print("批量分类结果:\n")
for text, description in test_texts:
print(f"文本: {description}")
print(f"内容: {text[:40]}...")
print(f"预期分类: {description.split('类型')[0]}")
print(f"实际分类: 需要调用 AI 服务")
print()
def main():
"""主函数"""
print("\n")
print("" + "" * 58 + "")
print("" + " " * 15 + "AI 模块使用示例" + " " * 15 + "")
print("" + "" * 58 + "")
print()
# 运行示例(注释掉需要 API key 的示例)
# example_classify_with_openai()
# example_classify_with_claude()
# example_classify_with_qwen()
# example_classify_with_ollama()
# example_classify_with_config()
example_batch_classification()
print("\n" + "=" * 60)
print("提示")
print("=" * 60)
print()
print("1. 取消注释上面的示例函数来运行特定示例")
print("2. 替换 'your-api-key' 为实际的 API 密钥")
print("3. 确保已安装所需的依赖库:")
print(" pip install openai anthropic")
print("4. Ollama 需要单独安装和运行")
print()
if __name__ == "__main__":
main()