使用LLM Agents为电商平台设计登录页面

2024年06月07日 由 alex 发表 114 0

简介 — LLM 代理

LLM(大型语言模型)代理可以描述为使用 GPT-4 或 Llama 3 等 LLM 作为思维中心的独立系统。有了足够的语言技巧(提示)和一些软件工程,这些代理可以推理问题,制定解决问题的计划,并在一组工具的帮助下执行该计划。


例如,你可以创建一个代理来获取提及特定关键字的最新新闻。代理将搜索网络(代理的工具),总结找到的文章或文本片段,并以可读格式呈现它们。


最早也是最受欢迎的 LLM 代理之一是 AutoGPT,这是一个使用 OpenAI 的 GPT-4 API 的开源自主 AI 代理。


下图中,你将看到 LLM 代理的运作方式。从这里开始,我将使用“代理”而不是“LLM-代理”。


7


CrewAI

CrewAI 是一个用于创建多代理系统的框架,在这个系统中,每个代理都可以独立运行、扮演角色并完成任务。


在使用该框架时,你需要了解四个主要模块:


  1. 代理: 将代理视为拥有特定技能和任务的团队成员。代理可以有不同的角色,如 “研究员”、“作家 ”或 “客户支持”,每个角色都能为团队的总体目标做出贡献。
  2. 任务: 任务是由代理完成的具体任务。它们提供了执行任务所需的所有细节,如任务描述、负责的代理、所需工具等,可帮助完成各种复杂的行动。
  3. 工具: CrewAI 中的工具是一种技能或功能,代理可利用它来执行各种操作。这包括 CrewAI 工具包和 LangChain 工具中的工具,可实现从简单搜索到复杂交互以及代理间有效团队合作等各种操作。
  4. 团队: 团队代表一组合作完成一系列任务的代理。每个小组定义了任务执行策略、代理协作和整体工作流程。


8


创建着陆页生成器


什么是着陆页?

着陆页是潜在客户点击广告或搜索引擎结果链接时显示的网页。该网页通常显示广告或链接的相关扩展内容。


用户可能会因为其浏览历史记录而进入着陆页。例如,如果你在谷歌上搜索 “男士跑步鞋”,随后可能会看到阿迪达斯、彪马等不同品牌的 “跑步鞋 ”广告。


当你点击这些广告时,你会被引导到另一个页面,这就是着陆页。


一个典型的登陆页面可能包含产品标语、产品描述和可供选择的产品列表。现在,问题是如何提供有效和相关的结果。这就是推动业务的关键所在!


着陆页示例。


9


下面是了解流程的流程图:


10


我们将遵循以下三个步骤:


  1. 首先,我们获取数据集,对其进行必要的预处理,然后将文本片段的向量嵌入输入 Qdrant,这是一个非常高效的向量数据库。要了解有关 Qdrant 的更多信息,请访问:https://qdrant.tech/。给定查询(通常来自用户点击的广告)后,我们将使用语义搜索在向量数据库中找到两样东西:第一,匹配记录的产品描述;第二,这些记录的产品名称。
  2. 我们将这些描述提供给 Agent1 和 Agent2,用于生成标语和产品描述。他们将利用自己的角色定义和任务定义,生成突出优点的创意标语和产品说明。代理 3 使用产品列表,并将它们很好地展示出来。
  3. 最后一项任务是创建产品列表,如果我们能为这些鞋子提供图片,效果会更好。我们有一列包含数据集中每一行的图片链接,但它们不起作用。


代码

要开始这个过程,让我们来设置系统。


运行此程序安装所需的库:


!pip install crewai[tools]
!pip install langchain
!pip install qdrant-client
!pip install langchain-groq
!pip install sentence-transformers


在本练习中,我将使用阿迪达斯的鞋类电子商务数据集,其中包含产品信息。


使用 Pandas 读取数据集:


import pandas as pd
df = pd.read_csv("data/Adidas_final.csv", sep=';')


要查看有哪些列,请使用:


df.info()


<class 'pandas.core.frame.DataFrame'>class 'pandas.core.frame.DataFrame'>
RangeIndex: 2625 entries, 0 to 2624
Data columns (total 12 columns):
 #   Column         Non-Null Count  Dtype 
