在人工智能浪潮席卷各行各业的今天,智能体(Agent)已成为提升业务效率、优化用户体验的关键技术。然而,对于许多开发者和中小企业而言,Agent的开发、训练和部署往往伴随着高昂的算力成本、复杂的环境配置和繁琐的运维工作。腾讯云推出的轻量应用服务器及其AI智能体相关工具镜像,完美地解决了这一痛点,为我们提供了一条高性价比、开箱即用的AI智能体开发部署捷径。
本文将详细阐述如何利用这一强大组合,从一个真实的业务场景——“电商智能客服助手” 出发,一步步完成智能体的开发、测试,并最终将其部署托管至轻量应用服务器,形成一套可对外服务的生产级应用。
我们选择一个非常普适且能立即产生价值的场景:电商客服助手。
这是整个流程能够如此顺畅的关键。
假设我们已经拥有一台用AI工具镜像启动的轻量服务器,并通过SSH连接到它。
步骤 1:环境确认与依赖安装
首先,激活镜像可能自带的Conda环境,并安装必要的额外库。
# 连接到你的轻量服务器
ssh root@<你的服务器IP地址>
# 查看预置的Conda环境(名称可能略有不同,请根据镜像说明调整)
conda env list
# 通常可以激活一个基础环境,如:
conda activate base
# 安装本项目核心依赖
# 由于镜像可能已预装部分依赖,这里安装是为了确保最新和完整
pip install langchain openai chromadb tiktoken
# 安装FastAPI和Uvicorn,用于构建API服务
pip install fastapi uvicorn
# 安装python-dotenv用于管理密钥
pip install python-dotenv
步骤 2:编写智能体核心代码 (**agent_core.py
**)
我们使用LangChain框架来快速组装我们的RAG智能体。
import os
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from dotenv import load_dotenv
# 加载环境变量,用于存储API密钥
load_dotenv()
class EcommerceCustomerServiceAgent:
def __init__(self):
# 初始化LLM和Embedding模型(此处使用OpenAI API,你也可以替换为腾讯云、智谱AI等国内模型)
self.llm = ChatOpenAI(
model="gpt-3.5-turbo",
openai_api_key=os.getenv("OPENAI_API_KEY"),
base_url=os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1") # 可选,用于配置代理地址
)
self.embeddings = OpenAIEmbeddings(
openai_api_key=os.getenv("OPENAI_API_KEY"),
openai_api_base=os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")
)
# 初始化向量数据库和检索器
self.vectorstore = None
self.retriever = None
self.chain = None
def initialize_knowledge_base(self, knowledge_file_path):
"""初始化知识库,将文本文件切分并存入向量数据库"""
# 1. 加载文档
loader = TextLoader(knowledge_file_path, encoding='utf-8')
documents = loader.load()
# 2. 分割文本
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
splits = text_splitter.split_documents(documents)
# 3. 存入向量数据库(Chroma)
self.vectorstore = Chroma.from_documents(documents=splits, embedding=self.embeddings, persist_directory="./chroma_db")
self.vectorstore.persist() # 持久化,下次可直接加载
self.retriever = self.vectorstore.as_retriever(search_kwargs={"k": 3}) # 检索最相关的3个片段
# 4. 构建Chain
# 系统提示词,定义AI的角色和行为
system_prompt = (
"你是一名专业、友好的电商客服助手。请严格根据提供的上下文信息来回答用户的问题。"
"如果上下文信息中没有答案,请直接告知用户你不清楚,并建议ta联系人工客服。"
"回答要简洁、准确、有帮助。"
"\n\n上下文:{context}"
)
prompt = ChatPromptTemplate.from_messages([
("system", system_prompt),
("human", "{input}"),
])
# 组合文档链和检索链
document_chain = create_stuff_documents_chain(self.llm, prompt)
self.chain = create_retrieval_chain(self.retriever, document_chain)
def load_existing_knowledge_base(self):
"""如果知识库已构建过,直接加载"""
self.vectorstore = Chroma(persist_directory="./chroma_db", embedding_function=self.embeddings)
self.retriever = self.vectorstore.as_retriever(search_kwargs={"k": 3})
# ... 同上,构建chain ...
def query(self, user_input):
"""向智能体提问并获取回答"""
if not self.chain:
raise ValueError("知识库未初始化,请先调用 initialize_knowledge_base 或 load_existing_knowledge_base")
result = self.chain.invoke({"input": user_input})
return result["answer"]
# 示例用法
if __name__ == "__main__":
agent = EcommerceCustomerServiceAgent()
# 首次运行,创建知识库
# agent.initialize_knowledge_base("knowledge_base.txt")
# 非首次运行,直接加载
agent.load_existing_knowledge_base()
while True:
question = input("用户: ")
if question.lower() in ['quit', 'exit']:
break
answer = agent.query(question)
print(f"助手: {answer}")
步骤 3:准备知识库文件 (**knowledge_base.txt
**)
创建一个文本文件,输入你的电商客服知识。
【退换货政策】
商品签收后7天内,在不影响二次销售的情况下,支持无理由退换货。运费由买家承担。
【物流时效】
默认发货后,全国大部分地区3-5天可达,偏远地区可能延长至5-7天。
【商品A规格】
尺寸:20cm x 15cm x 10cm,重量:1.5kg,颜色:星空黑、皓月白。
【优惠活动】
即日起至本月底,全场商品满199元减30元。
...
步骤 4:创建API服务 (**api.py
**)
使用FastAPI将我们的智能体包装成一个HTTP API,方便前端或其他系统调用。
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from agent_core import EcommerceCustomerServiceAgent
import uvicorn
app = FastAPI(title="电商客服助手API")
# 全局加载智能体
agent = EcommerceCustomerServiceAgent()
agent.load_existing_knowledge_base()
class QueryRequest(BaseModel):
question: str
class QueryResponse(BaseModel):
answer: str
@app.post("/query", response_model=QueryResponse)
async def query_agent(request: QueryRequest):
try:
answer = agent.query(request.question)
return QueryResponse(answer=answer)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.get("/")
async def root():
return {"message": "Ecommerce Customer Service Agent API is running!"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
步骤 5:配置环境变量 (**.env
**)
创建一个 .env
文件来安全地存储你的API密钥。
OPENAI_API_KEY=sk-your-openai-api-key-here
# 如果使用国内代理,可能需要配置 OPENAI_BASE_URL=https://api.example.com/v1
开发完成后,我们需要让这个服务在服务器上长期稳定地运行。
步骤 1:在服务器上运行服务
最简单的方式是直接启动,但终端关闭后服务会停止。
python api.py
步骤 2:使用 systemd 托管服务(生产环境最佳实践)
这是更专业和可靠的方式。
sudo vim /etc/systemd/system/ai-customer-service.service
[Unit]
Description=AI Ecommerce Customer Service Agent
After=network.target
[Service]
User=root
WorkingDirectory=/root/your_project_directory # 替换成你的项目绝对路径
ExecStart=/root/miniconda3/envs/base/bin/python /root/your_project_directory/api.py # 替换成你的Python和项目路径
Restart=always
RestartSec=3
EnvironmentFile=/root/your_project_directory/.env # 加载环境变量
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start ai-customer-service
sudo systemctl enable ai-customer-service # 设置开机自启
sudo systemctl status ai-customer-service
步骤 3:配置安全组/防火墙
在腾讯云轻量服务器的控制台中,找到防火墙规则,添加一条规则,允许TCP协议的8000端口(或你自定义的端口)。这样你的API才能从外部访问。
curl
或在本地使用Postman测试你的API。curl -X POST "http://<你的服务器IP>:8000/query" -H "Content-Type: application/json" -d '{"question": "你们的退换货政策是怎样的?"}'
你应该能收到来自智能体的JSON格式回答。
通过本文的实践,我们成功实现了:
未来,你可以在此基础上继续深化:
腾讯轻量云“服务器+工具镜像”的组合,极大地降低了AI应用的门槛,是开发者探索和落地AI智能体的绝佳起点。希望本文能为你提供一条清晰的路径,祝你构建出更多有趣的AI应用!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。