{"id":574,"date":"2024-02-15T04:43:19","date_gmt":"2024-02-15T07:43:19","guid":{"rendered":"https:\/\/portal7ia.com.br\/?p=574"},"modified":"2024-02-15T06:05:46","modified_gmt":"2024-02-15T09:05:46","slug":"langchain-2","status":"publish","type":"post","link":"https:\/\/portal7ia.com.br\/index.php\/2024\/02\/15\/langchain-2\/","title":{"rendered":"Tutorial LangChain(Python) &#8211; Parte 02"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Vamos continuar o nosso tutorial de um projeto LangChain Python e Streamlit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos agora inserir o PromptTemplate em nosso projeto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para iniciarmos, vamos nos lembrar onde paramos. Este abaixo \u00e9 o c\u00f3digo do nosso projeto at\u00e9 o momento.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from langchain.llms import OpenAI\nfrom dotenv import load_dotenv\n\nload_dotenv()\n\ndef <strong>generate_pet_name<\/strong>():\n    llm = <strong>OpenAI<\/strong>(temperature=0.7)\n\n    name = <strong>llm<\/strong>(\u201cPlease, give me 5 suggestions for dog names\u201d)\n    return name\n\nif __name__ == \u201c__main__\u201d\n    print(<strong>generate_pet_name()<\/strong>)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">E temos at\u00e9 o momento os seguintes arquivos e pastas no diret\u00f3rio do nosso projeto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Uma pasta chamada .venv\nDois arquivos: .env e main.py<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ent\u00e3o, vamos acrescentar o Prompt Template, no nosso projeto, inserindo a seguinte linha de c\u00f3digo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>prompt_template_name = <strong>PromptTemplate()<\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Para usarmos essa classe PromptTemplate() em nosso c\u00f3digo, precisamos primeiro import\u00e1-la para o nosso script. Para isso inserimos o seguinte no topo do nosso script:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from <strong>langchain.prompts<\/strong> import <strong>PromptTemplate<\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos agora, acrescentar um vari\u00e1vel na classe PromptTemplate(). Vamos fazer da seguinte forma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>prompt_template_name = <strong>PromptTemplate(<\/strong>\n    <mark style=\"background-color:rgba(0, 0, 0, 0);color:#e10808\" class=\"has-inline-color\"><strong>input_variables=&#91;'animal_type']<\/strong><\/mark>\n<strong>)<\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">E precisamos tamb\u00e9m acrescentar essa vari\u00e1vel como par\u00e2metro de nossa fun\u00e7\u00e3o generate_pet_name().<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def generate_pet_name(<strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#cc0909\" class=\"has-inline-color\">animal_type<\/mark><\/strong>)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">E vamos tamb\u00e9m, acrescentar um PromptTemplate:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>prompt_template_name = <strong>PromptTemplate(<\/strong>\n    input_variables=&#91;'animal_type']\n   <strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e60606\" class=\"has-inline-color\"> template=(\u201cPlease, give me 5 suggestions for dog names\u201d)<\/mark><\/strong>\n<strong>)<\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos substituir a palavra dog do prompt por um place holder chamado {animal_type}. Ent\u00e3o, o nosso c\u00f3digo vai ficar assim:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template=(\u201cPlease, give me 5 suggestions for <strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#da1010\" class=\"has-inline-color\">{animal_type}<\/mark><\/strong> names\u201d)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Como isso, o nosso script recebe dinamicamente o tipo de animal que o usu\u00e1rio informar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos agora, acrescentar a classe LLMChain ao nosso projeto da seguinte forma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from langchain.chains import <strong>LLMChains<\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Com o LLMChains n\u00f3s podemos combinar o nosso objeto llm e o prompt_template_name, para enviarmos o nosso prompt ao ChatGPT e recebermos a resposta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para isso, vamos fazer da seguinte forma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>name_chain = LLMChain(llm=llm, prompt=prompt_template_name)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Em seguida, acrescentamos o seguinte:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>response = name_chain({'animal_type': 'animal_type'})\nreturn response<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Agora, podermos fazer uso de par\u00e2metros quando executamos a nossa fun\u00e7\u00e3o:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>print(generate_pet_name(\"<strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#df1111\" class=\"has-inline-color\">cat<\/mark><\/strong>\"))<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Agora, vamos executar o nosso script, usando o seguinte comando em nosso terminal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python main.py<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Como resposta, n\u00f3s temos uma json resposta com os nomes sugeridos pela LLM.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{'animal_type': 'cat', 'text': '\\n\\n1. <strong>Mochi<\/strong>\\2. <strong>Nacho<\/strong>\\n3. <strong>Pebbles<\/strong>\\n4. <strong>Tiger<\/strong>\\n5. <strong>Whiskers<\/strong>'}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Agora, podemo adicionar um segundo par\u00e2metro para a nossa fun\u00e7\u00e3o que seria a cor do animal. E n\u00f3s vamos fazer isso da seguinte forma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def generate_pet_name(animal_type, <strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e20a0a\" class=\"has-inline-color\">pet_color<\/mark><\/strong>)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos tamb\u00e9m precisar acrescentar no input_variables do PromptTemplate:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>input_variables=&#91;'animal_type', '<strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e01010\" class=\"has-inline-color\">pet_color<\/mark><\/strong>']<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Agora, vamos acrescentar tamb\u00e9m a nova vari\u00e1vel no prompt template:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e60606\" class=\"has-inline-color\"> <\/mark>template=(\u201cPlease, give me 5 suggestions for my {<strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e01212\" class=\"has-inline-color\">pet_color<\/mark><\/strong>}{animal_type} names\u201d)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos, tamb\u00e9m precisar acrescentar esse vari\u00e1vel como par\u00e2metro do nosso objeto name_chain:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>response = name_chain({'animal_type': 'animal_type', 'pet_color': 'pet_color'})<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pronto, agora podemos executar o nosso script, passando duas vari\u00e1veis. Uma informando o tipo de animal e a outra informando a cor do animal.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>print(generate_pet_name(\"<strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#df1111\" class=\"has-inline-color\">cat<\/mark><\/strong>\", \"<strong><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e51212\" class=\"has-inline-color\">black<\/mark><\/strong>\"))<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">E na resposta, podermos verificar que o script est\u00e1 passando essas duas informa\u00e7\u00f5es para o LLM e recebendo a resposta.(JSON formato)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{'<strong>animal_type<\/strong>': 'Dog', '<strong>pet_color<\/strong>': 'black', 'text': '\\n\\n1. <strong>Shadow<\/strong>\\n2. <strong>Midnight<\/strong>\\n3. <strong>Onyx<\/strong>\\n4. <strong>Coal<\/strong>\\n5. Jet'}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Perfeito! O nosso script est\u00e1 funcionando!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aqui est\u00e1 todo o c\u00f3digo do nosso script at\u00e9 o momento:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from langchain_openai import OpenAI\r\nfrom langchain.prompts import PromptTemplate\r\nfrom langchain.chains import LLMChain\r\nfrom dotenv import load_dotenv\r\n\r\nload_dotenv()\r\n\r\ndef generate_pet_name(animal_type, pet_color):\r\n    #Criando uma inst\u00e2ncia(objeto) da classe OpenAI, passando um \u00fanico par\u00e2metro ao construtor.\r\n    llm = OpenAI(temperature=0.7)\r\n\r\n    prompt_tamplate_name = PromptTemplate(\r\n        input_variables=&#91;'animal_type', 'pet_color'],\r\n        template=\"I just got a {pet_color}{animal_type} and I would like to give it a name. Could you please, helpe me with that? Could you suggest 5 names for my pet?\"\r\n    )\r\n    #Vamos passar o nosso prompt, e receber a resposta da LLM, usando o nosso objeto llm.\r\n    name_chain = LLMChain(llm=llm, prompt=prompt_tamplate_name)\r\n\r\n    response = name_chain({'animal_type': animal_type, 'pet_color': pet_color})\r\n    return response\r\n\r\nif __name__ == \"__main__\":\r\n    print(generate_pet_name(\"Dog\", \"black\"))<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">No pr\u00f3ximo tutorial, vamos construir uma web interace para o nosso projeto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vamos continuar o nosso tutorial de um projeto LangChain Python e Streamlit. Vamos agora inserir o PromptTemplate em nosso projeto. Para iniciarmos, vamos nos lembrar onde paramos. Este abaixo \u00e9 o c\u00f3digo do nosso projeto at\u00e9 o momento. E temos at\u00e9 o momento os seguintes arquivos e pastas no diret\u00f3rio do nosso projeto: Ent\u00e3o, vamos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-574","post","type-post","status-publish","format-standard","hentry","category-blog"],"blocksy_meta":[],"brizy_media":[],"_links":{"self":[{"href":"https:\/\/portal7ia.com.br\/index.php\/wp-json\/wp\/v2\/posts\/574","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/portal7ia.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/portal7ia.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/portal7ia.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/portal7ia.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=574"}],"version-history":[{"count":7,"href":"https:\/\/portal7ia.com.br\/index.php\/wp-json\/wp\/v2\/posts\/574\/revisions"}],"predecessor-version":[{"id":590,"href":"https:\/\/portal7ia.com.br\/index.php\/wp-json\/wp\/v2\/posts\/574\/revisions\/590"}],"wp:attachment":[{"href":"https:\/\/portal7ia.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=574"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/portal7ia.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=574"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/portal7ia.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=574"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}