构建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: 持久化进程,允许在多次调用之间保持状态。
相关推荐
武子康10 分钟前
H3-World 为何在加载 LoRA 前,先检查导入的代码?
人工智能·深度学习·算法
GISer_Jing13 分钟前
AI Agent秋招面试万字通关指南|架构、ReAct、上下文工程、RAG、评测、生产运维全解
后端·ai·langchain
装不满的克莱因瓶30 分钟前
【SpringAI Alibaba】ReactAgent结构化输出OutputType与OutputSchema实战
java·人工智能·ai·springai·springaialibaba
楚山之石39 分钟前
【Radiology】影像组学的标准化与可重复性:IBSI 卷积滤波器共识及其未能覆盖的环节
人工智能·学习·机器学习·mri
孔令飞40 分钟前
把 Agent 搬进飞书:飞书 Agent 机器人演示
云原生·go·ai编程
东姬AI1 小时前
挖出948个内核漏洞、自动写补丁:GPT-6 Cyber把AI推进“实战岗“,内容行业还卡在哪一关?
人工智能·网络安全·openai·gpt-6
用户2991422196801 小时前
GitHub 热榜项目:日榜(2026-11-10)
人工智能·开源·github
ZzT1 小时前
Anthropic 选模型指南拆解:先用 low 跑、失败的再用 high 重跑,通过率 97% 高于全程 high
ai编程·claude
用户2991422196801 小时前
AI 日报(2026年11月10日)
人工智能
QXWZ_IA1 小时前
定位数据怎么推给 IoT 平台?消息协议选型与接入准备
网络·人工智能·物联网·安全