Como etapa guia guia como criar ai tomar como envio de distribuição, groq e tavily
Inteligência artificial

Como etapa guia guia como criar ai tomar como envio de distribuição, groq e tavily


Introdução

Nesta lição, criaremos um programa de IA aprimorado que possa pesquisar na Web sobre as últimas notícias sobre o tópico fornecido e resumir os resultados. Este mentido seguiu o movimento formal do trabalho:

  1. Navegando: Execute consultas de pesquisa apropriadas e colete informações da web.
  2. Mão: Lançamento e incluindo resumos de notícias de informações coletadas.
  3. Reflexão: Ocultação em conflito em vista da verdadeira precisão e atualização da elevação.
  4. Imersão: Melhorar os resumos com base em críticas.
  5. Uma boa geração: Crie tópicos apropriados para cada contêiner.

Para melhorar o uso, também criaremos uma GUI simples usando a transmissão. Como tutoriais anteriores, usaremos É muito crescido Desempenho baseado em LLM e Para Monya da web de navegação. Você pode produzir teclas de API gratuitas em seus sites.

Configurando o ambiente

Começamos com variáveis ​​naturais, incluindo as bibliotecas necessárias, e a dependência de importação:

Aplique as bibliotecas necessárias

pip install langgraph==0.2.53 langgraph-checkpoint==2.0.6 langgraph-sdk==0.1.36 langchain-groq langchain-community langgraph-checkpoint-sqlite==2.0.1 tavily-python streamlit

Ingregação de bibliotecas e configurações de API Keys

import os
import sqlite3
from langgraph.graph import StateGraph
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_groq import ChatGroq
from tavily import TavilyClient
from langgraph.checkpoint.sqlite import SqliteSaver
from typing import TypedDict, List
from pydantic import BaseModel
import streamlit as st

# Set API Keys
os.environ['TAVILY_API_KEY'] = "your_tavily_key"
os.environ['GROQ_API_KEY'] = "your_groq_key"

# Initialize Database for Checkpointing
sqlite_conn = sqlite3.connect("checkpoints.sqlite", check_same_thread=False)
memory = SqliteSaver(sqlite_conn)

# Initialize Model and Tavily Client
model = ChatGroq(model="Llama-3.1-8b-instant")
tavily = TavilyClient(api_key=os.environ["TAVILY_API_KEY"])

Definindo a condição do agente

O agente mantém os detalhes do estado durante todo o movimento do trabalho:

  1. Tópico: O título em que o usuário deseja o rascunho mais recente: o primeiro rascunho de notícias das notícias
  2. Contente: O conteúdo da pesquisa é emitido a partir de resultados de pesquisa de Tavily
  3. Institucionalmente: Prosperidade e recomendações produzidas no sistema de reflexão.
  4. Resumos de visão: Atualizações de notícias após adicionar açúcar de crítica

Títulos: Artigos produzidos por categoria de notícias

class AgentState(TypedDict):
    topic: str
    drafts: List[str]
    content: List[str]
    critiques: List[str]
    refined_summaries: List[str]
    headings: List[str]

Descrição da informação

Ele descreve um programa promocional para cada parágrafo do agente:

BROWSING_PROMPT = """You are an AI news researcher tasked with finding the latest news articles on given topics. Generate up to 3 relevant search queries."""

WRITER_PROMPT = """You are an AI news summarizer. Write a detailed summary (1 to 2 paragraphs) based on the given content, ensuring factual correctness, clarity, and coherence."""

CRITIQUE_PROMPT = """You are a teacher reviewing draft summaries against the source content. Ensure factual correctness, identify missing or incorrect details, and suggest improvements.
----------
Content: {content}
----------"""

REFINE_PROMPT = """You are an AI news editor. Given a summary and critique, refine the summary accordingly.
-----------
Summary: {summary}"""

HEADING_GENERATION_PROMPT = """You are an AI news summarizer. Generate a short, descriptive headline for each news summary."""

Perguntas e histórias de fumantes

Usamos o Pydantic para descrever a formação das perguntas e artigos de notícias. O Pydantic nos permite explicar a formação da liberação do LLM. Isso é importante porque queremos que as perguntas sejam uma linha de string e conteúdo emitido para o site terá muitas histórias, e é por isso que a lista de anéis.

from pydantic import BaseModel

class Queries(BaseModel):
    queries: List[str]

class News(BaseModel):
    news: List[str]

Implementação da IA

1. Navegando e dade

Este nó forma as consultas de pesquisa e retorna o conteúdo correto da web.

