Gemini Colab飿º
å€§èŠæš¡èšèªã¢ãã«è¬åº§ åºç€ç·š 2025 Autumnãæå ãåå ã«
https://qiita.com/kaizen_nagoya/items/34ffd2b0c47a5f3665d9
Google Colab ãšGeminiã飿ºããããšããªãã
ChatGPT
Gemini ãšColabã®é£æºã®å©ç¹ã¯äœããããŸããã
ChatGPT:
ãGeminiããšãGoogle Colabãã®é£æºã®å©ç¹ã«ã€ããŠæŽçããŸãããŸããããã§ã® Gemini ã¯äžè¬çã« Google GeminiïŒå€§èŠæš¡èšèªã¢ãã« / AIãã©ãããã©ãŒã ïŒ ãæããšä»®å®ããŸããããç°ãªããµãŒãã¹ãæããŠããå Žåã¯æããŠãã ããã
- èšç®ãªãœãŒã¹ã®æé©å
Colab 㯠GPU / TPU ã䜿ã£ãå®è¡ç°å¢ãã¯ã©ãŠãäžã§æäŸããŸãã
Gemini åŽã§çæAIã¢ãã«ãå€§èŠæš¡èšèªã¢ãã«ã管çããColab ãã API ãéããŠåŒã³åºãã°ãããŒã«ã«ç°å¢ã«éãã¢ãã«ã眮ããã«æšè«ãåŠç¿ãè¡ããã
Colab ã§ã¯èªåã§ã¢ãã«ãããŠã³ããŒãããŠåããããããGemini API çµç±ã®å©çšã¯ ã¹ãã¬ãŒãžãã¡ã¢ãªæ¶è²»ãå€§å¹ ã«åæžã§ããŸãã- ããŒã¿æŽ»çšã®æè»æ§
Colab 㯠Google Drive ãšã®é£æºãç°¡åã§ãåŠç¿ããŒã¿ãå ¥åããŒã¿ãã¢ããããŒãå¯èœã
Gemini API ã Colab ããŒãããã¯ããåŒã¶ããšã§ãå€§èŠæš¡ã¢ãã«ãçŽæ¥ããŒã«ã«ã§åããããšãªãããŒã¿ãåŠçã§ããŸãã
äŸ: ããŒã¿åæ â Gemini ã«éä¿¡ â ã¢ãã«ã§èŠçŽ / åé¡ â çµæã Colab ã§å¯èŠåã- ãããã¿ã€ãã³ã°ã®å¹çå
Colab ã¯ã³ãŒãã®å ±æãå®éšãç°¡åã§ãGemini ã® AI æ©èœãçµã¿åããããš ãããã¿ã€ãäœæãè¿ éã«ã
ããšãã°ïŒ
GPT ç³»ã¢ãã«ã䜿ã£ãæç« çæ
ããŒã¿ã»ããã«å¯Ÿããèªåã©ãã«ä»ã
察話åã¢ããªã±ãŒã·ã§ã³ã®è©Šäœ
ãªã©ãããã«è©ŠããŸãã- ç°å¢äŸåã®åé¡ã®åé¿
Colab ã¯ã¯ã©ãŠãäžã§å®è¡ããããããOS ãã©ã€ãã©ãªã®äŸåé¢ä¿ã®åé¡ãåé¿ã§ããŸãã
Gemini API ãžã®ã¢ã¯ã»ã¹ãåã Colab ç°å¢ããè¡ãããããããŒã«ã«ã§ç°å¢æ§ç¯ãããããå®å®ããŠå©çšå¯èœã- èªååãšæ¡åŒµæ§
Colab ã® Python ã¹ã¯ãªãããã Gemini API ãåŒã³åºãããšã§ãåŠç¿ â æšè« â çµæåºå â å¯èŠåãŸã§ãããŒãããã¯å ã§èªååã§ããŸãã
Google DriveãBigQueryãSheets ãªã©ãšçµã¿åãããŠã¯ãŒã¯ãããŒå šäœã Colab äžã§å®çµãããããŸãã
ãŸãšã
é ç® å©ç¹
èšç®ãªãœãŒã¹ å€§èŠæš¡ã¢ãã«ãããŒã«ã«ã§åãããã«å©çšå¯èœ
ããŒã¿é£æº Drive / BigQuery ããŒã¿ãå³åº§ã«åŠç
ãããã¿ã€ãã³ã° çæéã§ã¢ãã«ã®è©Šäœã»å®éšãå¯èœ
ç°å¢å®å®æ§ OS ãã©ã€ãã©ãªäŸåãæ°ã«ããå©çš
èªåå ã¯ãŒã¯ãããŒå šäœã Colab ããŒãããã¯å ã§å®çµ
ð¡ è£è¶³
Gemini API ã¯éåžž ããŒã¯ã³èªèšŒãå¿ èŠãColab ã§å®å šã«ç°å¢å€æ°ãšããŠç®¡çãããšäŸ¿å©ã§ãã
Colab ã®ç¡ææ ã§ã¯ GPU ã®å©çšæéãã¡ã¢ãªã«å¶éããããããGemini API ã®ãããªå€éšã¢ãã«ãšçµã¿åããããšå¶çŽãç·©åã§ããŸãã
ãããããã°ãColab ãã Gemini API ãåŒã¶å ·äœç㪠Python ãµã³ãã«ã瀺ããŸãã
äœããŸããïŒ
ã¯ãã
ChatGPT:
äºè§£ã§ããã§ã¯ãGoogle Colab ãã Gemini API ãåŒã³åºãç°¡å㪠Python ãµã³ãã«ã瀺ããŸããããã§ã¯ ããã¹ãçæ ãäŸã«ããŸãã
- API ããŒã®èšå®
Colab ã§ã¯ã»ãã¥ã¢ã«ç®¡çããããã« ç°å¢å€æ° ã䜿ããŸãã
import os
# Colab ã®ã»ã«ã§äžåºŠã ãå®è¡
# !export GEMINI_API_KEY="ããã«APIããŒãå
¥å"
# ãŸãã¯ãPythonå
ã§èšå®
os.environ['GEMINI_API_KEY'] = "ããã«ããªãã®Gemini APIããŒ"
2. Gemini API åŒã³åºãçšã©ã€ãã©ãªïŒäŸ: requestsïŒ
import requests
import json
# APIããŒååŸ
api_key = os.environ['GEMINI_API_KEY']
# APIãšã³ããã€ã³ãïŒäŸ: Gemini Text GenerationïŒ
endpoint = "https://api.gemini.google.com/v1/generateText"
# å
¥åããŒã¿
payload = {
"prompt": "AIãšColabã®é£æºã®å©ç¹ã«ã€ããŠç°¡æœã«èª¬æããŠãã ããã",
"maxTokens": 150
}
# HTTPãªã¯ãšã¹ã
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
response = requests.post(endpoint, headers=headers, json=payload)
if response.status_code == 200:
result = response.json()
print(result.get("text", "No text returned"))
else:
print(f"Error {response.status_code}: {response.text}")
- è£è¶³ãã€ã³ã
maxTokens ã§çæããããã¹ãã®é·ããå¶åŸ¡ã§ããŸãã
Colab ã§ã¯çæçµæã Pandas ã Matplotlib ãšçµã¿åãããŠå¯èŠåå¯èœã
ãã¡ã€ã«ã«æžãåºã㊠Google Drive ã«ä¿åããããšãç°¡åã§ãã
import pandas as pd
df = pd.DataFrame([{"prompt": payload["prompt"], "response": result.get("text", "")}])
df.to_csv("/content/colab_gemini_output.csv", index=False)
ð¡ ããã§ Colab äžã§ Gemini API ãåŒã³åºããçµæãä¿åã»åæããåºæ¬çãªã¯ãŒã¯ãã㌠ã宿ããŸãã
åžæã§ããã°ãè€æ°ããã³ããããŸãšããŠãããã§åŠçããæ¹æ³ããçæçµæãèªåã§å¯èŠåããæ¹æ³ ããµã³ãã«ã«ã§ããŸãã
äœããŸããïŒ
ã¯ãã
ChatGPT:
ã§ã¯ãColab äžã§ è€æ°ããã³ããããŸãšã㊠Gemini API ã«éä¿¡ããçæçµæãèªåã§å¯èŠåãããµã³ãã« ãäœããŸããããã§ã¯ æ£ã°ã©ãã§åããã³ããã®æåæ°ãå¯èŠåããäŸã«ããŸãã
- å¿ èŠãªã©ã€ãã©ãªã®ã€ã³ããŒã
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
- APIããŒèšå®
# Colabã§ç°å¢å€æ°ãšããŠèšå®æžã¿ã®å Žåã¯ååŸ
api_key = os.environ.get("GEMINI_API_KEY", "ããã«APIããŒãå
¥å")
endpoint = "https://api.gemini.google.com/v1/generateText"
- è€æ°ããã³ããã®å®çŸ©
prompts = [
"AIãšColabã®é£æºã®å©ç¹ã«ã€ããŠç°¡æœã«èª¬æããŠãã ããã",
"æ©æ¢°åŠç¿ã®åŠç¿ãå¹çåããæ¹æ³ã3ã€æããŠãã ããã",
"Pythonã§ããŒã¿å¯èŠåãããéã®ãã€ã³ããæããŠãã ããã"
]
- APIåŒã³åºã颿°ã®äœæ
def generate_text(prompt, max_tokens=150):
payload = {"prompt": prompt, "maxTokens": max_tokens}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
response = requests.post(endpoint, headers=headers, json=payload)
if response.status_code == 200:
return response.json().get("text", "")
else:
print(f"Error {response.status_code}: {response.text}")
return ""
- è€æ°ããã³ãããäžæ¬åŠçã㊠DataFrame ã«ä¿å
results = []
for prompt in prompts:
text = generate_text(prompt)
results.append({"prompt": prompt, "response": text, "length": len(text)})
df = pd.DataFrame(results)
df.to_csv("/content/colab_gemini_batch.csv", index=False)
df
- çµæã®å¯èŠåïŒæ£ã°ã©ãïŒæåæ°ïŒ
plt.figure(figsize=(8,5))
plt.barh(df["prompt"], df["length"], color="skyblue")
plt.xlabel("çææåæ°")
plt.ylabel("ããã³ãã")
plt.title("ããã³ããããšã®çææåæ°")
plt.tight_layout()
plt.show()
â ãã®ãµã³ãã«ã§ã§ããããšïŒ
è€æ°ã®ããã³ããã ãŸãšã㊠Gemini ã«éä¿¡
çæçµæã DataFrame ã«ä¿å
æåæ°ãªã©ã®çµ±èšæ å ±ãæ£ã°ã©ãã§å¯èŠå
åžæã§ããã°ãããã« çæçµæã®ããŒã¯ãŒãæœåºãèŠçŽãèªååé¡ ãŸã§ Colab äžã§ã¯ã³ã¹ãããåŠçããæ¡åŒµäŸãäœããŸãã
äœããŸããïŒ
ã¯ãã
ChatGPT:
ã§ã¯ãColab äžã§ Gemini ã®çæçµæãèªåã§èŠçŽã»ããŒã¯ãŒãæœåºã»åé¡ ãŸã§è¡ããµã³ãã«ãäœããŸããããã§ã¯ Python å ã§ç°¡åã«åŠçããäŸã瀺ããŸãã
- å¿ èŠãªã©ã€ãã©ãª
import os
import requests
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import ENGLISH_STOP_WORDS
from sklearn.preprocessing import LabelEncoder
>2. API ããŒèšå®
api_key = os.environ.get("GEMINI_API_KEY", "ããã«APIããŒãå
¥å")
endpoint = "https://api.gemini.google.com/v1/generateText
3.è€æ°ããã³ããã®å®çŸ©
prompts = [
"AIãšColabã®é£æºã®å©ç¹ã«ã€ããŠç°¡æœã«èª¬æããŠãã ããã",
"æ©æ¢°åŠç¿ã®åŠç¿ãå¹çåããæ¹æ³ã3ã€æããŠãã ããã",
"Pythonã§ããŒã¿å¯èŠåãããéã®ãã€ã³ããæããŠãã ããã"
]
- Gemini API åŒã³åºã颿°
def generate_text(prompt, max_tokens=150):
payload = {"prompt": prompt, "maxTokens": max_tokens}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
response = requests.post(endpoint, headers=headers, json=payload)
if response.status_code == 200:
return response.json().get("text", "")
else:
print(f"Error {response.status_code}: {response.text}")
return ""
- çæ â èŠçŽïŒç°¡æ: æåã®æã ãïŒ â ããŒã¯ãŒãæœåº â ä»®åé¡
results = []
def extract_keywords(text, top_n=5):
vectorizer = CountVectorizer(stop_words="english")
X = vectorizer.fit_transform([text])
word_counts = X.toarray().sum(axis=0)
words = vectorizer.get_feature_names_out()
keywords = [words[i] for i in word_counts.argsort()[::-1][:top_n]]
return keywords
def classify_text(text):
# ç°¡æåé¡: ããŒã¯ãŒãã«ããä»®åé¡
categories = ["AI", "ML", "Python", "Other"]
text_lower = text.lower()
if "ai" in text_lower:
return "AI"
elif "machine" in text_lower or "learning" in text_lower:
return "ML"
elif "python" in text_lower:
return "Python"
else:
return "Other"
for prompt in prompts:
generated = generate_text(prompt)
summary = generated.split(".")[0] # æåã®æãèŠçŽãšããŠäœ¿çš
keywords = extract_keywords(generated)
category = classify_text(generated)
results.append({
"prompt": prompt,
"response": generated,
"summary": summary,
"keywords": ", ".join(keywords),
"category": category
})
df = pd.DataFrame(results)
df.to_csv("/content/colab_gemini_advanced.csv", index=False)
df
- çµæã®ãã€ã³ã
summaryïŒç°¡æçã«æåã®æãæœåº
keywordsïŒããã¹ãäžã®äžäœããŒã¯ãŒããèªåæœåº
categoryïŒããŒã¯ãŒãããŒã¹ã®ç°¡æåé¡ïŒå¿ èŠã«å¿ã㊠ML ã¢ãã«ã§åŒ·åå¯èœïŒ
ð¡ ããã«æ¡åŒµäŸ
èŠçŽã Gemini API ã«äŸé Œ â ããèªç¶ãªæç« ã«
åé¡ãæ©æ¢°åŠç¿ã¢ãã«ã«çœ®ãæã â 粟床åäž
å¯èŠå â ããã³ããå¥ã®ã«ããŽãªååžãããŒã¯ãŒãé »åºŠãã°ã©ãå
åžæã§ããã°ããã®ãµã³ãã«ãããã« å¯èŠåãŸã§å«ãã Colab ã¯ã³ã¹ãããããŒããã㯠ã«ãŸãšããããšãã§ããŸãã
äœããŸããïŒ
ã¯ãã
ChatGPT:
ã§ã¯ããããŸã§ã®å 容ããŸãšã㊠Colab äžã§ Gemini çæ â èŠçŽã»ããŒã¯ãŒãæœåºã»åé¡ â å¯èŠå ãŸã§ã¯ã³ã¹ãããã§è¡ããµã³ãã«ããŒãããã¯åœ¢åŒã«ãŸãšããŸãã
- ã©ã€ãã©ãªã®ã€ã³ããŒã
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizer
- APIããŒãšãšã³ããã€ã³ãèšå®
api_key = os.environ.get("GEMINI_API_KEY", "ããã«APIããŒãå
¥å")
endpoint = "https://api.gemini.google.com/v1/generateText"
>3. è€æ°ããã³ããã®å®çŸ©
prompts = [
"AIãšColabã®é£æºã®å©ç¹ã«ã€ããŠç°¡æœã«èª¬æããŠãã ããã",
"æ©æ¢°åŠç¿ã®åŠç¿ãå¹çåããæ¹æ³ã3ã€æããŠãã ããã",
"Pythonã§ããŒã¿å¯èŠåãããéã®ãã€ã³ããæããŠãã ããã",
"çæAIãæè²ã«æŽ»çšããå©ç¹ãšèª²é¡ã«ã€ããŠè¿°ã¹ãŠãã ããã",
"Pythonã§ããã¹ãåŠçããéã®äŸ¿å©ãªã©ã€ãã©ãªãæããŠãã ããã"
]
>4. Gemini API åŒã³åºã颿°
def generate_text(prompt, max_tokens=150):
payload = {"prompt": prompt, "maxTokens": max_tokens}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
response = requests.post(endpoint, headers=headers, json=payload)
if response.status_code == 200:
return response.json().get("text", "")
else:
print(f"Error {response.status_code}: {response.text}")
return ""
>5. èŠçŽã»ããŒã¯ãŒãæœåºã»åé¡é¢æ°
def extract_keywords(text, top_n=5):
vectorizer = CountVectorizer(stop_words="english")
X = vectorizer.fit_transform([text])
word_counts = X.toarray().sum(axis=0)
words = vectorizer.get_feature_names_out()
keywords = [words[i] for i in word_counts.argsort()[::-1][:top_n]]
return keywords
def classify_text(text):
text_lower = text.lower()
if "ai" in text_lower:
return "AI"
elif "machine" in text_lower or "learning" in text_lower:
return "ML"
elif "python" in text_lower:
return "Python"
else:
return "Other"
>6. è€æ°ããã³ãããåŠçã㊠DataFrame ã«æ ŒçŽ
results = []
for prompt in prompts:
generated = generate_text(prompt)
summary = generated.split(".")[0] # æåã®æãèŠçŽ
keywords = extract_keywords(generated)
category = classify_text(generated)
results.append({
"prompt": prompt,
"response": generated,
"summary": summary,
"keywords": ", ".join(keywords),
"category": category,
"length": len(generated)
})
df = pd.DataFrame(results)
df.to_csv("/content/colab_gemini_full.csv", index=False)
df
>7. å¯èŠåäŸ
(a) ããã³ããããšã®çææåæ°
plt.figure(figsize=(8,5))
plt.barh(df["prompt"], df["length"], color="skyblue")
plt.xlabel("çææåæ°")
plt.ylabel("ããã³ãã")
plt.title("ããã³ããããšã®çææåæ°")
plt.tight_layout()
plt.show()
(b) ã«ããŽãªååž
category_counts = df["category"].value_counts()
plt.figure(figsize=(6,4))
category_counts.plot(kind="bar", color="salmon")
plt.xlabel("ã«ããŽãª")
plt.ylabel("ä»¶æ°")
plt.title("çæçµæã®ã«ããŽãªååž")
plt.tight_layout()
plt.show()
(c) ããŒã¯ãŒãé »åºŠïŒäžäœ5åãŸã§æœåºããŠéèšïŒ
all_keywords = [kw for sublist in df["keywords"].str.split(", ") for kw in sublist]
keyword_series = pd.Series(all_keywords).value_counts().head(10)
plt.figure(figsize=(8,5))
keyword_series.plot(kind="barh", color="lightgreen")
plt.xlabel("åºçŸåæ°")
plt.ylabel("ããŒã¯ãŒã")
plt.title("äžäœããŒã¯ãŒãã®åºçŸé »åºŠ")
plt.tight_layout()
plt.show()
â
ãã®ããŒãããã¯ã§ã§ããããšïŒ
è€æ°ããã³ããã® Gemini çæ
ç°¡æèŠçŽã®èªåæœåº
ããŒã¯ãŒãæœåº
ã«ããŽãªåé¡
çææåæ°ã»ã«ããŽãªååžã»ããŒã¯ãŒãé »åºŠã®å¯èŠå
CSVåºåã§çµæä¿å
å¿
èŠã§ããã°ã次ã®ã¹ããããšã㊠Gemini API ã«èŠçŽãåé¡ãä»»ããŠããèªç¶ãªçµæãåŸãæ¡åŒµç ãäœããŸãã
äœããŸããïŒ
ã¯ãã
ChatGPT:
>ã§ã¯ãColab äžã§ Gemini API ã«èŠçŽã»åé¡ãŸã§ä»»ããŠèªç¶ãªçµæãåŸãæ¡åŒµç ãäœããŸãã
ããã§ã¯ãçæ â èŠçŽ â åé¡ãŸã§ ãã¹ãŠ Gemini ã«äŸé Œ ããã¯ãŒã¯ãããŒã§ãã
1. ã©ã€ãã©ãªã€ã³ããŒã
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
2. API ããŒãšãšã³ããã€ã³ãèšå®
api_key = os.environ.get("GEMINI_API_KEY", "ããã«APIããŒãå
¥å")
endpoint = "https://api.gemini.google.com/v1/generateText"
3. è€æ°ããã³ããã®å®çŸ©
prompts = [
"AIãšColabã®é£æºã®å©ç¹ã«ã€ããŠç°¡æœã«èª¬æããŠãã ããã",
"æ©æ¢°åŠç¿ã®åŠç¿ãå¹çåããæ¹æ³ã3ã€æããŠãã ããã",
"Pythonã§ããŒã¿å¯èŠåãããéã®ãã€ã³ããæããŠãã ããã",
"çæAIãæè²ã«æŽ»çšããå©ç¹ãšèª²é¡ã«ã€ããŠè¿°ã¹ãŠãã ããã",
"Pythonã§ããã¹ãåŠçããéã®äŸ¿å©ãªã©ã€ãã©ãªãæããŠãã ããã"
]
4. Gemini API åŒã³åºã颿°ïŒèŠçŽã»åé¡ãæç€ºïŒ
def generate_summary_and_classification(prompt, max_tokens=200):
# Gemini ã«çæ + èŠçŽ + ã«ããŽãªåé¡ãäŸé Œ
full_prompt = (
f"以äžã®è³ªåã«å¯ŸããŠæç« ãçæããç°¡åãªèŠçŽãšã«ããŽãªåé¡ãåºåããŠãã ããã\n"
f"質å: {prompt}\n"
f"åºå圢åŒ: JSON ã§ summary, category, response ãè¿ããŠãã ããã"
)
payload = {"prompt": full_prompt, "maxTokens": max_tokens}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
response = requests.post(endpoint, headers=headers, json=payload)
if response.status_code == 200:
try:
return response.json()
except:
return {"summary": "", "category": "Other", "response": response.text}
else:
print(f"Error {response.status_code}: {response.text}")
return {"summary": "", "category": "Other", "response": ""}
5. è€æ°ããã³ããåŠç
results = []
for prompt in prompts:
result = generate_summary_and_classification(prompt)
results.append({
"prompt": prompt,
"response": result.get("response", ""),
"summary": result.get("summary", ""),
"category": result.get("category", ""),
"length": len(result.get("response", ""))
})
df = pd.DataFrame(results)
df.to_csv("/content/colab_gemini_summary_classification.csv", index=False)
df
6. å¯èŠåäŸ
(a) çææåæ°
plt.figure(figsize=(8,5))
plt.barh(df["prompt"], df["length"], color="skyblue")
plt.xlabel("çææåæ°")
plt.ylabel("ããã³ãã")
plt.title("ããã³ããããšã®çææåæ°")
plt.tight_layout()
plt.show()
(b) ã«ããŽãªååž
category_counts = df["category"].value_counts()
plt.figure(figsize=(6,4))
category_counts.plot(kind="bar", color="salmon")
plt.xlabel("ã«ããŽãª")
plt.ylabel("ä»¶æ°")
plt.title("çæçµæã®ã«ããŽãªååž")
plt.tight_layout()
plt.show()
â
ãã®æ¡åŒµçã®ãã€ã³ãïŒ
Gemini ã«çæã»èŠçŽã»åé¡ãäžæ¬ã§äŸé Œ
JSON 圢åŒã§çµæãåãåããColab ã§åæã»å¯èŠå
çæå
容ã»èŠçŽã»ã«ããŽãªã»æåæ°ã®å
šäœã CSV ã«ä¿å
ããåžæã§ããã°ãããã« çæçµæãèªåã§ããŒã¯ãŒãæœåºããŠã¯ã©ãŠãã¯ãŒãã¯ã©ãŠãå ãŸã§çµã¿èŸŒãå®å
šçãäœããŸãã
äœããŸããïŒ
ã¯ãã
ChatGPT:
>ã§ã¯ãColab äžã§ Gemini çæçµæãèªåã§ããŒã¯ãŒãæœåºããŠã¯ãŒãã¯ã©ãŠãåããå®å
šç ãäœããŸãã
ããã§çæ â èŠçŽã»åé¡ â ããŒã¯ãŒãæœåº â å¯èŠåãŸã§ã¯ã³ã¹ãããã§ãã
1. å¿
èŠã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«ã»ã€ã³ããŒã
# ã¯ãŒãã¯ã©ãŠãçšã©ã€ãã©ãª
!pip install wordcloud
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from sklearn.feature_extraction.text import CountVectorizer
2. API ããŒãšãšã³ããã€ã³ã
api_key = os.environ.get("GEMINI_API_KEY", "ããã«APIããŒãå
¥å")
endpoint = "https://api.gemini.google.com/v1/generateText"
3. ããã³ããã®å®çŸ©
prompts = [
"AIãšColabã®é£æºã®å©ç¹ã«ã€ããŠç°¡æœã«èª¬æããŠãã ããã",
"æ©æ¢°åŠç¿ã®åŠç¿ãå¹çåããæ¹æ³ã3ã€æããŠãã ããã",
"Pythonã§ããŒã¿å¯èŠåãããéã®ãã€ã³ããæããŠãã ããã",
"çæAIãæè²ã«æŽ»çšããå©ç¹ãšèª²é¡ã«ã€ããŠè¿°ã¹ãŠãã ããã",
"Pythonã§ããã¹ãåŠçããéã®äŸ¿å©ãªã©ã€ãã©ãªãæããŠãã ããã"
]
4. Gemini API åŒã³åºã颿°ïŒèŠçŽã»åé¡æç€ºä»ãïŒ
def generate_summary_and_classification(prompt, max_tokens=200):
full_prompt = (
f"以äžã®è³ªåã«å¯ŸããŠæç« ãçæããç°¡åãªèŠçŽãšã«ããŽãªåé¡ãåºåããŠãã ããã\n"
f"質å: {prompt}\n"
f"åºå圢åŒ: JSON ã§ summary, category, response ãè¿ããŠãã ããã"
)
payload = {"prompt": full_prompt, "maxTokens": max_tokens}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
response = requests.post(endpoint, headers=headers, json=payload)
if response.status_code == 200:
try:
return response.json()
except:
return {"summary": "", "category": "Other", "response": response.text}
else:
print(f"Error {response.status_code}: {response.text}")
return {"summary": "", "category": "Other", "response": ""}
5. è€æ°ããã³ããåŠçã»ããŒã¯ãŒãæœåº
results = []
def extract_keywords(text, top_n=10):
vectorizer = CountVectorizer(stop_words="english")
X = vectorizer.fit_transform([text])
word_counts = X.toarray().sum(axis=0)
words = vectorizer.get_feature_names_out()
keywords = [words[i] for i in word_counts.argsort()[::-1][:top_n]]
return keywords
all_text_for_wordcloud = ""
for prompt in prompts:
result = generate_summary_and_classification(prompt)
response_text = result.get("response", "")
summary = result.get("summary", "")
category = result.get("category", "")
keywords = extract_keywords(response_text)
all_text_for_wordcloud += "" + "".join(keywords)
results.append({
"prompt": prompt,
"response": response_text,
"summary": summary,
"category": category,
"keywords": ", ".join(keywords),
"length": len(response_text)
})
df = pd.DataFrame(results)
df.to_csv("/content/colab_gemini_wordcloud.csv", index=False)
df
6. å¯èŠå
(a) çææåæ°
plt.figure(figsize=(8,5))
plt.barh(df["prompt"], df["length"], color="skyblue")
plt.xlabel("çææåæ°")
plt.ylabel("ããã³ãã")
plt.title("ããã³ããããšã®çææåæ°")
plt.tight_layout()
plt.show()
(b) ã«ããŽãªååž
category_counts = df["category"].value_counts()
plt.figure(figsize=(6,4))
category_counts.plot(kind="bar", color="salmon")
plt.xlabel("ã«ããŽãª")
plt.ylabel("ä»¶æ°")
plt.title("çæçµæã®ã«ããŽãªååž")
plt.tight_layout()
plt.show()
(c) ããŒã¯ãŒãã¯ãŒãã¯ã©ãŠã
wordcloud = WordCloud(width=800, height=400, background_color="white").generate(all_text_for_wordcloud)
plt.figure(figsize=(12,6))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.title("çæçµæã®ããŒã¯ãŒãã¯ãŒãã¯ã©ãŠã")
plt.show()
â
ãã®å®å
šçããŒãããã¯ã§ã§ããããšïŒ
è€æ°ããã³ããã® Gemini çæ
èŠçŽã»ã«ããŽãªåé¡
ããŒã¯ãŒãæœåº
çææåæ°ã»ã«ããŽãªååžã»ã¯ãŒãã¯ã©ãŠãã®å¯èŠå
CSV ã§çµæä¿å
å¿
èŠã§ããã°ããã®ã¯ãŒã¯ãããŒã èªåçã« Google Drive ã«ä¿åããŠå
±æ ããå®å
šèªååçã«ãæ¡åŒµå¯èœã§ããäœããŸããïŒ
ã¯ãã
ChatGPT:
>ã§ã¯ãColab äžã§ Gemini çæ â èŠçŽã»åé¡ â ããŒã¯ãŒãæœåº â å¯èŠå â Google Drive èªåä¿å ãŸã§ãã¯ã³ã¹ãããã§è¡ãå®å
šèªååçãäœããŸãã
1. Google Drive ããŠã³ã
from google.colab import drive
drive.mount('/content/drive')
ååã¯èªèšŒã³ãŒãã®å
¥åãå¿
èŠã§ããããã§ /content/drive/MyDrive/ 以äžã«ãã¡ã€ã«ãä¿åå¯èœã«ãªããŸãã
2. ã©ã€ãã©ãªã®ã€ã³ããŒã
!pip install wordcloud
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from sklearn.feature_extraction.text import CountVectorizer
3. API ããŒãš Gemini ãšã³ããã€ã³ãèšå®
api_key = os.environ.get("GEMINI_API_KEY", "ããã«APIããŒãå
¥å")
endpoint = "https://api.gemini.google.com/v1/generateText"
4. è€æ°ããã³ããå®çŸ©
prompts = [
"AIãšColabã®é£æºã®å©ç¹ã«ã€ããŠç°¡æœã«èª¬æããŠãã ããã",
"æ©æ¢°åŠç¿ã®åŠç¿ãå¹çåããæ¹æ³ã3ã€æããŠãã ããã",
"Pythonã§ããŒã¿å¯èŠåãããéã®ãã€ã³ããæããŠãã ããã",
"çæAIãæè²ã«æŽ»çšããå©ç¹ãšèª²é¡ã«ã€ããŠè¿°ã¹ãŠãã ããã",
"Pythonã§ããã¹ãåŠçããéã®äŸ¿å©ãªã©ã€ãã©ãªãæããŠãã ããã"
]
5. Gemini API åŒã³åºã颿°ïŒèŠçŽã»åé¡ïŒ
def generate_summary_and_classification(prompt, max_tokens=200):
full_prompt = (
f"以äžã®è³ªåã«å¯ŸããŠæç« ãçæããç°¡åãªèŠçŽãšã«ããŽãªåé¡ãåºåããŠãã ããã\n"
f"質å: {prompt}\n"
f"åºå圢åŒ: JSON ã§ summary, category, response ãè¿ããŠãã ããã"
)
payload = {"prompt": full_prompt, "maxTokens": max_tokens}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
response = requests.post(endpoint, headers=headers, json=payload)
if response.status_code == 200:
try:
return response.json()
except:
return {"summary": "", "category": "Other", "response": response.text}
else:
print(f"Error {response.status_code}: {response.text}")
return {"summary": "", "category": "Other", "response": ""}
6. è€æ°ããã³ããåŠçã»ããŒã¯ãŒãæœåºã»Drive ä¿å
results = []
def extract_keywords(text, top_n=10):
vectorizer = CountVectorizer(stop_words="english")
X = vectorizer.fit_transform([text])
word_counts = X.toarray().sum(axis=0)
words = vectorizer.get_feature_names_out()
keywords = [words[i] for i in word_counts.argsort()[::-1][:top_n]]
return keywords
all_text_for_wordcloud = ""
for prompt in prompts:
result = generate_summary_and_classification(prompt)
response_text = result.get("response", "")
summary = result.get("summary", "")
category = result.get("category", "")
keywords = extract_keywords(response_text)
all_text_for_wordcloud += "" + "".join(keywords)
results.append({
"prompt": prompt,
"response": response_text,
"summary": summary,
"category": category,
"keywords": ", ".join(keywords),
"length": len(response_text)
})
df = pd.DataFrame(results)
# Google Drive ã«ä¿å
drive_path = "/content/drive/MyDrive/colab_gemini_complete.csv"
df.to_csv(drive_path, index=False)
print(f"CSV ä¿åå®äº: {drive_path}")
7. å¯èŠå
(a) çææåæ°
plt.figure(figsize=(8,5))
plt.barh(df["prompt"], df["length"], color="skyblue")
plt.xlabel("çææåæ°")
plt.ylabel("ããã³ãã")
plt.title("ããã³ããããšã®çææåæ°")
plt.tight_layout()
plt.show()
(b) ã«ããŽãªååž
category_counts = df["category"].value_counts()
plt.figure(figsize=(6,4))
category_counts.plot(kind="bar", color="salmon")
plt.xlabel("ã«ããŽãª")
plt.ylabel("ä»¶æ°")
plt.title("çæçµæã®ã«ããŽãªååž")
plt.tight_layout()
plt.show()
(c) ããŒã¯ãŒãã¯ãŒãã¯ã©ãŠã
wordcloud = WordCloud(width=800, height=400, background_color="white").generate(all_text_for_wordcloud)
plt.figure(figsize=(12,6))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.title("çæçµæã®ããŒã¯ãŒãã¯ãŒãã¯ã©ãŠã")
plt.show()
â
å®å
šèªååçã®ç¹åŸŽïŒ
è€æ°ããã³ããçæ â èŠçŽã»åé¡
ããŒã¯ãŒãæœåº â ã¯ãŒãã¯ã©ãŠãå
çææåæ°ã»ã«ããŽãªååžã®å¯èŠå
çµæã Google Drive ã«èªåä¿å
Colab äžã§ã¯ã³ã¹ãããå®çµ
åžæã§ããã°ãããã« å®æçã« Gemini API ãèªåã§å®è¡ã㊠Drive ã«è¿œèšæŽæ°ããã¹ã±ãžã¥ãŒã«åç ãäœããŸãã
äœããŸããïŒ
ã¯ãã
ChatGPT:
>ã§ã¯ãColab äžã§ Gemini API ã®èªå宿å®è¡ â çæçµæã®æŽæ°ã»ä¿å â å¯èŠåãèªåæŽæ° ãŸã§è¡ãã¹ã±ãžã¥ãŒã«åçãäœããŸãã
ããã§ã¯ Colab å
ã§ç°¡æçã« æéééã§ã«ãŒãå®è¡ ã㊠Google Drive ã«è¿œèšããæ¹æ³ã瀺ããŸãã
1. ã©ã€ãã©ãªæºå
!pip install wordcloud
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from sklearn.feature_extraction.text import CountVectorizer
import time
2. API ããŒãšãšã³ããã€ã³ã
api_key = os.environ.get("GEMINI_API_KEY", "ããã«APIããŒãå
¥å")
endpoint = "https://api.gemini.google.com/v1/generateText"
3. è€æ°ããã³ããå®çŸ©
prompts = [
"AIãšColabã®é£æºã®å©ç¹ã«ã€ããŠç°¡æœã«èª¬æããŠãã ããã",
"æ©æ¢°åŠç¿ã®åŠç¿ãå¹çåããæ¹æ³ã3ã€æããŠãã ããã",
"Pythonã§ããŒã¿å¯èŠåãããéã®ãã€ã³ããæããŠãã ããã"
]
4. Gemini API åŒã³åºã颿°ïŒèŠçŽã»åé¡ïŒ
def generate_summary_and_classification(prompt, max_tokens=200):
full_prompt = (
f"以äžã®è³ªåã«å¯ŸããŠæç« ãçæããç°¡åãªèŠçŽãšã«ããŽãªåé¡ãåºåããŠãã ããã\n"
f"質å: {prompt}\n"
f"åºå圢åŒ: JSON ã§ summary, category, response ãè¿ããŠãã ããã"
)
payload = {"prompt": full_prompt, "maxTokens": max_tokens}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
response = requests.post(endpoint, headers=headers, json=payload)
if response.status_code == 200:
try:
return response.json()
except:
return {"summary": "", "category": "Other", "response": response.text}
else:
print(f"Error {response.status_code}: {response.text}")
return {"summary": "", "category": "Other", "response": ""}
5. ããŒã¯ãŒãæœåºé¢æ°
def extract_keywords(text, top_n=10):
vectorizer = CountVectorizer(stop_words="english")
X = vectorizer.fit_transform([text])
word_counts = X.toarray().sum(axis=0)
words = vectorizer.get_feature_names_out()
keywords = [words[i] for i in word_counts.argsort()[::-1][:top_n]]
return keywords
6. Google Drive ä¿åå
drive_path = "/content/drive/MyDrive/colab_gemini_schedule.csv"
7. èªå宿å®è¡ã«ãŒãïŒäŸ: 30åééã§3åå®è¡ïŒ
num_iterations = 3 # å®è¡åæ°
interval_minutes = 30 # å®è¡ééïŒåïŒ
for i in range(num_iterations):
print(f"\n=== Iteration {i+1} ===")
results = []
all_text_for_wordcloud = ""
for prompt in prompts:
result = generate_summary_and_classification(prompt)
response_text = result.get("response", "")
summary = result.get("summary", "")
category = result.get("category", "")
keywords = extract_keywords(response_text)
all_text_for_wordcloud += "" + "".join(keywords)
results.append({
"prompt": prompt,
"response": response_text,
"summary": summary,
"category": category,
"keywords": ", ".join(keywords),
"length": len(response_text)
})
df = pd.DataFrame(results)
# Drive ã«è¿œèšä¿åïŒæ¢åãã¡ã€ã«ãããã°è¿œèšïŒ
if os.path.exists(drive_path):
df.to_csv(drive_path, mode='a', index=False, header=False)
else:
df.to_csv(drive_path, index=False)
print(f"Iteration {i+1} ä¿åå®äº: {drive_path}")
# å¯èŠå
plt.figure(figsize=(8,5))
plt.barh(df["prompt"], df["length"], color="skyblue")
plt.xlabel("çææåæ°")
plt.ylabel("ããã³ãã")
plt.title(f"Iteration {i+1} ããã³ããããšã®çææåæ°")
plt.tight_layout()
plt.show()
wordcloud = WordCloud(width=800, height=400, background_color="white").generate(all_text_for_wordcloud)
plt.figure(figsize=(12,6))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.title(f"Iteration {i+1} ã¯ãŒãã¯ã©ãŠã")
plt.show()
if i < num_iterations - 1:
print(f"{interval_minutes}ååŸ
æ©äž...")
time.sleep(interval_minutes * 60)
â
ç¹åŸŽ
æå®åæ°ã»ééã§ Gemini API ãèªåå®è¡
çæçµæã»èŠçŽã»åé¡ã»ããŒã¯ãŒãã CSV ã«è¿œèšä¿å
çææåæ°ã»ã¯ãŒãã¯ã©ãŠããæ¯åå¯èŠå
Google Drive ã«èªåä¿åã§å
±æå¯èœ
å¿
èŠã§ããã°ãããã« Slack / Discord ãªã©ã«èªåéç¥ ããä»çµã¿ã远å ããŠã
çæçµæãããŒã ã«ãªã¢ã«ã¿ã€ã é
ä¿¡ããèªååãããŒã«ããããšãå¯èœã§ãã
äœããŸããïŒ
ã¯ãã
ChatGPT:
>ã§ã¯ãColab äžã§ Gemini çæçµæã Slack ãŸã㯠Discord ã«èªåéç¥ ããä»çµã¿ã远å ããå®å
šèªååçãäœããŸãã
ããã§ã¯ãçæ â èŠçŽã»åé¡ â ããŒã¯ãŒãæœåº â å¯èŠå â Google Drive ä¿å â Slack/Discord éç¥ãŸã§ã¯ã³ã¹ãããã§è¡ããŸãã
1. ã©ã€ãã©ãªæºå
!pip install wordcloud requests
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from sklearn.feature_extraction.text import CountVectorizer
import time
2. API ããŒã»ãšã³ããã€ã³ãã»Drive ãã¹èšå®
api_key = os.environ.get("GEMINI_API_KEY", "ããã«APIããŒãå
¥å")
endpoint = "https://api.gemini.google.com/v1/generateText"
drive_path = "/content/drive/MyDrive/colab_gemini_slack.csv"
3. Slack / Discord Webhook URL èšå®
# Slack Webhook URL
slack_webhook_url = "https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX"
# Discord Webhook URL
discord_webhook_url = "https://discord.com/api/webhooks/XXXXX/XXXXX"
4. ããã³ããå®çŸ©
prompts = [
"AIãšColabã®é£æºã®å©ç¹ã«ã€ããŠç°¡æœã«èª¬æããŠãã ããã",
"æ©æ¢°åŠç¿ã®åŠç¿ãå¹çåããæ¹æ³ã3ã€æããŠãã ããã",
"Pythonã§ããŒã¿å¯èŠåãããéã®ãã€ã³ããæããŠãã ããã"
]
5. Gemini API åŒã³åºã颿°
def generate_summary_and_classification(prompt, max_tokens=200):
full_prompt = (
f"以äžã®è³ªåã«å¯ŸããŠæç« ãçæããç°¡åãªèŠçŽãšã«ããŽãªåé¡ãåºåããŠãã ããã\n"
f"質å: {prompt}\n"
f"åºå圢åŒ: JSON ã§ summary, category, response ãè¿ããŠãã ããã"
)
payload = {"prompt": full_prompt, "maxTokens": max_tokens}
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
response = requests.post(endpoint, headers=headers, json=payload)
if response.status_code == 200:
try:
return response.json()
except:
return {"summary": "", "category": "Other", "response": response.text}
else:
print(f"Error {response.status_code}: {response.text}")
return {"summary": "", "category": "Other", "response": ""}
6. ããŒã¯ãŒãæœåºé¢æ°
def extract_keywords(text, top_n=10):
vectorizer = CountVectorizer(stop_words="english")
X = vectorizer.fit_transform([text])
word_counts = X.toarray().sum(axis=0)
words = vectorizer.get_feature_names_out()
keywords = [words[i] for i in word_counts.argsort()[::-1][:top_n]]
return keywords
7. Slack / Discord éç¥é¢æ°
def send_slack_message(message):
payload = {"text": message}
requests.post(slack_webhook_url, json=payload)
def send_discord_message(message):
payload = {"content": message}
requests.post(discord_webhook_url, json=payload)
8. èªå宿å®è¡ã«ãŒãïŒäŸ: 2åã30åééïŒ
num_iterations = 2
interval_minutes = 30
for i in range(num_iterations):
print(f"\n=== Iteration {i+1} ===")
results = []
all_text_for_wordcloud = ""
for prompt in prompts:
result = generate_summary_and_classification(prompt)
response_text = result.get("response", "")
summary = result.get("summary", "")
category = result.get("category", "")
keywords = extract_keywords(response_text)
all_text_for_wordcloud += "" + "".join(keywords)
results.append({
"prompt": prompt,
"response": response_text,
"summary": summary,
"category": category,
"keywords": ", ".join(keywords),
"length": len(response_text)
})
df = pd.DataFrame(results)
# Drive ã«ä¿åã»è¿œèš
if os.path.exists(drive_path):
df.to_csv(drive_path, mode='a', index=False, header=False)
else:
df.to_csv(drive_path, index=False)
# Slack / Discord éç¥
for r in results:
message = f"Iteration {i+1} - Prompt: {r['prompt']}\nSummary: {r['summary']}\nCategory: {r['category']}\nKeywords: {r['keywords']}\n"
send_slack_message(message)
send_discord_message(message)
print(f"Iteration {i+1} ä¿åã»éç¥å®äº: {drive_path}")
# å¯èŠå
plt.figure(figsize=(8,5))
plt.barh(df["prompt"], df["length"], color="skyblue")
plt.xlabel("çææåæ°")
plt.ylabel("ããã³ãã")
plt.title(f"Iteration {i+1} ããã³ããããšã®çææåæ°")
plt.tight_layout()
plt.show()
wordcloud = WordCloud(width=800, height=400, background_color="white").generate(all_text_for_wordcloud)
plt.figure(figsize=(12,6))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.title(f"Iteration {i+1} ã¯ãŒãã¯ã©ãŠã")
plt.show()
if i < num_iterations - 1:
print(f"{interval_minutes}ååŸ
æ©äž...")
time.sleep(interval_minutes * 60)
â
ãã®å®å
šèªååçã®ç¹åŸŽ
Gemini çæ â èŠçŽã»åé¡ â ããŒã¯ãŒãæœåº
çææåæ°ã»ã¯ãŒãã¯ã©ãŠãã®å¯èŠå
Google Drive ã«èªåä¿å
Slack / Discord ã«èªåéç¥
宿å®è¡ïŒæå®åæ°ã»ééïŒã§èªåæŽæ°
ð¡ æ¡åŒµäŸïŒ
Webhook ã§ã®éç¥ã« çæçµæã®ç»åïŒã¯ãŒãã¯ã©ãŠãïŒæ·»ä»
å®è¡ééãããã³ãããªã¹ãã Google Sheets ã§ç®¡çããåçã«ååŸ
çµæã Notion ã«ãèªååæ
å¿
èŠã§ããã°ãã¯ãŒãã¯ã©ãŠãç»åã Slack / Discord ã«æ·»ä»ããéç¥ç ãäœããŸãã
äœããŸããïŒ
å
šäœã®ç®¡çã¯Githubã§è¡ããããGithub飿ºã®ã¹ã¯ãªãããã玹ä»ãã ããã
ChatGPT:
>ããããŸãããã§ã¯ãColab + Gemini èªåçæã¯ãŒã¯ãããŒã GitHub ã§ç®¡çã»èªåæŽæ°ã§ããä»çµã¿ ã®ãµã³ãã«ã¹ã¯ãªããã瀺ããŸãã
ããã§ã¯ä»¥äžãå®çŸããŸãïŒ
Colab / Python ã¹ã¯ãªããã GitHub ãªããžããªã§ç®¡ç
çæçµæ CSV ã GitHub ã«èªåã³ãããã»ããã·ã¥
GitHub Actions ã§å®æå®è¡ãå¯èœ
1. GitHub ãªããžããªã«æ¥ç¶ããæºå
a. Personal Access TokenïŒPATïŒã®äœæ
GitHub > Settings > Developer settings > Personal access tokens
repo æš©éä»ãããŒã¯ã³ãäœæ
Colab ã§äœ¿çšãã
b. Colab ã« GitHub æ
å ±ãèšå®
import os
# GitHub ãªããžããªæ
å ±
GITHUB_USERNAME = "ããªãã®GitHubãŠãŒã¶ãŒå"
GITHUB_REPO = "ãªããžããªå"
GITHUB_BRANCH = "main"
# Personal Access Token
GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN", "ããã«PATãå
¥å")
2. CSV ã GitHub ã«èªåã³ãããã»ããã·ã¥ãã颿°
from git import Repo
import shutil
def push_to_github(local_file_path, repo_path="/content/temp_repo"):
"""
local_file_path: Colab äžã®ä¿åãã¡ã€ã«
repo_path: äžæã¯ããŒã³å
"""
repo_url = f"https://{GITHUB_USERNAME}:{GITHUB_TOKEN}@github.com/{GITHUB_USERNAME}/{GITHUB_REPO}.git"
# äžæãã£ã¬ã¯ããªã«ã¯ããŒã³
if os.path.exists(repo_path):
shutil.rmtree(repo_path)
Repo.clone_from(repo_url, repo_path, branch=GITHUB_BRANCH)
# ãã¡ã€ã«ãã³ããŒ
shutil.copy(local_file_path, repo_path)
# Git æäœ
repo = Repo(repo_path)
repo.git.add(".")
repo.git.commit("-m", "Update generated CSV from Colab")
repo.git.push("origin", GITHUB_BRANCH)
print("GitHub ã«ããã·ã¥å®äº")
3. CSV ä¿å + GitHub ããã·ã¥ã®äŸ
local_csv_path = "/content/colab_gemini_github.csv"
# ãããŸã§ã® Gemini èªåçæãããŒã§ df ãäœææžã¿ãšä»®å®
df.to_csv(local_csv_path, index=False)
# GitHub ã«ããã·ã¥
push_to_github(local_csv_path)
4. GitHub Actions ã§å®æå®è¡ããæ¹æ³
ãªããžããªã« .github/workflows/run_colab.yml ãäœæ
å
容äŸïŒ
name: Run Gemini Workflow
on:
schedule:
- cron: '0 */6 * * *' # 6æéããšã«å®è¡
workflow_dispatch: # æåå®è¡ãå¯èœ
jobs:
run_colab:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Install dependencies
run: pip install pandas requests matplotlib wordcloud scikit-learn
- name: Run script
run: python path/to/your_script.py
- name: Commit & push results
run: |
git config --global user.name "github-actions"
git config --global user.email "actions@github.com"
git add colab_gemini_github.csv
git commit -m "Auto update from GitHub Actions" || echo "No changes to commit"
git push
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
â
ç¹åŸŽ
Colab / Python ã¹ã¯ãªããã GitHub 管ç
çæçµæ CSV ãèªåããã·ã¥
GitHub Actions ã§å®æå®è¡ãå¯èœ
Slack / Discord 飿ºã远å ãããŸãŸ GitHub 管çå¯èœ
ð¡ æ¡åŒµæ¡ïŒ
GitHub Actions ã§çŽæ¥ Gemini API ãå©ã㊠Colab ã䜿ããå®å
šèªåå
CSV ã®ä»ã« ã¯ãŒãã¯ã©ãŠãç»åã GitHub ã«ã¢ããããŒã
Slack / Discord éç¥ã GitHub Actions å
ã§è¡ã
åžæã§ããã°ãColab ã¯ãŒã¯ãã㌠+ Slack/Discord éç¥ + GitHub èªå管çãçµ±åããå®å
šã¹ã¯ãªããäŸ ãäœããŸããäœããŸããïŒ
Network connection lost. Attempting to reconnectâŠ
ã¯ãã
ChatGPT:
>ã§ã¯ãColab ã¯ãŒã¯ãã㌠+ Gemini çæ â èŠçŽã»åé¡ â ããŒã¯ãŒãæœåº â å¯èŠå â Google Drive ä¿å â Slack/Discord éç¥ â GitHub èªå管ç ãçµ±åããå®å
šã¹ã¯ãªããäŸãäœããŸãã
1. ã©ã€ãã©ãªæºå
!pip install wordcloud gitpython requests
import os
import requests
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from sklearn.feature_extraction.text import CountVectorizer
from git import Repo
import shutil
import time
2. ç°å¢å€æ° / èšå®
# Gemini API
GEMINI_API_KEY = os.environ.get("GEMINI_API_KEY", "ããã«APIããŒ")
GEMINI_ENDPOINT = "https://api.gemini.google.com/v1/generateText"
# Google Drive ä¿åå
DRIVE_PATH = "/content/drive/MyDrive/colab_gemini_complete.csv"
# Slack / Discord Webhook
SLACK_WEBHOOK = "https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX"
DISCORD_WEBHOOK = "https://discord.com/api/webhooks/XXXXX/XXXXX"
# GitHub ãªããžããªèšå®
GITHUB_USERNAME = "ããªãã®GitHubãŠãŒã¶ãŒå"
GITHUB_REPO = "ãªããžããªå"
GITHUB_BRANCH = "main"
GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN", "ããã«PAT")
3. ããã³ããå®çŸ©
PROMPTS = [
"AIãšColabã®é£æºã®å©ç¹ã«ã€ããŠç°¡æœã«èª¬æããŠãã ããã",
"æ©æ¢°åŠç¿ã®åŠç¿ãå¹çåããæ¹æ³ã3ã€æããŠãã ããã",
"Pythonã§ããŒã¿å¯èŠåãããéã®ãã€ã³ããæããŠãã ããã"
]
4. Gemini API åŒã³åºã颿°
def generate_summary_and_classification(prompt, max_tokens=200):
full_prompt = (
f"以äžã®è³ªåã«å¯ŸããŠæç« ãçæããç°¡åãªèŠçŽãšã«ããŽãªåé¡ãåºåããŠãã ããã\n"
f"質å: {prompt}\n"
f"åºå圢åŒ: JSON ã§ summary, category, response ãè¿ããŠãã ããã"
)
payload = {"prompt": full_prompt, "maxTokens": max_tokens}
headers = {"Authorization": f"Bearer {GEMINI_API_KEY}", "Content-Type": "application/json"}
response = requests.post(GEMINI_ENDPOINT, headers=headers, json=payload)
if response.status_code == 200:
try:
return response.json()
except:
return {"summary": "", "category": "Other", "response": response.text}
else:
print(f"Error {response.status_code}: {response.text}")
return {"summary": "", "category": "Other", "response": ""}
5. ããŒã¯ãŒãæœåºé¢æ°
def extract_keywords(text, top_n=10):
vectorizer = CountVectorizer(stop_words="english")
X = vectorizer.fit_transform([text])
word_counts = X.toarray().sum(axis=0)
words = vectorizer.get_feature_names_out()
return [words[i] for i in word_counts.argsort()[::-1][:top_n]]
6. Slack / Discord éç¥é¢æ°
def send_slack_message(message):
requests.post(SLACK_WEBHOOK, json={"text": message})
def send_discord_message(message):
requests.post(DISCORD_WEBHOOK, json={"content": message})
7. GitHub èªåããã·ã¥é¢æ°
def push_to_github(local_file_path, repo_path="/content/temp_repo"):
repo_url = f"https://{GITHUB_USERNAME}:{GITHUB_TOKEN}@github.com/{GITHUB_USERNAME}/{GITHUB_REPO}.git"
if os.path.exists(repo_path):
shutil.rmtree(repo_path)
Repo.clone_from(repo_url, repo_path, branch=GITHUB_BRANCH)
shutil.copy(local_file_path, repo_path)
repo = Repo(repo_path)
repo.git.add(".")
repo.git.commit("-m", "Update generated CSV from Colab workflow")
repo.git.push("origin", GITHUB_BRANCH)
print("GitHub ã«ããã·ã¥å®äº")
8. ã¡ã€ã³åŠçïŒçæ â èŠçŽ â ããŒã¯ãŒã â ä¿å â éç¥ â GitHubïŒ
results = []
all_text_for_wordcloud = ""
for prompt in PROMPTS:
res = generate_summary_and_classification(prompt)
response_text = res.get("response", "")
summary = res.get("summary", "")
category = res.get("category", "")
keywords = extract_keywords(response_text)
all_text_for_wordcloud += "" + "".join(keywords)
results.append({
"prompt": prompt,
"response": response_text,
"summary": summary,
"category": category,
"keywords": ", ".join(keywords),
"length": len(response_text)
})
# Slack / Discord ã«éç¥
msg = f"Prompt: {prompt}\nSummary: {summary}\nCategory: {category}\nKeywords: {', '.join(keywords)}"
send_slack_message(msg)
send_discord_message(msg)
# DataFrame äœæ & Drive ä¿å
df = pd.DataFrame(results)
df.to_csv(DRIVE_PATH, index=False)
print(f"Google Drive ã«ä¿åå®äº: {DRIVE_PATH}")
# GitHub ã«ããã·ã¥
push_to_github(DRIVE_PATH)
# å¯èŠå
plt.figure(figsize=(8,5))
plt.barh(df["prompt"], df["length"], color="skyblue")
plt.xlabel("çææåæ°")
plt.ylabel("ããã³ãã")
plt.title("ããã³ããããšã®çææåæ°")
plt.tight_layout()
plt.show()
wordcloud = WordCloud(width=800, height=400, background_color="white").generate(all_text_for_wordcloud)
plt.figure(figsize=(12,6))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.title("ã¯ãŒãã¯ã©ãŠã")
plt.show()
â
ãã®ã¹ã¯ãªããã§ã§ããããš
Gemini çæ â èŠçŽã»åé¡ â ããŒã¯ãŒãæœåº
çæçµæã Google Drive ã«ä¿å
Slack / Discord ã«èªåéç¥
GitHub ã«èªåããã·ã¥ã§ããŒãžã§ã³ç®¡ç
çææåæ°ã»ã¯ãŒãã¯ã©ãŠãã®å¯èŠå
ð¡ æ¡åŒµæ¡ïŒ
GitHub Actions ã§ãã®ã¹ã¯ãªããã宿å®è¡ïŒColab ã䜿ããå®å
šèªååïŒ
ã¯ãŒãã¯ã©ãŠãç»åã Slack / Discord ã«æ·»ä»éç¥
ããã³ãããªã¹ãã GitHub 管çããåçã«ååŸ
å¿
èŠã§ããã°ãGitHub Actions ã§ã®å®æå®è¡ + Slack/Discord æ·»ä»ç»åéç¥ç ãäœããŸããäœããŸããïŒ
ChatGPT ã®åçã¯å¿
ãããæ£ãããšã¯éããŸãããéèŠãªæ
å ±ã¯ç¢ºèªããããã«ããŠãã ããã
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
