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

目录

前言

[1 准备工作](#1 准备工作)

[1.1 环境搭建](#1.1 环境搭建)

[1.2 获取 API KEY](#1.2 获取 API KEY)

[2 写代码](#2 写代码)

[2.1 引用库](#2.1 引用库)

[2.2 创建用户](#2.2 创建用户)

[2.3 创建对话](#2.3 创建对话)

[2.4 输出内容](#2.4 输出内容)

[2.5 调试](#2.5 调试)

[2.6 全部代码](#2.6 全部代码)

[2.7 简短的总结](#2.7 简短的总结)

[3 优化代码](#3 优化代码)

[3.1 规范代码](#3.1 规范代码)

[3.1.1 引用库](#3.1.1 引用库)

[3.1.2 创建提示词](#3.1.2 创建提示词)

[3.1.3 创建模型](#3.1.3 创建模型)

[3.1.4 规范输出(非必须)](#3.1.4 规范输出(非必须))

[3.2 用户输入](#3.2 用户输入)

[3.3 连接步骤](#3.3 连接步骤)

[3.4 循环输入](#3.4 循环输入)

[3.5 全部代码](#3.5 全部代码)

[4 总结](#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 引用库

python 复制代码
from dotenv import load_dotenv    # 虚拟环境
from openai import OpenAI         # 调用 API

2.2 创建用户

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

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

python 复制代码
load_dotenv()

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

2.3 创建对话

这是最重要的一步!

先看代码:

python 复制代码
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 输出内容

激动人心的时刻!

python 复制代码
print(completion.choices[0].message.content)

这个程序输出的内容:

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

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

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

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

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

2.5 调试

嘶~

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

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

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

看看结果:

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

果然好多了。

2.6 全部代码

python 复制代码
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 引用库

python 复制代码
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate

load_dotenv()

3.1.2 创建提示词

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

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

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

3.1.3 创建模型

修改了原来的 创建对话。

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

3.1.4 规范输出(非必须)

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

python 复制代码
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 用户输入

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

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

3.3 连接步骤

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

python 复制代码
chain = prompt_template | model

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

3.4 循环输入

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

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

这下再来看看结果吧!

真的是太 NICE 了!

3.5 全部代码

python 复制代码
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 实现了一个本地的定制机器人,感觉如何?

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

下期再见!

相关推荐
好奇龙猫几秒前
【AI学习-comfyUI学习-第二十九节-instantID+IP加载器预工作流-各个部分学习】
人工智能·学习
数模精英几秒前
2025第十六届蓝桥杯视觉艺术设计赛
人工智能
草莓熊Lotso3 分钟前
Qt 入门核心指南:从框架认知到环境搭建 + Qt Creator 实战
xml·开发语言·网络·c++·人工智能·qt·页面
哦哦~9213 分钟前
计算化学与人工智能驱动的 MOFs 性能预测与筛选技术
人工智能·计算化学
微爱帮监所写信寄信3 分钟前
微爱帮监狱寄信邮票真伪核实接口认证方案
开发语言·python
啃火龙果的兔子4 分钟前
如何使用python开发小游戏
开发语言·python·pygame
爱学习的uu5 分钟前
大模型学习1——各类模型接入langchain,模型调用,记忆管理,工具调用
人工智能·python·深度学习·学习·算法·机器学习·langchain
大模型真好玩8 分钟前
从分享AI,到与AI共舞—大模型真好玩的2025总结
人工智能·trae·vibecoding
wa的一声哭了9 分钟前
赋范空间 赋范空间的完备性
python·线性代数·算法·机器学习·数学建模·矩阵·django
码农小白猿9 分钟前
提升压力容器改造方案报告标准条款审核效率,IACheck助力合规与安全
运维·人工智能·安全·ai·自动化·iacheck