构建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: 持久化进程,允许在多次调用之间保持状态。
相关推荐
舒一笑5 分钟前
🚀 PandaCoder 2.0.0 - ES DSL Monitor & SQL Monitor 震撼发布!
后端·ai编程·intellij idea
cdming8 分钟前
微软Win11双AI功能来袭:“AI管家”+聊天机器人重构桌面交互体验
人工智能·microsoft·机器人
罗西的思考30 分钟前
[Agent] ACE(Agentic Context Engineering)和Dynamic Cheatsheet学习笔记
人工智能·机器学习
fantasy_arch37 分钟前
transformer-注意力评分函数
人工智能·深度学习·transformer
逐云者12337 分钟前
自动驾驶强化学习的价值对齐:奖励函数设计的艺术与科学
人工智能·机器学习·自动驾驶·自动驾驶奖励函数·奖励函数黑客防范·智能驾驶价值对齐
BreezeJuvenile1 小时前
深度学习实验一之图像特征提取和深度学习训练数据标注
人工智能·深度学习
Dev7z1 小时前
舌苔舌象分类图像数据集
人工智能·分类·数据挖掘
万俟淋曦1 小时前
【论文速递】2025年第30周(Jul-20-26)(Robotics/Embodied AI/LLM)
人工智能·深度学习·ai·机器人·论文·robotics·具身智能
高洁011 小时前
大模型-高效优化技术全景解析:微调 量化 剪枝 梯度裁剪与蒸馏 下
人工智能·python·深度学习·神经网络·知识图谱
CoookeCola1 小时前
MovieNet(A holistic dataset for movie understanding) :面向电影理解的多模态综合数据集与工具链
数据仓库·人工智能·目标检测·计算机视觉·数据挖掘