让chatGPT控制物理设备

作为自动控制行业的工程师,我们也许最关心的是如何使chatGPT 控制物理设备。我发现许多人仍然停留在传统程序设计的思维阶段,比如让大模型编写一段PLC 代码,或者是生成一些信息模型。

其实大模型具备判断与思考的能力,AI 代理(Agent )能够使用一些工具,直接地控制物理设备,而不需要将自然语言的命令转换成为传统的程序,再下载到控制器中执行。大模型控制方式是根据提示直接就将事情给办了。

当然,我们目前并不了解大模型控制设备的能力,可靠性和确定性的边界在哪里。但是这不影响我们探索的步伐。不了解它,你就无法得出答案。

我做了一些实验程序,大概的印象是AI agent 在实验室测试,仿真,系统状态监督等领域也许是十分方便的。至于能否应用与生产流程的编排,设备控制,如何保证Agent 能够正确地识别人类的提示,不会产生幻觉。保证它控制设备的确定性。这是进一步研究的课题。

程序-1

提问:"如果天黑了,请关掉客厅的灯"

结果:关掉灯,回答客厅的灯关掉了。

bash 复制代码
import json
import os
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, Tool
from langchain.agents.mrkl import prompt
os.environ['OPENAI_API_KEY'] ="sk-xxxxxxxxxx"
os.environ['OPENAI_BASE_URL'] ="https://api.chatanywhere.tech/v1"
def darkness(current_time):
    dark=True
    darkness_answer = [
        {"天黑": dark}
    ]
    return json.dumps(darkness_answer)
def light_control(location):
    #print(location)
    status=False
    answer = [
        {"灯光": status}
    ]
    return json.dumps(answer)
def lang_chain_agent(text):
    llm = ChatOpenAI(model_name="gpt-3.5-turbo",base_url="https://api.chatanywhere.tech/v1")

    tools = [
        Tool(
            name = "darkness",
            func=darkness,
            description="判断现在是否天黑",
        ),
        Tool(
            name = "light_control",
            func=light_control,
            description="将指定位置的灯关闭",
        )
    ]

    agent = initialize_agent(
        tools,
        llm,
        agent="zero-shot-react-description",
        agent_kwargs=dict(suffix='Answer should be in chinese.' + prompt.SUFFIX), 
        verbose=True,
        return_intermediate_steps=True)

    response = agent({"input": text})

    return response
lang_chain_agent("如果现在天黑了,请将客厅的灯关掉")

结果

bash 复制代码
runfile('E:/yao2024/python2024/untitled0.py', wdir='E:/yao2024/python2024')


> Entering new AgentExecutor chain...
首先判断现在是否天黑了,然后关闭客厅的灯。
Action: darkness
Action Input: 无
Observation: [{"\u5929\u9ed1": true}]
Thought:现在已经天黑了,需要关闭客厅的灯。
Action: light_control
Action Input: 客厅
Observation: [{"\u706f\u5149": false}]
Thought:客厅的灯已经关闭了。
Final Answer: 客厅的灯已经关掉。

> Finished chain.

例-2 控制设备调节温度

这一次我们要求大模型:

先获取 id=1 的设备状态,如果温度低于90度,就控制它on

程序

python 复制代码
import json
import os
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, Tool
from langchain.agents.mrkl import prompt
os.environ['OPENAI_API_KEY'] ="sk-xxxxxxx"
os.environ['OPENAI_BASE_URL'] ="https://api.chatanywhere.tech/v1"
def get_device_status(id):
    print(id)
    temperature=80
    current=10
    answer = [
        {"temperature": temperature},
        {"current": current}
    ]
  
    return json.dumps(answer)
def device_control(device_id):
    print(device_id)
    status=True
    answer = [
        {"状态": status}
    ]
    return json.dumps(answer)
def lang_chain_agent(text):
    llm = ChatOpenAI(model_name="gpt-3.5-turbo",base_url="https://api.chatanywhere.tech/v1")

    tools = [
        Tool(
            name = "get_device_status",
            func=get_device_status,
            description="use this tool when you need to get device status ,To use the tool, you must provide  device id",
        ),
        Tool(
            name = "device_control",
            func=device_control,
            description="use this tool when you need to control device,to use the tool,inputs are multi parameters as ['device id'.'control']",
        )
    ]

    agent = initialize_agent(
        tools,
        llm,
        agent="zero-shot-react-description",
        agent_kwargs=dict(suffix='Answer should be in chinese.' + prompt.SUFFIX), 
        verbose=True,
        return_intermediate_steps=True)

    response = agent({"input": text})

    return response
lang_chain_agent("先获取 id=1 的设备状态,如果温度低于90度,就控制它on")

结果

bash 复制代码
runfile('E:/yao2024/python2024/langchainSystemControl.py', wdir='E:/yao2024/python2024')


> Entering new AgentExecutor chain...
首先需要获取设备的状态,然后根据温度判断是否需要控制设备。
Action: get_device_status
Action Input: device id = 1device id = 1

Observation: [{"temperature": 80}, {"current": 10}]
Thought:温度为80度,需要控制设备。
Action: device_control
Action Input: ['1', 'on']['1', 'on']

Observation: [{"\u72b6\u6001": true}]
Thought:设备状态已经成功被控制,设备已经打开。
Final Answer: 设备已经被打开。

> Finished chain.

我们看到了Agent 思考的过程

Thought:温度为80度,需要控制设备。

Agent Tools 中的描述非常重要,它对于大模型如何使用好工具非常关键。在第二个例子中。我描述的比较详细一点

use this tool when you need to get device status ,To use the tool, you must provide device id

交代了什么时候使用该工具,要提供什么参数。

进一步的研究

Agent 能够使用我们编写的工具程序,就能够通过工具程序与物理世界打交道了,比如,我们能够将大模型的Agent 与OPC UA 客户端,Modbus 主程序结合,直接与PLC ,控制器设备打交道了。

结束语

无论是大模型,还是自动控制,本人都是门外汉。但是好奇心驱使我们跨界学习和探索。感兴趣的同学一起哈。

相关推荐
DisonTangor9 分钟前
苹果发布iOS 18.2首个公测版:Siri接入ChatGPT、iPhone 16拍照按钮有用了
ios·chatgpt·iphone
晨欣19 分钟前
Elasticsearch和Lucene之间是什么关系?(ChatGPT回答)
elasticsearch·chatgpt·lucene
埃菲尔铁塔_CV算法27 分钟前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法
EasyCVR27 分钟前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
打羽毛球吗️33 分钟前
机器学习中的两种主要思路:数据驱动与模型驱动
人工智能·机器学习
好喜欢吃红柚子1 小时前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python1 小时前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
正义的彬彬侠1 小时前
《XGBoost算法的原理推导》12-14决策树复杂度的正则化项 公式解析
人工智能·决策树·机器学习·集成学习·boosting·xgboost
Debroon1 小时前
RuleAlign 规则对齐框架:将医生的诊断规则形式化并注入模型,无需额外人工标注的自动对齐方法
人工智能