别再把 AI 搜索当 ChatGPT 了:一文讲透区别与实现源码
AI搜索 和 ChatGPT 有什么区别|附源码
在过去两年里,“ChatGPT”和“AI搜索”几乎同时成为互联网产品中的高频词。很多人第一次接触大模型,是从 ChatGPT 开始的;而很多企业真正把大模型落地到业务中,却往往是从 AI 搜索开始的。
表面上看,二者都能“回答问题”,用户也都是输入一句话,然后得到一段自然语言回复。但如果深入到产品目标、技术架构、数据来源、结果可信度、适用场景等层面,就会发现:AI搜索和 ChatGPT 并不是同一种产品形态。
简单来说:
ChatGPT 更像一个通用型智能助手,擅长理解、生成、推理和对话;AI搜索更像一个带有检索能力的智能问答系统,擅长从指定信息源中查找、整合并生成答案。
本文将从概念、原理、区别、应用场景以及代码实现等角度,系统讲清楚 AI搜索 和 ChatGPT 的区别,并附上一个简化版 AI 搜索系统源码,帮助你理解其核心实现思路。
一、什么是 ChatGPT?
ChatGPT 是基于大语言模型的对话式 AI 产品。它的核心能力来自于大模型本身,例如 GPT 系列模型。用户输入问题后,模型会根据已经训练好的参数进行语言理解、上下文推理和文本生成。
你可以把 ChatGPT 理解成一个“通用型语言智能体”。它不仅能回答问题,还能写文章、写代码、做翻译、总结文档、生成营销文案、模拟角色对话,甚至帮助分析业务方案。
例如你可以问 ChatGPT:
请帮我写一份产品需求文档。
它会根据通用知识、语言模式和上下文生成一份结构化内容。
再比如:
用 Python 写一个快速排序算法。
它可以直接生成代码,并解释代码逻辑。
ChatGPT 的优势在于:
- 通用性强:不局限于某一个行业或知识库。
- 语言生成能力强:可以写文章、改文案、写代码、做总结。
- 上下文理解能力好:能够根据多轮对话持续调整回答。
- 推理能力较强:可以完成一定程度的分析、规划和逻辑推导。
但 ChatGPT 也存在一个典型问题:
如果问题涉及最新信息、私有数据、企业内部文档或非常具体的事实,它未必知道,甚至可能“编造”一个看似合理但并不准确的答案。
这类现象通常被称为 幻觉(Hallucination)。
二、什么是 AI搜索?
AI搜索可以理解为传统搜索引擎与大语言模型结合之后的新型搜索方式。
传统搜索引擎的工作方式通常是:
- 用户输入关键词;
- 搜索系统在网页或文档库中匹配相关内容;
- 返回一批链接或文档片段;
- 用户自己点击、阅读、筛选和总结。
而 AI 搜索则进一步做了两件事:
- 先检索相关资料;
- 再用大模型根据资料生成答案。
也就是说,AI搜索不是单纯让大模型“凭记忆回答”,而是先从一个可控的信息源中找出相关内容,再把这些内容交给大模型,让模型基于这些资料进行总结和回答。
一个典型的 AI 搜索流程如下:
用户问题
↓
问题向量化
↓
从知识库/网页/数据库中检索相关内容
↓
将检索结果作为上下文提供给大模型
↓
大模型生成答案
↓
返回答案,并可附带引用来源
这种模式在技术上通常被称为 RAG,即 Retrieval-Augmented Generation,中文一般翻译为“检索增强生成”。
AI搜索的核心不是让模型记住所有知识,而是让模型具备“查资料后再回答”的能力。
三、AI搜索 和 ChatGPT 的核心区别
虽然二者都使用大语言模型,但产品定位和实现逻辑差别很大。
1. 数据来源不同
ChatGPT 的回答主要依赖模型训练时学习到的知识,以及用户在当前对话中提供的信息。它本身并不一定实时连接外部数据库或网页。
而 AI搜索通常会连接一个或多个外部数据源,例如:
- 企业内部知识库;
- 产品文档;
- 法律法规库;
- 学术论文库;
- 新闻网页;
- 电商商品库;
- 客服工单系统;
- 数据库表;
- 本地 Markdown、PDF、Word 文档。
因此,AI搜索更强调“基于资料回答”。
如果你问 ChatGPT:
我们公司最新的报销制度是什么?
如果你没有把制度内容提供给它,它通常无法准确回答。
但如果你搭建了企业内部 AI搜索系统,并把公司制度文档导入知识库,那么它就可以根据内部文档回答,并告诉你答案来自哪一份文件。
2. 目标不同
ChatGPT 的目标是成为通用对话助手,它更关注语言交互、任务协作和内容生成。
AI搜索的目标则是提升信息检索效率,它更关注:
- 找到准确资料;
- 提炼关键结论;
- 减少人工阅读成本;
- 提供可追溯来源;
- 降低胡编乱造风险。
换句话说:
ChatGPT 更像“会思考和表达的助手”;
AI搜索更像“会查资料并总结的搜索专家”。
3. 回答可信度不同
ChatGPT 在没有检索资料的情况下,容易出现“说得很流畅但不一定正确”的情况。
AI搜索因为会先查找资料,再基于资料回答,所以在事实类问题上通常更可靠。尤其当系统设计了引用来源、文档片段展示、答案校验等机制时,用户可以知道答案是从哪里来的。
例如 AI搜索可以这样回答:
根据《员工差旅管理制度》第三章第十二条,员工出差住宿标准为:
一线城市不超过 600 元/晚,二线城市不超过 450 元/晚,其他城市不超过 350 元/晚。
来源:员工差旅管理制度.pdf,第 4 页
这种带来源的答案,比单纯一段生成文本更适合企业场景。
4. 技术架构不同
ChatGPT 的核心是大语言模型本身。用户输入问题后,模型直接根据上下文生成回复。
AI搜索的架构通常更复杂,除了大模型,还需要:
- 文档解析模块;
- 文本切分模块;
- Embedding 向量化模型;
- 向量数据库;
- 关键词检索系统;
- 重排序模型;
- Prompt 拼接;
- 答案生成模型;
- 引用来源管理;
- 权限控制;
- 日志与反馈系统。
一个简化版 AI搜索架构如下:
┌──────────────┐
│ 用户问题 │
└──────┬───────┘
↓
┌──────────────┐
│ Query理解 │
└──────┬───────┘
↓
┌────────────────────────────┐
│ 检索模块:关键词 + 向量检索 │
└────────────┬───────────────┘
↓
┌──────────────┐
│ 相关文档片段 │
└──────┬───────┘
↓
┌──────────────┐
│ 大模型生成答案 │
└──────┬───────┘
↓
┌──────────────┐
│ 答案 + 引用来源 │
└──────────────┘
5. 使用场景不同
ChatGPT 更适合以下场景:
- 写作与内容生成;
- 编程辅助;
- 头脑风暴;
- 语言翻译;
- 学习辅导;
- 方案设计;
- 多轮对话;
- 角色扮演;
- 通用问题解答。
AI搜索更适合以下场景:
- 企业知识库问答;
- 客服智能问答;
- 文档检索与总结;
- 法律条文查询;
- 医疗指南检索;
- 学术论文问答;
- 内部制度查询;
- 产品说明书问答;
- 电商商品智能导购;
- 金融研报分析。
如果你的问题是“帮我想 10 个短视频标题”,ChatGPT 很适合。
如果你的问题是“根据我们公司 2024 年销售政策,渠道返点规则是什么”,AI搜索更适合。
四、AI搜索 和 ChatGPT 的关系
很多人会误以为 AI搜索 是 ChatGPT 的竞争对手。实际上,它们更多是互补关系。
AI搜索通常会用到类似 ChatGPT 的大模型能力。只是它不会让模型直接回答,而是先把检索到的资料作为上下文,再让模型生成答案。
也就是说:
AI搜索 = 搜索/检索系统 + 大语言模型 + 引用与可信机制
在一个完整的 AI应用中,ChatGPT 类模型负责“理解和表达”,搜索系统负责“找到事实依据”。
两者结合之后,可以显著提升回答质量。
例如传统 ChatGPT 式回答可能是:
员工报销一般需要提交发票、审批单和相关说明。
而 AI搜索式回答可能是:
根据公司《费用报销管理制度》第二章第六条,员工报销需要提交:
1. 合规发票;
2. 报销申请单;
3. 部门负责人审批记录;
4. 如涉及差旅,还需提供出差申请单和行程单。
来源:《费用报销管理制度》第 2 页。
后者更具体、更可靠,也更适合严肃业务系统。
五、为什么企业更需要 AI搜索?
对企业而言,真正有价值的数据往往不在公共互联网中,而在企业内部:
- OA 系统;
- CRM 系统;
- ERP 系统;
- 飞书/钉钉文档;
- Confluence;
- 企业网盘;
- 邮件系统;
- 历史工单;
- 产品手册;
- 培训资料;
- 合同模板;
- 项目文档。
这些数据通常具有几个特点:
- 分散:散落在不同系统中;
- 格式复杂:PDF、Word、Excel、网页、数据库都有;
- 更新频繁:制度、价格、流程可能经常变化;
- 权限敏感:不同员工能看的资料不同;
- 查询成本高:员工需要花大量时间找文件、读文件。
AI搜索的价值就是把这些资料变成一个“可问答”的知识系统。
员工不需要知道文件放在哪里,也不需要逐页阅读,只需要直接提问:
新员工试用期转正流程是什么?
系统就可以检索制度文档,并生成简洁答案。
这不仅提升效率,也减少了重复咨询人事、财务、法务、客服等部门的成本。
六、AI搜索的关键技术点
要做好 AI搜索,并不是简单接入一个大模型就够了。真正可用的 AI搜索系统,通常要解决以下问题。
1. 文档切分
大模型无法一次性处理无限长的文档,所以需要把文档切成多个小片段。切分太短会丢失上下文,切分太长会影响检索精度。
常见做法是按段落、标题、固定长度、语义边界进行切分。
2. 向量化
文本需要转换成向量,才能进行语义相似度检索。例如“报销流程”和“费用申请步骤”虽然字面不同,但语义接近,向量检索可以找到相关内容。
3. 向量数据库
向量数据库用于存储文本片段对应的向量,并支持相似度搜索。常见工具包括:
- FAISS;
- Milvus;
- Weaviate;
- Qdrant;
- Chroma;
- Elasticsearch 向量检索。
4. 混合检索
单纯向量检索有时不够准确,尤其对数字、专有名词、编号、法规条款等内容不敏感。因此很多系统会结合关键词检索和向量检索,也就是 Hybrid Search。
5. 重排序
初步检索到的文档片段不一定最相关,可以使用 rerank 模型重新排序,提高最终输入大模型的上下文质量。
6. Prompt 设计
AI搜索的 Prompt 通常会明确要求模型:
- 只能根据资料回答;
- 不知道就说不知道;
- 不要编造;
- 保留引用来源;
- 答案要结构化。
7. 权限控制
企业内部 AI搜索必须考虑权限问题。用户只能检索和查看自己有权限访问的文档,否则可能导致数据泄露。
七、附源码:用 Python 实现一个简化版 AI搜索
下面给出一个最小可运行的 AI搜索示例。它的目标是演示核心流程:
- 准备文档;
- 文本切分;
- 使用 Embedding 模型向量化;
- 使用 FAISS 建立向量索引;
- 根据用户问题检索相关片段;
- 调用大模型生成答案。
说明:以下代码使用 OpenAI API 作为示例,你也可以替换成其他兼容 OpenAI 格式的大模型服务。
八、项目结构
ai-search-demo/
├── app.py
├── requirements.txt
└── docs/
├── reimbursement.txt
└── attendance.txt
九、requirements.txt
openai>=1.30.0
faiss-cpu>=1.8.0
numpy>=1.26.0
python-dotenv>=1.0.1
十、示例文档
在 docs/reimbursement.txt 中写入:
《费用报销管理制度》
第一条:员工报销需要提交合规发票、报销申请单以及部门负责人审批记录。
第二条:差旅报销还需要提交出差申请单、交通票据、住宿发票和行程单。
第三条:住宿标准如下:一线城市不超过600元/晚,二线城市不超过450元/晚,其他城市不超过350元/晚。
第四条:报销申请应在费用发生后的30个自然日内提交,逾期需要补充说明并由部门负责人审批。
在 docs/attendance.txt 中写入:
《员工考勤管理制度》
第一条:公司标准工作时间为周一至周五,上午9:00至12:00,下午14:00至18:00。
第二条:员工每月可申请两次补卡,每次补卡需要直属领导审批。
第三条:年假申请需要至少提前三个工作日提交,并在系统中完成审批。
第四条:连续迟到三次将进行提醒,连续迟到五次需要提交书面说明。
十一、app.py 源码
import os
import glob
import faiss
import numpy as np
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url=os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
)
DOC_DIR = "docs"
EMBEDDING_MODEL = "text-embedding-3-small"
CHAT_MODEL = "gpt-4o-mini"
def load_documents(doc_dir: str):
"""
读取 docs 目录下的 txt 文档
"""
documents = []
for file_path in glob.glob(os.path.join(doc_dir, "*.txt")):
with open(file_path, "r", encoding="utf-8") as f:
text = f.read()
documents.append({
"source": os.path.basename(file_path),
"content": text
})
return documents
def split_text(text: str, chunk_size: int = 220, overlap: int = 40):
"""
简单文本切分。
chunk_size 表示每段最大字符数;
overlap 表示相邻片段之间的重叠字符数,避免上下文断裂。
"""
chunks = []
start = 0
while start < len(text):
end = start + chunk_size
chunk = text[start:end]
chunks.append(chunk)
if end >= len(text):
break
start = end - overlap
return chunks
def build_chunks(documents):
"""
将文档切分成多个片段,并保留来源信息
"""
chunks = []
for doc in documents:
parts = split_text(doc["content"])
for i, part in enumerate(parts):
chunks.append({
"id": len(chunks),
"source": doc["source"],
"chunk_index": i,
"text": part
})
return chunks
def get_embedding(text: str):
"""
获取文本向量
"""
response = client.embeddings.create(
model=EMBEDDING_MODEL,
input=text
)
return response.data[0].embedding
def build_faiss_index(chunks):
"""
为所有文档片段建立 FAISS 向量索引
"""
embeddings = []
for chunk in chunks:
emb = get_embedding(chunk["text"])
embeddings.append(emb)
vectors = np.array(embeddings).astype("float32")
# 使用内积索引。为了近似 cosine similarity,需要先归一化向量。
faiss.normalize_L2(vectors)
dimension = vectors.shape[1]
index = faiss.IndexFlatIP(dimension)
index.add(vectors)
return index, vectors
def search(query: str, chunks, index, top_k: int = 3):
"""
根据用户问题检索最相关的 top_k 个文档片段
"""
query_emb = np.array([get_embedding(query)]).astype("float32")
faiss.normalize_L2(query_emb)
scores, ids = index.search(query_emb, top_k)
results = []
for score, idx in zip(scores[0], ids[0]):
if idx == -1:
continue
chunk = chunks[idx]
results.append({
"score": float(score),
"source": chunk["source"],
"chunk_index": chunk["chunk_index"],
"text": chunk["text"]
})
return results
def generate_answer(query: str, search_results):
"""
将检索到的内容作为上下文,交给大模型生成答案
"""
context = ""
for i, item in enumerate(search_results, start=1):
context += f"\n[资料{i}]\n"
context += f"来源:{item['source']},片段:{item['chunk_index']}\n"
context += item["text"] + "\n"
system_prompt = """
你是一个严谨的企业知识库问答助手。
请你只根据用户提供的资料回答问题。
如果资料中没有答案,请明确回答“根据现有资料无法确定”。
不要编造资料中不存在的内容。
回答时请尽量结构化,并在最后列出引用来源。
"""
user_prompt = f"""
用户问题:
{query}
可参考资料:
{context}
请根据以上资料回答。
"""
response = client.chat.completions.create(
model=CHAT_MODEL,
messages=[
{
"role": "system",
"content": system_prompt
},
{
"role": "user",
"content": user_prompt
}
],
temperature=0.2
)
return response.choices[0].message.content
def main():
print("正在加载文档...")
documents = load_documents(DOC_DIR)
print("正在切分文档...")
chunks = build_chunks(documents)
print("正在构建向量索引,首次运行可能较慢...")
index, _ = build_faiss_index(chunks)
print("\nAI搜索系统已启动,输入 exit 退出。\n")
while True:
query = input("请输入问题:")
if query.lower() in ["exit", "quit"]:
print("已退出。")
break
results = search(query, chunks, index, top_k=3)
print("\n检索到的相关片段:")
for item in results:
print("-" * 50)
print(f"相似度:{item['score']:.4f}")
print(f"来源:{item['source']}")
print(item["text"])
answer = generate_answer(query, results)
print("\nAI回答:")
print(answer)
print("\n" + "=" * 80 + "\n")
if __name__ == "__main__":
main()
十二、运行方式
首先安装依赖:
pip install -r requirements.txt
然后配置环境变量:
export OPENAI_API_KEY="你的 API Key"
如果你使用的是兼容 OpenAI 接口的第三方模型服务,也可以配置:
export OPENAI_BASE_URL="https://你的模型服务地址/v1"
启动项目:
python app.py
测试问题:
员工差旅报销需要提交哪些材料?
系统可能回答:
根据现有资料,员工差旅报销需要提交以下材料:
1. 出差申请单;
2. 交通票据;
3. 住宿发票;
4. 行程单;
5. 合规发票;
6. 报销申请单;
7. 部门负责人审批记录。
引用来源:
- reimbursement.txt
再问:
年假需要提前多久申请?
系统可能回答:
根据《员工考勤管理制度》,年假申请需要至少提前三个工作日提交,并在系统中完成审批。
引用来源:
- attendance.txt
十三、这段源码体现了 AI搜索的哪些核心思想?
虽然上面的代码很简单,但它已经包含了 AI搜索的核心流程。
1. 不是直接问大模型
代码并没有直接把用户问题丢给大模型,而是先执行:
results = search(query, chunks, index, top_k=3)
也就是先从本地知识库中找到相关内容。
2. 用检索结果约束回答范围
在 generate_answer 函数中,我们把检索结果拼接到 Prompt 里,并要求模型“只根据资料回答”。
这可以显著降低幻觉风险。
3. 保留来源信息
每个文档片段都保留了:
"source": doc["source"]
因此最终答案可以引用来源,方便用户核验。
4. 使用向量检索实现语义匹配
用户问“差旅报销要什么材料”,文档里可能写的是“差旅报销还需要提交……”,即使不是完全相同关键词,向量检索也能找到语义相近的片段。
这就是 AI搜索比传统关键词搜索更智能的地方。
十四、生产级 AI搜索还需要做哪些优化?
上面的示例适合学习原理,但如果要用于真实业务,还需要进一步升级。
1. 支持更多文档格式
真实企业文档不只有 TXT,还会有:
- PDF;
- Word;
- Excel;
- PPT;
- HTML;
- Markdown;
- 数据库记录;
- 图片 OCR 文本。
因此需要文档解析模块。
2. 增加增量更新能力
文档更新后,系统应该自动重新切分、重新向量化,并更新索引,而不是每次都全量重建。
3. 引入混合检索
对于制度编号、合同编号、产品型号、金额、日期等信息,关键词检索往往更准确。实际系统常使用:
向量检索 + BM25关键词检索 + Rerank重排序
4. 做权限控制
不同用户只能检索自己有权限的资料。例如普通员工不能查询高管薪酬文档,销售不能查询未授权客户合同。
5. 加入答案评估
可以记录用户反馈,例如“有用 / 无用”,并根据反馈优化切分、检索、Prompt 和知识库质量。
6. 控制成本与速度
Embedding、Rerank、Chat Completion 都会产生调用成本。生产系统需要缓存、批量向量化、异步任务、结果复用等机制。
十五、总结
AI搜索 和 ChatGPT 的区别,可以用一句话概括:
ChatGPT 主要依赖模型自身能力进行对话和生成;AI搜索则先检索外部资料,再基于资料生成答案。
更进一步说:
| 对比项 | ChatGPT | AI搜索 |
|---|---|---|
| 核心定位 | 通用智能助手 | 智能检索问答系统 |
| 数据来源 | 模型参数与对话上下文 | 外部知识库、网页、数据库、文档 |
| 主要能力 | 理解、生成、推理、对话 | 检索、总结、引用、问答 |
| 可信度 | 可能出现幻觉 | 可基于资料并附来源 |
| 适合场景 | 写作、编程、创意、通用问答 | 企业知识库、制度查询、客服、文档问答 |
| 技术重点 | 大模型能力 | RAG、向量检索、知识库、权限、引用 |
| 是否实时 | 不一定 | 可以接入实时数据源 |
| 是否可追溯 | 通常较弱 | 通常较强 |
如果你只是想写文章、写代码、做创意生成,ChatGPT 已经非常好用。
但如果你希望系统基于企业内部文档、最新资料或指定数据库回答问题,那么 AI搜索会更适合。
未来的 AI 产品很可能不是单纯的聊天机器人,也不是传统搜索框,而是二者融合后的智能系统:既能像 ChatGPT 一样理解和表达,也能像搜索引擎一样查找事实依据,并给出可靠来源。
这也是 AI搜索真正有价值的地方。