---  ------         --------------  ----- 
 0   URL            2625 non-null   object
 1   Product Name   2625 non-null   object
 2   Product ID     2625 non-null   object
 3   Listing Price  2625 non-null   int64 
 4   Sale Price     2625 non-null   int64 
 5   Discount       2625 non-null   int64 
 6   Brand          2625 non-null   object
 7   Description    2625 non-null   object
 8   Rating         2625 non-null   int64 
 9   Reviews        2625 non-null   int64 
 10  Images         2625 non-null   object
 11  Last Visited   2625 non-null   object
dtypes: int64(5), object(7)
memory usage: 246.2+ KB


我们会对两列感兴趣: 产品名称和描述,因为我们需要将它们输入到我们的向量存储 Qdrant 中。使用该函数,我们为每一行创建一个增强描述。


def extended_descriptin(row):
    ex_desc = f"Poduct Name: {row['Product Name'].strip()} \nDescription of product: {row['Description'].strip()}"
    return ex_desc
df['ExtendedDescription'] = df.apply(extended_descriptin, axis=1)
texts = df['ExtendedDescription'].to_list()


让我们举例说明一下:


print(texts[0])


Poduct Name: Women's adidas Originals NMD_Racer Primeknit Shoes 
Description of product: Channeling the streamlined look of an '80s racer, these shoes are updated with modern features. The foot-hugging adidas Primeknit upper offers a soft, breathable feel. The Boost midsole provides responsive comfort accented with a contrast-color EVA heel plug. Embroidered details add a distinctive finish.


下一步是为这些文本生成嵌入式内容:


import torch
from sentence_transformers import SentenceTransformer
device_to_use = torch.device('cuda') if torch.cuda.is_available() else "cpu"
model = SentenceTransformer("BAAI/bge-large-en-v1.5", device=device_to_use)
vectors = model.encode(texts)


之后,我们将把这些向量输入向量存储库 Qdrant:


from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams

# Initialize the client

client = QdrantClient(":memory:",)
client.recreate_collection(
    collection_name="adidas_products",
    vectors_config=VectorParams(size=1024, distance=Distance.COSINE),
)

client.upload_collection(
    collection_name="adidas_products",
    ids=[i for i in range(len(texts))],
    vectors=vectors,
    parallel=4,
    max_retries=3,
)


接下来,让我们编写一个函数,根据查询从向量存储中获取结果:


def get_matches(text):
    query_vector = model.encode(text)
    hits = client.search(
        collection_name="adidas_products",
        query_vector=query_vector,
        limit=20 # Return 20 closest points
    )
    products = list(set([df['Product Name'][i.id] for i in hits]))
    descriptions = list(set([df['Description'][i.id] for i in hits]))
    desc=""
    pdts=""
    for x, y in zip(descriptions, products):
        desc = desc + x + "\n"
        pdts = pdts + y + ', '
    return desc, pdts


该函数返回与我们的查询相关的产品描述和名称列表。


接下来,让我们设置 Groq,它将是我们代理的核心!


from langchain_groq import ChatGroq
groq = ChatGroq(temperature=0.1, groq_api_key="gsk-your-groq-api-key",
                model_name="llama3-8b-8192")


在设置环境之前,请确保你可以访问 Groq:


  1. 请访问 https://groq.com/ 注册。
  2. 然后,访问 https://console.groq.com/keys 创建或管理 API 密钥;复制 API 密钥并随身携带。


11


现在到了主要部分:让我们来设计我们的代理!


现在让我们对其进行编码:


from crewai import Agent, Task, Crew

