文心大模型使用——文心一言API

[复制链接]
查看808 | 回复0 | 2023-8-15 16:02:50 | 显示全部楼层 |阅读模式
整体流程

0 前置操作

API_KEY、SECRET_KEY自行购买
  1. import requests
  2. import json
  3. import logging
  4. API_KEY = "api_key"
  5. SECRET_KEY = "secret_key"
  6. CORPUS_DIR = "./corpus"
  7. LOG_PATH = "./log/dev.txt"
  8. # handler = logging.FileHandler(filename=LOG_PATH, encoding='utf-8')
  9. logging.basicConfig(filename=LOG_PATH,
  10.                     format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
  11.                     datefmt='%Y-%m-%d %H:%M:%S ',
  12.                     level=logging.INFO)
  13. logger = logging.getLogger()
  14. # KZT = logging.StreamHandler()
  15. # KZT.setLevel(logging.DEBUG)
  16. # logger.addHandler(KZT)
复制代码
获取鉴权签名token,以及发送post请求
  1. def get_access_token():
  2.     """
  3.         使用 AK,SK 生成鉴权签名(Access Token)
  4.         :return: access_token,或是None(如果错误)
  5.     """
  6.     url = "https://aip.baidubce.com/oauth/2.0/token"
  7.     params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}
  8.     access_token = str(requests.post(url, params=params).json().get("access_token"))
  9.     logger.info("Starting to 文心一言 chatbot!")
  10.     return access_token
  11. def get_response(content, stream=False):
  12.     url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=" + get_access_token()
  13.     headers = {}
  14.     data = json.dumps({
  15.         "messages": [
  16.             {
  17.                 "role": "user",
  18.                 "content": content
  19.             }
  20.         ],
  21.         "stream": stream
  22.     })
  23.     if stream:
  24.         response = requests.request("POST", url, headers=headers, data=data).text
  25.     else:
  26.         response = requests.request("POST", url, headers=headers, data=data).json()
  27.     return response
复制代码
1 单轮对话

  1. def single_dialogue(corpus_path):
  2.     """
  3.     单轮对话
  4.     :return:
  5.     """
  6.     ""
  7.     with open(corpus_path, "r", encoding='utf-8') as f:
  8.         lines = [line.strip() for line in f.readlines()]
  9.         content = "".join(lines)
  10.     question = input("请输入您的问题!")
  11.     logger.info(question)
  12.     content = content + "Question:" + question
  13.     response = get_response(content)
  14.     result = response['result']
  15.     logger.info(result)
  16.     return result
复制代码
效果:
  1. 请输入您的问题!诸葛亮出生于?
  2. 诸葛亮出生于公元181年。
复制代码
2 多轮对话

  1. def multiple_dialogue(corpus_path):
  2.     """
  3.     多轮对话
  4.     :return:
  5.     """
  6.     # global response, data
  7.     # url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=" + get_access_token()  # Ernie-Lite
  8.     url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=" + get_access_token()  # 文心一言云服务
  9.     with open(corpus_path, "r",encoding='utf-8') as f:
  10.         lines = [line.strip() for line in f.readlines()]
  11.         content = "".join(lines)
  12.     result = ""
  13.     count = 1
  14.     messages = []
  15.     while True:
  16.         # 提问,封装response
  17.         question = input("请输入您的问题:")
  18.         if question == "q" or question == 'quit':  # 退出规则
  19.             break
  20.         logger.info(question)
  21.         if count == 1:
  22.             content = content + "Question:" + question
  23.         else:
  24.             content = question
  25.         messages.append({"role": "user", "content": content})
  26.         data_str = json.dumps({
  27.             "messages": messages,
  28.             "stream": False
  29.         })
  30.         response = requests.request("POST", url, data=data_str).json()
  31.         # 获取结果
  32.         result = response['result']
  33.         messages.append({"role": "assistant", "content": result})
  34.         logger.info(result)
  35.         print(f"Answer{count}:{result}")
  36.         count += 1
  37.     return result
