让大语言模型“感知世界”-通过ModelSensor 获取并传递日期、时间、位置等信息

现在本地部署的大模型,有可能有一个问题,就是经常是是“真空中的模型”,不具备当前环境的“感知”,很难用于回答与本机与当下相关的问题。 针对这种问题,几个月前写了一个小工具ModelSensor,可以在本地收集日期、时间、位置(可选)、系统与运行环境等上下文,以结构化格式注入到提示词中,帮助 LLM 更好地理解当前环境并给出更贴近实际的回答,就算是一定程度的让大语言模型(LLM)“感知世界”了。

问题现状

目前的LLM 模型无法感知当前环境,只能通过外部数据源(如 API)获取,所以有时候问他日期,他就会很呆呆了。

Ollama下直接调用gpt-oss:20b,得到了一次正确的日期,但是星期不对。

千问官方群的群友说这可能是“oss在系统提示词之上还有更高级别的openai prompt”,大概就是ollama调用的时候传递了基本信息。

这其实和我之前的思路类似,可以获取系统信息并传递给ollama之类的模型。

思路设计

ModelSensor 的思路挺简单的,基本流程如下:

1) 采集:从本地获取系统时间、时区、硬件、资源使用、网络与(可选)位置等上下文
2) 组织:将数据整理为 JSON 或字典(简版 brief / 全量 full)
3) 注入:将上下文作为“系统上下文”插入到提示词中一并发送给 LLM
4) 受控:通过参数控制采集范围、格式与隐私(如是否启用位置)

具体获取的信息包括:

  • 时间与时区:当前时间、UTC、星期、格式化时间戳
  • 系统与运行环境:OS、平台、Python 版本、工作目录、虚拟环境
  • 资源状态:CPU 使用率、内存、磁盘
  • 网络信息:网卡、默认网关、连接状态
  • 位置(可选):基于 IP 的国家/城市/经纬度(默认关闭,需显式开启)

注意哈,上面除了网络位置之外,其余的信息都是本地获取,所有采集均在本地完成;除非启用位置解析,否则不会进行外部传输。

安装运行

安装很简单,直接pip即可安装:

pip install modelsensor

Python下可以通过以下方式获取系统时间、时区、位置等信息,然后通过 to_json 方法将数据转换为 JSON 格式:

from modelsensor import ModelSensor
sensor = ModelSensor()
data = sensor.collect_all_data(include_location=False)  # 位置默认关闭
print(sensor.to_json(indent=2, mode="brief"))

得到的输出是类似下面这样:

{
  "time": {
    "date": "2025-08-18",
    "time": "11:32:01"
  }
}

还有更简单的to_dict()方法:

from modelsensor import ModelSensor
sensor = ModelSensor()
data = sensor.collect_all_data(include_location=False)  # 位置默认关闭
print(sensor.to_dict(mode="brief"))```

得到的输出是类似下面这样
```bash
{'time': {'date': '2025-08-18', 'time': '11:37:06'}}

与 Ollama 集成也很简单,只需要在调用 Ollama 的时候传递 system_context 参数即可,如下:

import ollama
from modelsensor import ModelSensor
# Get system information
sensor = ModelSensor()
system_context = sensor.to_json(include_location=True)
# Create enhanced prompt
prompt = f"""
System Context:
{system_context}
   ...:
User Question: 今天几号?
"""
# Send to Ollama
response = ollama.chat(model='qwen3:0.6b', messages=[
    {'role': 'user', 'content': prompt}
])
print(response['message']['content'])

得到的输出是类似下面这样:

<think>
好的,用户问“今天几号?”,我需要根据系统提供的上下文来回答。系统里的时间是2025年8月18日,11:33:18,所以今天应该是2025年8月18日。不过要确认一下用户问的是当前日期,还是系统设定的日期。不过根据提供的上下文,时间是明确的,所以应该直接回答今天是2025年8月18日。另外,用户可能想知道今天的日期,所以需要简洁明了地回复,不需要多余的解释。确保回答准确无误,符合系统提供的信息。
</think>

今天是2025年8月18日。
Category: LLM
Category
Tagcloud
GIS Memory RaspberryPi QEMU OpenCL DIY Programming Science Telescope Translate Qwen3 Game Code Generation Story Poem 耳机 Python Virtualization Shit Lesson Camera Microscope Photography Conda FuckChunWan Mac Data Radio Mount&Blade Communicate Tool Translation Scholar Discuss Pyenv Virtual Machine HBase macOS 蓝牙 CUDA Ollama Disease NAS Lens University ChromeBook Kivy Hadoop Raspbian MayaVi AI VTK VirtualBox Learning Cursor n8n Hardware FuckZhihu VisPy Hate Moon Download RTL-SDR Book Chat Hack 音频 Hackintosh Junck Windows11 SandBox Library Photo GeoPython QGIS PyOpenCL Linux PHD Geology QT GlumPy Software Windows IDE Video GPT-OSS FckZhiHu Xcode Visualization Server Life