{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# BashChain\n", "This notebook showcases using LLMs and a bash process to do perform simple filesystem commands." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\u001b[1m> Entering new LLMBashChain chain...\u001b[0m\n", "Please write a bash script that prints 'Hello World' to the console.\u001b[32;1m\u001b[1;3m\n", "\n", "```bash\n", "echo \"Hello World\"\n", "```\u001b[0m['```bash', 'echo \"Hello World\"', '```']\n", "\n", "Answer: \u001b[33;1m\u001b[1;3mHello World\n", "\u001b[0m\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] }, { "data": { "text/plain": [ "'Hello World\\n'" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from langchain.chains import LLMBashChain\n", "from langchain.llms import OpenAI\n", "\n", "llm = OpenAI(temperature=0)\n", "\n", "text = \"Please write a bash script that prints 'Hello World' to the console.\"\n", "\n", "bash_chain = LLMBashChain(llm=llm, verbose=True)\n", "\n", "bash_chain.run(text)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Customize Prompt\n", "You can also customize the prompt that is used. Here is an example prompting to avoid using the 'echo' utility" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "from langchain.prompts.prompt import PromptTemplate\n", "\n", "_PROMPT_TEMPLATE = \"\"\"If someone asks you to perform a task, your job is to come up with a series of bash commands that will perform the task. There is no need to put \"#!/bin/bash\" in your answer. Make sure to reason step by step, using this format:\n", "Question: \"copy the files in the directory named 'target' into a new directory at the same level as target called 'myNewDirectory'\"\n", "I need to take the following actions:\n", "- List all files in the directory\n", "- Create a new directory\n", "- Copy the files from the first directory into the second directory\n", "```bash\n", "ls\n", "mkdir myNewDirectory\n", "cp -r target/* myNewDirectory\n", "```\n", "\n", "Do not use 'echo' when writing the script.\n", "\n", "That is the format. Begin!\n", "Question: {question}\"\"\"\n", "\n", "PROMPT = PromptTemplate(input_variables=[\"question\"], template=_PROMPT_TEMPLATE)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\u001b[1m> Entering new LLMBashChain chain...\u001b[0m\n", "Please write a bash script that prints 'Hello World' to the console.\u001b[32;1m\u001b[1;3m\n", "\n", "```bash\n", "printf \"Hello World\\n\"\n", "```\u001b[0m['```bash', 'printf \"Hello World\\\\n\"', '```']\n", "\n", "Answer: \u001b[33;1m\u001b[1;3mHello World\n", "\u001b[0m\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] }, { "data": { "text/plain": [ "'Hello World\\n'" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bash_chain = LLMBashChain(llm=llm, prompt=PROMPT, verbose=True)\n", "\n", "text = \"Please write a bash script that prints 'Hello World' to the console.\"\n", "\n", "bash_chain.run(text)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.6" } }, "nbformat": 4, "nbformat_minor": 4 }