如何调用百度文心一言API实现智能问答

news2024/12/26 22:46:18

诸神缄默不语-个人CSDN博文目录

百度需要先认证个人信息才能使用LLM API。

文章目录

  • 1. 获得 API Key
  • 2. 撰写代码并实现提问和回答
    • 2.1 用openai包实现调用
    • 2.2 用openai包实现流式调用
    • 2.3 用openai包实现工具调用
    • 2.4 构建智能体
    • 2.5 文生图
    • 2.6 图生图
  • 3. 用gradio建立大模型问答网站
    • 3.1 gradio原生UI
    • 3.2 文心一言风格UI
    • 3.3 gradio其他介绍
  • 4. 参数介绍
  • 5. 本文撰写过程中参考的网络资料

1. 获得 API Key

https://aistudio.baidu.com/account/accessToken
在这里插入图片描述
点击复制即可。

2. 撰写代码并实现提问和回答

2.1 用openai包实现调用

import openai
import backoff

client = openai.OpenAI(
    api_key=OPENAI_API_KEY,
    base_url="https://aistudio.baidu.com/llm/lmapi/v3"
)

LLM_MODEL="ernie-3.5-8k"

@backoff.on_exception(backoff.expo, (openai.RateLimitError, openai.APITimeoutError))
def llm_check_search(query, msg_history=None, llm_model=LLM_MODEL):
    msg_history = msg_history or []
    new_msg_history = msg_history + [{"role": "user", "content": query}]
    response = client.chat.completions.create(
        model=llm_model,
        messages=[*new_msg_history],
        max_tokens=30
    ).choices[0].message.content
    
    # 返回 LLM 的响应
    return response

print(llm_check_search("你是谁?"))

输出:

我是文心一言,百度研发的知识增强大语言模型。我能够回答各种问题,提供相关的知识和信息,并且可以进行文本创 
作和知识推理等多种任务。如果您有任何问题或需要帮助,请随时告诉我。

2.2 用openai包实现流式调用

流式调用就是大模型每次生成一点就返回一点,用户在前端可以更快地看到前半部分内容:

import openai
import backoff

client = openai.OpenAI(
    api_key=OPENAI_API_KEY,
    base_url="https://aistudio.baidu.com/llm/lmapi/v3"
)

LLM_MODEL="ernie-3.5-8k"

@backoff.on_exception(backoff.expo, (openai.RateLimitError, openai.APITimeoutError))
def llm_check_search(query, msg_history=None, llm_model=LLM_MODEL):
    msg_history = msg_history or []
    new_msg_history = msg_history + [{"role": "user", "content": query}]
    response = client.chat.completions.create(
        model=llm_model,
        messages=[*new_msg_history],
        max_tokens=30,
        stream=True
    )

    for chunk in response:
        chunk_content = chunk.choices[0].delta.content
        if chunk_content:
            print(chunk_content)

llm_check_search("你是谁?")

输出:

我是百度
公司研发
的知识增强
大语言
模型,
我的中文名
是文心
一言,
英文名是
ERNIE
 Bot。
我可以完成的任务
包括知识
问答,
文本创作
,知识
推理,
数学计算
,代码
理解与编写
,作画
,翻译
等。
如果您有任何
问题,
请随时
向我提问
。

2.3 用openai包实现工具调用

create()方法中加入tools参数,描述一系列可用的函数。
在这里插入图片描述
parameters的值是一个Json Schema。
Object 的字字段用properties描述,array子字段类型
用items描述,可以相互嵌套定义。这样就可以描述任意复杂的Json规范了。
示例入参:{"location": ["北京", "天津"], "date": "2024-01-01"}

tool_choice入参:默认是auto,标识模型自己选择是否使用工具。
None代表不使用工具,Required代表强制使用指定的工具。

2.4 构建智能体

在这里插入图片描述

2.5 文生图

在这里插入图片描述

2.6 图生图

在这里插入图片描述

3. 用gradio建立大模型问答网站

我没有专门写一篇介绍gradio的文章,就直接拿这篇博文作为简单示例性教程了。
我看这个模块还挺好使的。

3.1 gradio原生UI

假设本文2.1节的代码写在try_wenxinyiyan1.py中,我们在同目录下新建一个Python文件写如下代码:

import gradio as gr
from try_wenxinyiyan1 import llm_check_search

demo = gr.Interface(
    fn=llm_check_search,
    inputs=["text"],
    outputs=["text"],
)

demo.launch()

