几点观察
最近在测试Autogpt的效果,有几点观察
- 中文goal的效果不是很好,因为整个prompt设计都是从英文出发的,google search 回来的结果也是英文的。有时间的话,可以尝试将项目汉化一下
- debug 之后,可以发现使用了特别多的 系统prompt来规划整个gpt的行为,并且下一次执行command的时候,还会带上上一次的command的返回结果,所以token的消耗是比较大的。
- 整个项目比较好的实现了self-prompt 的效果,自己想prompt,自己实现command,至少形式上做到了自动化。
- 有些垂直领域的问题,效果不是太好,因为无法精确的查询到自己的需要的数据。
- 我感觉对于垂直领域,需要我们添加自定义的command,以便可以访问我们的私有数据,所以下面简单探索了一下实现自定义command的流程,代码还是比较简单。
在autogpt/prompt.py 下添加command
commands = [
# ("查询主题相关的公司,给定一个关键词,可以查询相关公司,比如给定:芯片,可以查询所有芯片相关的公司",
# "API-Company",{"keyword":"<keyword>"}),
("Google Search", "google", {"input": "<search>"}),
(
"Browse Website",
"browse_website",
{"url": "<url>", "question": "<what_you_want_to_find_on_website>"},
),
系统会把所有的command 加入到prompt中,gpt在执行任务的时候,会根据command的描述信息选择具体的command。
在autogpt/app.py execute_command函数里添加调用逻辑
elif command_name == "send_tweet":
return send_tweet(arguments["text"])
elif command_name == "do_nothing":
return "No action performed."
elif command_name == "task_complete":
shutdown()
elif command_name == "API-Company":
return get_top_company_of_theme(arguments["keyword"])
这里实际是枚举了 command_name == "API-Company":
然后,需要自己实现相关的方法。这里get_top_company_of_theme 方法可以使用任意的方式实现。
可以看到整个过程还是特别简单的。
国内使用google search的问题
那么我们在系统中已经使用了系统代理,但是google 应用的时候还是会 connection refuse。
我们需要在代码里面手动自定代理:
def google_official_search(query: str, num_results: int = 8) -> str | list[str]:
add_proxy()
body()
delete_proxy()
每次搜索的时候先添加proxy,然后再delete,如果不delete的话,貌似会影响selenium模块
def add_proxy():
os.environ["http_proxy"] ="xxxx";
os.environ["https_proxy"] ="xxxx";
def delte_proxy():
del os.environ['http_proxy']
del os.environ['https_proxy']
网友评论