构建LangChain应用程序的示例代码:41、如何结合使用大型语言模型(LLMs)和 bash 进程来执行简单的文件系统命令指南

Bash 命令链使用指南

概述

本指南展示了如何结合使用大型语言模型(LLMs)和 bash 进程来执行简单的文件系统命令。

代码示例

python 复制代码
from langchain_experimental.llm_bash.base import LLMBashChain
from langchain_openai import OpenAI

# 初始化 OpenAI 的 LLM 实例,设置温度为 0,表示输出确定性结果
llm = OpenAI(temperature=0)

# 提供文本提示,请求编写打印 'Hello World' 到控制台的 bash 脚本
text = "请编写一个 bash 脚本,将 'Hello World' 打印到控制台。"

# 从 LLM 实例创建 Bash 链,设置 verbose 为 True 以输出更多运行时信息
bash_chain = LLMBashChain.from_llm(llm, verbose=True)

# 调用 Bash 链执行文本提示指定的任务
bash_chain.invoke(text)

自定义提示

你还可以自定义使用的提示。以下是一个避免使用 'echo' 命令的示例提示:

python 复制代码
from langchain.prompts.prompt import PromptTemplate
from langchain_experimental.llm_bash.prompt import BashOutputParser

# 定义提示模板,指定任务执行步骤和 bash 命令格式
_PROMPT_TEMPLATE = """
如果有人要求你执行一个任务,你的工作是想出一系列 bash 命令来执行该任务。在回答中没有必要写入 "#!/bin/bash"。确保使用以下格式逐步推理:
问题:"将名为 'target' 的目录中的文件复制到与 'target' 同级的名为 'myNewDirectory' 的新目录中"
我需要采取以下行动:
- 列出目录中的所有文件
- 创建一个新目录
- 将文件从一个目录复制到另一个目录
bash
ls
mkdir myNewDirectory
cp -r target/* myNewDirectory

在编写脚本时不要使用 'echo'。

这就是格式。开始!
问题:{question}
"""

# 创建提示模板实例,指定输入变量和输出解析器
PROMPT = PromptTemplate(
    input_variables=["question"],
    template=_PROMPT_TEMPLATE,
    output_parser=BashOutputParser(),
)

# 使用自定义提示创建 Bash 链
bash_chain = LLMBashChain.from_llm(llm, prompt=PROMPT, verbose=True)

# 提供文本提示,请求编写不使用 'echo' 的 bash 脚本打印 'Hello World'
text = "请编写一个 bash 脚本,将 'Hello World' 打印到控制台,不要使用 'echo' 命令。"

# 调用 Bash 链执行自定义提示指定的任务
bash_chain.invoke(text)

持久化终端

默认情况下,每次调用链时,都会在一个单独的子进程中运行。通过使用持久化的 bash 进程实例化,可以改变这种行为。

python 复制代码
from langchain_experimental.llm_bash.bash import BashProcess

# 创建持久化的 Bash 进程实例
persistent_process = BashProcess(persistent=True)

# 使用持久化进程创建 Bash 链
bash_chain = LLMBashChain.from_llm(llm, bash_process=persistent_process, verbose=True)

# 提供文本提示,请求列出当前目录然后上移一级
text = "列出当前目录,然后上移一级。"

# 调用 Bash 链执行文本提示指定的任务
bash_chain.invoke(text)

状态维持

python 复制代码
# 再次运行相同的命令,观察到状态在调用之间得以维持
bash_chain.invoke(text)

总结

本指南介绍了如何使用 LLMs 和 bash 进程来执行文件系统命令,并通过 Python 代码示例展示了如何构建和自定义 Bash 命令链。通过自定义提示和持久化终端的使用,可以更灵活和高效地执行 bash 脚本任务。

扩展知识点:

  • LLMs (Large Language Models): 大型语言模型,能够理解和生成自然语言文本。
  • Bash: 是 Linux 和 Unix 系统中最常用的 shell(命令行解释器)之一。
  • Python: 一种广泛使用的高级编程语言,支持多种编程范式。
  • OpenAI API: 提供访问 OpenAI 提供的各种 AI 模型的接口。
  • LangChain: 一个用于构建 AI 驱动的应用程序的 Python 库,支持多种 AI 模型和功能。
  • Persistent Process: 持久化进程,允许在多次调用之间保持状态。
相关推荐
8K超高清10 分钟前
推动能源绿色低碳发展,风机巡检进入国产超高清+AI时代
人工智能·科技·目标检测·计算机视觉·能源·智能硬件
只是有点小怂42 分钟前
【PYG】Cora数据集分类任务计算损失,cross_entropy为什么不能直接替换成mse_loss
人工智能·分类·数据挖掘
MUKAMO1 小时前
【深度学习】图形模型基础(2):概率机器学习模型与人工智能
人工智能·深度学习·机器学习
zhangbin_2371 小时前
【Python机器学习】模型评估与改进——二分类指标
大数据·人工智能·python·学习·机器学习·分类·数据挖掘
qq_393060472 小时前
mindspore打卡机器学习正则化与优化器
人工智能·机器学习
云起无垠2 小时前
【论文速读】|MEDFUZZ:探索大语言模型在医学问题回答中的鲁棒性
人工智能·语言模型·自然语言处理
charles_vaez2 小时前
开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(六)
深度学习·websocket·语言模型·langchain·fastapi
我爱学Python!2 小时前
基于大语言模型LangChain框架:知识库问答系统实践
人工智能·语言模型·自然语言处理·langchain·大语言模型·ai大模型·多模态大模型
龙的爹23332 小时前
论文翻译 | PRCA:通过可插拔奖励驱动的上下文适配器拟合用于检索问答的黑盒大语言模型
人工智能·语言模型·自然语言处理·nlp
码上飞扬2 小时前
开源语音转文本Speech-to-Text大模型实战之Wav2Vec篇
人工智能·文本转语音·wav2vec·speech-to-text