你问AI"2024年奥运会金牌榜",它可能给你编一个。你问它"某家上市公司上个季度的财报数据",它大概率给你一个看起来很真的假数字。
AI不是故意骗你,它只是不知道。它的训练数据有截止日期,你家公司的内部文档它更是没见过。这时候你需要的不是一个更聪明的AI,而是一个会查资料的AI。
这篇文章讲的就是怎么让Claude学会查资料。不是什么高深的RAG架构,就是最基础的:搜索Wikipedia、抓取网页、检索你自己的文档。
AI为什么需要"查资料"这个能力
大模型有两个硬伤,之前那篇RAG文章里讲过,这里再啰嗦一遍。
知识有保质期。Claude的训练数据截止到2025年初,2026年的事它只能靠猜。就像你让一个2020年毕业的学生评论2026年的热门事件,他编出来的东西可能比真新闻还像那么回事。
另一个问题是它不认识你家的东西。你公司的产品手册、技术文档、客户记录,这些数据大模型压根没见过。你问它"我们产品的退款流程是什么",它给你一个看起来很专业的回答,但跟你公司实际流程没半毛钱关系。
解决办法很简单:让它查资料。不是靠记忆,是靠检索。
这个思路跟人一样。你考试的时候遇到不会的题,两种策略:闭着眼睛蒙,或者翻书找答案。第一种快但不可靠,第二种慢但准确。AI也一样,让它先检索再回答,比让它靠记忆靠谱得多。
方案一:让Claude搜索Wikipedia
Wikipedia是人类知识的精华,而且更新频繁。让AI能搜索Wikipedia,相当于给它配了一本活百科全书。
Anthropic Cookbook里有一个完整的Wikipedia搜索工具实现,核心代码不复杂:
import wikipedia
import anthropic
class WikipediaSearchTool:
def __init__(self, n_results=3):
self.n_results = n_results
def search(self, query: str) -> str:
"""搜索Wikipedia并返回摘要"""
try:
# 搜索相关条目
results = wikipedia.search(query, results=self.n_results)
if not results:
return "没有找到相关条目"
# 获取第一个条目的内容
page = wikipedia.page(results[0], auto_suggest=False)
summary = page.summary[:2000] # 截取前2000字符
return f"条目: {page.title}\n\n{summary}"
except wikipedia.exceptions.DisambiguationError as e:
# 消歧义,取第一个选项
return f"存在多个匹配项: {e.options[:5]}"
except Exception as e:
return f"搜索出错: {str(e)}"
# 使用示例
tool = WikipediaSearchTool()
result = tool.search("量子计算")
print(result)
这个工具做的事情很简单:调用Wikipedia API搜索条目,获取摘要,返回给Claude。
然后你就可以让Claude用这个工具了:
client = anthropic.Anthropic()
def ask_with_wiki(question: str) -> str:
# 先搜索Wikipedia
wiki_result = tool.search(question)
# 把搜索结果塞给Claude
response = client.messages.create(
model="claude-sonnet-4-5-20250514",
max_tokens=1024,
messages=[{
"role": "user",
"content": f"""根据以下Wikipedia信息回答问题。如果信息不够,请说明。
Wikipedia搜索结果:
{wiki_result}
问题:{question}"""
}]
)
return response.content[0].text
answer = ask_with_wiki("量子纠缠是什么原理")
效果怎么样?你问"2024年诺贝尔物理学奖得主是谁",它不会给你编一个2019年的获奖者了,而是先查Wikipedia,再告诉你正确答案。
方案二:Claude网页抓取
Wikipedia覆盖面广,但不是所有信息都在上面。公司的产品页面、技术博客、新闻网站,这些内容需要另外的办法获取。
2026年2月发布的Claude Sonnet 4.6版本,在API里直接提供了web_search和web_fetch两个工具。不需要自己写爬虫,调用API就行。
# 使用Claude内置的web_search工具
response = client.messages.create(
model="claude-sonnet-4-6-20260215",
max_tokens=1024,
tools=[{
"type": "web_search",
"name": "web_search"
}],
messages=[{
"role": "user",
"content": "帮我查一下PostgreSQL 18的新特性"
}]
)
Claude会自动调用web_search工具,搜索结果会作为上下文返回。你不需要处理搜索逻辑,API帮你搞定了。
如果你用的是旧版本的API,或者想自己控制抓取逻辑,可以用Python的requests库:
import requests
from bs4 import BeautifulSoup
def fetch_page(url: str) -> str:
"""抓取网页正文内容"""
try:
headers = {
'User-Agent': 'Mozilla/5.0 (compatible; ClaudeBot/1.0)'
}
response = requests.get(url, headers=headers, timeout=10)
soup = BeautifulSoup(response.content, 'html.parser')
# 移除脚本和样式
for script in soup(["script", "style"]):
script.decompose()
# 获取正文
text = soup.get_text()
# 清理多余空白
lines = (line.strip() for line in text.splitlines())
chunks = (phrase.strip() for line in lines for phrase in line.split(" "))
text = '\n'.join(chunk for chunk in chunks if chunk)
return text[:5000] # 截取前5000字符
except Exception as e:
return f"抓取失败: {str(e)}"
这个函数做的事情:请求网页、解析HTML、提取正文、清理格式。抓到的内容同样可以塞给Claude让它分析。
方案三:RAG文档检索
前两个方案是搜索公开信息。如果你的需求是让Claude回答公司内部的问题,比如"我们产品的部署流程是什么",就需要搜索自己的文档。
这就是RAG了,全称Retrieval-Augmented Generation。我在另一篇文章里详细讲过,这里简单说一下思路。
先把你的文档切成小块。一整份技术手册塞给AI不现实,太长了。切成几百字一块,每块单独检索。
然后给每块文档生成向量。用Voyage AI这类Embedding服务,把文字转换成一串数字坐标。意思相近的文字,坐标距离就近。
用户提问的时候,把问题也转成向量,然后在所有文档块里找最近的几个。最后把找到的相关文档塞给Claude,让它基于这些内容回答。
# 极简版文档搜索示意
import voyageai
import numpy as np
vo = voyageai.Client()
def simple_search(query: str, documents: list, top_k: int = 3):
"""简单的向量搜索"""
# 生成查询向量
query_emb = vo.embed([query], model="voyage-3.5", input_type="query").embeddings[0]
# 生成文档向量
doc_embs = vo.embed(documents, model="voyage-3.5", input_type="document").embeddings
# 计算相似度
similarities = np.dot(doc_embs, query_emb)
# 返回最相关的几个
top_indices = np.argsort(similarities)[-top_k:][::-1]
return [documents[i] for i in top_indices]
这套流程搭起来之后,你就可以问"上个版本发布了什么功能"这类问题了。Claude会先在你的文档里搜索相关内容,再给你一个有根有据的回答。
Claude搜索检索方案对比

三种方案各有各的用处:
Wikipedia搜索适合查公开的百科知识,历史事件、科学概念、名人信息,上面基本都有。缺点是时效性一般。
需要查特定网站内容的时候,用网页抓取。某家公司的产品信息、某个技术博客的教程,直接去源头拿最准确。不过要处理各种网页格式,有些网站还有反爬机制。
公司内部的Wiki、产品文档、客户问答记录,这些公开网上没有的东西,就得用RAG文档检索了。自己建索引,自己维护。
实际使用中,这三种方案经常组合在一起。比如一个企业级问答系统,可能同时支持搜索内部知识库、查询Wikipedia、以及抓取指定的外部网页。
完整的Claude搜索助手示例
把上面的代码拼在一起,做一个能搜索Wikipedia也能抓取网页的问答助手:
import anthropic
import wikipedia
import requests
from bs4 import BeautifulSoup
class SearchAssistant:
def __init__(self):
self.client = anthropic.Anthropic()
def search_wiki(self, query: str) -> str:
try:
results = wikipedia.search(query, results=3)
if not results:
return ""
page = wikipedia.page(results[0], auto_suggest=False)
return f"[Wikipedia: {page.title}]\n{page.summary[:1500]}"
except:
return ""
def fetch_url(self, url: str) -> str:
try:
headers = {'User-Agent': 'Mozilla/5.0'}
resp = requests.get(url, headers=headers, timeout=10)
soup = BeautifulSoup(resp.content, 'html.parser')
for s in soup(["script", "style"]):
s.decompose()
text = soup.get_text()[:3000]
return f"[网页内容]\n{text}"
except:
return ""
def ask(self, question: str, wiki: bool = True, urls: list = None) -> str:
context = ""
# 搜索Wikipedia
if wiki:
wiki_result = self.search_wiki(question)
if wiki_result:
context += wiki_result + "\n\n"
# 抓取指定网页
if urls:
for url in urls:
page_content = self.fetch_url(url)
if page_content:
context += page_content + "\n\n"
# 调用Claude
prompt = f"根据以下资料回答问题,如果资料中没有相关信息请说明。\n\n{context}\n问题:{question}"
response = self.client.messages.create(
model="claude-sonnet-4-5-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}]
)
return response.content[0].text
# 使用
assistant = SearchAssistant()
# 只用Wikipedia
answer1 = assistant.ask("什么是图灵测试")
# 同时用Wikipedia和网页
answer2 = assistant.ask(
"PostgreSQL 18有什么新特性",
wiki=True,
urls=["https://www.postgresql.org/about/news/"]
)
不到100行代码,一个能查资料的AI助手就搞定了。
搜索检索的边界
最后说几个注意点。
检索不是万能的。你检索的内容质量决定了回答的质量。文档写得烂,AI检索出来也答不好,这叫"垃圾进垃圾出"。
有时候搜索会返回不相关的内容,AI硬着头皮用这些内容回答,结果就是一本正经的胡说八道。设一个相似度阈值,太低的结果直接丢弃。
文档更新了,向量索引也要跟着更新。不然AI还在用旧信息回答,你也不知道。
另外成本要算清楚。每次搜索都要调用Embedding API,每条回答都要调用Claude API。用户量大的话,账单不会太好看。
今天能动手做什么
别光看,动手试试。
去Anthropic Cookbook的GitHub仓库,把Wikipedia搜索的示例跑一遍。几十行代码,5分钟的事。
然后想一个你日常工作中经常遇到的问题:查API文档、找产品规格、搜技术方案。试着用这套方法做一个能自动检索的问答小工具。
最简单的起步:把你电脑里某个文件夹的文档建个索引,写个命令行工具能搜索这些文档。做完这个,你对"AI查资料"这件事的理解会上一个台阶。
你的工作里,最想让AI帮你查什么资料?是某个技术文档网站,还是公司内部的知识库?评论区说说,说不定你的需求也是别人的痛点。
常见问题
Wikipedia搜索API有频率限制吗?
有的。Wikipedia的公开API对未认证请求有频率限制,大概每秒一次。如果你需要高频调用,建议申请API key,或者自己搭建一个Wikipedia的镜像数据库。
Claude内置的web_search工具在国内能用吗?
Claude的web_search工具调用的是海外搜索引擎,国内访问可能不稳定。如果稳定性要求高,建议自己实现搜索逻辑,调用国内的搜索API或者直接抓取目标网站。
RAG和直接把文档塞进提示词有什么区别?
文档量小(比如少于10万字)的时候,直接塞提示词更简单。文档量大的时候,提示词塞不下,必须用RAG。另一个区别是成本:RAG只检索相关片段,token消耗少;全塞进去每次都要消耗大量token。
向量搜索和关键词搜索哪个更好?
各有所长。向量搜索擅长理解语义,“怎么优化数据库"能找到"性能调优指南”。关键词搜索擅长精确匹配,搜"ERR_CONNECTION_REFUSED"能精确找到这个错误码。好的方案是两个都用,然后合并结果。