def agent_pipeline(query):
    desc, products = get_matches(query)
    tagline_agent = Agent(role = "Marketing and Copy writing Head",
                        goal = """Provide a catchy and creative tagline from the description that is provided JUST A TAGLINE.""",
                        backstory = """You are an excellent Marketing and Copy writing genius that doesnt explain things just gives results, who can sell any product via marketing the shit out of it.""",
                        allow_delegation = False,
                        verbose = True,
                        llm = groq)

    explainindetail_agent = Agent(role = "Senior Marketing and Copy writing Executive",
                        goal = """Provide the pros of using this product according to the product and highlight the strong points..""",
                        backstory = """You are an excellent Marketing and Copy writing genius that doesnt explain things just gives results, who can sell any product via marketing the shit out of it.""",
                        allow_delegation = False,
                        verbose = True,
                        llm = groq)

    listproducts_agent = Agent(role = "Marketing and Copy writing Analyst",
                        goal = """You'll be given a list of products, list them in presentable manner with 1 line each that's it.""",
                        backstory = """You are an excellent Marketing and Copy writing genius that doesnt explain things just gives results, who can sell any product via marketing the shit out of it.""",
                        allow_delegation = False,
                        verbose = True,
                        llm = groq)
    # manager_agent = Agent(role = "Manager",
    #                     goal = """You'll be managing all the other agents.""",
    #                     backstory = """You are an excellent man power management genius that doesnt explain things just gives results, who can maager any team via managing the shit out of it.""",
    #                     allow_delegation = False,
    #                     verbose = True,
    #                     llm = groq,
    #                     )



    task1 = Task (description=desc,
                agent = tagline_agent,
                expected_output="A tagline for the product.")

    task2 = Task (description=desc,
                agent = explainindetail_agent,
                expected_output="A description for the product.")

    task3 = Task(description=products,
                agent=listproducts_agent,
                expected_output="A numbered 1,2,3,.. list of products from the provided list.")

    results = []
    for agent, task in zip([tagline_agent, explainindetail_agent, listproducts_agent],[task1, task2, task3]):
        crew1 = Crew(agents=[agent],
                tasks=[task],
                verbose=3,
                # manager_llm=groq
            )
        result = crew1.kickoff()
        results.append(result)

   

结果

现在,让我们运行这个系统:


result = agent_pipeline(query="men's casual shoes")"men's casual shoes")


可以得到


2024-05-29 12:52:39,725 - 9784 - __init__.py-__init__:518 - WARNING: Overriding of current TracerProvider is not allowed__init__.py-__init__:518 - WARNING: Overriding of current TracerProvider is not allowed
[DEBUG]: == Working Agent: Marketing and Copy writing Head
 [INFO]: == Starting Task: The adidas casual sandals for men. Features stylish webbing straps, Diecut EVA midsole for stable cushioning and abrasion resistant rubber outsole with wet and dry traction pattern. 
Give a boost to your running or jogging sessions wearing these 8K running shoes for men. Featuring mesh and suede upper, these lace-ups are durable, light in weight and comfortable to wear. Furthermore, the grooved rubber outsole will provide better traction on the different surfaces.
These men's running shoes will get you on the road to your goals. A sandwich mesh upper offers lightweight breathability, while a seamless print overlay adds support for a stable stride. The midsole offers pillow-soft Cloudfoam cushioning that eases every stride.
The adidas casual slippers for men with a striking camouflage design. Features stylish webbing straps, Diecut EVA midsole for stable cushioning and abrasion resistant rubber outsole with wet and dry traction pattern. 
Move swiftly through the mountains in these men's hiking shoes. The lightweight, breathable build features a speed lacing system. A rugged Traxion outsole with grippy Continental™ Rubber supports travel over any terrain, wet or dry.
Sleek running shoes for men. These shoes have a lightweight look and feel in honeycomb mesh. Cloudfoam cushioning delivers superior step-in comfort.
These men's running shoes keep you comfortable so you stay focused on your
running goals. They feature a textile upper that wraps around the midfoot to give
you stability where you need it most.
These men's running shoes keep you comfortable so you stay focused on your
training goals. They feature a textile upper and a cushioned IMEVA midsole provides all-day comfort with rubber outsole for best durability in high wear areas. 
These lightweight running shoes for men give all round comfort, cushioning, durability & support in a simplistic design. The mesh upper ensure breathability and durability while the Lightstrike IMEVA midsole provides premium cushioning. Non-Marking Rubber outsole provides durability.
These men's running shoes keep you comfortable so you stay focused on your goals. They feature a textile, mesh and synthetic upper along with Cloudfoam midsole provides optimum cushioning  where you need it most and durable Rubber outsole for long-lasting wear. 


> Entering new CrewAgentExecutor chain...
2024-05-29 12:52:41,307 - 9784 - __init__.py-__init__:518 - WARNING: Overriding of current TracerProvider is not allowed
Thought: I now can give a great answer
Final Answer: "Step Up Your Comfort Game"
> Finished chain.
 [DEBUG]: == [Marketing and Copy writing Head] Task output: "Step Up Your Comfort Game"

 [DEBUG]: == Working Agent: Senior Marketing and Copy writing Executive
 [INFO]: == Starting Task: The adidas casual sandals for men. Features stylish webbing straps, Diecut EVA midsole for stable cushioning and abrasion resistant rubber outsole with wet and dry traction pattern. 
