Sobrecarga seu terminal: Shellgpt + Chromadb + Langchain para automação com reconhecimento de contexto
A linha de comando sempre foi um local para usuários de energia – rápida, flexível e implacável. Mas e se o seu terminal pudesse fazer mais do que apenas executar comandos? E se pudesse entender sua intenção, executar as ações certas e até retirar as respostas de suas próprias anotações antes de agir? Neste guia, começaremos com o ShellGPT-um companheiro da CLI movido a IA que pode conversar, gerar comandos e executá-los diretamente no seu sistema. E não vamos parar por aí. O Shellgpt já vem com uma função interna chamada Execute_shell_Command, que permite executar comandos gerados. Adicionaremos uma chamada de função personalizada da marca (ferramenta) ao seu conjunto de ferramentas – que pode consultar sua loja de conhecimento e retornar documentos relevantes diretamente dentro de sua sessão da CLI. Em seguida, vamos levá -lo adiante, integrando Chromadb e Langchain para adicionar a geração (RAG) de recuperação de recuperação, conectando essa ferramenta personalizada para suas anotações para que o terminal possa raciocinar sobre sua base de conhecimento pessoal. O resultado é um assistente de cuidado com o contexto que não responde apenas – ele age, informado por seus próprios dados. O ShellGPT é uma ferramenta de produtividade versátil da linha de comando, alimentada por grandes modelos de idiomas, como o GPT-4. Ele aprimora sua experiência de terminal gerando comandos de shell de forma inteligente, trechos de código e documentação – tudo sem sair da CLI. Projetado para otimizar os fluxos de trabalho e reduzir a comutação de contexto, o ShellGPT suporta Linux, MacOS e Windows e funciona com grandes conchas como Bash, Zsh, PowerShell e CMD. Recursos -chave: Geração de comando: gerar instantaneamente comandos de shell adaptados ao seu sistema operacional e shell. Assistência ao código: Use -Code para gerar ou anotar o código diretamente do terminal. Modos de bate -papo e repl: manter sessões de conversação ou explorar com interativamente as idéias. Chamada de função: Defina e execute funções Python personalizadas via GPT. Personalização de função: Crie funções para adaptar as respostas GPT para tarefas específicas. Suporte ao modelo local: Opcionalmente, conecte -se ao LLMS local, como o Ollama. O que permite que o ShellGPT seja uma ferramenta poderosa para a automação e a administração do sistema é que, ao executar com os privilégios de administração ou SUDO, o ShellGPT também pode executar comandos no nível do sistema através da chamada de função. Explore Explore o Shellgpt em profundidade, incluindo instruções de instalação, exemplos de uso e opções de configuração avançada, acesse o repositório oficial do Shellgpt Github. Aqui está um exemplo fornecido no repositório do GitHub, onde o shellgpt usa a chamada da função para gerar um comando do sistema e, em seguida, executa o comando: concedendo acesso do ShellGPT às suas anotações e documentos pessoais por meio de um banco de dados vetorial, como o Chromadb, permite que ele se torne um assistente de consciência. Em vez de confiar apenas no conhecimento genérico, agora pode raciocinar seus próprios dados – lamentados aos seus fluxos de trabalho, preferências e experiência em domínio. Benefícios -chave: Pesquisa semântica sobre seu conhecimento: Recupere as informações relevantes de suas anotações usando consultas de linguagem natural. Sugestões de comando contextual: o ShellGPT pode gerar comandos ou trechos de código com base no conteúdo de seus documentos. Recall de conversação: faça perguntas do Shellgpt como “O que observei sobre o Docker Networking?” e obtenha respostas precisas extraídas de sua própria escrita. Aprendizagem e depuração aprimoradas: use suas anotações como uma base de conhecimento para solucionar erros, explorar conceitos ou revisitar tutoriais – tudo dentro da CLI. Inteligência que preserva a privacidade: Como o Chromadb é executado localmente, seus dados permanecem em sua máquina-você que você controla sem sacrificar a capacidade. Etapa 1: Inicialize o Chromadb e armazene suas anotações para ativar a pesquisa semântica em seus documentos, primeiro você precisará inicializar o Chromadb e preencher -o com incorporações. 💡Se você ainda não possui uma configuração de loja de vetores da Chromadb, pode visitar de Markdown para o significado: transforme as notas de obsidiana em uma IA conversacional para aprender um exemplo de como converter suas notas de remarca em incorporações armazenadas no Chromadb. (Consulte o código Seção 1 – 5) Etapa 2: Instale o shellgpt e ative a função que chama shellgpt funcionará como sua interface de conversação. Etapa 3: Construa um driver de Langchain para recuperação Instale os seguintes pacotes necessários em seu ambiente Pip Instale Langchain Pip Instale o Langchain-Chroma Pip Install Install Langchain-Openai Digite o modo de tela completo Sair do modo de tela completa. # Query.py # Salvar isso em ~/.config/shell_gpt/importar subprocessos importam argparse importos os langchain_chroma importar croma de Langchain_openai importar abeto de langchain.retChain. # Caminho para o diretório persist persist_directory = ‘path/to/chroma/database’ # <- altere este caminho coletor_name = “your_collection” # <– Change this to your collection’s name
# Initialize the embedding model
embedding = OpenAIEmbeddings()
# Initialize the Chroma vector store with the embedding function and persist_directory
vectordb = Chroma(
collection_name=collection_name,
persist_directory=persist_directory,
embedding_function=embedding
)
# Initialize the language model
llm = OpenAI(temperature=0, model=”gpt-3.5-turbo-instruct”)
# Initialize the compressor
compressor = LLMChainExtractor.from_llm(llm)
#init base retriever
base_retriever=vectordb.as_retriever(search_kwargs={“k”: 5})
# Function to pretty print documents
def pretty_print_docs(docs):
for i, d in enumerate(docs):
# Print the document index, metadata, and content
print(f”Document {i+1}:”)
#print(“Metadata:”)
for key, value in d.metadata.items():
print(f” {key}: {value}”)
#print(“\nContent:”)
print(d.page_content)
print(“\n” + “-” * 100 + “\n”)
# Main execution block
if __name__ == “__main__”:
# Set up argument parsing
parser = argparse.ArgumentParser(description=”Query the vector store”)
parser.add_argument(“question”, type=str, help=”The question to query the vector store with”)
args = parser.parse_args()
# Get the question from command-line arguments
question = args.question
# Debugging output to verify the received question
print(f”Received question: {question}”)
# Retrieve relevant documents
retrieved_docs = base_retriever.invoke(question)
# Debugging output
print(f”Retrieved {len(retrieved_docs)} documents.”)
# Pretty print the retrieved documents
pretty_print_docs(retrieved_docs)
Enter fullscreen mode
Exit fullscreen mode
Save the above as a Python file, for example, query.py in your Shell-GPT Folder: ~/.config/shell_gpt
To test the driver file:
python query.py “your question here based on ChromaDB documents”
Enter fullscreen mode
Exit fullscreen mode
Here is an example of the query Python driver retrieving 5 documents based on my question:
> python3 Query.py “Como usar o Python para pentesting?” Pergunta recebida: Como usar o Python para pentesting? Recuperado 5 documentos. Documento 1: Caminho: ————————————- \ Python para PENTEST \ 10 Desafios extras. enumerate potential subdomains – Build the keylogger to send the capture keystrokes to a server you built using Python – Grab the banner of services running on open ports – Crawl the target website to download .js library files included – Try to build a Windows executable for each and see if they work as stand-alone applications on a Windows target – Implement threading in enumeration and brute-forcing scripts to make them run faster ———————————————————————————————– . . Digite Modo de tela cheia de saída Modo de tela cheia 💡Langchain O Retriever da Base oferece filtragem e classificação mínima – simplesmente retorna documentos com base nas pontuações brutas de similaridade. Para implementar um Retriever de documento preciso e focado que usa compactação contextual e renomeamento, consulte a Etapa 4: Crie uma função personalizada para Shellgpt Shellgpt já suporta chamadas de função e vem com ferramentas construídas como Execute_shell_Command. Nesta etapa, adicionaremos nossa própria função personalizada ao seu conjunto de ferramentas – que atua como uma ponte entre o ShellGPT e o driver consulte.py que construímos anteriormente. Esta nova função será: aceitar uma questão de linguagem natural do shellgpt. Passe essa pergunta para o driver Query.py que você construiu na Etapa 3. Recupere documentos relevantes da sua loja Chromadb. Retorne esses documentos para que a Shellgpt possa usar o LLM para criar uma resposta com cuidado ao contexto. Ao conectar isso, você está efetivamente ensinando o Shellgpt a “procurar as coisas” em suas anotações pessoais antes de responder – transformando -o em um assistente de terminado com cuidado no contexto. Install the following required package in your environment pip install instructor Enter fullscreen mode Exit fullscreen mode # query_chat.py # Save this in ~/.config/shell_gpt/functions import subprocess import os from pydantic import Field from instructor import OpenAISchema class Function(OpenAISchema): “”” Pass the (question) to get related documents that are returned as output (result) “”” question: str = Campo (…, exemplo = “das minhas anotações como criar bilhetes de ouro?”, Descrições = “Consulta do usuário para passar como a pergunta”,) Classe Config: title = “Chromadb_Query” @classMethod def [“python3″, script_path, question] # <– Change python3 to python if necessary
result = subprocess.run(command, capture_output=True, text=True)
# Debugging output to verify command execution
print(f”Running command: {command}”)
print(f”Command output: {result.stdout}”)
print(f”Command error (if any): {result.stderr}”)
# Check if the command was successful
if result.returncode == 0:
return result.stdout.strip()
else:
return f”Error: {result.stderr.strip()}”
# Function to pretty print documents
def pretty_print_docs(docs):
print(“Debug: Entered pretty_print_docs”)
if not docs:
print(“No documents found.”)
else:
split_docs = docs.split(‘\n—————————————————————————————————-\n’)
print(f”Debug: Number of documents found: {len(split_docs)}”)
for i, doc in enumerate(split_docs):
doc_content = doc.strip()
# Skip the lines containing metadata
if any(keyword in doc_content for keyword in [“Received question”, “Retrieved”]):
continue
# Check if the document is not empty before printing
if doc_content:
print(f”Document {i+1}:\n\n{doc}\n{‘-‘ * 100}”)
# Example usage
if __name__ == “__main__”:
# Sample question
test_question = input(“Please enter your question: “)
# Call the function
output = Function.execute(test_question)
# Print the output print
print(“Output from Function.execute:”)
print(output)
# Pretty print the retrieved documents
pretty_print_docs(output)
Enter fullscreen mode
Exit fullscreen mode
Save the above as a Python file, for example, query_chat.py in your Shell-GPT Folder: ~/.config/shell_gpt/functions
How It Works
ShellGPT receives your query in CHAT or REPL mode.
The chromadb_query function runs query.py with your question.
query.py uses LangChain to pull the top 5 relevant documents from ChromaDB.
ShellGPT uses those documents as context to generate a tailored, informed answer.
In the following example, I asked ShellGPT: “How to use Python to create a port scanner?” — but with the added context “from my notes.”
ShellGPT retrieved 5 relevant documents from my ChromaDB store and used OpenAI’s LLM to generate a tailored response based on that personal context. This showcases Retrieval-Augmented Generation (RAG) in action: instead of relying solely on general knowledge, ShellGPT reasons over my own notes to deliver a precise, informed answer.
>SGPT -REPLET MODE ATRAVERSO DO MODO DE REPL, Pressione Ctrl+C para sair. >>> das minhas anotações Como usar o Python para criar um scanner de porta? Comando em execução: [‘python3’, ‘————/.config/shell_gpt/query.py’, ‘how to
use python to create a port scanner’]
Saída de comando: Pergunta recebida: Como usar o Python para criar um scanner de porta Recuperado 5 documentos. Documento 1: Caminho: —————————- \ Python para PENTEST \ 4 Porta Scanner.md Nome do documento: 4 Porta Scanner.md Path: ——————————— \ Python para PENTEST \ 4 Port Scanner.md Nesta tarefa, procuraremos um script para construir um simples scanner de portos. O código :. . . ————————————————————————————— Aqui está um exemplo básico: importar soquete def scan_ports (ip, portas): open_ports = []
. . . Esse script tenta se conectar a cada porta no intervalo especificado e lista os abertos. Ajuste o intervalo IP e da porta, conforme necessário. Digite o modo de saída do modo de tela cheia antes do VS após o RAG sem RAG com resposta genérica do RAG da resposta de dados de treinamento do Modelo fundamentada em minhas próprias anotações pode perder minhas ferramentas ou métodos preferidos correspondem aos meus fluxos de trabalho documentados sem conscientização sobre os experimentos anteriores, lembre -se exatamente do que eu fiz antes de ler. Você pode, por exemplo, pedir ao ShellGPT para salvar o arquivo portScanner.py gerado no seu desktop e até executá -lo em um intervalo de IP e porta personalizado – tudo no terminal. ⚠Security Nota: Como o ShellGPT pode executar comandos no nível do sistema, sempre revise os comandos gerados antes de executá-los. Evite usar privilégios elevados, a menos que seja absolutamente necessário e mantenha arquivos ou credenciais sensíveis fora de seu alcance. Para operações arriscadas ou desconhecidas, teste -o em uma caixa de areia ou VM primeiro para proteger seu ambiente principal. Se essa integração provocasse idéias para sua própria configuração, eu adoraria saber como você está usando o ShellGPT para personalizar sua experiência de terminal. Esteja você está consultando notas, automatizando tarefas do sistema ou apenas experimentando fluxos de trabalho com trapos, a beleza está na adaptação dessas ferramentas ao seu contexto único.
Fonte