in factuality/main.py [0:0]
def main(argv):
news_summarizer = Agent(
role="News Summarizer",
goal=(
dedent(
"""\
Summarize current news articles and headlines into clear,
concise paragraphs that provide an accurate and
comprehensive overview of events. The summaries should
be objective, well-structured, and highlight the most
important information from multiple sources on a given
topic."""
)
),
backstory=(
dedent(
"""\
Designed to process large volumes of news data, this
agent was built in response to the growing demand for
quick, reliable news summaries. Drawing from a wide
range of reputable news sources, the agent uses its
expertise in language processing and summarization to
distill key facts and narratives from headlines and
articles. It has a deep understanding of journalistic
integrity and strives to present information that is
balanced, accurate, and easy to read. Equipped with
advanced natural language understanding, the agent
ensures that every summary is both informative and
engaging, keeping readers well-informed about current
events in a fraction of the time."""
)
),
llm=make_gemini(),
)
citation_generator = Agent(
role="Citation Manager",
goal=(
dedent(
"""\
Generate accurate and properly formatted citations for
news summaries, linking specific sentences to their
corresponding source articles. The citations should
follow a standardized format and include all necessary
information, such as article title, author, publication
date, and source URL, ensuring the summary is properly
referenced."""
)
),
backstory=(
dedent(
"""\
Developed in response to the need for reliable and
transparent sourcing of information, this agent is
adept at tracking news articles used in a summary and
generating corresponding citations. Drawing from
practices in academic writing and journalism, the
agent ensures that each summary is accompanied by
clear and accurate references. With expertise in
citation formats (APA, MLA, Chicago, etc.) and a deep
understanding of web sources, the agent guarantees
that readers can easily trace the information back to
its original source, fostering trust and credibility
in the summarized content."""
)
),
llm=make_gemini(),
)
redactor = Agent(
role="Content Redactor",
goal=(
dedent(
"""\
Redact any sentences in the summary that lack citations,
ensuring that only well-sourced information remains.
The agent should scan the summary for citation links,
verify their presence, and remove any uncited content
while maintaining the overall coherence and readability
of the summary."""
)
),
backstory=(
dedent(
"""\
Created to uphold the highest standards of information
integrity, this agent ensures that only verifiable and
properly cited content is retained in the final
summaries. By meticulously reviewing each sentence and
cross-referencing it with the generated citations, the
redactor agent removes any statements that lack clear
sourcing. With its focus on transparency and accuracy,
the agent contributes to creating a trustworthy and
responsible final product, where readers can confidently
rely on the presented information."""
)
),
llm=make_gemini(),
)
summarize_news = Task(
description=(
dedent(
"""\
Summarize the key points from the provided news articles
below. The summary should be concise and combine relevant
information from all the articles, highlighting the most
important details. Ensure that the tone is neutral, and the
summary is well-structured, presenting the most significant
facts clearly. Focus on delivering a few paragraphs that
provide an accurate and informative overview of the topic.
The articles to be summarized are included at the end
of this prompt. Please ensure that the summary
reflects the facts and important themes from all
articles without introducing personal opinions.
--- START OF ARTICLES ---
{articles}
--- END OF ARTICLES ---
"""
)
),
expected_output=(
dedent(
"""\
A summary of a few paragraphs that captures the main points
and facts from the provided articles. The summary should be
clear, concise, and well-organized, combining overlapping
information and presenting a cohesive narrative. It should
remain neutral and avoid editorializing, focusing solely on
the factual content from the articles.
"""
)
),
agent=news_summarizer,
)
generate_citations = Task(
description=(
dedent(
"""\
Add citations to the provided summary by linking
relevant sentences to their corresponding news
articles. For each factual statement in the summary,
identify the source article and append a properly
formatted citation. The citation should include key
information such as article title, author, publication
date, source URL, and the provided access date.
Ensure that each citation is linked to the correct
portion of the summary and that the citations are
placed unobtrusively, maintaining readability while
making it clear which information comes from which
article. The access date for the citations is provided
below.
The summary to be annotated, the articles to be
referenced, and the access date are provided below.
--- START OF SUMMARY ---
{summary}
--- END OF SUMMARY ---
--- START OF ARTICLES ---
{articles}
--- END OF ARTICLES ---
--- ACCESS DATE ---
{access_date}
"""
)
),
expected_output=(
dedent(
"""\
A summary annotated with citations for each relevant
factual statement. Each citation should be formatted
with the article title, author, publication date,
source URL, and the provided access date. The
citations should be linked to the correct portion of
the summary, making it easy for the reader to trace
statements back to their original sources while
maintaining clarity and readability.
"""
)
),
agent=citation_generator,
)
redact_uncited_content = Task(
description=(
dedent(
"""\
Review the provided summary and remove any sentences
or sections that do not have corresponding
citations. Ensure that the redacted version retains
coherence and clarity, only eliminating content that
lacks a citation reference. The final output should
be a concise, well-structured summary containing only
the well-cited information.
The summary with citations is provided below.
--- START OF SUMMARY WITH CITATIONS ---
{summary_with_citations}
--- END OF SUMMARY WITH CITATIONS ---
"""
)
),
expected_output=(
dedent(
"""\
A redacted version of the summary that contains only the
sentences or sections with citations. The redacted summary
should be clear, concise, and maintain logical flow. Any
uncited content should be removed, ensuring that only
verifiable, properly sourced information remains.
"""
)
),
agent=redactor,
)
news = search_news("Rings of Power")
summary = Crew(
agents=[news_summarizer],
tasks=[summarize_news],
verbose=True,
memory=True,
embedder={
"provider": "google",
"config": {
"model": "models/embedding-001",
"task_type": "retrieval_document",
"title": "Embeddings for Embedchain",
},
},
).kickoff(inputs={"articles": news})
logging.info(summary)
citations = Crew(
agents=[citation_generator],
tasks=[generate_citations],
verbose=True,
memory=True,
embedder={
"provider": "google",
"config": {
"model": "models/embedding-001",
"task_type": "retrieval_document",
"title": "Embeddings for Embedchain",
},
},
).kickoff(
inputs={
"summary": summary.raw,
"articles": news,
"access_date": datetime.today().date().isoformat(),
}
)
logging.info(citations)
redactions = Crew(
agents=[redactor],
tasks=[redact_uncited_content],
verbose=True,
memory=True,
embedder={
"provider": "google",
"config": {
"model": "models/embedding-001",
"task_type": "retrieval_document",
"title": "Embeddings for Embedchain",
},
},
).kickoff(inputs={"summary_with_citations": citations.raw})
logging.info(redactions)