Give a boost to your running or jogging sessions wearing these 8K running shoes for men. Featuring mesh and suede upper, these lace-ups are durable, light in weight and comfortable to wear. Furthermore, the grooved rubber outsole will provide better traction on the different surfaces.
These men's running shoes will get you on the road to your goals. A sandwich mesh upper offers lightweight breathability, while a seamless print overlay adds support for a stable stride. The midsole offers pillow-soft Cloudfoam cushioning that eases every stride.
The adidas casual slippers for men with a striking camouflage design. Features stylish webbing straps, Diecut EVA midsole for stable cushioning and abrasion resistant rubber outsole with wet and dry traction pattern. 
Move swiftly through the mountains in these men's hiking shoes. The lightweight, breathable build features a speed lacing system. A rugged Traxion outsole with grippy Continental™ Rubber supports travel over any terrain, wet or dry.
Sleek running shoes for men. These shoes have a lightweight look and feel in honeycomb mesh. Cloudfoam cushioning delivers superior step-in comfort.
These men's running shoes keep you comfortable so you stay focused on your
running goals. They feature a textile upper that wraps around the midfoot to give
you stability where you need it most.
These men's running shoes keep you comfortable so you stay focused on your
training goals. They feature a textile upper and a cushioned IMEVA midsole provides all-day comfort with rubber outsole for best durability in high wear areas. 
These lightweight running shoes for men give all round comfort, cushioning, durability & support in a simplistic design. The mesh upper ensure breathability and durability while the Lightstrike IMEVA midsole provides premium cushioning. Non-Marking Rubber outsole provides durability.
These men's running shoes keep you comfortable so you stay focused on your goals. They feature a textile, mesh and synthetic upper along with Cloudfoam midsole provides optimum cushioning  where you need it most and durable Rubber outsole for long-lasting wear. 


> Entering new CrewAgentExecutor chain...
2024-05-29 12:52:44,219 - 9784 - __init__.py-__init__:518 - WARNING: Overriding of current TracerProvider is not allowed
Final Answer:
**Introducing the Ultimate Comfort and Performance: adidas Casual Sandals for Men**
Step into comfort and style with the adidas Casual Sandals for men. Designed for the modern man who values both form and function, these sandals boast a sleek and stylish design that's perfect for everyday wear.
**Key Features:**
* **Stylish Webbing Straps:** Adjustable straps provide a secure and comfortable fit, while the webbing material adds a touch of sophistication to your overall look.
* **Diecut EVA Midsole:** Provides stable cushioning and support for your feet, ensuring a comfortable stride.
* **Abrasion Resistant Rubber Outsole:** With a wet and dry traction pattern, this outsole provides excellent grip on various surfaces, making it perfect for casual outings or light outdoor activities.
Whether you're running errands, meeting friends, or simply lounging around, these sandals are the perfect choice. With their lightweight and breathable design, you'll feel like you're walking on clouds.
**Experience the Comfort and Style:**
* **Lightweight and Breathable:** The sandals' mesh upper allows for airflow, keeping your feet cool and dry.
* **Stable and Supportive:** The Diecut EVA midsole provides excellent cushioning and support, ensuring a comfortable fit.
* **Grip and Traction:** The abrasion-resistant rubber outsole provides excellent grip on various surfaces, giving you confidence and stability.
**Upgrade Your Footwear Game:**
Ditch the ordinary and upgrade to the adidas Casual Sandals for men. With their stylish design, comfortable fit, and excellent performance, these sandals are the perfect choice for any occasion. Treat your feet to the ultimate comfort and style experience.
> Finished chain.
 [DEBUG]: == [Senior Marketing and Copy writing Executive] Task output: **Introducing the Ultimate Comfort and Performance: adidas Casual Sandals for Men**
