【Python】搭建属于自己 AI 机器人

news2024/11/26 20:20:04

目录

前言

1 准备工作

1.1 环境搭建

1.2 获取 API KEY

2 写代码

2.1 引用库

2.2 创建用户

2.3 创建对话

2.4 输出内容

2.5 调试

2.6 全部代码

2.7 简短的总结

3 优化代码

3.1 规范代码

3.1.1 引用库

3.1.2 创建提示词

3.1.3 创建模型

3.1.4 规范输出(非必须)

3.2 用户输入

3.3 连接步骤

3.4 循环输入

3.5 全部代码

4 总结


前言

现在,AI 已经进入了人们生活的每个角落,而 AI 大模型更是大火,诸如文心一言、Chatgpt、Kimi、清谱智言等等。

那为什么不能拥有一个自己的 AI 呢?于是我稍微研究了一下,本篇文章就将介绍如何搭建一个属于自己的 AI 机器人。话不多说,正片开始——

1 准备工作

1.1 环境搭建

自己训练一个 AI 机器人费时费力又费钱,所以搭建 AI 用的肯定是 API 接口

本文我用的是月之暗面的 Kimi AI 做演示(当然,清谱智言或其他也可以,但是注意,文心一言的API要钱!

至于写代码的依赖库,如下:

python-dotenv
openai
langchain
langchain_openai

1.2 获取 API KEY

获取 API key 其实很简单,这里用 Kimi 举例,其他平台也大同小异。

首先访问 Moonshot AI - 开放平台 (前提是你要先登录

点击 新建

 名字随便输

接着它会显示密钥,复制好别告诉别人

 

接着,在项目文件夹中新建一个.venv文件,如图,把 api key 复制进去:

在打码的地方填写 api key

OK,准备工作完成啦!

2 写代码

2.1 引用库

from dotenv import load_dotenv    # 虚拟环境
from openai import OpenAI         # 调用 API

2.2 创建用户

其中 load_dotenv() 就是获取 .venv 中的信息。

下面的函数中,base_url 就是你想调用的 AI 它的接口网址,一般都能在开发文档中找到。

load_dotenv()

client = OpenAI(
    base_url="https://api.moonshot.cn/v1"
)

2.3 创建对话

这是最重要的一步!

先看代码:

ask = "南京盐水鸭怎么样?"

completion = client.chat.completions.create(
    model="moonshot-v1-32k",
    messages=[
        {"role": "system", "content": "你是一个美食家,你要为用户说的美食写一段有文采的点评词。"},
        {"role": "user", "content": ask},
    ],
    max_tokens=500,
    temperature=0.7,
)

接下来请看讲解:

  • model:这个就是大模型的名称,一般也能在开发文档中找到;
  • messages:AI 接收的信息一般分为 3 个来源:系统(system)、用户(user)、AI(assistant)。这些信息中包括系统对 AI 的指示,用于确定 AI 的身份、用处,以及用户所说的话,还有之前的所有对话。在代码中,用一个字典组成的列表来储存;
  • max_tokens:这个参数用于限定 AI 输出的内容最大值,一个 token 表示一个词语;
  • temperature:这个参数用于规定 AI 输出内容的确定性,设成 0.7 就行了;

像这个程序中,我设置的功能就是让 AI 为美食写点评词,你当然也可以按照自己的需要修改。

2.4 输出内容

激动人心的时刻! 

print(completion.choices[0].message.content)

这个程序输出的内容:

南京盐水鸭,是金陵古城的美食瑰宝,承载着六朝古都深厚的文化底蕴。这道佳肴以其独特的制作工艺和绝妙的风味,在众多美食中独树一帜。

选材讲究,选用的是肉质细嫩、肥而不腻的南京本地麻鸭。经过精细的宰杀、清洗、腌制等工序,使得鸭肉的每一寸肌理都渗透着独特的风味。腌制过程中,恰到好处的盐分与鸭肉的鲜美完美融合,使鸭肉更加鲜嫩可口。

烹饪技艺更是令人赞叹。将腌制好的鸭肉放入特制的卤水中,用文火慢炖,使鸭肉在不断吸收卤水精华的同时,保持了肉质的嫩滑。卤水中的香料与鸭肉的鲜美相互交融,形成了一种独特的香气,令人垂涎三尺。

成品的南京盐水鸭,色泽金黄,皮脆肉嫩,鲜美可口。轻轻一咬,鸭肉的鲜嫩与卤水的香味瞬间在口腔中爆发,让人回味无穷。鸭肉的鲜美与卤水的香料,形成了一种绝妙的平衡,既不会过于咸腻,也不会过于清淡,恰到好处地满足了味蕾的需求。                                                                                                            

品尝南京盐水鸭,就像是在品味一段历史,感受一种文化,让人在享受美味的同时,也能感受到南京这座城市的韵味。

2.5 调试

嘶~

AI 输出的内容好像有点太长了,于是我们需要为它所以点调试。(毕竟任何程序都要调试)

比如把它的要求改一下,限定一下字数。

messages=[
        {"role": "system", "content": "你是一个美食家,你要为用户说的美食写一段有文采的点评词,精简一点,100字以内。"},
        {"role": "user", "content": ask},
],

看看结果:

南京盐水鸭,传统佳肴。鸭肉鲜嫩爽口,咸香适中,令人回味无穷。腌制工艺独特,肉质细腻,皮薄肉厚,食之不腻。每一口都是对南京风味的深刻体验。

果然好多了。

2.6 全部代码

from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()

client = OpenAI(
    base_url="https://api.moonshot.cn/v1"
)

ask = "南京盐水鸭怎么样?"

completion = client.chat.completions.create(
    model="moonshot-v1-32k",
    messages=[
        {"role": "system", "content": "你是一个美食家,你要为用户说的美食写一段有文采的点评词,精简一点,100字以内。"},
        {"role": "user", "content": ask},
    ],
    max_tokens=500,
    temperature=0.7,
)

print(completion.choices[0].message.content)

2.7 简短的总结

我们现在已经有了一个简单的 AI,但是还有一些问题:

  • 代码流程不够规范
  • 只能通过修改代码来实现问题的修改
  • 只能实现一轮对话

接下来就来解决这些问题吧!

3 优化代码

3.1 规范代码

这里,就要隆重请出:langchain 第三方库

它可以帮我们很好的流程化这段代码。

可以新建一个代码文件,因为代码要大改

3.1.1 引用库

from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate

load_dotenv()

3.1.2 创建提示词

其实就是修改了之前的 创建用户 中的代码。

注意:这里用户的名字从user变为了human

prompt_template = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一个美食家,你要为用户说的美食写一段有文采的点评词,精简一点,100字以内。"),
        ("human", "南京盐水鸭怎么样?")
    ]
)

