You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中管控Langchain搜索代理以获取相关搜索结果?

管控Langchain搜索代理返回内容的Python实现方案

针对你遇到的搜索结果无关问题,可以通过以下几种方式实现精准管控:

1. 先优化搜索查询

让LLM将原始查询转化为更精准的搜索引擎友好语句,避免模糊表述导致的无关结果:

from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI

llm = OpenAI(temperature=0)

# 定义查询优化提示
query_optimizer = PromptTemplate(
    input_variables=["query"],
    template="把这个查询改写为精准的搜索关键词,只输出改写后的内容:{query}"
)

# 示例:优化查询
original_query = "人工智能在医疗领域的最新应用"
optimized_query = llm(query_optimizer.format(query=original_query))

2. 对搜索结果做后置过滤

自定义SerpAPI工具,在拿到结果后直接过滤掉无关内容。可以用关键词匹配或LLM判断相关性:

from langchain.tools import SerpAPIWrapper
import json

def filter_results(raw_results, target_query):
    relevant = []
    target_words = target_query.lower().split()
    # 解析SerpAPI返回的字符串结果为字典
    results = json.loads(raw_results)
    for item in results.get("organic_results", []):
        title = item["title"].lower()
        snippet = item["snippet"].lower()
        # 检查标题或摘要是否包含核心关键词
        if any(word in title or word in snippet for word in target_words):
            relevant.append(item)
    return json.dumps(relevant)

# 封装带过滤的搜索工具
class FilteredSerpSearch(SerpAPIWrapper):
    def run(self, query):
        # 先优化查询
        optimized = llm(query_optimizer.format(query=query))
        # 获取原始结果
        raw = super().run(optimized)
        # 过滤后返回
        return filter_results(raw, query)

# 使用自定义工具
filtered_search = FilteredSerpSearch()
relevant_data = filtered_search.run(original_query)

3. 引导LLM严格校验相关性

通过调整代理的系统提示词,让LLM在调用工具后主动丢弃无关结果:

from langchain.agents import initialize_agent, AgentType

system_prompt = """你是精准信息检索助手,仅使用提供的搜索工具获取内容。搜索前优化查询,拿到结果后必须校验是否与用户问题相关,只保留相关内容整理输出,无关结果直接忽略。"""

agent = initialize_agent(
    tools=[filtered_search],
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    agent_kwargs={"system_message": system_prompt},
    verbose=True
)

# 执行查询
response = agent.run(original_query)

4. 利用SerpAPI自带参数缩小范围

通过SerpAPI的参数直接限定结果范围,比如数量、时间、地域:

# 初始化时传入参数
serp_api = SerpAPIWrapper(params={
    "num": 5,  # 只返回前5条结果
    "tbs": "qdr:y",  # 仅返回近1年内容
    "gl": "us"  # 限定美国地区结果(可选)
})

内容的提问来源于stack exchange,提问作者kheirq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:30:34