@model_validator(mode='before')
def validate_environment(cls, values: Dict) -> Dict:
"""Validate that the python package exists in environment."""
proxy = get_from_dict_or_env(values, 'proxy', "PROXY", "")
proxies = {
'http': proxy,
'https': proxy,
}
try:
import wikipedia
if proxy:
def _wiki_request(params):
'''
Make a request to the Wikipedia API using the given search parameters.
Returns a parsed dict of the JSON response.
'''
import requests
from datetime import datetime
params['format'] = 'json'
if not 'action' in params:
params['action'] = 'query'
headers = {
'User-Agent': wikipedia.USER_AGENT
}
if wikipedia.RATE_LIMIT and wikipedia.RATE_LIMIT_LAST_CALL and \
wikipedia.RATE_LIMIT_LAST_CALL + wikipedia.RATE_LIMIT_MIN_WAIT > datetime.now():
# it hasn't been long enough since the last API call
# so wait until we're in the clear to make the request
wait_time = (wikipedia.RATE_LIMIT_LAST_CALL + wikipedia.RATE_LIMIT_MIN_WAIT) - datetime.now()
time.sleep(int(wait_time.total_seconds()))
r = requests.get(wikipedia.API_URL, params=params, headers=headers, proxies=proxies)
if wikipedia.RATE_LIMIT:
wikipedia.RATE_LIMIT_LAST_CALL = datetime.now()
return r.json()
# 这里赋值是否不生效
wikipedia._wiki_request = _wiki_request
# 本土化
wikipedia.set_lang("zh")
values["wiki_client"] = wikipedia
values["wikipedia_top_k_results"] = get_from_dict_or_env(
values, 'wikipedia_top_k_results', "WIKIPEDIA_TOP_K_RESULTS", 2
)
except ImportError:
raise ValueError(
"Could not import wikipedia python package. "
"Please it install it with `pip install wikipedia`."
)
return values
wikipedia源码:
@cache
def search(query, results=10, suggestion=False):
'''
Do a Wikipedia search for `query`.
Keyword arguments:
* results - the maxmimum number of results returned
* suggestion - if True, return results and suggestion (if any) in a tuple
'''
search_params = {
'list': 'search',
'srprop': '',
'srlimit': results,
'limit': results,
'srsearch': query
}
if suggestion:
search_params['srinfo'] = 'suggestion'
# 重载就是想要这个能调用我写的方法
raw_results = _wiki_request(search_params)
前置确认
1. 网络能够访问openai接口
是
2.
git pull
拉取最新代码是
3. 执行
pip install -r requirements.txt
,检查依赖是否满足是
4. 在已有 issue 中未搜索到类似问题
是
5. 注意,提issue前请确认用本项目test.py(参考README.md 快速开始配置)重试一次你的问题是否能复现
问题描述
问题: 使用维基插件,配置代理无效。 描述: 1. 源码理解:查看插件源代码发现这一段代码。我理解的是 如果配置了代理,那么就把wikipedia的_wiki_request方法重载,之后使用重载之后的方法进行代理请求。 2. debug效果: 但是我配置了之后无效,debug发现不会调用我自己重载的方法,还是依旧调用wikipedia自己的方法。 疑问: 我看了一下wikipedia的search()方法中调用_wiki_request是不带模块名的,搜了一下说,如果不带模块名是不能重载的 搜到的: 引用问题: 确保在 a.py 中调用 _wiki_request 函数时使用了模块名前缀,即使用 a._wiki_request() 而不是直接调用 _wiki_request()。 插件源码:
wikipedia源码: