范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

建立一个能搜索正确数据源并准确回答问题的ChatGPT

  在这个例子中,我们将要求GPT在用户提出问题时挑选合适的数据集进行搜索,然后回答用户的问题。
  ,否则你可以通过使用Embedbase Cloud而不是自己运行它来简化这个例子。
  如果是这样,你可以跳到种子数据集部分。安装
  在虚拟环境中安装所需的依赖项:virtualenv env source env/bin/activate pip install embedbase pgvector psycopg2 openai 启动Postgres作为一个Embedbase数据库
  为Embedbase数据库运行一个Postgres实例。docker run -d --name pgvector -p 8080:8080 -p 5432:5432   -e POSTGRES_DB=embedbase -e POSTGRES_PASSWORD=localdb   -v data:/var/lib/postgresql/data ankane/pgvector 启动嵌入基地
  创建一个新文件main.py,代码如下:import os from embedbase import get_app from embedbase.database.postgres_db import Postgres from embedbase.embedding.openai import OpenAI import uvicorn OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY") app = (       get_app()       .use_embedder(OpenAI(OPENAI_API_KEY))       .use_db(Postgres())       .run()   ) if __name__ == "__main__":     uvicorn.run("main:app", reload=True)
  用以下命令启动Embedbase应用程序:python3 main.py 种子数据集
  我们需要在Embedbase中添加一些数据来询问ChatGPT。import json import requests import fire   # Set the Embedbase API URL EMBEDBASE_API_URL = "http://localhost:8000" # if using embedbase cloud, add your api key to the headers # EMBEDBASE_API_KEY = ""   def seed_dataset():     animals = {         "lion": {"weight": 190, "height": 1.2, "speed": 80},         "elephant": {"weight": 5000, "height": 3.2, "speed": 40},         "giraffe": {"weight": 800, "height": 5.5, "speed": 60},         "zebra": {"weight": 350, "height": 1.5, "speed": 60},         "rhinoceros": {"weight": 2300, "height": 1.8, "speed": 45},         "crocodile": {"weight": 1000, "height": 4.5, "speed": 20},         "hippopotamus": {"weight": 1500, "height": 1.5, "speed": 30},         "cheetah": {"weight": 60, "height": 0.8, "speed": 110},         "kangaroo": {"weight": 80, "height": 1.5, "speed": 56},         "penguin": {"weight": 30, "height": 1.1, "speed": 10},     }     cars = [         {"make": "Toyota", "model": "Camry", "year": 2022},         {"make": "Honda", "model": "Civic", "year": 2021},         {"make": "Ford", "model": "F-150", "year": 2023},         {"make": "Tesla", "model": "Model S", "year": 2022},         {"make": "Chevrolet", "model": "Corvette", "year": 2021},         {"make": "Jeep", "model": "Wrangler", "year": 2022},         {"make": "BMW", "model": "X5", "year": 2023},         {"make": "Mercedes-Benz", "model": "S-Class", "year": 2022},         {"make": "Audi", "model": "A4", "year": 2021},         {"make": "Lamborghini", "model": "Aventador", "year": 2022},     ]       # clear the dataset just in case it already exists     requests.get(f"{EMBEDBASE_API_URL}/v1/animals/clear",         # if using embedbase cloud, add your api key to the headers         # headers={         #     "Authorization": "Bearer " + EMBEDBASE_API_KEY,         # },     )     requests.get(f"{EMBEDBASE_API_URL}/v1/cars/clear",         # if using embedbase cloud, add your api key to the headers         # headers={         #     "Authorization": "Bearer " + EMBEDBASE_API_KEY,         # },     )       # seed the animals dataset     requests.post(         f"{EMBEDBASE_API_URL}/v1/animals",         json={"documents": [{"data": json.dumps(animal)} for animal in animals]},         # if using embedbase cloud, add your api key to the headers         # headers={         #     "Authorization": "Bearer " + EMBEDBASE_API_KEY,         # },     )       # seed the cars dataset     requests.post(         f"{EMBEDBASE_API_URL}/v1/cars",         json={"documents": [{"data": json.dumps(car)} for car in cars]},         # if using embedbase cloud, add your api key to the headers         # headers={         #     "Authorization": "Bearer " + EMBEDBASE_API_KEY,         # },     )   if __name__ == "__main__":     fire.Fire({         "seed": seed_dataset,     })python3 ask.py seed 搜索
  我们现在将创建我们应用程序的主要逻辑。我们将要求GPT在用户提出问题时挑选正确的数据集进行搜索。
  这个过程将按原样进行:
  1. 用户提出一个问题
  2. GPT将查询`/datasets`以获得数据集的列表
  3. GPT将用所选择的数据集和问题查询`/search`。
  4. GPT将返回结果import re import os import json import requests import openai import fire   # Set the Embedbase API URL EMBEDBASE_API_URL = "http://localhost:8000"     def get_datasets():     response = requests.get(         f"{EMBEDBASE_API_URL}/v1/datasets",         # if using embedbase cloud, add your api key to the headers         # headers={         #     "Authorization": "Bearer " + EMBEDBASE_API_KEY,         # },     )     return [e["dataset_id"] for e in response.json()["datasets"]]     def search_dataset(dataset_id, query):     payload = {"query": query, "top_k": 3}     response = requests.post(         f"{EMBEDBASE_API_URL}/v1/{dataset_id}/search", json=payload,         # if using embedbase cloud, add your api key to the headers         # headers={         #     "Authorization": "Bearer " + EMBEDBASE_API_KEY,         # },     )     return [e["data"] for e in response.json()["similarities"]]
  上述代码将被用来查询Embedbase API。# ... def ask_question(question, openai_model: str = "gpt-3.5-turbo"):     datasets = get_datasets()       # Prompt for GPT     prompt = f"Given the following datasets: "     for dataset in datasets:         prompt += f"- {dataset} "     prompt += f" Choose the best dataset to search and answer the following question: {question}"       # Call GPT     response = openai.ChatCompletion.create(         model=openai_model,         messages=[             {                 "role": "system",                 "content": "You are a helpful assistant that select a dataset to search for a given question."                 "You always say ONLY the dataset name, nothing else. You are given a list of datasets and a question. "                 "For example, if the list of datasets is - plants - animals - cars - fruits - vegetables "                 "and the question is: What is the fastest animal?, you would say: [animals]",             },             {"role": "user", "content": prompt},         ],     )       chosen_dataset = response.choices[0].message.content.strip()     print(f"GPT chose the dataset: {chosen_dataset}")       # extract the dataset name from the output of GPT     # eg [animals] -> animals     chosen_dataset = re.sub(r"[|]", "", chosen_dataset)     search_results = search_dataset(chosen_dataset, question)       # Call GPT again to answer the question based on the search results     prompt = (         f"Based on the following search results, answer the question: "{question}" "     )     for result in search_results:         prompt += f"- {result} "       response = openai.ChatCompletion.create(         model=openai_model,         messages=[             {                 "role": "system",                 "content": "You are a helpful assistant that answers questions based on the provided search results.",             },             {"role": "user", "content": prompt},         ],     )       answer = response.choices[0].message.content.strip()       return answer
  上述代码将被用来调用GPT来提问。现在添加一些小的逻辑,当用户提出问题时调用上述函数。 def main(openai_key: str = None, openai_model: str = "gpt-3.5-turbo"):     openai.api_key = openai_key or os.environ.get("OPENAI_API_KEY")     question = input("Ask a question: ")     answer = ask_question(question, openai_model)     print(f"Answer: {answer}") if __name__ == "__main__":     fire.Fire({               "ask": main,               "seed": seed_dataset,           })
  现在你可以运行应用程序并提出问题。python3 ask.py ask --openai_key    # feel free to add "--openai_model gpt-4" if you have access to it