3.1.3 创建模型

修改了原来的 创建对话。

model = ChatOpenAI(
    model="moonshot-v1-32k",
    openai_api_base="https://api.moonshot.cn/v1",
    max_tokens=500,
    temperature=0.7,
)

3.1.4 规范输出(非必须)

一般会用另一个大模型来规范前一个大模型的输出,但并非必要。

def output_parser(output: str):
    parser_model = ChatOpenAI(
        model = 'moonshot-v1-32k',
        temperature=0.8,
        openai_api_base = "https://api.moonshot.cn/v1"
    )
    message = "你需要润色这段文字:`{text}`"
    return parser_model.invoke(message.format(text=output))

3.2 用户输入

先把问题中的输入部分修改即可:

prompt_template = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一个美食家,你要为用户说的美食写一段有文采的点评词,精简一点,100字以内。"),
        ("human", "{food}怎么样?")
    ]
)

3.3 连接步骤

用 langchain 连接步骤非常简单,用 | 符号就行了:

chain = prompt_template | model

# 若加入规范输出的部分,代码如下
# chain = prompt_template | model | output_parser

3.4 循环输入

利用 while True 进行用户循环输入,非常简单不是吗?

while True:
    food = input("你想点评什么:")
    answer = chain.invoke(input = {'food': food})
    print(answer.content)

