☰
唤醒沉睡的旅行手账:用 RAG 知识库串联历年江南水乡足迹与地理回忆
2026/10/23 2:47:39 网站建设 项目流程

每年霜降前后的十月下旬,江南水乡总会迎来一年之中最具水墨诗意的时刻。水网纵横的古镇水道上,晨雾在青碧色的河面上缓缓缭绕;早起摇橹的船夫泛舟穿过狭窄斑驳的单孔石拱桥,木橹在水流中划出一圈圈平缓的波纹,伴随着长篙入水时轻微的欸乃声;两岸粉墙黛瓦的临河木楼上,排门吱呀呀地卸下,早茶馆里升腾起一股带着茉莉花香与熏青豆焦香的温润热气。

从求学时代到独立工作这些年,我曾无数次背着双肩包与写生手账本,在深秋时节走过周庄、同里、锦溪、甪直与西塘的石板路。那些写生册与随手记里,密密麻麻地拓印着当年的足迹:同里三桥边的评弹曲调、锦溪陈妃水冢前被秋风吹皱的浩渺湖波、甪直保圣寺罗汉塑像前飘落的一地银杏黄叶,以及在不知名石桥栏杆上用铅笔临摹下的明清石雕纹样。

然而,这些散落在不同年份、不同本子上的旅行手账,往往由于时间的阻隔变成了彼此孤立的“记忆孤岛”。前两天整理书桌,我想对比一下五年前在锦溪五保湖畔看到的秋水暮色,与三年前在同里退思园后花园看到的水阁红叶有何不同意趣,却不得不把书架上的手账本一本本抽出来翻阅,那些藏在字里行间的细腻触动极难被系统性地唤醒。

为了让这些浸润着江南水汽的足迹重新交融互通,我利用本地私有 RAG 技术,为书房搭建了一套带有地理空间坐标与水乡人文意境的旅行记忆检索知识库。

水乡旅行笔记的多维语境建模

江南水乡的旅行手账,其信息结构具有极强的人文地理与水土空间属性:

  1. 地理拓扑与水系脉络:不仅包含具体的古镇名称,更细化到特定的水系桥梁(如锦溪十眼桥、同里太平桥、吉利桥、长庆桥)与临水建筑构件(美人靠、水阁、过街楼)。
  2. 水乡特有的声色物候:清晨水鸟掠过芦苇丛的啼鸣、摇橹声、石板路上湿漉漉的青苔气息,以及老茶馆里的阿婆茶。
  3. 历年同一季节的心境互文:在不同年份的十月重访水乡,心境往往经历了由少年时的青涩迷茫到如今独立开发时的从容澄明的深层蜕变。

我们将每一篇水乡旅行记录,整理为一个带有地理空间与意境维度的原子切片:

<!-- chunk:travel-water-town-jinxi-2019 --> # 行旅足迹:锦溪古镇 · 菱塘秋晚 - 地理坐标:东经 120.9021, 北纬 31.1812 - 水系与位置:五保湖西岸古莲池回廊(临水长廊石阶) - 旅行时空:2019年10月23日(霜降日)傍晚五点 - 声色物候:晚风吹拂大片干枯的荷塘,芦苇花在夕阳下泛着银白光芒;远处传来说吴语的菱角船吆喝声 【当年手账笔记节选】: “坐在十眼桥石阶上,湖面被夕阳照得波光粼粼,如同一片铺展在天地间的赤金缎子。湖边的陈妃水冢在苍茫水汽里若隐若现。 当年宋孝宗因为宠妃病逝而在此筑水冢,千年过去,帝王将相的繁华早已随风散尽,只有这湖边的秋水与芦苇年复一年地在霜降时节由青转黄。 看着水波轻轻拍打石阶,心底里那些关于工作架构的焦虑突然变得极其微不足道。天地如此开阔,人如一粟,何必把一时的得失看得太重。”

纯本地地理水乡 RAG 检索管线实现

借助本地运行的bge-m3向量模型与 SQLite-vec,我们编写了一套支持语义与地理空间交融的 Python 检索管道:

