构建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: 持久化进程,允许在多次调用之间保持状态。
相关推荐
埃菲尔铁塔_CV算法15 分钟前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法
EasyCVR16 分钟前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
打羽毛球吗️22 分钟前
机器学习中的两种主要思路:数据驱动与模型驱动
人工智能·机器学习
光芒再现dev25 分钟前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
好喜欢吃红柚子39 分钟前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python43 分钟前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
正义的彬彬侠1 小时前
《XGBoost算法的原理推导》12-14决策树复杂度的正则化项 公式解析
人工智能·决策树·机器学习·集成学习·boosting·xgboost
Debroon1 小时前
RuleAlign 规则对齐框架:将医生的诊断规则形式化并注入模型,无需额外人工标注的自动对齐方法
人工智能
羊小猪~~1 小时前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习