文章目录
0 前置操作 1 单轮对话 2 多轮对话 3 流式单轮对话 4 流式多轮对话整体流程
0 前置操作
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"
# handler = logging.FileHandler(filename=LOG_PATH, encoding='utf-8')
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()
# KZT = logging.StreamHandler()
# KZT.setLevel(logging.DEBUG)
# logger.addHandler(KZT)
获取鉴权签名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
1 单轮对话
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年。
2 多轮对话
def multiple_dialogue(corpus_path):
"""
多轮对话
:return:
"""
# global response, data
# url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token=" + get_access_token() # Ernie-Lite
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:
# 提问,封装response
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
3 流式单轮对话
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)
# result = response['result']
# logger.info(result)
# print(result)
# return result
流式与非流式的区别:输出的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}}
4 流式多轮对话
类似,可参考多轮对话,修改stream=True
def multiple_dialogue_stream():
"""
流式多轮对话
:return:
"""
pass