如何在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
相关产品推荐
相关产品推荐

