现在本地部署的大模型,有可能有一个问题,就是经常是是“真空中的模型”,不具备当前环境的“感知”,很难用于回答与本机与当下相关的问题。 针对这种问题,几个月前写了一个小工具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日。