整体流程
API_KEY、SECRET_KEY自行购买
import requests import json import logging API_KEY = "api_key" SECRET_KEY = "secret_key" CORPUS_DIR = "./corpus" LOG_PATH = "./log/dev.txt" logging.basicConfig(filename=LOG_PATH, format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S ', level=logging.INFO) logger = logging.getLogger()
获取鉴权签名token,以及发送post请求
def get_access_token(): """ 使用 AK,SK 生成鉴权签名(Access Token) :return: access_token,或是None(如果错误) """ url = "https://aip.baidubce.com/oauth/2.0/token" params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY} access_token = str(requests.post(url, params=params).json().get("access_token")) logger.info("Starting to 文心一言 chatbot!") return access_token def get_response(content, stream=False): url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=" + get_access_token() headers = {} data = json.dumps({ "messages": [ { "role": "user", "content": content } ], "stream": stream }) if stream: response = requests.request("POST", url, headers=headers, data=data).text else: response = requests.request("POST", url, headers=headers, data=data).json() return response
def single_dialogue(corpus_path): """ 单轮对话 :return: """ "" with open(corpus_path, "r", encoding='utf-8') as f: lines = [line.strip() for line in f.readlines()] content = "".join(lines) question = input("请输入您的问题!") logger.info(question) content = content + "Question:" + question response = get_response(content) result = response['result'] logger.info(result) return result
效果:
请输入您的问题!诸葛亮出生于? 诸葛亮出生于公元181年。
def multiple_dialogue(corpus_path): """ 多轮对话 :return: """ url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=" + get_access_token() with open(corpus_path, "r",encoding='utf-8') as f: lines = [line.strip() for line in f.readlines()] content = "".join(lines) result = "" count = 1 messages = [] while True: question = input("请输入您的问题:") if question == "q" or question == 'quit': break logger.info(question) if count == 1: content = content + "Question:" + question else: content = question messages.append({"role": "user", "content": content}) data_str = json.dumps({ "messages": messages, "stream": False }) response = requests.request("POST", url, data=data_str).json() result = response['result'] messages.append({"role": "assistant", "content": result}) logger.info(result) print(f"Answer{count}:{result}") count += 1 return result
效果:
请输入您的问题:诸葛亮是哪国的 Answer1:诸葛亮是三国时期蜀汉丞相。 请输入您的问题:诸葛亮有哪些贡献 Answer2:诸葛亮对中国文化的贡献和对蜀汉政权的贡献是不可磨灭的。他的主要贡献集中在以下几个方面: 1. 在政治方面,诸葛亮提出了一系列治国方略,如礼仪治邦、依法治国、任人唯贤、君臣分治等,这些治国方略在今天仍然有重要的现实意义。 2. 在经济方面,诸葛亮注重农业和手工业的发展,提倡“勤俭节约”,推行屯田政策,促进社会经济发展。 3. 在文化方面,诸葛亮编纂了《诸葛亮集》和《出师表》等重要文献,这些文献对中国文化的发展具有重要的推动作用。 4. 在科技方面,诸葛亮发明了木牛流马、连发弩等,这些发明对中国古代科技的发展做出了重要贡献。 5. 在哲学方面,诸葛亮提出了“以民为本”、“礼仪为先”等哲学思想,这些思想对中国古代哲学的发展产生了重要影响。 6. 在历史方面,诸葛亮留下了《三国演义》等重要历史著作,这些著作对中国历史文化的传承和发展具有重要的推动作用。 7. 在教育方面,诸葛亮注重人才培养和教育普及,推行“崇文重教”的政策,对中国古代教育的发展产生了重要影响。 总之,诸葛亮是中国历史上伟大的文化名人之一,他的贡献不仅体现在对中国文化的推动和发展上,也体现在对人类社会的进步和发展上。 请输入您的问题:后人对诸葛亮的评价 Answer3:后人对诸葛亮的评价一般是褒扬的。 陈寿曾经说过“诸葛亮之为相国也,抚百姓,示仪轨,约官职,从权制,开诚心,布公道;尽忠益时者虽仇必赏,犯法怠慢者虽亲必罚,服罪输情者虽重必释,游辞巧饰者虽轻必戮;善无微而不赏,恶无纤而不贬;庶事精练,物理其本,循名责实,虚伪不齿;终于邦域 之内,咸畏 而爱之,刑政虽峻 而无怨者,以其用心平 而劝戒明也”。 唐太宗曾经说过:“拨乱整危资朴素,纳忠容直在自己。自古埋轮兼钓鳖,何人肯办斩鲸级”。 宋真宗说过:“蕴策定戎,不妨谈笑。成功高退,依旧萧然”。 康熙说过:“读书好兵,霸王之器。至乃集大成于三略,功盖一时,名震往古”。 诸葛亮在有限的政治实践活动中,充分显示了他的治世之才和纬地之才。他的“法治”理念,尽管与今天的法治内涵不尽相同,却打开了中国古代“法治” 的先河,把中国古代政治文明推向了一个新的境界。 请输入您的问题:q 后人对诸葛亮的评价一般是褒扬的。 陈寿曾经说过“诸葛亮之为相国也,抚百姓,示仪轨,约官职,从权制,开诚心,布公道;尽忠益时者虽仇必赏,犯法怠慢者虽亲必罚,服罪输情者虽重必释,游辞巧饰者虽轻必戮;善无微而不赏,恶无纤而不贬;庶事精练,物理其本,循名责实,虚伪不齿;终于邦域 之内,咸畏 而爱之,刑政虽峻 而无怨者,以其用心平 而劝戒明也”。 唐太宗曾经说过:“拨乱整危资朴素,纳忠容直在自己。自古埋轮兼钓鳖,何人肯办斩鲸级”。 宋真宗说过:“蕴策定戎,不妨谈笑。成功高退,依旧萧然”。 康熙说过:“读书好兵,霸王之器。至乃集大成于三略,功盖一时,名震往古”。 诸葛亮在有限的政治实践活动中,充分显示了他的治世之才和纬地之才。他的“法治”理念,尽管与今天的法治内涵不尽相同,却打开了中国古代“法治” 的先河,把中国古代政治文明推向了一个新的境界。 进程已结束,退出代码为 0
def single_dialogue_stream(corpus_path): """ 流式单轮对话 :return: """ with open(corpus_path, "r", encoding='utf-8') as f: lines = [line.strip() for line in f.readlines()] content = "".join(lines) question = input("请输入您的问题!") logger.info(question) content = content + "Question:" + question response = get_response(content, stream=True) print(response)
流式与非流式的区别:输出的response格式不一致
流式
请输入您的问题!诸葛亮是哪里人 data: {"id":"as-unikt1hna9","object":"chat.completion","created":1685435336,"sentence_id":0,"is_end":false,"result":"诸葛亮是徐州琅琊阳都(今山东临沂市沂南县)人。","need_clear_history":false,"usage":{"prompt_tokens":344,"completion_tokens":20,"total_tokens":364}} data: {"id":"as-unikt1hna9","object":"chat.completion","created":1685435337,"sentence_id":1,"is_end":true,"result":"","need_clear_history":false,"usage":{"prompt_tokens":344,"completion_tokens":0,"total_tokens":364}}
{'id': 'as-vf81wriqi3', 'object': 'chat.completion', 'created': 1685435476, 'result': '根据历史记载,诸葛亮是徐州琅琊阳都(今山东临沂市沂南县)人。他的祖籍是泰山郡所在今天山东省泰安市一部分、济宁地区南部及今潍坊市南部。', 'need_clear_history': False, 'usage': {'prompt_tokens': 344, 'completion_tokens': 60, 'total_tokens': 404}}
类似,可参考多轮对话,修改stream=True
def multiple_dialogue_stream(): """ 流式多轮对话 :return: """ pass
原文链接:https://blog.csdn.net/m0_46275020/article/details/130950890