Step into comfort and style with the adidas Casual Sandals for men. Designed for the modern man who values both form and function, these sandals boast a sleek and stylish design that's perfect for everyday wear.
**Key Features:**
* **Stylish Webbing Straps:** Adjustable straps provide a secure and comfortable fit, while the webbing material adds a touch of sophistication to your overall look.
* **Diecut EVA Midsole:** Provides stable cushioning and support for your feet, ensuring a comfortable stride.
* **Abrasion Resistant Rubber Outsole:** With a wet and dry traction pattern, this outsole provides excellent grip on various surfaces, making it perfect for casual outings or light outdoor activities.
Whether you're running errands, meeting friends, or simply lounging around, these sandals are the perfect choice. With their lightweight and breathable design, you'll feel like you're walking on clouds.
**Experience the Comfort and Style:**
* **Lightweight and Breathable:** The sandals' mesh upper allows for airflow, keeping your feet cool and dry.
* **Stable and Supportive:** The Diecut EVA midsole provides excellent cushioning and support, ensuring a comfortable fit.
* **Grip and Traction:** The abrasion-resistant rubber outsole provides excellent grip on various surfaces, giving you confidence and stability.
**Upgrade Your Footwear Game:**
Ditch the ordinary and upgrade to the adidas Casual Sandals for men. With their stylish design, comfortable fit, and excellent performance, these sandals are the perfect choice for any occasion. Treat your feet to the ultimate comfort and style experience.

 [DEBUG]: == Working Agent: Marketing and Copy writing Analyst
 [INFO]: == Starting Task: MEN'S ADIDAS RUNNING DURAMO 9 SHOES,Men's Outdoor Terrex Swift R2 Shoes,Men's adidas Running Duramo 9 Shoes,Men's adidas Running Victriox Shoes,Men's adidas Running Thrum Shoes,Men's Running Remit Shoes,Men's Running Staredge Shoes,MEN'S ADIDAS RUNNING 8K SHOES,Men's adidas Running Dubbers Shoes,Men's adidas Toe Side Slippers,

> Entering new CrewAgentExecutor chain...
I'm ready to give it my all! I'll create a list of products with a one-line description for each. Here's my thought process:
"Time to unleash my marketing magic and make these products shine!"
Final Answer:
1. MEN'S ADIDAS RUNNING DURAMO 9 SHOES - Experience the ultimate running companion with the Duramo 9, designed for comfort and performance.
2. Men's Outdoor Terrex Swift R2 Shoes - Take your outdoor adventures to the next level with these rugged and reliable trail running shoes.
3. Men's adidas Running Duramo 9 Shoes - Get ready to crush your fitness goals with the Duramo 9, engineered for speed and agility.
4. Men's adidas Running Victriox Shoes - Unleash your inner champion with the Victriox, designed for high-intensity training and competition.
5. Men's adidas Running Thrum Shoes - Stay ahead of the game with the Thrum, engineered for speed and agility on any terrain.
6. Men's Running Remit Shoes - Send your runs into orbit with the Remit, designed for comfort and performance on any surface.
7. Men's Running Staredge Shoes - Take your running to new heights with the Staredge, engineered for stability and support.
8. MEN'S ADIDAS RUNNING 8K SHOES - Reach new heights with the 8K, designed for speed and agility on any terrain.
9. Men's adidas Running Dubbers Shoes - Get ready to take your runs to the next level with the Dubbers, engineered for comfort and performance.
10. Men's adidas Toe Side Slippers - Slip into comfort with the Toe Side Slippers, designed for relaxation and leisure.
There you have it!
> Finished chain.
 [DEBUG]: == [Marketing and Copy writing Analyst] Task output: 1. MEN'S ADIDAS RUNNING DURAMO 9 SHOES - Experience the ultimate running companion with the Duramo 9, designed for comfort and performance.
2. Men's Outdoor Terrex Swift R2 Shoes - Take your outdoor adventures to the next level with these rugged and reliable trail running shoes.
3. Men's adidas Running Duramo 9 Shoes - Get ready to crush your fitness goals with the Duramo 9, engineered for speed and agility.
4. Men's adidas Running Victriox Shoes - Unleash your inner champion with the Victriox, designed for high-intensity training and competition.
5. Men's adidas Running Thrum Shoes - Stay ahead of the game with the Thrum, engineered for speed and agility on any terrain.
6. Men's Running Remit Shoes - Send your runs into orbit with the Remit, designed for comfort and performance on any surface.
7. Men's Running Staredge Shoes - Take your running to new heights with the Staredge, engineered for stability and support.
8. MEN'S ADIDAS RUNNING 8K SHOES - Reach new heights with the 8K, designed for speed and agility on any terrain.
9. Men's adidas Running Dubbers Shoes - Get ready to take your runs to the next level with the Dubbers, engineered for comfort and performance.
10. Men's adidas Toe Side Slippers - Slip into comfort with the Toe Side Slippers, designed for relaxation and leisure.
There you have it!
不过,事情可能还不是很清楚,让我们来看看最终创建的词典:
print(result)


