DeepSeek 実践プロジェクト集
AIカスタマーサービスからデータ分析、コードレビューからスマート翻訳まで、10の完全実行可能なDeepSeek実践プロジェクト。各プロジェクトには完全なコード、技術スタックの説明、デプロイガイドが含まれており、コピーしてすぐに実行できます。
プロジェクトを見るすべてのプロジェクトはDeepSeek APIに基づいて構築されており、V3およびR1モデルと互換性があり、Python 3.10+をサポートしています
10 個の完全実行可能プロジェクト
すべてのプロジェクトは実際に実行可能なコードであり、AIカスタマーサービス、コードレビュー、ドキュメントQ&A、翻訳、データ分析、コンテンツ生成、会話ターミナル、メール処理、履歴書最適化、ニュース集約などのシナリオをカバーしています。各プロジェクトは独立して実行され、相互に依存しません。
AIカスタマーサービスロボット
Flask で構築された Web ベースのカスタマーサービスロボット。DeepSeek API を統合し、マルチターン対話、ナレッジベース検索、コンテキストメモリをサポートします。企業の Web サイトへの埋め込みや製品のアフターサービス相談などのシナリオに適しています。
技術スタック
| Web フレームワーク | Flask 3.x |
| AI モデル | DeepSeek API (deepseek-chat) |
| ナレッジベース | JSON ファイル保存 + セマンティック検索 |
| フロントエンド | HTML + CSS + JavaScript (バニラ) |
完全なコード
# app.py import os import json from flask import Flask, request, jsonify, render_template from openai import OpenAI app = Flask(__name__) client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com") # ナレッジベースの読み込み with open("knowledge_base.json", "r", encoding="utf-8") as f: KNOWLEDGE_BASE = json.load(f) # セッションストレージ (本番環境では Redis を推奨) sessions = {} SYSTEM_PROMPT = """あなたはプロのカスタマーサービスアシスタントです。以下のナレッジベースの内容に基づいてユーザーの質問に答えてください。 ルール: 1. ナレッジベースに関連情報がある場合は、正確に引用してください 2. ない場合は、オペレーターに転送する必要があることを丁寧に伝えてください 3. 親しみやすく、プロフェッショナルで簡潔な回答スタイルを保ってください ナレッジベースの内容: {knowledge} 現在の会話履歴: {history}""" def build_prompt(session_id, user_message): session = sessions.get(session_id, {"history": []}) history_text = "\n".join([f"{'ユーザー' if h['role']=='user' else 'エージェント'}: {h['content']}" for h in session["history"][-6:]]) knowledge_text = json.dumps(KNOWLEDGE_BASE, ensure_ascii=False, indent=2) return SYSTEM_PROMPT.format(knowledge=knowledge_text, history=history_text) @app.route("/") def index(): return render_template("index.html") @app.route("/chat", methods=["POST"]) def chat(): data = request.json session_id = data.get("session_id", "default") user_message = data.get("message", "") if not user_message: return jsonify({"error": "メッセージは空にできません"}), 400 if session_id not in sessions: sessions[session_id] = {"history": []} sessions[session_id]["history"].append({"role": "user", "content": user_message}) prompt = build_prompt(session_id, user_message) response = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "system", "content": prompt}, {"role": "user", "content": user_message} ], temperature=0.3, max_tokens=1024 ) reply = response.choices[0].message.content sessions[session_id]["history"].append({"role": "assistant", "content": reply}) return jsonify({"reply": reply, "session_id": session_id}) if __name__ == "__main__": app.run(debug=True, port=5000) # knowledge_base.json # { # "faq": [ # {"q": "返品方法は?", "a": "注文ページで返品申請をクリック..."}, # {"q": "発送までの期間は?", "a": "注文後48時間以内に発送..."},
実行方法
# 依存関係のインストール pip install flask openai # 環境変数の設定 export DEEPSEEK_API_KEY="sk-your-api-key" # ナレッジベースファイルの作成 echo '{"faq":[{"q":"返品方法は?","a":"注文ページで返品申請をクリック..."}]}' > knowledge_base.json # 実行 python app.py # http://localhost:5000 にアクセス
期待される効果
- ユーザーはウェブチャットインターフェースで質問し、ボットはナレッジベースに基づいてリアルタイムで回答
- 複数ターンの対話をサポートし、コンテキスト(直近6ターン)を記憶
- ナレッジベース外の内容は、ユーザーを有人カスタマーサービスに転送するよう案内
- 応答遅延 < 2秒(APIのネットワーク遅延に依存)
コードレビューアシスタント
git diff 出力を分析し、DeepSeek R1 の推論能力を利用して深いコードレビューを行うコマンドラインツール。セキュリティ脆弱性、コードの臭い、ベストプラクティスの提案を自動検出し、構造化されたレビューレポートを生成します。
技術スタック
| 実行環境 | CLI(コマンドラインツール) |
| AIモデル | DeepSeek R1 (deepseek-reasoner) + V3 (deepseek-chat) |
| 分析次元 | セキュリティ脆弱性、コード品質、パフォーマンス、ベストプラクティス |
| 出力形式 | Markdown / JSON / ターミナルカラー出力 |
完全なコード
#!/usr/bin/env python3
# code_review.py
import os
import sys
import subprocess
import argparse
from openai import OpenAI
client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")
REVIEW_PROMPT = """あなたはシニアコードレビュー専門家です。以下のgit diffを深くレビューし、構造化されたレポートを出力してください。
レビュー次元:
1. セキュリティ脆弱性:SQLインジェクション、XSS、機密情報漏洩、権限問題
2. コード品質:命名規則、関数の長さ、複雑さ、重複コード
3. パフォーマンス問題:N+1クエリ、不要なループ、メモリリークのリスク
4. ベストプラクティス:エラーハンドリング、ロギング、型安全性、テストカバレッジ
出力形式(Markdown):
## コードレビューレポート
### セキュリティ脆弱性
- [重大度] 問題の説明 + 修正提案
### コード品質の問題
- [重大度] 問題の説明 + リファクタリング提案
### パフォーマンス問題
- [重大度] 問題の説明 + 最適化提案
### ベストプラクティス提案
- [優先度] 提案内容
### 総合評価
- セキュリティ: X/10
- コード品質: X/10
- パフォーマンス: X/10
- 総合: X/10
Git Diff:
{diff}"""
def get_git_diff(staged_only=False):
cmd = ["git", "diff", "--cached"] if staged_only else ["git", "diff"]
try:
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode != 0:
print(f"エラー: git diff の実行に失敗しました: {result.stderr}")
sys.exit(1)
return result.stdout.strip()
except FileNotFoundError:
print("エラー: git コマンドが見つかりません。git リポジトリ内で実行しているか確認してください")
sys.exit(1)
def review_code(diff_text, use_reasoner=False):
model = "deepseek-reasoner" if use_reasoner else "deepseek-chat"
prompt = REVIEW_PROMPT.format(diff=diff_text[:30000])
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=0.1,
max_tokens=4096
)
return response.choices[0].message.content
def main():
parser = argparse.ArgumentParser(description="DeepSeek コードレビューアシスタント")
parser.add_argument("--staged", action="store_true", help="ステージングされた変更のみをレビュー")
parser.add_argument("--reasoner", action="store_true", help="R1推論モデルを使用(より深いが遅い)")
parser.add_argument("--output", "-o", help="出力ファイルパス")
parser.add_argument("--json", action="store_true", help="JSON形式で出力")
args = parser.parse_args()
diff = get_git_diff(args.staged)
if not diff:
print("レビューするコード変更がありません")
return
print(f"{len(diff)} 文字のコード変更をレビュー中...")
report = review_code(diff, args.reasoner)
if args.output:
実行方法
# 依存関係のインストール pip install openai # git リポジトリ内で実行 python code_review.py # ステージングされた変更をレビュー python code_review.py --staged # R1 推論モデルを使用した詳細レビュー python code_review.py --reasoner # レポートをファイルに保存 python code_review.py -o review_report.md
期待される出力
- セキュリティ、品質、パフォーマンス、ベストプラクティスの4つの側面をカバーする構造化された Markdown レビューレポートを出力
- R1 推論モードは深い論理的問題や潜在的なバグを発見可能
- JSON 形式の出力をサポートし、CI/CD パイプラインへの統合が容易
- 各問題には重大度評価と具体的な修正提案が付属
インテリジェント文書Q&A (RAG システム)
RAG アーキテクチャに基づく文書Q&Aシステムで、PDF アップロード、ChromaDB ベクトルストレージ、Streamlit Web インターフェースをサポートしています。ユーザーが文書をアップロードすると、文書内容に基づいて自然言語でQ&Aができ、引用元が表示されます。
技術スタック
| UI フレームワーク | Streamlit |
| 文書解析 | PyMuPDF (fitz) + LangChain Text Splitters |
| ベクトルデータベース | ChromaDB |
| AI モデル | DeepSeek API (deepseek-chat) |
| Embedding | sentence-transformers (BGE 中国語モデル) |
完全なコード
# rag_qa.py
import os
import streamlit as st
import fitz # PyMuPDF
import chromadb
from chromadb.utils import embedding_functions
from openai import OpenAI
from langchain.text_splitter import RecursiveCharacterTextSplitter
client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")
# ChromaDB の初期化
chroma_client = chromadb.PersistentClient(path="./chroma_db")
sentence_transformer_ef = embedding_functions.SentenceTransformerEmbeddingFunction(
model_name="BAAI/bge-small-zh-v1.5"
)
def get_or_create_collection(name="documents"):
try:
return chroma_client.get_collection(name, embedding_function=sentence_transformer_ef)
except:
return chroma_client.create_collection(name, embedding_function=sentence_transformer_ef)
def extract_text_from_pdf(pdf_file):
doc = fitz.open(stream=pdf_file.read(), filetype="pdf")
text = ""
for page in doc:
text += page.get_text()
return text
def split_text(text, chunk_size=500, overlap=50):
splitter = RecursiveCharacterTextSplitter(
chunk_size=chunk_size, chunk_overlap=overlap,
separators=["\n\n", "\n", "。", "!", "?", ";", ".", " ", ""]
)
return splitter.split_text(text)
def index_document(text_chunks, doc_name):
collection = get_or_create_collection()
existing = collection.get()["ids"]
if existing:
collection.delete(ids=existing)
ids = [f"{doc_name}_{i}" for i in range(len(text_chunks))]
collection.add(documents=text_chunks, ids=ids)
return len(text_chunks)
def search_documents(query, top_k=3):
collection = get_or_create_collection()
results = collection.query(query_texts=[query], n_results=top_k)
return results["documents"][0] if results["documents"] else []
def generate_answer(query, context_chunks):
context = "\n\n---\n\n".join(context_chunks)
実行方法
# 依存関係のインストール pip install streamlit PyMuPDF chromadb openai langchain sentence-transformers # 実行 streamlit run rag_qa.py # アクセス http://localhost:8501
期待される効果
- PDFアップロード後に自動インデックス化、中国語文書のセマンティック検索をサポート
- 質問時に関連する文書チャンクを検索し、コンテキストに基づいて正確な回答を生成
- 回答に引用元を明記し、展開して元の文書チャンクを表示可能
- 複数文書のアップロードをサポートし、文書を切り替えると自動的に再インデックス
多言語翻訳ツール
DeepSeek API を利用した高品質な翻訳ツール。バッチ翻訳、用語集のカスタマイズ、JSON形式の出力をサポート。技術文書の翻訳や多言語コンテンツのローカライズなどのシーンに適しています。
技術スタック
| 実行環境 | CLI + Python ライブラリ |
| AIモデル | DeepSeek API (deepseek-chat) |
| 対応言語 | 中国語、英語、日本語、韓国語、フランス語、ドイツ語、スペイン語、ロシア語など20以上の言語 |
| 出力形式 | JSON / Markdown / プレーンテキスト |
完全なコード
#!/usr/bin/env python3
# translator.py
import os
import json
import argparse
from openai import OpenAI
client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")
LANGUAGE_MAP = {
"zh": "中国語", "en": "英語", "ja": "日本語", "ko": "韓国語",
"fr": "フランス語", "de": "ドイツ語", "es": "スペイン語", "ru": "ロシア語",
"pt": "ポルトガル語", "ar": "アラビア語", "th": "タイ語", "vi": "ベトナム語"
}
TRANSLATE_PROMPT = """あなたはプロの翻訳エンジンです。以下のテキストを{source}から{target}に翻訳してください。
翻訳要件:
1. 元のトーンとスタイルを維持する
2. 技術用語は業界標準の訳語を使用する
3. 用語集がある場合は、用語集の定義を厳守する
4. コード、数字、固有名詞は翻訳しない
5. 翻訳テキストのみを返し、説明を追加しない
{glossary_section}
原文:
{text}"""
def load_glossary(filepath):
if not filepath or not os.path.exists(filepath):
return {}
with open(filepath, "r", encoding="utf-8") as f:
glossary = json.load(f) if filepath.endswith(".json") else {}
if isinstance(glossary, list):
glossary = {item["source"]: item["target"] for item in glossary}
return glossary
def build_glossary_section(glossary):
if not glossary:
return ""
items = "\n".join([f"- {k} -> {v}" for k, v in glossary.items()])
return f"用語集(厳守必須):\n{items}"
def translate_text(text, source="zh", target="en", glossary=None):
source_name = LANGUAGE_MAP.get(source, source)
target_name = LANGUAGE_MAP.get(target, target)
glossary_section = build_glossary_section(glossary)
prompt = TRANSLATE_PROMPT.format(
source=source_name, target=target_name,
glossary_section=glossary_section, text=text
)
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": prompt}],
temperature=0.1,
max_tokens=4096
)
return response.choices[0].message.content
def batch_translate(texts, source="zh", target="en", glossary=None):
results = []
for i, text in enumerate(texts):
print(f"翻訳中... ({i+1}/{len(texts)})")
translated = translate_text(text, source, target, glossary)
results.append({"source": text, "target": translated})
return results
def main():
parser = argparse.ArgumentParser(description="DeepSeek 多言語翻訳ツール")
実行方法
# 依存関係のインストール pip install openai # 単文翻訳 python translator.py "人工智能正在改变世界" --target en # ファイル翻訳 python translator.py -f document.txt -s zh -t ja # バッチ翻訳 python translator.py -b texts.json -s zh -t en -o results.json # 用語集付き翻訳 python translator.py -f tech_doc.txt -g glossary.json -o translated.json
期待される効果
- 20以上の言語間翻訳をサポートし、翻訳品質はプロの手作業に近い
- 用語集により専門用語の翻訳一貫性を確保
- バッチ翻訳はJSON入出力をサポートし、自動化ワークフローへの統合が容易
- コード、数字、固有名詞は自動的に保持され翻訳されない
データ分析アシスタント
自然言語駆動のデータ分析ツール。ユーザーが中国語で分析要件を記述すると、システムが自動的にPandasコードを生成し、分析を実行し、グラフを生成してExcelレポートをエクスポートします。コード不要のデータ分析。
技術スタック
| UIフレームワーク | Streamlit |
| データ処理 | Pandas + NumPy |
| 可視化 | Matplotlib + Plotly |
| AIモデル | DeepSeek API (deepseek-chat) |
| エクスポート | Excel (openpyxl) |
完全なコード
# data_analyst.py
import os
import io
import pandas as pd
import matplotlib.pyplot as plt
import streamlit as st
from openai import OpenAI
client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")
CODE_GEN_PROMPT = """あなたはPandasデータ分析の専門家です。ユーザーのデータ分析要件に基づいて、実行可能なPythonコードを生成してください。
データ情報:
- 列名: {columns}
- データ型: {dtypes}
- データ行数: {rows}
- 最初の5行のプレビュー:
{preview}
ユーザー要件: {query}
ユーザーの分析要件を実現するPythonコードを生成してください。コードの要件:
1. 変数 df を入力DataFrameとして使用
2. 分析結果は result_df 変数に格納(DataFrame形式)
3. グラフが必要な場合は、グラフオブジェクトを fig 変数に格納
4. コードのみを出力し、説明文は不要
5. コードは安全で、ファイル操作やネットワークリクエストを実行しないこと
```python"""
REPORT_PROMPT = """あなたはデータアナリストです。以下の分析結果に基づいて、簡潔なデータ分析レポートを生成してください。
分析要件: {query}
分析結果の要約: {summary}
構造化された分析レポートを生成してください。含める内容:
1. 分析概要
2. 主要な発見(3〜5件)
3. データの洞察
4. 提案"""
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False
st.set_page_config(page_title="DeepSeek データ分析アシスタント", layout="wide")
st.title("DeepSeek データ分析アシスタント")
uploaded_file = st.file_uploader("データファイルをアップロード", type=["csv", "xlsx", "xls"])
if uploaded_file:
if uploaded_file.name.endswith(".csv"):
df = pd.read_csv(uploaded_file)
else:
df = pd.read_excel(uploaded_file)
st.subheader("データプレビュー")
st.dataframe(df.head(10), use_container_width=True)
col1, col2, col3 = st.columns(3)
col1.metric("行数", len(df))
col2.metric("列数", len(df.columns))
col3.metric("欠損値", df.isnull().sum().sum())
query = st.text_area("中国語で分析要件を記述", placeholder="例: 月ごとの売上を集計し、トレンドグラフを描画; 売上が最も高い上位10製品を検索; ユーザーの年齢分布を分析など")
if st.button("分析開始", type="primary") and query:
with st.spinner("DeepSeek が分析コードを生成中..."):
preview = df.head(5).to_string()
columns = ", ".join(df.columns.tolist())
dtypes = ", ".join([f"{c}: {t}" for c, t in df.dtypes.items()])
prompt = CODE_GEN_PROMPT.format(
columns=columns, dtypes=dtypes, rows=len(df),
preview=preview, query=query
)
実行方法
# 依存関係のインストール pip install streamlit pandas openpyxl matplotlib openai # 実行 streamlit run data_analyst.py # http://localhost:8501 にアクセス
期待される効果
- CSV/Excelファイルをアップロード後、中国語で分析要件を記述すると、分析コードが自動生成されます
- Pandas分析を自動実行し、結果テーブルと可視化チャートを表示します
- 分析結果をCSVまたはExcel形式でワンクリックエクスポート
- 構造化されたデータ分析レポートを自動生成
Markdownブログジェネレーター
トピックを入力するだけで、SEO最適化されたfront matter、構造化されたコンテンツ、シリーズ記事生成を含む完全なMarkdownブログ記事を自動生成します。技術ブログの著者やコンテンツクリエイターに適しています。
技術スタック
| 実行環境 | CLI + Pythonスクリプト |
| AIモデル | DeepSeek API (deepseek-chat) |
| 出力形式 | Markdownファイル(front matter含む) |
| 対応プラットフォーム | Hugo / Hexo / Jekyll / VitePress |
完全なコード
#!/usr/bin/env python3
# blog_generator.py
import os
import json
import argparse
from datetime import datetime
from openai import OpenAI
client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")
OUTLINE_PROMPT = """あなたはシニア技術ブログ著者です。以下のトピックに対して詳細な記事アウトラインを生成してください。
トピック: {topic}
執筆スタイル: {style}
対象読者: {audience}
5〜8セクションの詳細なアウトラインを生成し、各セクションに2〜3のサブポイントを含めてください。"""
ARTICLE_PROMPT = """あなたはシニア技術ブログ著者です。アウトラインに基づいて完全なMarkdown形式のブログ記事を執筆してください。
トピック: {topic}
アウトライン:
{outline}
執筆スタイル: {style}
対象読者: {audience}
要件:
1. Markdown形式を使用し、適切な見出しレベルを含める
2. コード例を含める(該当する場合)
3. 内容は詳細にし、各セクションは少なくとも150文字
4. 冒頭に魅力的な導入を置く
5. 最後に要約と展望を置く
6. HTMLタグを使用せず、純粋なMarkdown形式"""
SERIES_PROMPT = """あなたは技術ブログプランナーです。以下のトピックに対してシリーズ記事の計画を生成してください。
トピック: {topic}
シリーズ記事数: {count}
JSON配列を生成してください。各要素には以下を含めます:
- title: 記事タイトル
- slug: URLフレンドリーなタイトル
- description: 短い説明(20文字以内)
- order: シーケンス番号
JSON配列のみを返し、他の内容は含めないでください。"""
def generate_outline(topic, style="技術的な深さ", audience="開発者"):
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": OUTLINE_PROMPT.format(
topic=topic, style=style, audience=audience
)}],
temperature=0.7,
max_tokens=2048
)
return response.choices[0].message.content
def generate_article(topic, outline, style="技術的な深さ", audience="開発者"):
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": ARTICLE_PROMPT.format(
topic=topic, outline=outline, style=style, audience=audience
)}],
temperature=0.7,
max_tokens=8192
)
return response.choices[0].message.content
def generate_series(topic, count=5):
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": SERIES_PROMPT.format(
topic=topic, count=count
)}],
temperature=0.7,
max_tokens=2048
)
text = response.choices[0].message.content
text = text.replace("```json", "").replace("```", "").strip()
return json.loads(text)
def create_front_matter(title, description, tags, platform="hugo"):
実行方法
# 依存関係のインストール pip install openai # 単一記事の生成 python blog_generator.py "Python 异步编程最佳实践" --tags Python 异步 编程 # 執筆スタイルと対象読者の指定 python blog_generator.py "Kubernetes 入门指南" --style "通俗易懂" --audience "运维新手" # シリーズ記事計画の生成 python blog_generator.py "微服务架构设计" --series 5 # ブログプラットフォームの指定 python blog_generator.py "React Hooks 深度解析" --platform hexo
期待される効果
- テーマを入力すると、構造化されたアウトラインと完全なMarkdown記事が自動生成されます
- SEOに適したfront matter(Hugo/Hexo/Jekyll/VitePress)を自動生成
- シリーズ記事の計画をサポートし、複数記事のテーマと説明を一度に生成
- 記事にはコード例、導入、まとめなどの完全な構造が含まれます
AI 対話ターミナル
Rich ライブラリベースのターミナル AI 対話ツール。複数モデルの切り替え、対話履歴の保存、Markdown レンダリング、コードハイライトをサポート。開発者がターミナルで DeepSeek を迅速に利用するのに適しています。
技術スタック
| 実行環境 | CLI (ターミナル) |
| ターミナル UI | Rich + Prompt Toolkit |
| AI モデル | DeepSeek API (V3 + R1) |
| 履歴保存 | JSON ファイル + 対話検索 |
完全なコード
#!/usr/bin/env python3
# ai_terminal.py
import os
import json
from datetime import datetime
from openai import OpenAI
from rich.console import Console
from rich.markdown import Markdown
from rich.panel import Panel
from rich.prompt import Prompt
from rich.table import Table
console = Console()
client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")
HISTORY_FILE = os.path.expanduser("~/.deepseek_terminal_history.json")
MODELS = {
"1": {"name": "deepseek-chat", "label": "DeepSeek V3 (対話)", "desc": "汎用対話モデル。日常使用に適しています"},
"2": {"name": "deepseek-reasoner", "label": "DeepSeek R1 (推論)", "desc": "推論モデル。複雑な問題の分析に適しています"},
}
def load_history():
if os.path.exists(HISTORY_FILE):
with open(HISTORY_FILE, "r", encoding="utf-8") as f:
return json.load(f)
return {"conversations": [], "settings": {"model": "deepseek-chat"}}
def save_history(history):
with open(HISTORY_FILE, "w", encoding="utf-8") as f:
json.dump(history, f, ensure_ascii=False, indent=2)
def show_banner():
banner = """
[bold cyan] ____ ____ __
/ __ \\___ ____ / __/_________ / /__
/ / / / _ \\/ __ \\/ /_/ ___/ __ \\/ //_/
/ /_/ / __/ /_/ / __(__ ) /_/ / ,<
/_____/\___/ .___/_/ /____/\____/_/|_|
/_/
[/bold cyan]
[dim]AI 対話ターミナル v1.0 | /help でコマンド表示 | /quit で終了[/dim]"""
console.print(banner)
def show_help():
help_table = Table(title="利用可能なコマンド")
help_table.add_column("コマンド", style="cyan")
help_table.add_column("説明", style="green")
help_table.add_row("/help", "ヘルプ情報を表示")
help_table.add_row("/model", "モデルを切り替え (V3/R1)")
help_table.add_row("/history", "対話履歴を表示")
help_table.add_row("/clear", "現在の対話をクリア")
help_table.add_row("/save", "現在の対話を保存")
help_table.add_row("/load [id]", "履歴対話をロード")
help_table.add_row("/quit", "プログラムを終了")
console.print(help_table)
def show_model_selector():
table = Table(title="モデル選択")
table.add_column("番号", style="cyan")
table.add_column("モデル", style="green")
table.add_column("説明")
for key, model in MODELS.items():
実行方法
# 依存関係のインストール pip install openai rich # 実行 python ai_terminal.py
期待される効果
- ターミナル内でDeepSeekと直接チャットでき、Markdownレンダリングとコードハイライトをサポート
- V3とR1モデルのリアルタイム切り替えをサポート
- 会話履歴はローカルのJSONファイルに自動保存され、読み込みと検索をサポート
- /コマンドでターミナルを離れずに素早く操作
メール自動返信システム
IMAPでメールを読み取り、DeepSeekを利用してインテリジェントな分類と返信生成を行い、テンプレート返信と人間によるレビュー(Human-in-the-loop)をサポートします。カスタマーサービスメール、ビジネス問い合わせなどのシーンに適しています。
技術スタック
| メールプロトコル | IMAP (読み取り) + SMTP (送信) |
| AIモデル | DeepSeek API (deepseek-chat) |
| 分類エンジン | DeepSeekテキスト分類 |
| レビュー機構 | 人間による確認後送信 (Human-in-the-loop) |
完全なコード
#!/usr/bin/env python3 # email_reply.py import os import imaplib import smtplib import email from email.mime.text import MIMEText from email.header import decode_header from openai import OpenAI client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com") # メール設定 IMAP_SERVER = os.getenv("IMAP_SERVER", "imap.gmail.com") IMAP_PORT = int(os.getenv("IMAP_PORT", "993")) SMTP_SERVER = os.getenv("SMTP_SERVER", "smtp.gmail.com") SMTP_PORT = int(os.getenv("SMTP_PORT", "587")) EMAIL_USER = os.getenv("EMAIL_USER") EMAIL_PASS = os.getenv("EMAIL_PASS") REPLY_TEMPLATES = { "製品問い合わせ": """お問い合わせありがとうございます!{product} についての詳細は以下の通りです: {details} その他のご質問がございましたら、お気軽にご連絡ください。""", "アフターサポート": """アフターサポートにご連絡いただきありがとうございます。ご報告いただいた問題について、以下のことをお勧めします: {solution} さらにサポートが必要な場合は、詳細情報をご提供ください。""", "ビジネス協力": """協力の意向をお寄せいただきありがとうございます!ぜひさらに詳しくお話しさせていただきたいと思います。 {response} ご協力のほど楽しみにしております!""", "その他": """メールをお送りいただきありがとうございます。 {response} よろしくお願いいたします!""" } CLASSIFY_PROMPT = """あなたはメール分類アシスタントです。以下のメールを次のカテゴリのいずれかに分類してください: - 製品問い合わせ:製品機能、価格、使用方法についての質問 - アフターサポート:苦情、障害報告、返品・交換 - ビジネス協力:協力意向、ビジネス交渉 - スパムメール:広告、詐欺、無関係な内容 - その他:分類できないメール カテゴリ名のみを返してください。他の内容は不要です。 メール件名:{subject} メール本文:{body}""" REPLY_PROMPT = """あなたはプロのメール返信アシスタントです。以下のメールに対する返信を生成してください。 メールカテゴリ:{category} メール件名:{subject} メール本文:{body} 返信テンプレート: {template} テンプレートの変数を埋める具体的な返信内容を生成してください。要件: 1. 専門的で、礼儀正しく、簡潔な返信 2. メール内の具体的な質問に対して実質的な回答を提供 3. メールの情報が不十分な場合は、必要な追加情報を積極的に尋ねる テンプレートを埋めるために必要な変数を含むJSON形式で返してください: {{"product": "...", "details": "...", "solution": "...", "response": "..."}}""" def decode_email_header(header): if not header: return "" decoded_parts = decode_header(header) subject = "" for part, charset in decoded_parts: if isinstance(part, bytes): subject += part.decode(charset or "utf-8", errors="ignore") else: subject += str(part) return subject def get_email_body(msg): body = "" if msg.is_multipart(): for part in msg.walk(): content_type = part.get_content_type() if content_type == "text/plain": try: body = part.get_payload(decode=True).decode("utf-8", errors="ignore") except: body = str(part.get_payload()) break else: try: body = msg.get_payload(decode=True).decode("utf-8", errors="ignore") except: body = str(msg.get_payload()) return body[:3000] def fetch_unread_emails(limit=10): mail = imaplib.IMAP4_SSL(IMAP_SERVER, IMAP_PORT) mail.login(EMAIL_USER, EMAIL_PASS) mail.select("inbox") _, data = mail.search(None, "UNSEEN") email_ids = data[0].split()[-limit:] emails = [] for eid in email_ids: _, msg_data = mail.fetch(eid, "(RFC822)") msg = email.message_from_bytes(msg_data[0][1]) subject = decode_email_header(msg["Subject"]) sender = msg["From"] body = get_email_body(msg) emails.append({"id": eid.decode(), "subject": subject, "sender": sender, "body": body}) mail.logout() return emails def classify_email(subject, body): response = client.chat.completions.create( model="deepseek-chat", messages=[{"role": "user", "content": CLASSIFY_PROMPT.format( subject=subject[:200], body=body[:2000] )}], temperature=0.1, max_tokens=50 ) return response.choices[0].message.content.strip() def generate_reply(category, subject, body): template = REPLY_TEMPLATES.get(category, REPLY_TEMPLATES["その他"]) response = client.chat.completions.create( model="deepseek-chat", messages=[{"role": "user", "content": REPLY_PROMPT.format( category=category, subject=subject[:200], body=body[:2000], template=template )}], temperature=0.3, max_tokens=2048 ) import json try: text = response.choices[0].message.content text = text.replace("```json", "").replace("```", "").strip() vars_dict = json.loads(text) except: vars_dict = {"response": "メールを受け取りました。できるだけ早く返信いたします。"} return template.format(**{k: v for k, v in vars_dict.items() if k in template}) def send_reply(to_address, subject, body): msg = MIMEText(body, "plain", "utf-8") msg["Subject"] = f"Re: {subject}" msg["From"] = EMAIL_USER msg["To"] = to_address server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) server.starttls() server.login(EMAIL_USER, EMAIL_PASS) server.send_message(msg) server.quit() print(f"返信を送信しました: {to_address}") def main(): print("未読メールを確認中...") emails = fetch_unread_emails() if not emails: print("未読メールはありません") return print(f"未読メールが {len(emails)} 件見つかりました\n") for i, mail in enumerate(emails): print(f"\n{'='*50}") print(f"[{i+1}/{len(emails)}] 送信者: {mail['sender']}") print(f"件名: {mail['subject']}") category = classify_email(mail["subject"], mail["body"]) if category == "スパムメール": print(f"分類: {category} (スキップ)") continue print(f"分類: {category}") reply = generate_reply(category, mail["subject"], mail["body"]) print(f"\n生成された返信:\n{reply}") choice = input("\nこの返信を送信しますか? (y=送信 / n=スキップ / e=編集): ").strip().lower() if choice == "y": send_reply(mail["sender"], mail["subject"], reply) elif choice == "e": custom_reply = input("返信内容を入力してください: ") if custom_reply.strip(): send_reply(mail["sender"], mail["subject"], custom_reply) print("カスタム返信を送信しました") else: print("スキップしました") if __name__ == "__main__": if not EMAIL_USER or not EMAIL_PASS: print("環境変数 EMAIL_USER と EMAIL_PASS を設定してください") print("Gmailの場合は、アプリ固有のパスワードを使用する必要があります") exit(1) main()
実行方法
# 依存関係のインストール pip install openai
環境変数の設定(Gmail の例)
export EMAIL_USER="your-email@gmail.com"
export EMAIL_PASS="your-app-password"
export IMAP_SERVER="imap.gmail.com"
export SMTP_SERVER="smtp.gmail.com"
# 実行
python email_reply.py
期待される効果
- 未読メールを自動検出し、分類(製品問い合わせ/アフターサービス/ビジネス/スパム)
- 分類に応じたテンプレートでプロフェッショナルな返信を生成
- 人間による確認ステップ:送信前に確認、カスタム返信の編集をサポート
- スパムメールを自動フィルタリングし、処理効率を向上
履歴書最適化ツール
PDF履歴書を解析し、職務記述書(JD)と照合してスキルギャップを分析し、ATS最適化の提案を提供します。求職者の履歴書通過率向上を支援します。
技術スタック
| UIフレームワーク | Streamlit |
| 履歴書解析 | PyMuPDF (fitz) |
| AIモデル | DeepSeek API (deepseek-chat) |
| 出力 | マッチ度スコア + 改善提案 + 最適化済み履歴書 |
完全なコード
# resume_optimizer.py import os import streamlit as st import fitz from openai import OpenAI client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com") ANALYZE_PROMPT = """あなたはシニアHRおよび履歴書最適化の専門家です。以下の履歴書と職務記述書のマッチ度を分析してください。 履歴書の内容: {resume} 職務記述書: {jd} 以下の観点から分析し、JSON形式で結果を提供してください: 1. スキルのマッチ度(0-100%) 2. 経験のマッチ度(0-100%) 3. 総合マッチ度(0-100%) 4. マッチしたスキルのリスト 5. 不足しているスキルのリスト 6. 履歴書の長所(3〜5項目) 7. 履歴書の改善提案(3〜5項目) 8. ATS最適化の提案(3〜5項目) JSON形式で返してください: {{ "skill_match": 数値, "experience_match": 数値, "overall_match": 数値, "matched_skills": ["スキル1", "スキル2"], "missing_skills": ["スキル1", "スキル2"], "strengths": ["長所1", "長所2"], "improvements": ["提案1", "提案2"], "ats_suggestions": ["提案1", "提案2"] }}""" OPTIMIZE_PROMPT = """あなたはシニア履歴書最適化の専門家です。以下の分析と提案に基づいて、履歴書の内容を最適化してください。 元の履歴書: {resume} 職務記述書: {jd} マッチ分析: {analysis} 最適化の要件: 1. JDにマッチするスキルと経験を強調する 2. 業界キーワードを使用する(ATSフレンドリー) 3. 成果を定量化する(数字とパーセンテージを使用) 4. 元の履歴書の事実情報を保持し、経験を捏造しない 5. 表現とレイアウト構造を最適化する 最適化された完全な履歴書を出力してください。""" def extract_pdf_text(pdf_file): doc = fitz.open(stream=pdf_file.read(), filetype="pdf") text = "" for page in doc: text += page.get_text() return text def analyze_resume(resume_text, jd_text): response = client.chat.completions.create( model="deepseek-chat", messages=[{"role": "user", "content": ANALYZE_PROMPT.format( resume=resume_text[:5000], jd=jd_text[:3000] )}], temperature=0.1, max_tokens=2048 ) import json content = response.choices[0].message.content content = content.replace("```json", "").replace("```", "").strip() return json.loads(content) def optimize_resume(resume_text, jd_text, analysis): response = client.chat.completions.create( model="deepseek-chat", messages=[{"role": "user", "content": OPTIMIZE_PROMPT.format( resume=resume_text[:5000], jd=jd_text[:3000], analysis=json.dumps(analysis, ensure_ascii=False, indent=2) )}], temperature=0.3, max_tokens=4096 ) return response.choices[0].message.content st.set_page_config(page_title="DeepSeek 履歴書最適化", layout="wide") st.title("DeepSeek 履歴書最適化ツール") col1, col2 = st.columns(2) with col1: st.subheader("履歴書をアップロード")
実行方法
# 依存関係のインストール pip install streamlit PyMuPDF openai # 実行 streamlit run resume_optimizer.py # アクセス http://localhost:8501
期待される効果
- PDF履歴書をアップロードし、JDを貼り付けると、自動的にマッチ度を分析
- 3次元評価(スキル/経験/総合)で、マッチ状況を直感的に表示
- マッチしたスキルと不足スキルをリストアップし、具体的な改善提案を提供
- ワンクリックでATS対応の最適化履歴書を生成し、Markdownとしてダウンロード可能
毎日AI早報
AI分野のニュースを自動集約し、DeepSeekを利用してスマート要約と分類を行い、美しい毎日の早報を生成してメールで定期的に送信します。cronによる定期スケジュールをサポート。
技術スタック
| ニュースソース | RSSフィード + Webスクレイピング |
| AIモデル | DeepSeek API (deepseek-chat) |
| メール送信 | SMTP + HTMLメールテンプレート |
| スケジュール | cron / scheduleライブラリ |
完全なコード
#!/usr/bin/env python3
# daily_briefing.py
import os
import json
import smtplib
import feedparser
from datetime import datetime
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from openai import OpenAI
client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")
# メール設定
SMTP_SERVER = os.getenv("SMTP_SERVER", "smtp.gmail.com")
SMTP_PORT = int(os.getenv("SMTP_PORT", "587"))
EMAIL_USER = os.getenv("EMAIL_USER")
EMAIL_PASS = os.getenv("EMAIL_PASS")
RECIPIENTS = os.getenv("RECIPIENTS", "").split(",")
# AIニュースRSSフィード
RSS_FEEDS = [
"https://hnrss.org/frontpage?count=20",
"https://arxiv.org/rss/cs.AI",
"https://www.reddit.com/r/MachineLearning/.rss",
]
SUMMARIZE_PROMPT = """あなたはAI業界アナリストです。以下のニュース項目について毎日の早報要約を生成してください。
要件:
1. ニュースを以下のカテゴリに分類:大規模モデル動向、オープンソースツール、業界応用、学術研究、その他
2. 各カテゴリで最も重要な3〜5件のニュースを選択
3. 各ニュースに含める:タイトル、一言要約(30文字以内)、重要度評価(1〜5星)
4. 「今日のハイライト」セクションを生成し、最も重要な1〜2件を強調
5. 最後に「今日の考察」(100文字以内の業界洞察)を追加
ニュース項目(タイトル + 要約):
{articles}
JSON形式で返してください:
{{
"date": "日付",
"highlight": [{{"title": "...", "summary": "...", "reason": "..."}}],
"categories": {{
"大規模モデル動向": [{{"title": "...", "summary": "...", "rating": 5}}],
"オープンソースツール": [...],
"業界応用": [...],
"学術研究": [...],
"その他": [...]
}},
"thought": "今日の考察内容"
}}"""
def fetch_news():
articles = []
for feed_url in RSS_FEEDS:
try:
feed = feedparser.parse(feed_url)
for entry in feed.entries[:10]:
title = entry.get("title", "タイトルなし")
summary = entry.get("summary", entry.get("description", ""))
summary = summary[:200]
articles.append(f"- {title}: {summary}")
except Exception as e:
print(f"RSS取得失敗 ({feed_url}): {e}")
return articles
def generate_briefing(articles):
articles_text = "\n".join(articles[:50])
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": SUMMARIZE_PROMPT.format(
articles=articles_text[:8000]
)}],
temperature=0.3,
max_tokens=4096
)
content = response.choices[0].message.content
{date_str} | DeepSeek 生成 {item["title"]} {item["summary"]} {item.get("reason", "")} {news["title"]} {news["summary"]} {briefing["thought"]} 本ブリーフィングは DeepSeek AI により自動生成 | 毎日 8:00 送信AI デイリーブリーフィング
今日のハイライト
'
for item in briefing["highlight"]:
html += f'[{icon}] {category}
'
for news in news_list:
stars = str(news.get("rating", 3)) + " 点"
html += f'''今日の考察
実行方法
# 依存関係のインストール pip install openai feedparser # 環境変数の設定 export EMAIL_USER="your-email@gmail.com" export EMAIL_PASS="your-app-password" export RECIPIENTS="user1@example.com,user2@example.com" # 手動実行 python daily_briefing.py # cron ジョブの設定 (毎朝 8:00) # crontab -e # 0 8 * * * cd /path/to/project && python daily_briefing.py
期待される効果
- 複数の RSS ソースから AI 関連ニュースを自動集約
- DeepSeek がインテリジェントに分類・要約し、構造化されたブリーフィングを生成
- 今日のハイライトと業界インサイトを含む美しい HTML メールテンプレート
- cron による定期実行をサポートし、毎日自動送信
DeepSeek 実践プロジェクトよくある質問
関連チュートリアルとリソース
DeepSeek モデルの使用方法、デプロイ、開発テクニックを基礎から応用まで深く学びます。
DeepSeek 使用チュートリアル
4つの使用方法、ゼロからマスターまで。
DeepSeek API ガイド
API 連携、料金、レート制限、ベストプラクティス。
DeepSeek + LangChain 開発
Chain、Agent、Tool 開発の完全チュートリアル。
DeepSeek RAG 知識ベース
検索拡張生成、エンタープライズ向け知識ベース Q&A。
DeepSeek プロンプトエンジニアリング
プロンプト設計テクニック、テンプレート、ベストプラクティス。
DeepSeek ファインチューニングチュートリアル
LoRA/QLoRA ファインチューニングで専用モデルをカスタマイズ。
DeepSeek デプロイチュートリアル
Ollama、Docker、vLLM、K8s デプロイソリューション。
DeepSeek エコシステムツール
Ollama、Open WebUI、Dify、Continue.dev など。
DeepSeek + Dify で AI アプリを構築
ビジュアルオーケストレーション、ドラッグ&ドロップのワークフロー設計。
DeepSeek Model 完全ガイド
技術アーキテクチャ、ベンチマーク性能比較、モデル選定。
DeepSeek オープンソースモデル
6シリーズ、20以上のモデルの完全カタログ。
DeepSeek モデルダウンロード
Ollama、Hugging Face、GitHub からのダウンロードガイド。