import sqlite3 import json from typing import List, Dict import requests OLLAMA_API = "http://localhost:11434/api/generate" class WaterTownArchiveRAG: def __init__(self, db_path: str = "watertown_memories.db"): self.conn = sqlite3.connect(db_path) self.init_schema() def init_schema(self): with self.conn: self.conn.execute(""" CREATE TABLE IF NOT EXISTS travel_chunks ( id TEXT PRIMARY KEY, town_name TEXT NOT NULL, location_detail TEXT NOT NULL, trip_date TEXT NOT NULL, atmosphere TEXT NOT NULL, journal_body TEXT NOT NULL, embedding TEXT NOT NULL ) """) def _get_embedding(self, text: str) -> List[float]: resp = requests.post("http://localhost:11434/api/embeddings", json={ "model": "bge-m3:latest", "prompt": text }) return resp.json()["embedding"] def insert_trip_chunk(self, chunk_id: str, town: str, loc: str, date: str, atmosphere: str, body: str): full_text = f"水乡古镇:{town}({loc})。时间:{date}。物候氛围:{atmosphere}。日记正文:{body}" vec = self._get_embedding(full_text) with self.conn: self.conn.execute(""" INSERT OR REPLACE INTO travel_chunks (id, town_name, location_detail, trip_date, atmosphere, journal_body, embedding) VALUES (?, ?, ?, ?, ?, ?, ?) """, (chunk_id, town, loc, date, atmosphere, body, json.dumps(vec))) def query_water_reflections(self, theme_query: str, top_k: int = 2) -> List[Dict]: q_vec = self._get_embedding(theme_query) cursor = self.conn.cursor() cursor.execute("SELECT id, town_name, location_detail, trip_date, atmosphere, journal_body, embedding FROM travel_chunks") rows = cursor.fetchall() results = [] for r in rows: stored_vec = json.loads(r[6]) dot = sum(a * b for a, b in zip(q_vec, stored_vec)) norm_q = sum(a * a for a in query_vec := q_vec) ** 0.5 norm_s = sum(b * b for b in stored_vec) ** 0.5 sim = dot / (norm_q * norm_s) if (norm_q * norm_s) > 0 else 0 results.append({ "score": sim, "town": r[1], "location": r[2], "date": r[3], "atmosphere": r[4], "body": r[5] }) results.sort(key=lambda x: x["score"], reverse=True) return results[:top_k]

水墨意境与岁月对谈

当系统检索出不同年份关于水乡特定意象的旅行切片后,我们引导大模型像一位与你同舟共济的行旅知己,在对比中为你展开水光潋滟的时空画卷:

def generate_town_dialogue(query: str, hits: List[Dict]) -> str: contexts = [] for hit in hits: contexts.append( f"【水乡手账:{hit['town']} · {hit['location']}】\n" f"- 行旅时空:{hit['date']}\n" f"- 当时风物:{hit['atmosphere']}\n" f"- 当年手账节选:\n\"{hit['body']}\"\n" ) prompt = f""" 你是一位深谙江南水乡美学与古典文人行旅心绪的文房伴读。 以下是从主人历年深秋在江南古镇写下的真实旅行手账中检索到的切片档案。 请根据主人的提问,将不同年份、不同水乡古镇的水波与心境进行温润的交融与对比分析: 1. 勾勒出当年特定石拱桥与湖水边的真实光影画面; 2. 梳理当年在水乡安放焦虑、重归宁静的心灵轨迹; 3. 语调如秋日水阁畔的一盏清茶,文笔清丽疏朗,富有时空纵深感。 水乡档案切片: {"".join(contexts)} 主人当前的询问: \"{query}\" """ resp = requests.post(OLLAMA_API, json={ "model": "qwen2.5:7b-instruct-q4_K_M", "prompt": prompt, "stream": False, "options": {"temperature": 0.35} }) return resp.json().get("response", "")

秋水微澜中的时空重逢

在终端里随手写下一句:“深秋时节,走在水乡的石桥上,那种关于‘时间流逝却又安稳恒久’的感觉,我曾在哪里最深切地体会过?”

片刻之后,终端缓缓流淌出一段水墨氤氲的文字:

“翻开您过往的手账,2019 年霜降前夕在昆山锦溪古镇十眼桥石阶上的那个傍晚,或许是这份心境最明澈的注脚。
那天傍晚五点,晚风吹拂着五保湖浩渺的枯荷与芦苇,湖水在夕阳下铺成一片赤金色的锦缎。面对湖中千年不沉的陈妃水冢,您在手账里写道:‘帝王繁华早已随风散尽,唯有湖边的秋水年复一年地由青转黄。天地如此开阔,人如一粟,何必把一时的得失看得太重。’
湖水年年在此拍打石阶,石桥年年在此横卧清波。今天您再次回味起这种安稳,正是当年五保湖上的那一缕晚风,穿过七年的时光长廊,再次拂亮了您的心境。”

读着这段回复,端起茶杯,窗外的秋光仿佛与当年五保湖上的赤金余晖交织在了一起。

通过将零散的旅行手账结构化与向量化,数字技术不再是冷冰冰的数据工具,它变成了一条逆流而上的乌篷船,载着我们随时回到生命中那些曾被天地山水温柔抚慰过的澄明时刻。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询