它给出了


{'tagline': '"Step Up Your Comfort Game"',
 
'product_description': "**Introducing the Ultimate Comfort and Performance: adidas Casual Sandals for Men**\n\nStep into comfort and style with the adidas Casual Sandals for men. Designed for the modern man who values both form and function, these sandals boast a sleek and stylish design that's perfect for everyday wear.\n\n**Key Features:**\n\n* **Stylish Webbing Straps:** Adjustable straps provide a secure and comfortable fit, while the webbing material adds a touch of sophistication to your overall look.\n* **Diecut EVA Midsole:** Provides stable cushioning and support for your feet, ensuring a comfortable stride.\n* **Abrasion Resistant Rubber Outsole:** With a wet and dry traction pattern, this outsole provides excellent grip on various surfaces, making it perfect for casual outings or light outdoor activities.\n\nWhether you're running errands, meeting friends, or simply lounging around, these sandals are the perfect choice. With their lightweight and breathable design, you'll feel like you're walking on clouds.\n\n**Experience the Comfort and Style:**\n\n* **Lightweight and Breathable:** The sandals' mesh upper allows for airflow, keeping your feet cool and dry.\n* **Stable and Supportive:** The Diecut EVA midsole provides excellent cushioning and support, ensuring a comfortable fit.\n* **Grip and Traction:** The abrasion-resistant rubber outsole provides excellent grip on various surfaces, giving you confidence and stability.\n\n**Upgrade Your Footwear Game:**\n\nDitch the ordinary and upgrade to the adidas Casual Sandals for men. With their stylish design, comfortable fit, and excellent performance, these sandals are the perfect choice for any occasion. Treat your feet to the ultimate comfort and style experience.",
 
'products_list': "1. MEN'S ADIDAS RUNNING DURAMO 9 SHOES - Experience the ultimate running companion with the Duramo 9, designed for comfort and performance.\n2. Men's Outdoor Terrex Swift R2 Shoes - Take your outdoor adventures to the next level with these rugged and reliable trail running shoes.\n3. Men's adidas Running Duramo 9 Shoes - Get ready to crush your fitness goals with the Duramo 9, engineered for speed and agility.\n4. Men's adidas Running Victriox Shoes - Unleash your inner champion with the Victriox, designed for high-intensity training and competition.\n5. Men's adidas Running Thrum Shoes - Stay ahead of the game with the Thrum, engineered for speed and agility on any terrain.\n6. Men's Running Remit Shoes - Send your runs into orbit with the Remit, designed for comfort and performance on any surface.\n7. Men's Running Staredge Shoes - Take your running to new heights with the Staredge, engineered for stability and support.\n8. MEN'S ADIDAS RUNNING 8K SHOES - Reach new heights with the 8K, designed for speed and agility on any terrain.\n9. Men's adidas Running Dubbers Shoes - Get ready to take your runs to the next level with the Dubbers, engineered for comfort and performance.\n10. Men's adidas Toe Side Slippers - Slip into comfort with the Toe Side Slippers, designed for relaxation and leisure.\n\nThere you have it!"}


结论

在本文中,我们看到了:


  1. 什么是着陆页,以及如何利用人工智能为电子商务企业构建着陆页生成器。
  2. 如何构建多 LLM 代理系统,让每个代理都能独立完成任务。
  3. Groq,一种非常快速的 LLM 推断服务,由于该系统的骨干是 LLM 调用,因此它能使整个过程变得快速。
  4. Qdrant 是一个非常轻量级的向量数据库,可轻松存储数据和进行语义搜索。
文章来源:https://medium.com/ai-advances/llm-agents-landing-page-generation-for-an-e-commerce-platform-using-crewai-langchain-and-qdrant-c8e7dec21cd5
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消