运行后打开给出的网址(http://127.0.0.1:7860)效果如图所示:
在这里插入图片描述

3.2 文心一言风格UI

import gradio as gr
from try_wenxinyiyan1 import llm_check_search

# 修改自定义 CSS
custom_css = """
body {
    background-color: #f0f8ff;  /* 淡蓝色背景 */
}
.container {max-width: 730px; margin: auto; padding-top: 0;}
.title-container {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    margin-top: 5rem;
    margin-bottom: 2rem;
}
.main-title {
    font-size: 2.5em;
    font-weight: bold;
    color: #1e90ff;  /* 深蓝色标题 */
    display: flex;
    align-items: center;
    justify-content: center;
}
.main-title img {
    width: 40px;
    height: 40px;
    margin-right: 10px;
    filter: invert(39%) sepia(95%) saturate(1095%) hue-rotate(194deg) brightness(103%) contrast(101%);  /* 将图标改为蓝色 */
}
.powered-by {
    font-size: 0.8em;
    color: #4682b4;  /* 钢蓝色 */
    margin-top: 0.5rem;
}
#component-1 {
    border: none !important;
    box-shadow: none !important;
    background: none !important;
}
#component-1 .form {
    border: 1px solid #87cefa;  /* 淡蓝色边框 */
    border-radius: 4px;
    padding: 10px;
    background-color: white;
}
.button-container {
    display: flex;
    flex-direction: column;
    align-items: center;
}
.search-button.primary {
    min-width: 120px !important;
    justify-content: center !important;
    background-color: #1e90ff !important;  /* 深蓝色按钮 */
    color: white !important;
    border: none !important;
}
.search-button.primary:hover {
    background-color: #4169e1 !important;  /* 悬停时稍深的蓝色 */
}
.search-button.primary span {
    margin: 0 auto !important;
}
"""

# 修改自定义 HTML 标题
custom_title = """
<div class="title-container">
    <div class="main-title">
        <img src="https://img.icons8.com/ios-filled/50/000000/search--v1.png" alt="Search Icon"/>
        <span>AI问答机</span>
    </div>
    <div class="powered-by">Powered by 文心大模型</div>
</div>
"""

with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as iface:
    gr.HTML(custom_title)
    with gr.Column(elem_classes="container"):
        query_input = gr.Textbox(
            lines=1,
            placeholder="想对文心一言问什么?",
            label=None,
            container=False,
        )

        gr.Examples(
            examples=[["火鸡好吃吗?"], ["感恩节的来源是什么?"], ["哲学专业学什么?"]],
            inputs=query_input,
        )

        with gr.Column(elem_classes="button-container"):
            submit_button = gr.Button("搜索一下", elem_classes="search-button primary")
        output = gr.Markdown()

    submit_button.click(fn=llm_check_search, inputs=query_input, outputs=output)

if __name__ == "__main__":
    iface.launch()

效果:
在这里插入图片描述

3.3 gradio其他介绍

  1. flag按钮是用来保存输入输出信息到本地的
  2. launch()函数中设置参数share=True就可以公开分享链接

4. 参数介绍

  1. messages
    1. role:system / user / assistant / tool
    2. content
    3. tool_calls(assistant信息调用工具时放置工具信息)
    4. tool_call_id(tool信息中对应assistant信息中tool_calls值的id键的值)

5. 本文撰写过程中参考的网络资料

  1. 文心一言官方课程“乘风季·开发者进阶计划训练营课程”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2251731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python除了熟悉的pandas,openpyxl库也很方便的支持编辑Excel表

excel表格是大家经常用到的文件格式&#xff0c;各行各业都会跟它打交道。之前文章我们介绍了使用openpyxl和xlrd库读取excel表数据&#xff0c;使用xlwt库创建和编辑excel表&#xff0c;在办公自动化方面可以方便我们快速处理数据&#xff0c;帮助我们提升效率。 python之open…

JMeter 并发策略-针对准点秒杀场景的压测实现

一、场景的压测实现 1&#xff0c;创建线程组&#xff0c;10并发用户执行5次&#xff1b; 2&#xff0c;创建 Synchronizing Timer 元件,用于同步线程&#xff0c;设置同步元件 Synchronizing Timer 3&#xff0c;创建 http 请求4&#xff0c;创建 view results in table 元件…

损失函数分类

1. NLLLoss&#xff08;负对数似然损失&#xff09; 定义&#xff1a; 直接对预测的概率 p(yi) 的负对数求平均。通常配合 Softmax 使用&#xff0c;输入为对数概率。 优点&#xff1a; 对离散分类问题效果良好。更灵活&#xff0c;用户可以自行计算 Softmax。 缺点&#x…

【热门主题】000072 分布式数据库:开启数据管理新纪元

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…

算法笔记:力扣148. 排序链表

思路&#xff1a; 将链表中的节点一一取出放到list集合中&#xff0c;然后通过Comparator实现排序&#xff0c;对排序好的list节点一一取出&#xff0c;组成排序好的新链表。 关键思路&#xff1a; Comparator实现对ListNode的排序&#xff1b; &#x1f4a1;注意&#xff…

Kafka知识体系

一、认识Kafka 1. kafka适用场景 消息系统&#xff1a;kafka不仅具备传统的系统解耦、流量削峰、缓冲、异步通信、可扩展性、可恢复性等功能&#xff0c;还有其他消息系统难以实现的消息顺序消费及消息回溯功能。 存储系统&#xff1a;kafka把消息持久化到磁盘上&#xff0c…

MacOS安装MySQL数据库和Java环境以及Navicat

安装MySQL 去官网下载&#xff1a;MySQL 下载好后安装&#xff0c;在设置里往下滑&#xff0c;出现了这样&#xff0c;就代表安装成功了 接下来配置环境&#xff1a; 首先在我们的设备上找到终端并打开,输入 vim ~/.bash_profile(注意vim后面的空格)&#xff0c;输入完成后点击…

Css、less和Sass(SCSS)的区别详解

文章目录 Css、less和Sass&#xff08;SCSS&#xff09;的区别详解一、引言二、CSS 简介1.1、CSS 示例 三、Less 简介2.1、Less 特性2.2、Less 示例 四、Sass&#xff08;SCSS&#xff09;简介3.1、Sass 特性3.2、SCSS 示例 五、总结 Css、less和Sass&#xff08;SCSS&#xff…

misc-好久不见17

wireshark_secret Ctrlshirtv 8、热心助人的小明同学 使用工具volatility查看镜像的信息 volatility_2.6_win64_standalone -f image.raw imageinfo 列出所有用户和密码&#xff1a; volatility_2.6_win64_standalone -f image.raw --profileWin7SP1x86_23418 hashdump Xi…

利用PyTorch Profiler实现大模型的性能分析和故障排查

本文介绍PyTorch Profiler结合TensorBoard分析模型性能&#xff0c;分别从数据加载、数据传输、GPU计算、模型编译等优化思路去提升模型训练的性能。最后总结了一些会导致CPU和GPU同步的常见的PyTorch API&#xff0c;在使用这些API时需要考虑是否会带来性能影响。 PyTorch Pr…

关于IDE的相关知识之三【插件安装、配置及推荐的意义】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于ide插件安装、配置及推荐意义的相关内容…

ECharts柱状图-交错正负轴标签,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个柱状图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供…

预处理详解(完结篇)

⽬录 一. 什么是预处理 c 1 预定义符号 2. #define定义常量 3 . #define定义宏 4. 带有副作⽤的宏参数 5. 宏替换的规则 6 宏函数的对⽐ 三 #和## 四 命名约定 五. #undef 一 什么是预处理 有许多文件中都内容我们是看不懂的&#xff0c;那怎么才能令…

【k8s】监控metrics-server

metrics-server介绍 Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一个应用部署在集群中。Metric server从每个节点上KubeletAPI收集指标&#xff0c;通过Kubernetes聚合器注册在Master APIServer中。为集群提供Node、Pods资源利用率指标。 就像Linux 系统一样…

ERP 入库生产第一个版本完成

剩下的逻辑都是基于入库表达操作,资源划分,在销售,出库 windows 下直接部署 mysql 数据库,更轻量一些

ESP32-S3模组上跑通ES8388(12)

接前一篇文章&#xff1a;ESP32-S3模组上跑通ES8388&#xff08;11&#xff09; 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析了es8388_init函数中的第5段代码&#xff0c;本回继续往下解析。为了便于理解和回顾&#xff0c;再次贴出es8388_init函数源码&#xff0c;在…

对于相对速度的重新理解 - 15

换一个视角看待能量可能一切都更为清晰&#xff0c;从&#xff0c; 可以意识到&#xff0c;最终质量 指的是 的数量。这个数量就是 我们可以去除电性振动和磁性振动的影响&#xff0c;把这两种振动的影响归结在 里面&#xff0c;这就像是&#xff0c;有一百万个某种物体&#x…

记一次腾讯云海外服务器http能正常访问https访问拒绝问题处理过程

最近双十一, 购了一台腾讯云的海外服务器&#xff0c; 开通后就是一堆的服务器软件安装数据上传和配置&#xff0c;没想到&#xff0c;等待配置完成后才发现https无法正常访问&#xff0c;于是开启了自查。 1. 检查nginx软件的ssl配置 nginx http https配置参考 server {l…

Java 单元测试模拟框架-Mockito 的介绍

Mockito 是什么 Mockito 是一个用于单元测试的模拟框架&#xff0c;基于它可以使用简洁易用的API编写出色的测试。 Mockito 允许开发人员创建和管理模拟对象&#xff08;mock objects&#xff09;&#xff0c;以便在测试过程中替换那些不容易构造或获取的对象。 Mockito的基本…

分享一款 Vue 图片编辑插件 (推荐)

&#x1f4a5;本篇文章给大家分享一款强大到没朋友的Vue图片编辑插件&#xff0c;可以对图片进行旋转、缩放、裁剪、涂鸦、标注、添加文本等&#xff0c;快来试试并收藏吧&#xff01;&#x1f495; 这是一款对图片进行旋转、缩放、裁剪、涂鸦、标注、添加文本在线处理的图片处…