这下再来看看结果吧!

真的是太 NICE 了!

3.5 全部代码

from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate

load_dotenv()

prompt_template = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一个美食家,你要为用户说的美食写一段有文采的点评词,精简一点,100字以内。"),
        ("human", "{food}怎么样?")
    ]
)

model = ChatOpenAI(
    model="moonshot-v1-32k",
    openai_api_base="https://api.moonshot.cn/v1",
    max_tokens=500,
    temperature=0.7,
)

chain = prompt_template | model
while True:
    food = input("你想点评什么:")
    answer = chain.invoke(input = {'food': food})
    print(answer.content)

4 总结

我们成功通过调用 API 实现了一个本地的定制机器人,感觉如何?

文章如有疏漏,欢迎提出!如果对你有帮助的话,别忘 点赞收藏👍

下期再见!

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

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

相关文章

cs231n作业2 双层神经网络

双层神经网络 我们选用ReLU函数和softmax函数: 步骤: 1、LOSS损失函数(前向传播)与梯度(后向传播)计算 Forward: 计算score,再根据score计算loss Backward:分别对W2、b2、W1、b1求…

品质至上!中国星坤连接器的发展之道!

在电子连接技术领域,中国星坤以其卓越的创新能力和对品质的不懈追求,赢得了业界的广泛认可。凭借在高精度连接器设计和制造上的领先地位,星坤不仅获得了多项实用新型专利,更通过一系列国际质量管理体系认证,彰显了其产…

知识社区在线提问小程序模板源码

蓝色的知识问答,问答交流,知识社区,在线提问手机app小程序网页模板。包含:社区主页、提问、我的、绑定手机,实名认证等。 知识社区在线提问小程序模板源码

P5. 微服务: Bot代码的执行

P5. 微服务: Bot代码的执行 0 概述1 Bot代码执行框架2 Bot代码传递给BotRunningSystem3 微服务: Bot代码执行的实现逻辑3.1 整体微服务逻辑概述3.2 生产者消费者模型实现3.3 consume() 执行代码函数的实现3.4 执行结果返回给 nextStep 4 扩展4.1 Bot代码的语言 0 概述 本章介绍…

Keysight 是德 DSA91304A 高性能示波器

Keysight 是德 DSA91304A 高性能示波器 DSA91304A Infiniium 高性能示波器:13 GHz 13 GHz4个模拟通道高达 1 Gpts 存储器和 40 GSa/s 采样率可以提供更完整的信号迹线捕获50 mV/格时低至 1.73 mVrms 的本底噪声和深入的抖动分析功能可以确保卓越的测量精度硬件加速…

C语言_数据的存储

数据类型介绍 1. 整形家族 //字符存储的时候,存储的是ASCII值,是整型 //char 默认是unsigned char还是signed char标准没有规定,其他类型都默认是signed char,unsigned char,signed char short,unsigned s…

windows机器免密登录linux主机

1. 正常连接需要输入密码 ssh root1.1.1.1 2. 在Windows上生成SSH密钥对(如果你还没有的话): ssh-keygen 3. scp将id_rsa.pub传输到对应的主机 4.对应机器上查看 5.从windows上免密登录

rsyslog日志转发

前言 Rsyslog可用于接受来自各种来源(本地和网络)的输入,转换它们,并将结果输出到不同(通过模板和filter过滤)的目的地(目录文件中) rsyslog是一个开源工具,被广泛用于Linux系统以通过TCP/UDP…

cs231n 作业3

