从零搭建跨境电商 AI 智能体:LLM + RAG + Workflow 的工程实践
一、为什么跨境电商需要AI智能体?
跨境电商的业务链条长、系统多、规则复杂。客服要回答多语言咨询、广告投放要动态调价、供应链要管库存和物流——这些场景天然适合用大模型来提效。但直接调用大模型 API 远远不够:模型不知道你的商品库存、不知道你的退换货政策、也不知道广告平台的出价规则。
解决这个问题的核心思路是:LLM(推理大脑)+ RAG(外部知识库)+ Workflow(流程编排) 。LLM 负责理解意图和生成回答,RAG 负责从知识库检索准确信息,Workflow 负责把任务拆解成可执行的步骤。
本文将从零搭建一个跨境电商 AI 智能体原型,覆盖客服问答、商品查询、库存查询等典型场景。
二、整体架构
text
┌─────────────────────────────────────────────────────────┐
│ 用户请求(客服/运营) │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Agent 工作流(LangGraph) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │
│ │任务理解节点│→│RAG检索节点│→│工具调用节点│→│结果生成│ │
│ └──────────┘ └──────────┘ └──────────┘ └────────┘ │
└─────────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌──────────┐ ┌────────────┐ ┌──────────────┐
│ 向量数据库 │ │ 业务API │ │ 大模型(OpenAI│
│(知识库) │ │(库存/订单)│ │ /DeepSeek等)│
└──────────┘ └────────────┘ └──────────────┘
整个系统分为三层:知识层(向量数据库存储FAQ、产品、政策等知识)、执行层(工具函数对接各类业务API)、决策层(Agent工作流负责理解、检索、调用、生成)。
三、环境准备与依赖安装
bash
创建虚拟环境
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
安装核心依赖
pip install langchain1.0.0 langgraph0.1.0
pip install openai chromadb tiktoken
pip install faiss-cpu pandas numpy
参考 LangChain V1.x 的依赖管理方案,建议使用 conda 隔离环境以避免版本冲突。
四、LLM 多模型调用封装
跨境电商场景下可能需要切换不同模型(OpenAI 处理复杂推理、DeepSeek 处理低成本大批量任务)。我们封装一个统一的模型调用接口:
python
import os
from openai import OpenAI
from typing import Optional
class LLMClient:
“”“统一的大模型调用客户端,支持多模型切换”“”
def __init__(self, provider: str = "openai"):
self.provider = provider
if provider == "openai":
self.client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
self.model = "gpt-4-turbo"
elif provider == "deepseek":
self.client = OpenAI(
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com/v1"
)
self.model = "deepseek-chat"
# 可扩展 Claude、Gemini 等[reference:4]
def chat(self, messages: list, temperature: float = 0.3) -> str:
response = self.client.chat.completions.create(
model=self.model,
messages=messages,
temperature=temperature
)
return response.choices[0].message.content
使用示例
llm = LLMClient(“openai”)
response = llm.chat([
{“role”: “system”, “content”: “你是跨境电商客服助手”},
{“role”: “user”, “content”: “用户问:这款产品的退换货政策是什么?”}
])
五、RAG 知识库构建
RAG(检索增强生成)的核心是:把文档切成小块 → 转成向量 → 存入向量数据库 → 查询时找最相似的片段 → 喂给 LLM 生成回答。
跨境电商需要建设的知识库包括:客服 FAQ、产品说明书、广告投放策略、供应链规则等。
5.1 文档加载与分块
python
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.document_loaders import TextLoader
加载知识文档(FAQ、产品手册、政策文件等)
loader = TextLoader(“./knowledge_base/faq.txt”)
documents = loader.load()
分块:将长文档切分成适合检索的小块
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50, # 重叠避免上下文断裂
separators=[“\n\n”, “\n”, “。”, “!”, “?”, “;”]
)
chunks = text_splitter.split_documents(documents)
print(f"文档已切分为 {len(chunks)} 个片段")
分块策略参考了 LangChain 的 RecursiveCharacterTextSplitter 实现,它按层级分隔符递归切割,能较好保留语义完整性。
5.2 向量化与存储
python
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
初始化嵌入模型
embeddings = OpenAIEmbeddings(model=“text-embedding-3-small”)
创建向量数据库(Chroma 轻量级,适合开发测试)
vector_store = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
persist_directory=“./chroma_db”
)
vector_store.persist()
生产环境可选用 Pinecone、Weaviate 或 FAISS 等专业向量数据库。
5.3 RAG 检索与生成
python
def rag_query(query: str, top_k: int = 3) -> str:
“”“执行 RAG 检索增强生成”“”
# 1. 检索相关文档片段
retriever = vector_store.as_retriever(search_kwargs={“k”: top_k})
docs = retriever.get_relevant_documents(query)
# 2. 构建上下文
context = "\n\n".join([doc.page_content for doc in docs])
# 3. 调用 LLM 生成回答
llm = LLMClient("openai")
response = llm.chat([
{"role": "system", "content": f"""你是跨境电商客服助手。
请基于以下知识库内容回答用户问题。如果知识库中没有相关信息,请明确告知用户。
知识库内容:
{context}
“”"},
{“role”: “user”, “content”: query}
])
return response
测试
print(rag_query(“欧洲站的退换货流程是什么?”))
六、工具函数(Tool Calling):对接业务系统
AI 智能体不仅要知道“知识”,还要能“做事”——查库存、查订单、调广告出价。这就需要通过 Function Calling 让大模型调用外部 API。
6.1 定义工具函数
python
import json
from typing import Optional
工具1:查询商品库存
def query_inventory(product_sku: str, warehouse: str = “US”) -> dict:
“”“查询指定SKU在特定仓库的库存”“”
# 实际场景中对接 ERP 或库存系统 API
# 这里模拟数据
mock_data = {
(“SKU-001”, “US”): {“stock”: 156, “status”: “正常”},
(“SKU-001”, “EU”): {“stock”: 43, “status”: “低库存”},
(“SKU-002”, “US”): {“stock”: 0, “status”: “缺货”},
}
return mock_data.get((product_sku, warehouse), {“stock”: 0, “status”: “未知”})
工具2:查询订单状态
def query_order(order_id: str) -> dict:
“”“查询订单状态和物流信息”“”
# 实际场景中对接 Amazon/Walmart 订单 API
mock_orders = {
“ORD-001”: {“status”: “已发货”, “tracking”: “USPS-123456”, “eta”: “2026-07-10”},
“ORD-002”: {“status”: “待付款”, “tracking”: None, “eta”: None},
}
return mock_orders.get(order_id, {“status”: “未找到”, “tracking”: None, “eta”: None})
6.2 注册工具给大模型
python
from openai import OpenAI
client = OpenAI()
定义工具 Schema(符合 OpenAI Function Calling 规范)
tools = [
{
“type”: “function”,
“function”: {
“name”: “query_inventory”,
“description”: “查询商品库存。当用户询问某商品是否有货时调用。”,
“parameters”: {
“type”: “object”,
“properties”: {
“product_sku”: {“type”: “string”, “description”: “商品SKU编码”},
“warehouse”: {“type”: “string”, “description”: “仓库地区,如US/EU/JP”}
},
“required”: [“product_sku”]
}
}
},
{
“type”: “function”,
“function”: {
“name”: “query_order”,
“description”: “查询订单状态。当用户询问订单物流时调用。”,
“parameters”: {
“type”: “object”,
“properties”: {
“order_id”: {“type”: “string”, “description”: “订单编号”}
},
“required”: [“order_id”]
}
}
}
]
可用工具映射
available_tools = {
“query_inventory”: query_inventory,
“query_order”: query_order,
}
6.3 完整的工具调用循环
python
def agent_with_tools(user_query: str) -> str:
“”“带工具调用的 Agent 执行流程”“”
messages = [
{“role”: “system”, “content”: “你是跨境电商助手,可以查询库存和订单信息。”},
{“role”: “user”, “content”: user_query}
]
# 第一轮:让模型决定是否需要调用工具
response = client.chat.completions.create(
model="gpt-4-turbo",
messages=messages,
tools=tools,
tool_choice="auto"
)
response_message = response.choices[0].message
tool_calls = response_message.tool_calls
# 如果模型不需要调用工具,直接返回
if not tool_calls:
return response_message.content
# 执行工具调用
messages.append(response_message)
for tool_call in tool_calls:
function_name = tool_call.function.name
function_args = json.loads(tool_call.function.arguments)
# 执行对应的工具函数
if function_name in available_tools:
result = available_tools[function_name](**function_args)
else:
result = {"error": f"未知工具: {function_name}"}
# 将工具执行结果返回给模型
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(result, ensure_ascii=False)
})
# 第二轮:模型基于工具结果生成最终回答
final_response = client.chat.completions.create(
model="gpt-4-turbo",
messages=messages
)
return final_response.choices[0].message.content
测试
print(agent_with_tools(“SKU-001还有货吗?”))
print(agent_with_tools(“帮我查一下订单ORD-001到哪了?”))
七、Agent 工作流编排(LangGraph)
当任务变复杂时(比如“用户要退货 → 查订单 → 判断是否在退货期 → 生成退货标签 → 通知仓库”),就需要工作流编排。LangGraph 通过图结构把多个步骤组织成有向图,支持条件分支和状态管理。
python
from langgraph.graph import StateGraph, END
from typing import TypedDict, Literal
定义工作流状态
class AgentState(TypedDict):
query: str
intent: str
retrieved_docs: list
tool_result: dict
final_answer: str
定义工作流节点
def understand_intent(state: AgentState) -> AgentState:
“”“节点1:意图识别”“”
llm = LLMClient(“openai”)
response = llm.chat([
{“role”: “system”, “content”: “识别用户意图,只输出一个词:faq(知识问答)、inventory(库存查询)、order(订单查询)”},
{“role”: “user”, “content”: state[“query”]}
])
state[“intent”] = response.strip()
return state
def route_by_intent(state: AgentState) -> Literal[“rag_retrieve”, “call_tool”, “unknown”]:
“”“路由函数:根据意图决定下一步”“”
intent = state.get(“intent”, “”)
if intent == “faq”:
return “rag_retrieve”
elif intent in [“inventory”, “order”]:
return “call_tool”
else:
return “unknown”
def rag_retrieve(state: AgentState) -> AgentState:
“”“节点2:RAG检索(处理FAQ类问题)”“”
docs = vector_store.similarity_search(state[“query”], k=3)
state[“retrieved_docs”] = docs
return state
def call_tool(state: AgentState) -> AgentState:
“”“节点2(分支):工具调用(处理库存/订单类问题)”“”
# 复用前面实现的 agent_with_tools 逻辑
result = agent_with_tools(state[“query”])
state[“tool_result”] = {“result”: result}
return state
def generate_answer(state: AgentState) -> AgentState:
“”“节点3:生成最终回答”“”
if state.get(“retrieved_docs”):
context = “\n”.join([d.page_content for d in state[“retrieved_docs”]])
llm = LLMClient(“openai”)
answer = llm.chat([
{“role”: “system”, “content”: f"基于以下知识回答用户:\n{context}"},
{“role”: “user”, “content”: state[“query”]}
])
state[“final_answer”] = answer
elif state.get(“tool_result”):
state[“final_answer”] = state[“tool_result”][“result”]
else:
state[“final_answer”] = “抱歉,我无法处理这个问题。”
return state
构建工作流图
workflow = StateGraph(AgentState)
workflow.add_node(“understand”, understand_intent)
workflow.add_node(“rag_retrieve”, rag_retrieve)
workflow.add_node(“call_tool”, call_tool)
workflow.add_node(“generate”, generate_answer)
workflow.set_entry_point(“understand”)
workflow.add_conditional_edges(
“understand”,
route_by_intent,
{
“rag_retrieve”: “rag_retrieve”,
“call_tool”: “call_tool”,
“unknown”: “generate”
}
)
workflow.add_edge(“rag_retrieve”, “generate”)
workflow.add_edge(“call_tool”, “generate”)
workflow.add_edge(“generate”, END)
编译并执行
app = workflow.compile()
result = app.invoke({“query”: “欧洲站的退货政策是什么?”})
print(result[“final_answer”])
八、质量保障与人工兜底
AI 输出需要建立质量评估和兜底机制:
python
def quality_check(answer: str) -> dict:
“”“简单的质量检测”“”
issues = []
# 检测1:是否包含明确的"我不知道"
if “不知道” in answer or “无法” in answer:
issues.append(“模型表示无法回答”)
# 检测2:回答是否过短
if len(answer) < 10:
issues.append(“回答内容过短”)
# 检测3:是否包含幻觉信号(如具体但无法核实的数据)
# 实际场景可接入更复杂的评估模型
return {
"passed": len(issues) == 0,
"issues": issues,
"need_human_review": len(issues) > 0
}
在生成答案后调用
result = app.invoke({“query”: “这个产品多少钱?”})
check = quality_check(result[“final_answer”])
if check[“need_human_review”]:
# 触发人工审核流程
print(f" 需人工复核: {check[‘issues’]}")
else:
print(result[“final_answer”])
九、总结与展望
本文从零搭建了一个跨境电商 AI 智能体原型,涵盖了:
LLM 多模型封装:支持 OpenAI、DeepSeek 等模型的统一调用
RAG 知识库:文档分块、向量化存储、检索增强生成
工具调用:Function Calling 对接库存、订单等业务 API
工作流编排:LangGraph 实现意图路由和多步骤任务
质量保障:输出检测与人工兜底机制
在实际生产环境中,还需要考虑:多语言支持(跨境电商覆盖多国)、知识库的持续更新、RAG 检索的混合检索(向量+关键词)优化、以及更完善的日志追踪和效果归因。
AI 智能体正在从“辅助工具”走向“决策核心”。希望本文能帮你迈出从零搭建的第一步。
更多推荐



所有评论(0)