29岁谢震业向大3岁师姐求婚成功两人均是世界冠军苏炳添送祝福北京时间9月9日,中国体坛又诞生一对冠军夫妇,29岁谢震业向初恋女友陆敏佳求婚成功。谢震业是男子200米亚洲纪录保持者,32岁陆敏佳也非常厉害,她是一名跳远冠军,曾经夺得世青赛女子温馨美满!中国奥运冠军晒出一家三口全家福,女儿出落得亭亭玉立北京时间9月9日,竞走奥运冠军王丽萍近日通过社交媒体晒出一家三口全家福,并留言写道世界上最幸福的事就是快乐健康,愿青春永远在。从照片可以看到,王丽萍的女儿从身后抱着妈妈,有爱的画面遗憾!国乒名将落选世乒赛,世界冠军大获全胜,即将决战韩国强敌北京时间9月9日晚,乒乓球WTT阿曼赛女单决赛安排出炉,国乒世界冠军陈幸同发挥稳定,继WTT保加利亚赛横扫钱天一之后又一次40战胜了这位队友,即将与韩国华裔选手崔孝珠(淘汰中国台北清仓美股,马云背后的男人,嗅到了什么信号?风云已变。01hr清仓式撤退阿里系大佬又一次成为了舆论的焦点。就在昨天(9月8日),一则消息传遍了中文互联网。资料显示,阿里巴巴集团联合创始人蔡崇信的家族办公室正在迅速撤出美股市场电摩时代,春风的梦想与野心9月8日,CFMOTO2022秋季战略发布会在杭州总部举行。在预告的时候,春风就透露我变E了,也变强了,带给大家无尽的想象。在大家的猜测中,春风发布了行业首个智能平台CLINK(春今晚8点开启预购苹果官网商城已开始维护现在,苹果官网商城已经开始维护,显示我们同样迫不及待,今晚8点开始预购,到时见。今晚8点,iPhone14系列将正式在苹果官网及各大合作电商平台开启预售,包括iPhone14iPh喜马拉雅山面临剧震?喜马拉雅山脉有7个区域蓄积的能量,每个释放后都可以产生至少8。4级的地震。这个能量将超过历史上最大的热核武器。编译框他二舅温馨提示阅读本文大概需要15分钟喜马拉雅山大地震,地质学术LPL韩援患上精神病,但因祸得福!可免除完整兵役,Doinb无辜躺枪各位LPL的观众和英雄联盟召唤师大家好,这里是天下游戏汇。LPL自从2015年引援大时代开始之后,几乎每年都有新的韩援加入LPL赛区,这其中成功的韩援不在少数,以选手角度而言,其实数字时代的铁人数字时代的铁人作者许秀杰2022世界5G大会在哈尔滨落幕了,5G浪潮席卷冰城,数字蓝海带给冰城人民的数创未来之梦越来越近,越来越清晰。在看到5G应用领域越来越广泛的同时,我们不禁想未来新战场太空空间争夺战以前的战争仅仅是在陆地上争夺资源,争抢地球上的领土。现在则不一样了,现在不仅仅是在陆地上争夺资源,现在还要争夺太空的空间权。图片来自网络太空空间之争日益加快,星链发展成为必然。就现Mate50系列音频伴侣!华为FreeBudsPro2高清空间音频带你亲临现场如果要为手机寻找一个搭档,我想那一定是耳机。最近,华为Mate50正式发布,它的最佳搭档也锁定在发布会上再度亮相的华为FreeBudsPro2。一个是华为手机的最新旗舰,一个是华为
梅西阿根廷不是夺冠最大热门但冠军就是我们想要的卡塔尔世界杯第一场半决赛,阿根廷队30战胜克罗地亚队,为上届世界杯惨败给对手报了一箭之仇,也率先挺进决赛。本场比赛,梅西一传一射,阿尔瓦雷斯制造一粒点球并打进2球。比赛结束后,梅西盘点沪上公园里的古树名木,有你认识的吗?市绿化市容局介绍,目前沪上城市公园内有古树名木334株,后续资源329株。古树,是指树龄在100年以上的树木。名木,是指具有重要历史文化观赏与科学价值或具有重要纪念意义的树木。一起康养山西丨山西这些美丽的森林公园,你去过吗?秋天总是如此短暂秋冬交替之际总是会让人在某个时间希望寻找内心的安宁康养是一种心境是山是水是温柔的风今天小编为大家推荐几个远离凡尘又靠近心灵的山西康养好去处交城山国家森林公园交城山国能量回收是如何实现的一能量回收是什么?众所周知,车辆在实现减速的过程中有两个途径1通过松油门,通过整车自身阻力来进行滑行减速,此工况的滑行距离较长。2通过踩刹车来实现制动。整车减速的过程其实是整车的动感情纯不纯遇事见真章冬日生活打卡季真诚文田歌(一)世界这么大到处都是人不喜欢心眼多的人因为玩不过人家不喜欢太有心机的人因为相处太累不喜欢太算计的人因为我数学不好不喜欢说谎的人尤其是最信任的人不喜欢吹牛江滩20年了,哪个武汉人不是在江边长大的吃完晚饭,去江滩散个步咧。在武汉,去哪儿吃饭,去哪儿消遣,首选江边,总是我和身边人的第一反应。汉口班子选武汉天地或江汉路,武昌伢偏爱中华路,汉阳的伙计吃拦江路的蟹神咩咩。江滩所到之济南发布元宇宙产业创新发展行动计划到2025年培育100家以上元宇宙企业来源海报新闻大众网海报新闻记者朱晓冲济南报道近日,济南市政府办公厅印发济南市促进元宇宙产业创新发展行动计划(20222025年)(以下简称行动计划),行动计划提出,到2025年,济人靠衣装马靠鞍,五种拯救你气质的常见男士穿搭,你get到了吗?俗话说,三分靠颜值,七分靠打扮,好的衣品对于男人女人都很重要,但对于没有妆容的男性来说,重要性可能还要更胜一筹,甚至比颜值低一点的情况,都能靠简单的穿衣打扮拉回来。那么,男生如何通男子买12万彩票世界杯足球没中奖要求店老板退款被拒世界杯正在如火如荼地进行。买了体育彩票没中,可以退款吗?我也想问能不能退。第二个发生在四川成都。一男子余先生自己买了12万元彩票,一张都没中。他认为他的老板欺骗了他,他要求他的老板江珊越老越敢穿,用内浅外深塑造气质感,裸色内搭像没穿一样西装是一种很常规的服装,以往,这种风格的衣服多出现在职场上,作为职场上的工作服。但是现在,西装在款式设计上搭配风格上都越来越多样化,时尚的小仙女们会利用各种不同的搭配思路,来呈现出北京宣布即日恢复!12月13日,北京市文化和旅游局发布通知,明确从即日起,恢复旅行社及在线旅游企业经营在京团队旅游进出京跨省团队旅游及机票酒店业务。具体详情如下关于恢复旅行社及在线旅游企业经营进出京