复制代码
效果:
  1. 请输入您的问题:诸葛亮是哪国的
  2. Answer1:诸葛亮是三国时期蜀汉丞相。
  3. 请输入您的问题:诸葛亮有哪些贡献
  4. Answer2:诸葛亮对中国文化的贡献和对蜀汉政权的贡献是不可磨灭的。他的主要贡献集中在以下几个方面:
  5. 1. 在政治方面,诸葛亮提出了一系列治国方略,如礼仪治邦、依法治国、任人唯贤、君臣分治等,这些治国方略在今天仍然有重要的现实意义。
  6. 2. 在经济方面,诸葛亮注重农业和手工业的发展,提倡“勤俭节约”,推行屯田政策,促进社会经济发展。
  7. 3. 在文化方面,诸葛亮编纂了《诸葛亮集》和《出师表》等重要文献,这些文献对中国文化的发展具有重要的推动作用。
  8. 4. 在科技方面,诸葛亮发明了木牛流马、连发弩等,这些发明对中国古代科技的发展做出了重要贡献。
  9. 5. 在哲学方面,诸葛亮提出了“以民为本”、“礼仪为先”等哲学思想,这些思想对中国古代哲学的发展产生了重要影响。
  10. 6. 在历史方面,诸葛亮留下了《三国演义》等重要历史著作,这些著作对中国历史文化的传承和发展具有重要的推动作用。
  11. 7. 在教育方面,诸葛亮注重人才培养和教育普及,推行“崇文重教”的政策,对中国古代教育的发展产生了重要影响。
  12. 总之,诸葛亮是中国历史上伟大的文化名人之一,他的贡献不仅体现在对中国文化的推动和发展上,也体现在对人类社会的进步和发展上。
  13. 请输入您的问题:后人对诸葛亮的评价
  14. Answer3:后人对诸葛亮的评价一般是褒扬的。
  15. 陈寿曾经说过“诸葛亮之为相国也,抚百姓,示仪轨,约官职,从权制,开诚心,布公道;尽忠益时者虽仇必赏,犯法怠慢者虽亲必罚,服罪输情者虽重必释,游辞巧饰者虽轻必戮;善无微而不赏,恶无纤而不贬;庶事精练,物理其本,循名责实,虚伪不齿;终于邦域 之内,咸畏 而爱之,刑政虽峻 而无怨者,以其用心平 而劝戒明也”。
  16. 唐太宗曾经说过:“拨乱整危资朴素,纳忠容直在自己。自古埋轮兼钓鳖,何人肯办斩鲸级”。
  17. 宋真宗说过:“蕴策定戎,不妨谈笑。成功高退,依旧萧然”。
  18. 康熙说过:“读书好兵,霸王之器。至乃集大成于三略,功盖一时,名震往古”。
  19. 诸葛亮在有限的政治实践活动中,充分显示了他的治世之才和纬地之才。他的“法治”理念,尽管与今天的法治内涵不尽相同,却打开了中国古代“法治” 的先河,把中国古代政治文明推向了一个新的境界。
  20. 请输入您的问题:q
  21. 后人对诸葛亮的评价一般是褒扬的。
  22. 陈寿曾经说过“诸葛亮之为相国也,抚百姓,示仪轨,约官职,从权制,开诚心,布公道;尽忠益时者虽仇必赏,犯法怠慢者虽亲必罚,服罪输情者虽重必释,游辞巧饰者虽轻必戮;善无微而不赏,恶无纤而不贬;庶事精练,物理其本,循名责实,虚伪不齿;终于邦域 之内,咸畏 而爱之,刑政虽峻 而无怨者,以其用心平 而劝戒明也”。
  23. 唐太宗曾经说过:“拨乱整危资朴素,纳忠容直在自己。自古埋轮兼钓鳖,何人肯办斩鲸级”。
  24. 宋真宗说过:“蕴策定戎,不妨谈笑。成功高退,依旧萧然”。
  25. 康熙说过:“读书好兵,霸王之器。至乃集大成于三略,功盖一时,名震往古”。
  26. 诸葛亮在有限的政治实践活动中,充分显示了他的治世之才和纬地之才。他的“法治”理念,尽管与今天的法治内涵不尽相同,却打开了中国古代“法治” 的先河,把中国古代政治文明推向了一个新的境界。
  27. 进程已结束,退出代码为 0
复制代码
3 流式单轮对话

  1. def single_dialogue_stream(corpus_path):
  2.     """
  3.     流式单轮对话
  4.     :return:
  5.     """
  6.     with open(corpus_path, "r", encoding='utf-8') as f:
  7.         lines = [line.strip() for line in f.readlines()]
  8.         content = "".join(lines)
  9.     question = input("请输入您的问题!")
  10.     logger.info(question)
  11.     content = content + "Question:" + question
  12.     response = get_response(content, stream=True)
  13.     print(response)
  14.     # result = response['result']
  15.     # logger.info(result)
  16.     # print(result)
  17.     # return result
复制代码
流式与非流式的区别:输出的response格式不一致
流式
  1. 请输入您的问题!诸葛亮是哪里人
  2. 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}}
  3. 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}}
复制代码
常规
  1. {'id': 'as-vf81wriqi3', 'object': 'chat.completion', 'created': 1685435476, 'result': '根据历史记载,诸葛亮是徐州琅琊阳都(今山东临沂市沂南县)人。他的祖籍是泰山郡所在今天山东省泰安市一部分、济宁地区南部及今潍坊市南部。', 'need_clear_history': False, 'usage': {'prompt_tokens': 344, 'completion_tokens': 60, 'total_tokens': 404}}
复制代码
4 流式多轮对话

类似,可参考多轮对话,修改stream=True
  1. def multiple_dialogue_stream():
  2.     """
  3.     流式多轮对话
  4.     :return:
  5.     """
  6.     pass
复制代码
来源:https://blog.csdn.net/m0_46275020/article/details/130950890
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则