一、前言
在开始之前你需要准备什么:
1、环境:openai
2、某个大模型的api
3、python编译器
好了,让我们来感受科技的乐趣吧,哈哈哈
二、大模型的使用
首先我们要获取一个大模型的api,这里以moonshot为例,这个大模型处理长文本非常厉害(其实是它免费送15块,哈哈哈)。首先登录moonshot,
点击开发平台,
进入使用指南,获取API密钥,
进去API Key管理,
新建一个并复制即可。
怎么使用这个API呢,直接附上代码,需要替换为你的api_key。
from openai import OpenAI
client = OpenAI(
api_key = "yourapi",
base_url = "https://api.moonshot.cn/v1",
)
history = [
{"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"}
]
def chat(query, history):
history += [{
"role": "user",
"content": query
}]
completion = client.chat.completions.create(
model="moonshot-v1-32k",
messages=history,
temperature=0.3,
)
result = completion.choices[0].message.content
history += [{
"role": "assistant",
"content": result
}]
return result
print(chat("帮我写一段tensorflow构建神经网络的代码", history))
print(chat("机器学习呢", history))
改变chat函数的参数,即可进行聊天。你可以把这段代码包装成一个接口,这样就可以将大模型嵌入到你做的平台上啦!
三、智能体
所谓智能体就是让大模型为我们做事,例如制作ppt,大模型本身是做不了PPT的,但是我们可以让大模型生成PPT大纲后,再使用某个插件进行PPT制作。不仅是PPT的制作,还可以让大模型关灯关电视。具体实现如下:
from openai import OpenAI
import re
client = OpenAI(
api_key = "your_api_key",
base_url = "https://api.moonshot.cn/v1",
)
history = [
{"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"}
]
def chat(query, history):
history += [{
"role": "user",
"content": query
}]
completion = client.chat.completions.create(
model="moonshot-v1-32k",
messages=history,
temperature=0.3,
)
result = completion.choices[0].message.content
history += [{
"role": "assistant",
"content": result
}]
return result
我们写几个实例插件,PPT生成、关灯和关电视,代码如下:
def ppt_tool():
print("使用了ppt_tool这个函数,这个时候你可以在这个函数中做你想做的事")
def light_tool():
print("使用了light_tool这个函数,这个时候你可以在这个函数中做你想做的事")
def tv_tool():
print("使用了tv_tool这个函数,这个时候你可以在这个函数中做你想做的事")
在实际中,这些函数肯定是具体插件的实现,我们这里只做插件调用的测试。
我们需要生成提示词来引导大模型使用某个插件,代码如下:
#%%
def generate_promp(tools,question):
result = ""
for tool in tools:
result += f"{tool['name']},功能:{tool['describe']}\n" # 使用f-string进行格式化,并添加换行符以便每个工具占一行
prompt_temp='''
你现在有以下工具可以使用
{tools}
必要的时候请使用以下工具,请记住,你自己没办法生成PPT,如果用户要求你生成PPT的时候请尽可能在工具中找寻能够使用的工具。当你决定使用工具的时候请在回答中回答需要使用的工具的名称,并将其用@@包裹起来(一定要严格按照格式,不要有多的字符),例如:@ppt_tool@,如果你决定不使用工具,则不需要回复工具的名称
下面是用户的提问:
{question}
'''
prompt=prompt_temp.format(tools=result,question=question)
return prompt
大模型回答后,我们需要解析其中是否含有这个插件,代码如下:
#%%
def parse_answer(answer):
match = re.findall(r'@(.*?)@', answer)
# print(match)
if match:
tool_name_ls = match # group(1)是第一个括号内的匹配内容
return tool_name_ls
else:
return None
使用findall()函数可以匹配多个插件。
接下来就调用插件,代码如下:
def exe_func(tool_name):
# 遍历工具列表,查找匹配的字典
for tool in tools:
if tool["name"] == tool_name:
# 找到匹配的字典,执行对应的函数
tool["func"]() # 直接调用函数
# 注意:这里没有返回函数名,因为函数名通常不是必需的,我们直接执行函数
break # 找到后退出循环
else:
# 如果没有找到匹配的字典
print(f"没有找到名为{tool_name}的工具")
最后代码:
tools=[{"name":"ppt_tool",
"describe":"生成PPT工具",
"func":ppt_tool},
{"name":"light_tool",
"describe":"开灯工具",
"func":light_tool},
{"name":"tv_tool",
"describe":"打开电视工具",
"func":tv_tool}]
prompt1=generate_promp(tools,"帮我生成一份PPT,再开灯和开电视")
print("1----输入模型的ptompt为\n",prompt1)
answer1=chat(prompt1, history)
print("2----模型返回的回答为为\n",answer1)
tool_name_ls=parse_answer(answer1)
print("3----解析出来的tool_name为\n",' '.join(tool_name_ls))
if tool_name_ls is not None:
print("4----执行结果为\n")
for tool_name in tool_name_ls:
exe_func(tool_name)
我们来看看这段代码的输出结果把:
大家看到执行结果,成功的调用了三个插件。
四、总结
文章到此结束啦,大模型的应用不止于此,还有更多的应用等着大家去探索,作者最近又忙又累,想不出来一点了。希望大家可以参考这篇文章,做出更多好玩好用的程序和系统。
本文没有提供其他资源了,下篇文章见!!