做一个简单的订餐机器人
在这篇文章中,我们将手把手教你搭建一个基于 Groq 平台和 LLaMA3 模型的智能订餐机器人。它有基础的交互能力,能够通过多轮对话收集用户的订单信息,并给出正确、友好的应答。
项目功能概览
-
连接 Groq API,调用 llama3-70b-8192 模型
-
采用 Panel 搭建前端 UI 界面
-
支持多轮对话,保持上下文 context
-
支持自动回显订单总额、送货方式确认等
1. 基础环境配置
首先,确保你已经拥有:
-
正确的 Groq API Key
-
Python 3.9+
-
安装了 openai, panel, python-dotenv 等包
pip install openai panel python-dotenv
将 Groq API Key 写入 .env
文件:
GROQ_API_KEY=your_real_groq_key
2. 创建基本调用方法
import os
import openai
from dotenv import load_dotenv, find_dotenv
# 读取 Groq API Key
load_dotenv(find_dotenv())
openai.api_key = os.environ['GROQ_API_KEY']
openai.api_base = "https://api.groq.com/openai/v1"
# 基本问答功能
def get_completion(prompt, model="llama3-70b-8192"):
try:
response = openai.ChatCompletion.create(
model=model,
messages=[
{"role": "system", "content": "你是一个智能助手"},
{"role": "user", "content": prompt}
],
temperature=0.7
)
return response.choices[0].message["content"]
except Exception as e:
return f"❌ 调用失败:{e}"
3. 建立对话上下文 context 管理
每次用户输入后,将该输入作为 user 上下文加入,然后调用 LLM,再把答案作为 assistant 加入,通过 list 堆空间保持全轮对话历史:
context = [
{'role': 'system', 'content': """
你是订餐机器人,为披萨餐厅自动收集订单信息...
(看全文大菜单和规则)
"""}
]
4. 构建 Panel UI 互动界面
import panel as pn
pn.extension()
panels = [] # 显示区域
inp = pn.widgets.TextInput(value="Hi", placeholder='输入聊天内容...')
button_conversation = pn.widgets.Button(name="开始聊天")
# 对话逻辑
def get_completion_from_messages(messages, model="llama3-70b-8192"):
try:
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=0.7
)
return response.choices[0].message["content"]
except Exception as e:
return f"❌ 调用失败:{e}"
def collect_messages(_):
prompt = inp.value_input.strip()
inp.value = ''
if not prompt:
return pn.pane.Markdown("⚠️ 请先输入内容")
context.append({'role': 'user', 'content': prompt})
response = get_completion_from_messages(context)
context.append({'role': 'assistant', 'content': response})
panels.append(pn.Row('User:', pn.pane.Markdown(prompt, width=600)))
panels.append(pn.Row(
'Assistant:',
pn.pane.HTML(f"<div style='background-color:#F6F6F6; padding:10px;'>{response}</div>", width=600)
))
return pn.Column(*panels)
interactive_conversation = pn.bind(collect_messages, button_conversation)
inp = pn.widgets.TextInput(value="Hi", placeholder='Enter text here…')
button_conversation = pn.widgets.Button(name="Chat!")
interactive_conversation = pn.bind(collect_messages, button_conversation)
dashboard = pn.Column(
inp,
pn.Row(button_conversation),
pn.panel(interactive_conversation, loading_indicator=True, height=300),
)
dashboard.servable()
5. 效果展示
当你运行上面代码后,将打开一个包含 TextInput + 按钮的简易聊天 UI,可以输入如:
-
"我想来一份辣香肠披萨,中大"
-
"加一份蘑菇"
-
"还有什么饮料"
-
"送到中山路 88 号"
等等,会看到模型基于上下文给出合理并友好的回复,同时维持对话轮次续成。
6. 结论
通过一行一行构造订餐机器人,我们实现了:
-
基于 Groq API 的 LLaMA3 调用
-
基于 Panel 的前端交互设计
-
自动管理对话上下文
这个小项目非常适合 LLM 初学者、教程示范、课程演示等场景。你也可以继续扩展,比如:
-
增加订单总结表
-
配合数据库保存历史
-
增加私人化方案推荐
一切都是可能的!