Fact Check: Science has done more harm than good.

Status: True

Assertion

Science has done more harm than good.

Results

The statement can be considered true based on three key points. Firstly, harm caused by scientific pursuits is indeed defined in various forms, including physical and emotional distress as well as environmental damage (1). Secondly, there are arguments that prioritize short-term negative impacts over potential long-term benefits due to uncertainties surrounding future outcomes (2). Lastly, the concern about the misuse of scientific discoveries for harmful purposes is a valid one and acknowledges the responsibility in managing knowledge advancements responsibly (3).

However, it’s essential to note that this classification doesn’t mean all scientific pursuits are inherently harmful. The potential for negative outcomes should be carefully managed while also considering the significant benefits science has brought to society over time. Therefore, although the statement can be classified as true based on these points, one could argue its broader implications and nuances make it debatable in some aspects (Debatable: Some may believe that not all scientific advancements lead to harm or prioritize short-term negative impacts).

So, taking both sides into account, the statement can be classified as follows: True: [

Assumptions

– Assumptions for “A. True”:
– Defining what constitutes “harm” in this context (e.g., physical harm, emotional distress, environmental damage).
– Prioritizing immediate and direct negative impacts over long-term benefits and advancements brought by science.
– Accepting that the potential for misuse or unintended consequences of scientific discoveries outweigh their positive contributions to society.
– Overlooking or undervaluing the role science has played in solving global challenges, such as diseases, hunger, and climate change.

– Assumptions for “B. False”:
– Defining what constitutes “good” in this context (e.g., improvements to human welfare, technological advancements, increased knowledge).
– Prioritizing the overall positive impact of science on society over its potential negative consequences.
– Recognizing that while some scientific discoveries may have led to harmful outcomes, they do not negate or undermine the broad benefits brought by science throughout history.
– Acknowledging humanity’s ability to learn from past mistakes and make ethical dec

Fact Checker Output

<|assistant|> – Assumptions for “A. True”:

1. Defining what constitutes “harm” in this context: True. Harm can indeed be defined as physical harm, emotional distress, and environmental damage among other negative impacts caused by scientific activities or discoveries. This is because science can sometimes lead to outcomes that negatively affect individuals’ health, mental well-bemunition, or the planet itself.

2. Prioritizing immediate and direct negative impacts over long-term benefits: True. Some assertions may argue this based on a risk-averse perspective, where short-term harm is prioritized to avoid potential long-term consequences that are uncertain but could have significant positive outcomes. However, this viewpoint can be subjective and varies depending on one’s values or beliefs about progress.

3. Accepting the potential for misuse of scientific discoveries: True. Scientific advancements can indeed lead to unintended negative consequences if they are used inappropriately, such as weapons development from research meant for peaceful purposes (e.g., nuclear physics). It’s a valid concern that underscores the importance of eth

Model Used

microsoft/Phi-3-mini-4k-instruct-gguf

Script Name

fact_checker_mongodb.py

Script Code

import os
import sys
import requests
from langchain_openai.llms import OpenAI
from langchain.prompts import PromptTemplate
from dotenv import load_dotenv
from statements import get_random_statement
from mongodb_helper import insert_record  # Import MongoDB helper functions
import html

# Load environment variables from .env file
load_dotenv()

# Define category IDs
CATEGORY_IDS = {
    "True": 2,
    "False": 3,
    "Debatable": 4,
    "Unknown": 6
}

def create_wordpress_post(title, content, category):
    data = {
        "title": title,
        "content": content,
        "status": "publish",
        "categories": [CATEGORY_IDS[category]]
    }

    response = requests.post(
        os.getenv("WORDPRESS_POSTS_URL"),
        json=data,
        auth=(os.getenv("WORDPRESS_USERNAME"), os.getenv("WORDPRESS_PASSWORD"))
    )

    if response.status_code == 201:
        print("Blog post created successfully.")
    else:
        print(f"Failed to create blog post: {response.status_code} - {response.text}")

def fact_check(assertion):
    llm = OpenAI(temperature=0.7, model=os.getenv("MODEL_NAME"))

    # Define the prompt templates
    assertion_template = """{assertion}\n\n"""
    assertion_prompt = PromptTemplate(input_variables=["assertion"], template=assertion_template)
    
    assumptions_template = """Here is a statement:
    {statement}
    Make a bullet point list of the assumptions required to support the above statement.\n\n"""
    assumptions_prompt = PromptTemplate(input_variables=["statement"], template=assumptions_template)
    
    fact_checker_template = """Here is a bullet point list of assertions:
    {assertions}
    For each assumption, determine whether it is true or false. Explain your reasoning.\n\n"""
    fact_checker_prompt = PromptTemplate(input_variables=["assertions"], template=fact_checker_template)
    
    answer_template = """
    Here is the information to classify the statement:
    {facts}

    Based on the above information, how would you classify the statement? Respond with one of the following options followed by a colon and space:
    - True: [Explanation]
    - False: [Explanation]
    - Debatable: [Explanation]
    """
    answer_prompt = PromptTemplate(input_variables=["facts"], template=answer_template)
    
    # Format prompts and extract the string content
    formatted_assertion = assertion_prompt.format_prompt(assertion=assertion).text
    assertion_output = llm.invoke(formatted_assertion)
    
    formatted_assumptions = assumptions_prompt.format_prompt(statement=assertion_output).text
    assumptions_output = llm.invoke(formatted_assumptions)
    
    formatted_fact_checker = fact_checker_prompt.format_prompt(assertions=assumptions_output).text
    fact_checker_output = llm.invoke(formatted_fact_checker)
    
    formatted_answer = answer_prompt.format_prompt(facts=fact_checker_output).text
    final_output = llm.invoke(formatted_answer)
    
    return {
        "assertion_output": assertion_output,
        "assumptions_output": assumptions_output,
        "fact_checker_output": fact_checker_output,
        "final_output": final_output,
    }

def extract_status_and_reasoning(final_output):
    final_output = final_output.strip()
    if "True:" in final_output:
        status_start = final_output.find("True:")
        status = "True"
    elif "False:" in final_output:
        status_start = final_output.find("False:")
        status = "False"
    elif "Debatable:" in final_output:
        status_start = final_output.find("Debatable:")
        status = "Debatable"
    else:
        return "Unknown", final_output

    reasoning = final_output[status_start + len(status) + 1:].strip()
    return status, reasoning

if __name__ == "__main__":
    if len(sys.argv) > 1:
        assertion = sys.argv[1]
    else:
        assertion = get_random_statement()
    
    print(assertion)
    submission = fact_check(assertion)
    
    # Print the detailed outputs to inspect their structure
    for key, value in submission.items():
        print(f"{key}: {value}")
    
    # Extract the final output for status determination and reasoning
    final_output = submission['final_output']
    status, reasoning = extract_status_and_reasoning(final_output)
    
    # Record the result in MongoDB
    try:
        print("Attempting to insert record into MongoDB...")
        insert_record(
            script_name="fact_checker_mongodb.py",
            script_code=html.escape(open(__file__).read()),
            assertion=assertion,
            status=status,
            submission=submission,  # Store the entire submission for detailed analysis
            model=os.getenv("MODEL_NAME")
        )
        print("Record inserted into MongoDB successfully.")
    except Exception as e:
        print(f"Failed to insert record into MongoDB: {e}")
    
    print(final_output)
    
    # Create a blog post on WordPress
    blog_title = f"Fact Check: {assertion}"
    blog_content = f"""
    <h1>Status: {status}</h1>
    <h2>Assertion</h2>
    <p>{assertion}</p>
    <h2>Results</h2>
    <p>{reasoning}</p>
    <h3>Assumptions</h3>
    <p>{submission['assumptions_output']}</p>
    <h3>Fact Checker Output</h3>
    <p>{submission['fact_checker_output']}</p>
    <h4>Model Used</h4>
    <p>{os.getenv("MODEL_NAME")}</p>
    <h4>Script Name</h4>
    <p>fact_checker_mongodb.py</p>
    <h4>Script Code</h4>
    <pre>{html.escape(open(__file__).read())}</pre>
    """
    create_wordpress_post(blog_title, blog_content, status)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *