crew-material / app.py
fudii0921's picture
Update app.py
6382930 verified
import gradio as gr
from crewai import Agent, Task, Crew, LLM
from crewai.tools import tool
from groq import Groq
import litellm.llms
import requests
import mysql.connector
import os
# データベース接続を設定
conn = mysql.connector.connect(
host="www.ryhintl.com",
user="smairuser",
password="smairuser",
port=36000,
database="smair"
)
# カーソルを取得
cursor = conn.cursor(dictionary=True)
# APIキーを取得
select_one_data_query = "SELECT * FROM agentic_apis"
cursor.execute(select_one_data_query)
result = cursor.fetchall()
keys = [item['key'] for item in result]
# APIキーを設定
os.environ["GROQ_API_KEY"] = keys[2]
llm = LLM(model="groq/llama-3.3-70b-versatile", api_key=os.environ["GROQ_API_KEY"])
tool_resp = ""
@tool("get cohere docs")
def get_codoc_tool() -> str:
"""Get codoc tool"""
response = requests.get('https://www.ryhintl.com/dbjson/getjson?sqlcmd=select `title` as caption,`snippet` as content from cohere_documents_auto')
if response.status_code == 200:
cohere_doc = response.content.decode('utf-8')
global tool_resp
tool_resp = cohere_doc
return cohere_doc
reporter = Agent(
role='記事録分析家',
goal='記事録の内容を詳しく分析する',
backstory=(
"記事録の内容をリアルタイムに分析することができない。"
"よって、リアルタイムに記事録をタイムリーに分析してアドバイスしたい。"
),
llm=llm,
verbose=True
)
summarizer = Agent(
role='要約スペシアリスト',
goal='toolで抽出された記事録データを的確に分析し、LLMを利用して答える。',
backstory=(
"記事録の内容を分析し、答えを得たい。"
),
llm=llm,
verbose=True
)
report_task = Task(
description=(
"DB上の記事録データをリアルタイムに取得する。"
),
expected_output='リアルタイムな記事録データを的確に返す。',
agent=reporter,
tools=[get_codoc_tool]
)
summarizer_task = Task(
description=(
"記事録の内容を分析し、回答する。"
),
expected_output='toolで抽出された記事録データを的確に分析し、LLMを利用して答える。',
agent=summarizer,
)
crew = Crew(
agents=[reporter, summarizer],
tasks=[report_task, summarizer_task],
verbose=True
)
def run_crew(ins):
result = crew.kickoff()
global tool_resp
client = Groq(api_key=os.environ["GROQ_API_KEY"])
system_prompt = {
"role": "system",
"content": "You are a helpful assistant, answer questions concisely."
}
# Set the user prompt
user_input = tool_resp+"を要約してください。"
user_prompt = {
"role": "user", "content": user_input
}
# Initialize the chat history
chat_history = [system_prompt, user_prompt]
response = client.chat.completions.create(
model="llama-3.3-70b-versatile",
messages=chat_history,
max_tokens=1024,
temperature=0)
kekka = response.choices[0].message.content
return "\n\n分析結果\n"+result.raw+"\n\nツールの分析:\n"+kekka
iface = gr.Interface(
fn=run_crew,
inputs=[gr.Textbox(label="プロンプト",visible=False)],
outputs=[gr.Textbox(label="結果")],
title="資料の分析(CrewAI)",
description="記事録の内容を分析します。",
submit_btn="実行",
clear_btn="クリア",
flagging_mode="never"
)
iface.launch()