#pip3 install googletrans==4.0.0-rc1 import gradio as gr from google import genai from google.genai import types import os from dotenv import load_dotenv from googletrans import Translator from pgvector.psycopg import register_vector, Bit import psycopg2 #import cohere #import numpy as np load_dotenv(verbose=True) #co = cohere.ClientV2(api_key=os.environ.get("COHERE_API_KEY")) client = genai.Client(api_key=os.environ["GEMINI_API_KEY"]) # Embedding function #def embed(input, input_type): #response = co.embed(texts=input, model='embed-multilingual-v3.0', input_type=input_type, embedding_types=['ubinary']) #return [np.unpackbits(np.array(embedding, dtype=np.uint8)) for embedding in response.embeddings.ubinary] # 埋め込み生成関数 def generate_embeddings(texts): # 改行または句点で分割(任意で調整可能) if isinstance(texts, str): inputs = [t.strip() for t in texts.split("\n") if t.strip()] else: inputs = texts result = client.models.embed_content( model="gemini-embedding-001", contents=inputs, config=types.EmbedContentConfig(output_dimensionality=1024) ) # 結果を整形して表示 formatted = "" for i, embedding in enumerate(result.embeddings): formatted += f"{embedding.values}" return formatted async def generate_content(prompt): conn = psycopg2.connect( dbname="smair", user="smairuser", password="smairuser", host="www.ryhintl.com", port=10629 ) cur = conn.cursor() # Embed the query #query_embedding = embed([prompt], 'search_query')[0] query_embedding = generate_embeddings(prompt) # Convert numpy array to a Python list or tuple #query_embedding = query_embedding.tolist() # Convert to list cur.execute( 'SELECT content, 1 - (embedding <=> %s::vector) AS similarity FROM thinking_rag where (1 - (embedding <=> %s::vector)) <> 0 ORDER BY similarity ASC', (query_embedding,query_embedding) ) results = cur.fetchall() vector_resp = [row[0] for row in results] final_prompt = f''' {vector_resp}に基づいて{prompt}に対する答えを正確に出力してください。 ''' #client = genai.Client(api_key=os.environ["GEMINI_API_KEY"]) config = {'thinking_config': {'include_thoughts': True}} response = client.models.generate_content( model="gemini-2.5-flash", #model='gemini-2.0-flash-thinking-exp', contents=final_prompt, config=config ) summary_thought = "" summary_answer = '' translator = Translator() summary_thought = "" summary_answer = "" for part in response.candidates[0].content.parts: if not part.text: continue translated_text = await translator.translate(part.text, src='en', dest='ja') if part.thought: summary_thought += translated_text.text else: summary_answer += translated_text.text summaries = summary_thought + '\n' + summary_answer return summary_thought,summary_answer # Gradio Blocksの設定 with gr.Blocks(title="gemini thinking RAG",css="footer {visibility: hidden;} #header {display: flex; justify-content: space-between; align-items: center; font-size: 24px; font-weight: bold;} #logo {width: 50px; height: 50px;} .logout-btn { background-color: #3498db; border-radius: 10px; color: white; padding: 10px 20px; border: none; cursor: pointer; transparent-bg {background-color: transparent; color: black; padding: 10px; border: none;}") as gemini: gr.HTML('

Geminiは、Googleが開発した大規模言語モデルであり、その思考プロセスは、単一のAIモデルではなく、複数の「エージェント」が連携して複雑なタスクを解決する**「Multi-Agent Reasoning」**という手法をコアとしています。
このプロセスは、複雑な問題を解くために、複数の専門家が協力する人間のチームに似ています。具体的には、Geminiの思考は以下のステップで構成されています。
このMulti-Agent Reasoningの手法は、従来のAIモデルにはない以下のようなメリットをもたらします。
まとめ:
Geminiの「思考」は、単一の巨大なモデルが一気に答えを出すのではなく、複数の専門AIエージェントが協力して問題を解決する、高度に構造化されたプロセスであると理解できます。これにより、より複雑で精度の高いアウトプットが可能になります。