当前位置:   article > 正文

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

python ai 搭建

目录

前言

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要钱!

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

  1. python-dotenv
  2. openai
  3. langchain
  4. langchain_openai

1.2 获取 API KEY

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

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

点击 新建

 名字随便输

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

 

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

在打码的地方填写 api key

OK,准备工作完成啦!

2 写代码

2.1 引用库

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

2.2 创建用户

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

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

  1. load_dotenv()
  2. client = OpenAI(
  3. base_url="https://api.moonshot.cn/v1"
  4. )

2.3 创建对话

这是最重要的一步!

先看代码:

  1. ask = "南京盐水鸭怎么样?"
  2. completion = client.chat.completions.create(
  3. model="moonshot-v1-32k",
  4. messages=[
  5. {"role": "system", "content": "你是一个美食家,你要为用户说的美食写一段有文采的点评词。"},
  6. {"role": "user", "content": ask},
  7. ],
  8. max_tokens=500,
  9. temperature=0.7,
  10. )

接下来请看讲解:

  • 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)

这个程序输出的内容:

  1. 南京盐水鸭,是金陵古城的美食瑰宝,承载着六朝古都深厚的文化底蕴。这道佳肴以其独特的制作工艺和绝妙的风味,在众多美食中独树一帜。
  2. 选材讲究,选用的是肉质细嫩、肥而不腻的南京本地麻鸭。经过精细的宰杀、清洗、腌制等工序,使得鸭肉的每一寸肌理都渗透着独特的风味。腌制过程中,恰到好处的盐分与鸭肉的鲜美完美融合,使鸭肉更加鲜嫩可口。
  3. 烹饪技艺更是令人赞叹。将腌制好的鸭肉放入特制的卤水中,用文火慢炖,使鸭肉在不断吸收卤水精华的同时,保持了肉质的嫩滑。卤水中的香料与鸭肉的鲜美相互交融,形成了一种独特的香气,令人垂涎三尺。
  4. 成品的南京盐水鸭,色泽金黄,皮脆肉嫩,鲜美可口。轻轻一咬,鸭肉的鲜嫩与卤水的香味瞬间在口腔中爆发,让人回味无穷。鸭肉的鲜美与卤水的香料,形成了一种绝妙的平衡,既不会过于咸腻,也不会过于清淡,恰到好处地满足了味蕾的需求。
  5. 品尝南京盐水鸭,就像是在品味一段历史,感受一种文化,让人在享受美味的同时,也能感受到南京这座城市的韵味。

2.5 调试

嘶~

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

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

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

看看结果:

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

果然好多了。

2.6 全部代码

  1. from dotenv import load_dotenv
  2. from openai import OpenAI
  3. load_dotenv()
  4. client = OpenAI(
  5. base_url="https://api.moonshot.cn/v1"
  6. )
  7. ask = "南京盐水鸭怎么样?"
  8. completion = client.chat.completions.create(
  9. model="moonshot-v1-32k",
  10. messages=[
  11. {"role": "system", "content": "你是一个美食家,你要为用户说的美食写一段有文采的点评词,精简一点,100字以内。"},
  12. {"role": "user", "content": ask},
  13. ],
  14. max_tokens=500,
  15. temperature=0.7,
  16. )
  17. print(completion.choices[0].message.content)

2.7 简短的总结

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

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

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

3 优化代码

3.1 规范代码

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

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

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

3.1.1 引用库

  1. from dotenv import load_dotenv
  2. from langchain_openai import ChatOpenAI
  3. from langchain.prompts import ChatPromptTemplate
  4. load_dotenv()

3.1.2 创建提示词

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

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

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

3.1.3 创建模型

修改了原来的 创建对话。

  1. model = ChatOpenAI(
  2. model="moonshot-v1-32k",
  3. openai_api_base="https://api.moonshot.cn/v1",
  4. max_tokens=500,
  5. temperature=0.7,
  6. )

3.1.4 规范输出(非必须)

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

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

3.2 用户输入

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

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

3.3 连接步骤

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

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

3.4 循环输入

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

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

这下再来看看结果吧!

真的是太 NICE 了!

3.5 全部代码

  1. from dotenv import load_dotenv
  2. from langchain_openai import ChatOpenAI
  3. from langchain.prompts import ChatPromptTemplate
  4. load_dotenv()
  5. prompt_template = ChatPromptTemplate.from_messages(
  6. [
  7. ("system", "你是一个美食家,你要为用户说的美食写一段有文采的点评词,精简一点,100字以内。"),
  8. ("human", "{food}怎么样?")
  9. ]
  10. )
  11. model = ChatOpenAI(
  12. model="moonshot-v1-32k",
  13. openai_api_base="https://api.moonshot.cn/v1",
  14. max_tokens=500,
  15. temperature=0.7,
  16. )
  17. chain = prompt_template | model
  18. while True:
  19. food = input("你想点评什么:")
  20. answer = chain.invoke(input = {'food': food})
  21. print(answer.content)

4 总结

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/908191
推荐阅读
相关标签