当前位置:AIGC资讯 > AIGC > 正文

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

文章目录

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

更新时间 2023-11-12