使用普通RNN进行图像标注 单个RNN神经元行为 前向传播: 反向传播: def rnn_step_backward(dnext_h, cache):dx, dprev_h, dWx, dWh, db None, None, None, None, Nonex, Wx, Wh, prev_h, next_h cachedtanh 1 - next_h**2dx (dnext_h*dtanh).dot(…

第T4周:使用TensorFlow实现猴痘病识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 文章目录 一、前期工作1.设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据3. 查看数据 二、数据预处理1、加载数据2、数据可视化3、再…

人脸识别课堂签到系统【PyQt5实现】

人脸识别签到系统 1、运用场景 课堂签到,上班打卡,进出门身份验证。 2、功能类别 人脸录入,打卡签到,声音提醒,打卡信息导出,打包成exe可执行文件 3、技术栈 python3.8,sqlite3,opencv,face_recognition,PyQt5,csv 4、流程图 1、导入库 2、编写UI界面 3、打…

Linux服务器使用总结-不定时更新

# 查看升级日志 cat /var/log/dpkg.log |grep nvidia|grep libnvidia-common

C++ 多态篇

文章目录 1. 多态的概念和实现1.1 概念1.2 实现1.2.1 协变1.2.2 析构函数1.2.3 子类虚函数不加virtual 2. C11 final和override3.1 final3.2 override 3. 函数重载、重写与隐藏4. 多态的原理5. 抽象类6.单继承和多继承的虚表6.1 单继承6.2 多继承 7. 菱形继承的虚表(了解)7.1 菱…

为企业知识库选模型?全球AI大模型知识库RAG场景基准测试排名

大语言模型常见基准测试 大家对于AI模型理解和推理能力的的基准测试一定非常熟悉了,比如MMLU(大规模多任务语言理解)、GPQA(研究生级别知识问答)、GSMSK(研究生数学知识考察)、MATH&#xff08…

NextJs - SSR渲染解决antd首屏加载CSS样式的闪烁问题

NextJs - SSR渲染解决antd首屏加载CSS样式的闪烁问题 闪烁现状解决方案 闪烁现状 我们写一个非常简单的页面&#xff1a; import { Button } from antdexport default async function Page() {return <><Button typeprimary>AAA</Button></> }NextJs…

Linux防火墙使用(firewalld与iptables)

防火墙概述 防火墙是一种由硬件和软件组合而成&#xff0c;在内部网和外部网之间、专有网和公共网之间构造的保护屏障&#xff0c;用以保护用户资料和信息安全的一种技术 防火墙作用在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题&#xff0c;从而实现…

SSRF靶场通关合集

目录 前言 SSRF总结 1.pikachu 1.1SSRF(curl) 1.1.1http协议 1.1.2 file协议查看本地文件 1.1.3 dict协议扫描内网主机开放端口 1.2 SSRF&#xff08;file_get_content&#xff09; 1.2.1 file读取本地文件 1.2.2 php://filter/读php源代码 2.DoraBox靶场 前言 最近…

[终端安全]-3 移动终端之硬件安全(TEE)

&#xff08;参考资料&#xff1a;TrustZone for V8-A. pdf&#xff0c;来源ARM DEVELOPER官网&#xff09; TEE&#xff08;Trusted Execution Environment&#xff0c;可信执行环境&#xff09;是用于执行敏感代码和处理敏感数据的独立安全区域&#xff1b;以ARM TrustZone为…

一.2.(3)放大电路的图解分析方法和微变等效电路分析方法;

放大电路的主要分析方法:图解法、微变等效电路法 这里以共射放大电路为例 (1) 图解法: 1.静态分析 首先确定静态工作点Q,然后根据电路的特点,做出直流负载线,进而画出交流负载线,最后,画出各极电流电压的波形。求出最大不失真输出电压。 估算IBQ&#xff0c;然后根据数据手册里…

『大模型笔记』《Pytorch实用教程》(第二版)

『大模型笔记』《Pytorch实用教程》(第二版) 文章目录 一. 《Pytorch实用教程》(第二版)1.1 上篇1.2 中篇1.3 下篇1.4 本书亮点1.5 本书内容及结构二. 参考文献🖥️ 配套代码(开源免费):https://github.com/TingsongYu/PyTorch-Tutorial-2nd📚 在线阅读(开源免费)…