Spaces:
Running
Running
| """ | |
| Blog Editor agent implemented with LLMs and crewai framework for handling autogen agents. | |
| It uses streamlit, crewai and openai functions to execute the task of interest. | |
| It is based on the crewai gemini demo: https://huggingface.co/spaces/eaglelandsonce/crewaiongemini | |
| Role and backstory was created using prompt generator role from awesome gpt prompts with few shot prompting with gpt 3.5 turbo | |
| """ | |
| import os | |
| import streamlit as st | |
| from crewai import Agent, Task, Crew, Process | |
| from langchain.tools import DuckDuckGoSearchRun | |
| from langchain_openai import ChatOpenAI | |
| # set page title | |
| st.title("Blog Editor") | |
| st.markdown( | |
| "This is a demo of the [CrewAI](https://www.crewai.com/) framework for handling autogen agents. It is based on the [CrewAI Gemini Demo](https://huggingface.co/spaces/eaglelandsonce/crewaiongemini)." | |
| ) | |
| st.markdown( | |
| "The goal of this demo is to show how you can use the [CrewAI](https://crewai.co/) framework to create a blog editor agent that can help you edit your blog posts. The agent is composed of two agents: a researcher and an editor. The researcher is responsible for conducting research and fact-checking the information provided in the blog post. The editor is responsible for editing the blog post and making sure it is clear, coherent, and impactful." | |
| ) | |
| st.write("") | |
| st.markdown("Click on the icon 🖱️ Logs to see how the agents are making the decisions.") | |
| # Retrieve API Key from Environment Variable | |
| # setup sidebar: models to choose from and API key input | |
| with st.sidebar: | |
| st.header("OpenAI Configuration") | |
| st.markdown( | |
| "For more information about the models, see [here](https://platform.openai.com/docs/models/gpt-4-and-gpt-4-turbo)." | |
| ) | |
| OPENAI_API_KEY = st.text_input("API Key", type="password") | |
| # Instantiate your tools: Search engine tool duckduckgo-search | |
| search_tool = DuckDuckGoSearchRun() | |
| # enter blogpost article | |
| blogpost = st.text_area("Enter blogpost article here", height=200) | |
| # check if blogpost is empty | |
| if blogpost == "": | |
| st.warning("Please enter a blogpost article.") | |
| st.stop() | |
| else: | |
| # Define your agents with roles and goals | |
| editor = Agent( | |
| role="Senior Article Editor", | |
| goal=f"Your goal is to elevate the {blogpost} to its highest potential, ensuring that the writer's message is communicated clearly and powerfully", | |
| backstory="""You are a seasoned article editor with extensive experience in refining written content for clarity and coherence. | |
| Your expertise lies in enhancing the impact of blog posts while preserving the original tone and voice of the writer. | |
| You possess a keen understanding of audience engagement and know how to structure arguments effectively to resonate with readers. | |
| With a sharp eye for detail, you can identify areas where the flow of ideas may be improved, ensuring that each paragraph | |
| transitions smoothly to the next. You are adept at suggesting precise word choices and rephrasing sentences to enhance readability | |
| without altering the author's unique style. Your background in various writing genres equips you with the versatility to adapt to | |
| different topics and tones, making you an invaluable asset in the editing process.""", | |
| verbose=True, | |
| allow_delegation=False, | |
| tools=[search_tool], | |
| llm=ChatOpenAI(model_name="gpt-4-1106-preview", api_key=OPENAI_API_KEY), | |
| ) | |
| researcher = Agent( | |
| role="Article Researcher", | |
| goal='''how can I simplify the process of reviewing the editor's content to ensure its accuracy and relevance? | |
| I will identify key areas to focus on, such as fact-checking, source credibility, and the article's overall tone, | |
| to streamline my evaluation. For each question present the reasoning followed by the correct answer.''', | |
| backstory="""You are a seasoned researcher with a strong background in information literacy and critical analysis. | |
| Your expertise lies in conducting thorough research across various disciplines, ensuring that the information you | |
| gather is accurate, relevant, and credible. You possess a keen ability to evaluate sources, distinguishing between | |
| reliable and unreliable information, and you are skilled in fact-checking claims made in articles. | |
| Your methodical approach includes cross-referencing multiple sources, utilizing academic databases, | |
| and applying rigorous standards to verify the authenticity of the information. You are adept at synthesizing | |
| complex data and presenting it in a clear and concise manner, making you an invaluable resource for anyone seeking | |
| to ensure the integrity of the information they use. Your commitment to accuracy and credibility in research is | |
| paramount, and you are dedicated to upholding the highest standards in information dissemination""", | |
| verbose=True, | |
| allow_delegation=True, | |
| tools=[search_tool], | |
| llm=ChatOpenAI(model_name="gpt-4-1106-preview", api_key=OPENAI_API_KEY), | |
| ) | |
| # Create tasks for your agents | |
| task1 = Task( | |
| description=f"""Conduct a comprehensive analysis of the provided {blogpost}. | |
| Your analysis should include the following: | |
| - Give a brief overview of the article | |
| - Identify the main points of the article | |
| - Find grammatical errors and suggest corrections | |
| - Identify any outdated or irrelevant details and suggest corrections | |
| You can use the search tool to find additional information. But if there is no text do not continue to the next task. | |
| But if there is no text do not continue to the next task. | |
| """, | |
| agent=editor, | |
| ) | |
| task2 = Task( | |
| description=f"""Review the credibility of the sources cited in the {blogpost} and trustworthiness of the information provided. | |
| do not hesitate to use the search tool to find additional information. But if there is no text do not continue to the next task.""", | |
| agent=researcher, | |
| ) | |
| # Instantiate your crew with a sequential process | |
| crew = Crew( | |
| agents=[researcher, editor], | |
| tasks=[task2, task1], | |
| verbose=2, # You can set it to 1 or 2 to different logging levels | |
| # process=Process.sequential, | |
| ) | |
| # Get your crew to work! | |
| result = crew.kickoff() | |
| st.write("######################") | |
| st.markdown(result) | |