def browsing_node(state: AgentState):
    queries = model.with_structured_output(Queries).invoke([
        SystemMessage(content=BROWSING_PROMPT),
        HumanMessage(content=state['topic'])
    ])
    content = state.get('content', [])
    for q in queries.queries:
        response = tavily.search(query=q, max_results=2)
        for r in response['results']:
            content.append(r['content'])
    return {"content": content}

2. Escrevendo e de

Desinstale os resumos de notícias do conteúdo recebido.

def writing_node(state: AgentState):
    content = "nn".join(state['content'])
    news = model.with_structured_output(News).invoke([
        SystemMessage(content=WRITER_PROMPT),
        HumanMessage(content=content)
    ])
    return {"drafts": news.news}

3. Nó de reflexão

Os resumos críticos são produzidos em conteúdo.

def reflection_node(state: AgentState):
    content = "nn".join(state['content'])
    critiques = []
    for draft in state['drafts']:
        response = model.invoke([
            SystemMessage(content=CRITIQUE_PROMPT.format(content=content)),
            HumanMessage(content="draft: " + draft)
        ])
        critiques.append(response.content)
    return {"critiques": critiques}

4. Muita consideração

Promove resumos baseados em resumos.

def refine_node(state: AgentState):
    refined_summaries = []
    for summary, critique in zip(state['drafts'], state['critiques']):
        response = model.invoke([
            SystemMessage(content=REFINE_PROMPT.format(summary=summary)),
            HumanMessage(content="Critique: " + critique)
        ])
        refined_summaries.append(response.content)
    return {"refined_summaries": refined_summaries}

5. Nó de geração de linhas hoad

Produz um breve título para cada um dos resumos da história.

def heading_node(state: AgentState):
    headings = []
    for summary in state['refined_summaries']:
        response = model.invoke([
            SystemMessage(content=HEADING_GENERATION_PROMPT),
            HumanMessage(content=summary)
        ])
        headings.append(response.content)
    return {"headings": headings}

Para construir a interface do usuário com o Streamlit

# Define Streamlit app
st.title("News Summarization Chatbot")

# Initialize session state
if "messages" not in st.session_state:
    st.session_state["messages"] = []

# Display past messages
for message in st.session_state["messages"]:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

# Input field for user
user_input = st.chat_input("Ask about the latest news...")

thread = 1
if user_input:
    st.session_state["messages"].append({"role": "user", "content": user_input})
    with st.chat_message("assistant"):
        loading_text = st.empty()
        loading_text.markdown("*Thinking...*")

        builder = StateGraph(AgentState)
        builder.add_node("browser", browsing_node)
        builder.add_node("writer", writing_node)
        builder.add_node("reflect", reflection_node)
        builder.add_node("refine", refine_node)
        builder.add_node("heading", heading_node)
        builder.set_entry_point("browser")
        builder.add_edge("browser", "writer")
        builder.add_edge("writer", "reflect")
        builder.add_edge("reflect", "refine")
        builder.add_edge("refine", "heading")
        graph = builder.compile(checkpointer=memory)

        config = {"configurable": {"thread_id": f"{thread}"}}
        for s in graph.stream({"topic": user_input}, config):
            # loading_text.markdown(f"*{st.session_state['loading_message']}*")
            print(s)
        
        s = graph.get_state(config).values
        refined_summaries = s['refined_summaries']
        headings = s['headings']
        thread+=1
        # Display final response
        loading_text.empty()
        response_text = "nn".join([f"{h}n{s}" for h, s in zip(headings, refined_summaries)])
        st.markdown(response_text)
        st.session_state["messages"].append({"role": "assistant", "content": response_text})

Loja

O estudo abrangeu todo o processo de construção do agente de notícias de IA com interface do usuário da SimpleLin. Agora você pode brincar com isso e fazer outros progressos como:

  • UM Melhor GUI Interação avançada do usuário.
  • Incluindo Refinamento existente Para garantir que os resumos sejam precisos e apropriados.
  • Mantendo o contexto para continuar a discussão sobre questões específicas.

Códigos?


Além disso, fique à vontade para segui -lo Sane E não se esqueça de se juntar ao nosso 75k + ml subreddit.

🚨 Recomendado para um código aberto de IA' (Atualizado)


Weneet Kumar é estudante de um consultor em Marktechpost. Atualmente, ele perseguiu seu BS do Instituto Indiano de Tecnologia (IIT), Kanpur. Ele é um entusiasmo de aprendizado de máquina. Ela é apaixonada pela pesquisa recente e raiva na aprendizagem mais profunda, na ideia de computador e nos campos relacionados.

✅ [Recommended] Junte -se ao nosso canal de telégrafo



Source link

Você também pode gostar...

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *