无需复杂架构!不用学Elasticsearch!本文教你用纯Python+博查API,30行代码搭建一个高精度问答系统,本地文件、网页结果一键融合!


一、核心思路:用文件+API实现“混合检索”

极简设计图

用户提问 → 本地知识库搜索 → 博查API搜索 → 结果合并 → 生成答案

优势

  • 本地文件快速检索(txt/csv等)
  • 博查API补充实时网页结果
  • 零第三方依赖,代码控制在100行内

二、手把手实现:三模块代码拆解

2.1 模块1:本地知识库检索(纯Python实现)

场景:搜索本地knowledge.txt中的内容

def search_local(query: str, file_path: str) -> list:
    results = []
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            if query in line:
                results.append(f"[本地] {line.strip()}")
                if len(results) >= 3:  # 最多返回3条
                    break
    return results

# 测试:本地文件内容为"深度学习需要掌握Python、PyTorch..."
local_hits = search_local("深度学习", "knowledge.txt")
print("本地结果:", local_hits)

输出示例

本地结果: ['[本地] 深度学习需要掌握Python、PyTorch...']

2.2 模块2:博查API实时搜索(10行代码)

import requests

def search_web(query: str, api_key: str) -> list:
    url = "https://api.bochaai.com/v1/web-search"
    headers = {"Authorization": f"Bearer {api_key}"}
    payload = {"query": query, "count": 3, "summary": True}
    
    response = requests.post(url, headers=headers, json=payload)
    if response.status_code == 200:
        return [f"[网页] {item['snippet']}" for item in response.json()['data']['webPages']['value']]
    return []

# 测试:搜索实时内容
web_hits = search_web("深度学习最新技术", "sk-你的密钥")
print("网页结果:", web_hits[:1])  # 示例输出第一条

输出示例

网页结果: ['[网页] 深度学习之所以重要,是因为随着数据量的增加和计算能力变得更加强大和经济实惠,遍布零售、医疗保健、运输、制造、技术和其他行业的公司将投资深度 学习来推动创新、解锁机会并与时俱进。深度学习的工作原理是依赖于多个层中的神经网络...']

2.3 模块3:结果聚合与答案生成(LangChain最小化实现)

from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

def generate_answer(query: str, local_hits: list, web_hits: list) -> str:
    # 无需LangChain复杂流程!直接拼接上下文
    context = "\n".join(local_hits + web_hits)
    
    prompt = f"""
    你是一个AI助手,请根据以下信息回答问题:
    {context}
    问题:{query}
    回答要求:列出要点,每点不超过20字
    """
    
    # 测试时使用伪模型代码,实战时可以切换为真实模型代码
    class SimpleModel:
        def invoke(self, text):
            return "1. 掌握Python基础\n2. 学习PyTorch框架\n3. 关注多模态趋势"
    
    return SimpleModel().invoke(prompt)

# 示例调用
answer = generate_answer("如何学习深度学习?", local_hits, web_hits)
print("最终答案:\n", answer)

输出示例

最终答案:
1. 掌握Python基础
2. 学习PyTorch框架
3. 关注多模态趋势

三、项目实战:搭建命令行问答工具

3.1 完整代码(50行极简版)

import requests
import argparse
from openai import OpenAI

class QASystem:
    def __init__(self, api_key: str, local_file: str, model: str = "deepseek-chat"):
        self.api_key = api_key
        self.local_file = local_file
        self.model = model
        self.client = OpenAI(api_key="你的DeepSeek KEY", base_url="https://api.deepseek.com/v1")
    
    def search_local(self, query: str) -> list:
        hits = []
        with open(self.local_file, 'r', encoding='utf-8') as f:
            for line in f:
                if query in line:
                    hits.append(f"[本地] {line.strip()}")
                    if len(hits) >= 3:
                        break
        return hits
    
    def search_web(self, query: str) -> list:
        url = "https://api.bochaai.com/v1/web-search"
        headers = {"Authorization": f"Bearer {self.api_key}"}
        payload = {"query": query, "count": 3}
        response = requests.post(url, headers=headers, json=payload)
        return [f"[网页] {item['snippet']}" for item in response.json().get('data', {}).get('webPages', {}).get('value', [])] if response.ok else []
    
    def generate_answer(self, query: str, context: list) -> str:
        prompt = f"基于以下信息回答问题:\n{chr(10).join(context)}\n\n问题:{query}\n答案:"
        response = self.client.chat.completions.create(
            model=self.model,
            messages=[
                {"role": "system", "content": "你是一个智能问答助手。"},
                {"role": "user", "content": prompt}
            ]
        )
        return "\n".join([
            "基于以下信息生成答案:",
            *context,
            "\n答案精简版:",
            "1. 结合本地知识与最新网页结果",
            "2. 具体内容需根据实际搜索调整",
            "\n",
            response.choices[0].message.content if response.choices else "无法生成答案"
        ])
    
    def answer(self, query: str) -> str:
        context = self.search_local(query) + self.search_web(query)
        return self.generate_answer(query, context)

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--query", type=str, required=True)
    parser.add_argument("--api_key", type=str, required=True)
    parser.add_argument("--local_file", type=str, default="knowledge.txt")
    parser.add_argument("--model", type=str, default="deepseek-chat")
    args = parser.parse_args()
    
    qa = QASystem(args.api_key, args.local_file, args.model)
    print(qa.answer(args.query))

3.2 运行演示

步骤1:创建本地知识库文件knowledge.txt

深度学习需要Python和PyTorch基础
Transformer模型是NLP的核心

步骤2:执行命令行问答

python qa_system.py --api_key sk-你的密钥 --query "如何入门深度学习"

输出效果

基于以下信息生成答案:
[网页] 理解深度学习的内部运作可能同样令人困惑。虽然功能性 AI 模型的数学和开发非常广泛,但可以将总体思路分解为更简单的步骤,以了解如何开始您的旅程。让我们回顾 一下从哪里开始掌握人工智能和深度学习的复杂主题的基础知识。一句话概括什么是深度学习?深度学习是一种让计算机自行学习和做出决策的方式,它通过对大量数据进行训练,并使用模仿人脑结构的复杂神经网络来执行复杂的任务。深度学习的目标是大规模获...
[网页] 入门深度学习可以分为以下几个步骤:基础知识准备:(1)掌握基础数学知识,特别是线性代数、概率论和统计学、微积分。(2)学习编程语言,Python 是目前最流行的深度学习语言,因其简洁易学且有大量的库支持。 (3)了解机器学习基础,包括监督学习和非...
[网页] 第一步:理解深度学习基本概念  第二步:选择合适的编程语言和工具  第三步:学习线性代数和微积分基础  第四步:掌握机器学习基础知识

答案精简版:
1. 结合本地知识与最新网页结果
2. 具体内容需根据实际搜索调整


入门深度学习可以按照以下步骤进行:

1. **理解深度学习基本概念**:首先了解深度学习的基础原理,包括其如何通过模仿人脑结构的神经网络从数据中学习并做出决策。

2. **掌握基础数学知识**:重点学习线性代数、概率论与统计学、微积分,这些是理解深度学习模型和算法的数学基础。

3. **学习编程语言**:选择Python作为编程语言,因为它简洁易学且有丰富的深度学习库(如TensorFlow、PyTorch)支持。

4. **了解机器学习基础**:掌握机器学习的基本概念,例如监督学习和非监督学习,这是深度学习的重要前置知识。

5. **选择合适的工具和框架**:熟悉常用的深度学习工具和框架,如TensorFlow或PyTorch,并通过实践项目巩固知识。

6. **实践与项目应用**:通过实际项目和练习应用所学知识,逐步提升深度学习的实战能力。

通过以上步骤,可以系统性地入门深度学习并逐步掌握其复杂主题。

答案精简版:
1. 结合本地知识与最新网页结果
2. 具体内容需根据实际搜索调整

五、总结

通过本文的学习,已经掌握了简单的本地+联网增强搜索并使用DeepSeek生成回答的简单RAG功能啦!赶快自己动手尝试一下吧!

立即行动:

前往博查AI开放平台领取API Key

查看往期教程👇,构建完整RAG应用链

🔗 系列文章推荐:

《用Python玩转博查Web Search API》

《Semantic Reranker API:搜索结果智能排序》

《Dify+博查API:零代码搭建RAG应用》

让AI告别“古董知识库”,拥抱实时智能新时代!🚀

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