Spaces:
Sleeping
Sleeping
| # -*- coding: utf-8 -*- | |
| import os | |
| import openai | |
| import json | |
| import requests | |
| from langchain.chat_models import ChatOpenAI | |
| from langchain_experimental.plan_and_execute import PlanAndExecute, load_agent_executor, load_chat_planner | |
| from langchain.llms import OpenAI | |
| from langchain.agents.tools import Tool | |
| from bs4 import BeautifulSoup | |
| import asyncio | |
| from datetime import timedelta | |
| # APIキーの設定 | |
| openai.api_key = os.getenv("OPENAI_API_KEY") | |
| TAVILY_API_KEY = os.getenv('TAVILY_API_KEY') | |
| # Tavily APIのツールを定義 | |
| class TavilySearchTool: | |
| def search(query): | |
| response = requests.post('https://api.tavily.com/search', headers={ | |
| 'Content-Type': 'application/json' | |
| }, json={ | |
| 'api_key': TAVILY_API_KEY, | |
| 'query': query, | |
| 'max_results': 10, | |
| 'include_answers': True | |
| }) | |
| if response.status_code == 200: | |
| return response.json()['results'] | |
| else: | |
| raise Exception("Failed to fetch data from Tavily API") | |
| # 実行された指示を追跡するリスト | |
| executed_instructions = [] | |
| # 調査結果を保存するリスト | |
| research_results = [] | |
| async def main(editable_output2, keyword_id): | |
| tavily_search_tool = Tool( | |
| name="TavilySearch", | |
| func=TavilySearchTool.search, | |
| description="Search tool using Tavily API" | |
| ) | |
| tools = [tavily_search_tool] | |
| # PlannerとExecutorの定義 | |
| model_name = "gpt-3.5-turbo-1106" | |
| llm = ChatOpenAI(model_name=model_name, temperature=0, max_tokens=1000) | |
| planner = load_chat_planner(llm) | |
| executor = load_agent_executor(llm, tools, verbose=True) | |
| agent = PlanAndExecute(planner=planner, executor=executor, verbose=True) | |
| # HTML解析 | |
| soup = BeautifulSoup(editable_output2, 'html.parser') | |
| h1_text = soup.find('h1').get_text() | |
| h2_texts = [h2.get_text() for h2 in soup.find_all('h2')] | |
| h3_texts = [h3.get_text() for h3 in soup.find_all('h3')] | |
| purpose = f"about {h1_text}, focusing particularly on {' and '.join(h2_texts)} and {' and '.join(h3_texts)}, to investigate the latest information and details" | |
| # 特定情報の指定 | |
| if "人物" in h1_text or any("人物" in h2 for h2 in h2_texts) or any("人物" in h3 for h3 in h3_texts): | |
| purpose += " including the person's name and career" | |
| elif "商品" in h1_text or any("商品" in h2 for h2 in h2_texts) or any("商品" in h3 for h3 in h3_texts): | |
| purpose += " including the brand name, product name, and price" | |
| elif "イベント" in h1_text or any("イベント" in h2 for h2 in h2_texts) or any("イベント" in h3 for h3 in h3_texts): | |
| purpose += " including the event's content, schedule, and venue" | |
| instruction = f"Can you research {purpose} and include specific details in your response? Please provide the information in Japanese." | |
| if instruction not in executed_instructions: | |
| raw_output = agent.run(instruction) | |
| executed_instructions.append(instruction) | |
| response_content = raw_output | |
| research_results.append(response_content) | |
| else: | |
| index = executed_instructions.index(instruction) | |
| response_content = research_results[index] | |
| system_message = { | |
| "role": "system", | |
| "content": "あなたはプロのライターです。すべての回答を日本語でお願いします。" | |
| } | |
| research_summary = "\n".join(research_results) | |
| instructions = [] | |
| instructions.append(f""" | |
| <h1>{h1_text}</h1> | |
| "{h1_text}"に関する導入文を日本語で作成してください。直接的なコピーまたは近いフレーズを避けて、オリジナルな内容にしてください。""") | |
| sentences = research_summary.split('。') | |
| for idx, h2_text in enumerate(h2_texts): | |
| h3_for_this_h2 = [h3 for h3 in h3_texts if h3.startswith(f"{idx+1}-")] | |
| instructions.append(f""" | |
| <h2>{h2_text}</h2> | |
| "{h2_text}"に関する導入文を日本語で作成してください。この導入文は、以下の小見出しの内容を考慮してください:{"、".join(h3_for_this_h2)}。直接的なコピーまたは近いフレーズを避けて、オリジナルな内容にしてください。""") | |
| for h3 in h3_for_this_h2: | |
| related_sentences = [sentence for sentence in sentences if h3 in sentence] | |
| if related_sentences: | |
| content_for_h3 = "。".join(related_sentences) + "。" | |
| instructions.append(f""" | |
| <h3>{h3}</h3> | |
| "{h3}"に関する詳細な内容として、以下の情報を日本語で記述してください:{content_for_h3} ここでも、オリジナルな内容を心がけてください。""") | |
| else: | |
| instructions.append(f""" | |
| <h3>{h3}</h3> | |
| "{h3}"に関する詳細な内容を日本語で記述してください。オリジナルな内容を心がけてください。""") | |
| user_message = { | |
| "role": "user", | |
| "content": "\n".join(instructions) | |
| } | |
| response = openai.ChatCompletion.create( | |
| model="gpt-4-0125-preview", | |
| messages=[system_message, user_message], | |
| temperature=0.7, | |
| ) | |
| result = response.choices[0]["message"]["content"] | |
| with open('output3.txt', 'w', encoding='utf-8') as f: | |
| f.write(result) | |
| print(result) |