基于ollama部署本地模型,如:qwen2.5。通过迭代提示词实现客户画像的生成,根据具体需求,通过迭代提示词可以达成目标。输出的结果可以要求JSON格式输出,当前模型JSON的解析准确率比较高,在输出的content中,通过正则表达可以获取JSON输出内容,并根据业务需求将其存入数据库(如:redis)中。
示例代码如下:
import gradio as gr
import requests
import redis
import time
import json
import re# 定义请求的 URL
def chat_completion(user_input, history, url, model_input):# 定义请求的 JSON 数据messages = [{"role": "system", "content": "You are a helpful assistant."}]for entry in history:messages.append({"role": "user", "content": entry[0]})messages.append({"role": "assistant", "content": entry[1]})messages.append({"role": "user", "content": user_input})data = {"model": model_input,"messages": messages}# 发送 POST 请求response = requests.post(url, json=data, stream=True)# 检查请求是否成功if response.status_code == 200:# 逐块读取响应数据assistant_response = ""for chunk in response.iter_content(chunk_size=None):if chunk:assistant_response += chunk.decode('utf-8')# 解析 JSON 数据try:data = json.loads(assistant_response)content = data['choices'][0]['message']['content']# 使用正则表达式提取 JSON 部分json_match = re.search(r'\{.*\}', content, re.DOTALL)if json_match:json_content = json_match.group(0)try:json_data = json.loads(json_content)json_output = json.dumps(json_data, ensure_ascii=False)# 插入 JSON 数据到 Redis 数据库try:redis_client = redis.Redis(host='host.docker.internal', port=6379, db=0)redis_client.set(f"chat_json_{time.time()}", json_output)except Exception as e:print(f"Redis 插入错误: {e}")# 更新历史记录history.append((user_input, json_output))yield historyexcept json.JSONDecodeError:passelse:# 如果没有 JSON 部分,按原样输出 contenthistory.append((user_input, content))yield historyexcept json.JSONDecodeError:passelse:assistant_response = f"请求失败,状态码 {response.status_code}"history.append((user_input, assistant_response))yield history# 创建 Gradio 对话界面
iface = gr.Blocks()with iface:with gr.Row():with gr.Column():gr.Markdown("# 聊天完成")url_input = gr.Textbox(label="API URL", value="http://host.docker.internal:11434/v1/chat/completions")model_input = gr.Textbox(label="模型", value="qwen2.5")chatbot = gr.Chatbot(label="聊天历史", height=300) # 设置高度为原来的两倍textbox = gr.Textbox(placeholder="在这里输入你的消息...", lines=2, max_lines=2)submit_btn = gr.Button("提交")clear_btn = gr.Button("清除")submit_btn.click(chat_completion, [textbox, chatbot, url_input, model_input], chatbot)clear_btn.click(lambda: [], None, chatbot)# 启动 Gradio 界面
iface.launch(server_name="0.0.0.0")