2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
几个月前,我正在为一个内部工具构建文档网站。用户不断要求提供一种“能理解意图”的搜索功能——你知道的,就像输入“如何重置密码?”就能得到正确的帮助文章,即使文章标题中并不包含“重置”这个词。
我想:现在是2024年,每个人都在做人工智能。这能有多难呢?
事实证明,这是我说过最后悔的话。
问题所在
我从一个简单的关键词搜索开始。使用了弹性搜索(ElasticSearch)、模糊匹配等各种技术。对于精确术语,它运行得尚可,但在处理复述表达时却失败了。有人会问“我无法登录”,而搜索却返回空结果,因为文章中写的是“认证失败”。
我尝试添加同义词——繁琐且无穷无尽。我尝试使用一个小型自然语言处理库(spaCy)进行实体提取,但这使我的打包体积增加了200兆字节,而且仍然无法理解命名实体之外的意图。
我需要一种能够将自然语言查询映射到正确内容的方法,而无需训练自己的模型或花费数周时间进行调优。
我尝试过但无效的方法
1. 正则表达式 + 同义词词典
我编写了一个庞大的短语到文章标识符的映射表。每当有人使用新的变体表达时,它就会失效。维护起来简直是噩梦。
2. 使用 spaCy 进行本地自然语言处理
import spacy
nlp = spacy.load("en_core_web_lg")
def extract_intent(text):
doc = nlp(text)
# ... 猜测意图的复杂逻辑
这在演示中运行良好,但对于实时搜索来说太慢了,并且需要专用服务器。此外,在我们的领域数据上对其进行训练超出了项目范围。
3. 构建简单的嵌入搜索
我尝试使用句子转换器(sentence-transformers)在本地生成嵌入向量,然后计算余弦相似度。这很有前景,但需要不错的图形处理器才能保证合理的延迟。对于一个小型文档网站来说,这仍然有些大材小用。
最终奏效的方法:轻量级的人工智能应用程序接口调用
我意识到我不需要托管模型。我只需要一个快速的应用程序接口,能够接收问题并返回结构化的答案。许多提供商都提供确切的服务——只需通过超文本传输协议发送一个简单的帖子请求,包含提示词和一些上下文信息。
以下是对我有效的方法:
- 准备你的内容 —— 将文档分割成带有元数据的小块(例如段落)。
- 在后端创建搜索端点,接收用户查询和可选的上下文。
- 调用人工智能应用程序接口,使用提示词要求查找最相关的片段。
- 返回结果。
关键见解:你不需要微调任何东西。精心设计的提示词加上一小组相关文档,足以满足大多数内部工具的需求。
代码示例
我是用节点.js(Express)构建这个功能的。以下是简化版本:
// server.js
import express from 'express免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。