Olá a todos! Meu nome é Nataraj e, assim como você, sou fascinado pelo recente progresso da inteligência artificial. Percebendo que precisava ficar por dentro de todos os desenvolvimentos que aconteciam, decidi embarcar em uma jornada pessoal de aprendizado, assim nasceu 100 dias de IA ! Com esta série, aprenderei sobre LLMs e compartilharei ideias, experimentos, opiniões, tendências e aprendizados por meio de postagens em meu blog. Você pode acompanhar a jornada no HackerNoon aqui ou no meu site pessoal aqui . No artigo de hoje, procuraremos construir um Kernel Semântico com a ajuda do GPT-4.
Semantic Kernel é um SDK de código aberto da Microsoft que ajuda os desenvolvedores a criar aplicativos de IA, incluindo chatbots, RAGs, copilotos e agentes. É semelhante ao que o langchain faz. Provavelmente podemos chamá-lo de resposta da Microsoft ao langchain.
Ele foi projetado para tornar o software existente extensível e fácil de expor aos recursos de IA. Ele também foi projetado antecipando que os aplicativos gostariam de atualizar seus modelos de IA para as versões melhores e mais recentes ao longo do tempo.
Embora o espaço esteja evoluindo muito rapidamente, aqui estão algumas definições que devemos ter em mente à medida que exploramos o Kernel Semântico.
Para explicar como funciona o Kernel Semântico, vamos dar um exemplo de pegar um pedaço de texto e convertê-lo em um tweet de 140 caracteres. Mas faremos isso usando o Kernel Semântico. Fizemos um resumo semelhante em posts anteriores aqui .
Usarei a biblioteca python do Kernel Semântico, mas como o Kernel Semântico foi criado pela Microsoft, você também pode fazer isso em C#. Verifique a documentação pública da Microsoft sobre como fazer isso.
Abaixo, estamos iniciando o kernel semântico e configurando seu serviço de complementação de texto, informando-o para usar o modelo gpt-4 da OpenAI como o LLM a ser usado para complementação de texto.
import semantic_kernel as sk from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion, OpenAIChatCompletion import os from IPython.display import display, Markdown import asyncio from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) # read local .env file api_key = os.environ['OPENAI_API_KEY'] kernel = sk.Kernel() kernel.add_text_completion_service("openai", OpenAIChatCompletion("gpt-4",api_key)) print("Kernel Initiated")
No mundo do Kernel Semântico, temos um conceito de função semântica que é diferente de uma função nativa. Uma função nativa são as funções regulares que escrevemos em qualquer linguagem de programação. Funções semânticas são encapsulamentos de prompts LLM repetíveis que podem ser orquestrados pelo Kernel. Você terá uma ideia melhor do que é a função semântica na próxima etapa, onde escreveremos uma.
Aqui criamos um prompt sk_prompt que resume a conexão em menos de 140 caracteres (esse é o nosso objetivo com este exercício). Em seguida, passamos o prompt como uma entrada para criar uma função semântica com o kernel e armazenar que nos dá em troca o objeto summary_function que representa a função semântica que criamos e que pode ser acessada repetidamente através do kernel. Observe que quando criamos uma função semântica, estamos usando um prompt do cliente e também fornecendo informações de configuração do LLM como max_tokens, temperatura etc.. Agora volte para a imagem anterior de funções nativas versus funções semânticas e fará mais sentido.
sk_prompt = """ {{$input}} Summarize the content above in less than 140 characters. """ summary_function = kernel.create_semantic_function(prompt_template = sk_prompt, description="Summarizes the input to length of an old tweet.", max_tokens=200, temperature=0.1, top_p=0.5) print("A semantic function for summarization has been registered.")
Agora criamos o texto que queremos resumir usando a variável sk_input e chamamos a função semática via kernal e depois exibimos o resultado.
sk_input = """ Let me illustrate an example. Many weekends, I drive a few minutes from my house to a local pizza store to buy a slice of Hawaiian pizza from the gentleman that owns this pizza store. And his pizza is great, but he always has a lot of cold pizzas sitting around, and every weekend some different flavor of pizza is out of stock. But when I watch him operate his store, I get excited, because by selling pizza, he is generating data. And this is data that he can take advantage of if he had access to AI. AI systems are good at spotting patterns when given access to the right data, and perhaps an AI system could spot if Mediterranean pizzas sell really well on a Friday night, maybe it could suggest to him to make more of it on a Friday afternoon. Now you might say to me, "Hey, Andrew, this is a small pizza store. What's the big deal?" And I say, to the gentleman that owns this pizza store, something that could help him improve his revenues by a few thousand dollars a year, that will be a huge deal to him. """ # using async to run the semantic function async def run_summary_async(): summary_result = await kernel.run_async(summary_function, input_str=sk_input) display(summary_result) asyncio.run(run_summary_async())
Aqui está a saída que obtive:
A IA pode analisar dados de vendas para ajudar o proprietário de uma pequena pizzaria a otimizar seu estoque, aumentando potencialmente sua receita anual.
O Kernel Semântico tem mais recursos, como usar funções semânticas e funções nativas juntas, e é projetado para criar aplicativos de IA poderosos. Escreverei mais sobre eles em posts futuros.
É isso no dia 8 de 100 dias de IA.
Escrevo um boletim informativo chamado Above Average, onde falo sobre os insights de segunda ordem por trás de tudo o que está acontecendo nas grandes tecnologias. Se você trabalha com tecnologia e não quer ser mediano, inscreva-se .
Siga-me no Twitter , LinkedIn ou ** HackerNoon ** para obter as últimas atualizações sobre 100 dias de IA. Se você trabalha com tecnologia, pode estar interessado em ingressar na minha comunidade de profissionais de tecnologia aqui .
Anterior Dia 7: Como construir Chat-GPT para seus dados usando Langchain?