Files
cutThenThink/examples/ai_example.py

360 lines
9.4 KiB
Python
Raw Permalink Normal View History

"""
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()