当前位置:   article > 正文

ChatGLM3在线搜索功能升级

chatglm 全文搜索

在前面的图文当ChatGLM3能用搜索引擎时中,我们让ChatGLM3在搜索引擎上进行的简单的搜索,但是仅仅只能搜索一些简单的内容,比如,时间。但是实际搜索中,往往不能满足要求,因为使用的是selenium进行的一个简单google搜索,所以针对复杂的搜索需求,现在对这个功能进行升级。之前我们用的是google搜索,现在我们使用ddgs---duckduckgo search。

DuckDuckGo是一款网际网路搜寻引擎,其注重用户私隐,及避免个性化检索所致的过滤气泡。它与其他搜寻引擎不同的地方在于其不会分析自己的用户、对所有使用同一组关键词的用户显示同样的结果。它也强调返回最佳结果,而不是最多网站连接之结果。它会在搜寻结果中引入其他独立来源的内容,总数多于400个,其中包括像维基百科般的众包网站、其他搜寻引擎(如Bing、Yandex、Yahoo! Search)。在2021年3月,它平均每日处理的搜寻量达98,629,221宗。

重要的是DuckDuckGo提供免费的API使用,只需要简单的pip安装,既可以使用python脚本或者cli进行调用搜索。

所以我们对之前的搜索方式进行升级,首先我们安装DuckDuckGo

pip install -U duckduckgo_search


然后修改原来的注册脚本

  1. def google_results(query):
  2. content = ""
  3. with DDGS() as ddgs:
  4. for r in ddgs.text(query, max_results=5):
  5. content = content + r['title'] + "\n" + r['href'] + "\n" + r['body'] + "\n" + "\n\n"
  6. print(content)
  7. if content == "":
  8. return("没有找到结果")
  9. else:
  10. return content

其他的内容和原来的一样,下面让我们来详细体验下:

d2e57c75b6b1a9317a116d022269eb09.png

2c6862373b9df3592dedcb5f972420c2.png

456b94c527752e7e8643f44e55b36e2c.png

92379c0dc1b775099115fe2aadb9b97d.png

当然DuckDuckGo还支持视频、图片、翻译等搜索功能,有兴趣的小伙伴可以进行尝试哦

当然还可以在text-generation-webui中使用相同的功能,具体的text-generation-webui部署可以参考如何优雅的使用各类LLM,同样的,我们在项目文件夹中添加如下脚本script.py

  1. from copy import deepcopy
  2. import inspect
  3. from pprint import pformat
  4. import traceback
  5. from types import GenericAlias
  6. from typing import get_origin, Annotated
  7. from selenium import webdriver
  8. from selenium.webdriver.common.by import By
  9. from selenium.webdriver.chrome.service import Service
  10. import urllib
  11. import requests
  12. from duckduckgo_search import DDGS
  13. _TOOL_HOOKS = {}
  14. _TOOL_DESCRIPTIONS = {}
  15. def google_results(query):
  16. content = ""
  17. with DDGS() as ddgs:
  18. for r in ddgs.text(query, max_results=5):
  19. content = content + r['title'] + "\n" + r['href'] + "\n" + r['body'] + "\n" + "\n\n"
  20. print(content)
  21. if content == "":
  22. return("没有找到结果")
  23. else:
  24. return content
  25. def register_tool(func: callable):
  26. tool_name = func.__name__
  27. tool_description = inspect.getdoc(func).strip()
  28. python_params = inspect.signature(func).parameters
  29. tool_params = []
  30. for name, param in python_params.items():
  31. annotation = param.annotation
  32. if annotation is inspect.Parameter.empty:
  33. raise TypeError(f"Parameter `{name}` missing type annotation")
  34. if get_origin(annotation) != Annotated:
  35. raise TypeError(f"Annotation type for `{name}` must be typing.Annotated")
  36. typ, (description, required) = annotation.__origin__, annotation.__metadata__
  37. typ: str = str(typ) if isinstance(typ, GenericAlias) else typ.__name__
  38. if not isinstance(description, str):
  39. raise TypeError(f"Description for `{name}` must be a string")
  40. if not isinstance(required, bool):
  41. raise TypeError(f"Required for `{name}` must be a bool")
  42. tool_params.append({
  43. "name": name,
  44. "description": description,
  45. "type": typ,
  46. "required": required
  47. })
  48. tool_def = {
  49. "name": tool_name,
  50. "description": tool_description,
  51. "params": tool_params
  52. }
  53. print("[registered tool] " + pformat(tool_def))
  54. _TOOL_HOOKS[tool_name] = func
  55. _TOOL_DESCRIPTIONS[tool_name] = tool_def
  56. return func
  57. def dispatch_tool(tool_name: str, tool_params: dict) -> str:
  58. if tool_name not in _TOOL_HOOKS:
  59. return f"Tool `{tool_name}` not found. Please use a provided tool."
  60. tool_call = _TOOL_HOOKS[tool_name]
  61. try:
  62. ret = tool_call(**tool_params)
  63. except:
  64. ret = traceback.format_exc()
  65. return str(ret)
  66. def get_tools() -> dict:
  67. return deepcopy(_TOOL_DESCRIPTIONS)
  68. # Tool Definitions
  69. @register_tool
  70. def search_google(
  71. user_input: Annotated[str, 'the content of the user input', True]
  72. ) -> str:
  73. """
  74. Search the 'user input' on google
  75. """
  76. search_data = google_results(user_input)
  77. return search_data
  78. if __name__ == "__main__":
  79. #print(dispatch_tool("get_weather", {"city_name": "beijing"}, "search_google"))
  80. print("search_google")
  81. print(get_tools())

然后启动python server.py --trust-remote-code,在session界面中配置web_search,将这个选项勾上,然后apply即可

95982685da465f4973fcccfbd16f18f6.png

然后导入模型,这里我们还是选用ChatGLM3-6B,然后点击load

ba62cd8cb9982129cd805497438a091a.png

然后我们进入chat页面,即可体验

3df10d5e627345d54654a3c13a2007ad.png

大家可以尽情进行尝试,希望大家一键三连,给个星标哦

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号