GTE-Chinese-Large快速上手:Jupyter中直接调用app.py服务接口示例

📅 发布时间:2026/7/5 12:13:16 👁️ 浏览次数:
GTE-Chinese-Large快速上手:Jupyter中直接调用app.py服务接口示例
GTE-Chinese-Large快速上手Jupyter中直接调用app.py服务接口示例想快速体验阿里达摩院推出的中文向量模型吗今天带你用最简单的方式在Jupyter里直接调用GTE-Chinese-Large的服务接口把文本变成向量整个过程就像点外卖一样方便。GTE (General Text Embeddings) 是专门为中文优化的文本向量模型它能理解中文的深层含义然后把文字转换成一串数字向量。这串数字就像是文字的“数字指纹”可以用来做语义搜索、文本分类、智能推荐等各种有趣的事情。这篇文章不讲复杂的理论也不讲繁琐的配置就教你一件事怎么在已经部署好的Jupyter环境里用几行代码调用GTE模型的服务。哪怕你之前没接触过向量模型也能跟着一步步做出来。1. 准备工作理解我们要做什么在开始写代码之前我们先搞清楚两个关键概念这样后面操作起来心里才有底。1.1 什么是文本向量化你可以把文本向量化想象成给文字拍“X光片”。平时我们看文字看到的是它的表面意思。但向量化之后文字就变成了一串有意义的数字这串数字能反映出文字的“内在特征”——比如情感是积极还是消极主题是科技还是娱乐风格是正式还是随意。举个例子“今天天气真好” → 可能得到一个偏向“积极情感”、“日常生活”的向量“人工智能技术发展迅速” → 可能得到一个偏向“科技”、“专业”的向量GTE-Chinese-Large模型就是专门干这个的“摄影师”它拍出来的“X光片”向量特别清晰能准确反映中文文本的语义。1.2 服务接口是什么在这个Jupyter环境里GTE模型已经像一家“餐厅”一样开张营业了。它提供了一个叫做app.py的服务接口你可以把它理解成餐厅的“点餐窗口”。你不用关心厨房模型里是怎么做菜的也不用自己去买菜洗菜加载模型、配置环境。你只需要走到点餐窗口调用接口告诉服务员你想要什么输入文本服务员就会把做好的菜向量结果端给你。这种方式有几个明显的好处不用等待模型已经加载好了随用随取不用操心环境配置、依赖安装都有人搞定了稳定可靠服务一直运行不会用着用着就崩溃2. 快速启动找到并访问服务现在我们来实际操作第一步是先找到这个“餐厅”在哪里。2.1 确认服务状态在Jupyter环境中GTE模型的服务通常已经预启动了。你可以通过一个简单的方法来确认打开一个新的代码单元格运行下面的命令# 查看7860端口是否被占用 !netstat -tlnp | grep 7860如果看到类似下面的输出说明服务正在运行tcp 0 0 0.0.0.0:7860 0.0.0.0:* LISTEN 12345/python如果没看到输出或者你想手动启动服务可以运行# 启动GTE服务 !cd /opt/gte-zh-large python app.py 注意后面的符号表示在后台运行这样你就能继续使用Jupyter了。启动过程大概需要1-2分钟耐心等待一下。2.2 访问Web界面可选服务启动后除了用代码调用你还可以通过Web界面直观地体验模型功能。在Jupyter里新建一个单元格运行# 生成Web界面的访问链接 import socket import os # 获取当前主机的IP在Jupyter环境中通常是localhost hostname socket.gethostname() ip_address socket.gethostbyname(hostname) print(fWeb界面访问地址http://{ip_address}:7860) print(如果是在CSDN星图环境中请使用分配的公网访问地址)点击输出的链接你会看到一个简洁的Web界面里面有三个主要功能文本向量化输入一段文字得到它的向量相似度计算比较两段文字的相似程度语义检索从一堆文字里找到最相关的几条Web界面适合快速体验和测试但如果要在代码里集成使用还是直接调用API更方便。3. 核心实战三种调用方式重头戏来了下面我教你三种不同的调用方式从简单到灵活满足不同场景的需求。3.1 方式一最简调用推荐新手如果你只是想快速试试效果用requests库是最直接的方法。这就像用手机点外卖填好信息下单就行。import requests import json # 服务地址在Jupyter环境内 service_url http://localhost:7860 def get_embedding_simple(text): 最简单的向量获取函数 try: # 准备请求数据 data { text: text, task_type: embedding # 指定要向量化 } # 发送POST请求 response requests.post( f{service_url}/api/embed, jsondata, timeout30 # 设置超时时间 ) # 检查响应 if response.status_code 200: result response.json() return result.get(embedding, []) else: print(f请求失败状态码{response.status_code}) print(f错误信息{response.text}) return None except Exception as e: print(f调用服务时出错{str(e)}) return None # 试试效果 test_text 自然语言处理是人工智能的重要分支 vector get_embedding_simple(test_text) if vector is not None: print(f文本{test_text}) print(f向量维度{len(vector)}维) print(f前10个数值{vector[:10]}) print(f...后面还有{len(vector)-10}个数字)运行这段代码你会看到文本被转换成了1024个数字组成的向量。这些数字看起来可能没什么规律但它们共同编码了文本的语义信息。3.2 方式二完整功能调用第一种方式只能获取向量但GTE服务其实还有更多功能。下面这个封装好的类把三个主要功能都整合起来了用起来更顺手。import requests import numpy as np from typing import List, Union, Dict, Any class GTEClient: GTE服务客户端封装类 def __init__(self, base_urlhttp://localhost:7860): self.base_url base_url self.timeout 30 def get_embedding(self, text: str) - np.ndarray: 获取文本向量 data {text: text, task_type: embedding} response requests.post( f{self.base_url}/api/embed, jsondata, timeoutself.timeout ) result response.json() return np.array(result[embedding]) def calculate_similarity(self, text1: str, text2: str) - float: 计算两段文本的相似度 data { text1: text1, text2: text2, task_type: similarity } response requests.post( f{self.base_url}/api/similarity, jsondata, timeoutself.timeout ) result response.json() return result[similarity] def semantic_search(self, query: str, candidates: List[str], top_k: int 5) - List[Dict]: 语义检索从候选文本中找最相关的 data { query: query, candidates: candidates, top_k: top_k, task_type: search } response requests.post( f{self.base_url}/api/search, jsondata, timeoutself.timeout ) return response.json()[results] def batch_embedding(self, texts: List[str]) - List[np.ndarray]: 批量获取向量更高效 embeddings [] for text in texts: emb self.get_embedding(text) embeddings.append(emb) return embeddings # 使用示例 def demo_gte_client(): 演示GTEClient的完整功能 client GTEClient() print( 功能演示开始 ) # 1. 获取向量 print(\n1. 文本向量化演示) sample_text 深度学习需要大量的数据和算力 vector client.get_embedding(sample_text) print(f文本{sample_text}) print(f向量形状{vector.shape}) # 2. 计算相似度 print(\n2. 相似度计算演示) text_a 苹果公司发布了新款iPhone text_b 科技巨头苹果推出新一代智能手机 text_c 今天水果市场的苹果价格很便宜 sim_ab client.calculate_similarity(text_a, text_b) sim_ac client.calculate_similarity(text_a, text_c) print(f文本A{text_a}) print(f文本B{text_b}) print(f相似度{sim_ab:.4f} ({高相似 if sim_ab 0.75 else 中等相似 if sim_ab 0.45 else 低相似})) print(f\n文本A{text_a}) print(f文本C{text_c}) print(f相似度{sim_ac:.4f} ({高相似 if sim_ac 0.75 else 中等相似 if sim_ac 0.45 else 低相似})) # 3. 语义检索 print(\n3. 语义检索演示) query 如何学习Python编程 candidates [ Python基础语法教程, 机器学习算法介绍, Python数据分析实战, Java编程入门指南, Web前端开发技巧, Python网络爬虫教程 ] results client.semantic_search(query, candidates, top_k3) print(f查询{query}) print(检索结果) for i, result in enumerate(results, 1): print(f {i}. {result[text]} (相似度{result[score]:.4f})) print(\n 功能演示结束 ) # 运行演示 demo_gte_client()这个GTEClient类就像你的私人助理你需要什么功能就调用对应的方法。批量处理功能特别实用比如你要处理100条文本用循环调用get_embedding就行。3.3 方式三高级应用示例学会了基本调用我们来看看在实际项目中怎么用。下面是一个简单的语义搜索系统示例虽然简化了但核心逻辑和真实项目是一样的。import numpy as np from sklearn.metrics.pairwise import cosine_similarity class SimpleSemanticSearch: 简单的语义搜索系统 def __init__(self, gte_client): self.client gte_client self.documents [] # 存储原始文本 self.embeddings [] # 存储对应的向量 def add_documents(self, docs: List[str]): 添加文档到搜索库 print(f正在处理 {len(docs)} 个文档...) for doc in docs: self.documents.append(doc) # 获取文档向量 emb self.client.get_embedding(doc) self.embeddings.append(emb) # 转换为numpy数组方便计算 self.embeddings np.array(self.embeddings) print(f文档库更新完成当前共有 {len(self.documents)} 个文档) def search(self, query: str, top_k: int 5) - List[Dict]: 搜索相关文档 # 获取查询的向量 query_embedding self.client.get_embedding(query) query_embedding query_embedding.reshape(1, -1) # 计算余弦相似度 similarities cosine_similarity(query_embedding, self.embeddings)[0] # 获取TopK结果 top_indices np.argsort(similarities)[::-1][:top_k] results [] for idx in top_indices: results.append({ text: self.documents[idx], score: float(similarities[idx]), rank: len(results) 1 }) return results def find_similar_documents(self, doc_index: int, top_k: int 3) - List[Dict]: 查找与指定文档相似的文档 if doc_index len(self.documents): return [] target_embedding self.embeddings[doc_index].reshape(1, -1) similarities cosine_similarity(target_embedding, self.embeddings)[0] # 排除自己 similarities[doc_index] -1 top_indices np.argsort(similarities)[::-1][:top_k] results [] for idx in top_indices: if similarities[idx] 0: # 只返回正相似度的 results.append({ text: self.documents[idx], score: float(similarities[idx]) }) return results # 实际应用示例 def build_qa_system(): 构建一个简单的问答匹配系统 # 初始化客户端 client GTEClient() search_system SimpleSemanticSearch(client) # 模拟一个知识库实际项目中可能来自数据库或文件 knowledge_base [ Python中如何定义函数使用def关键字例如def function_name(parameters):, 列表和元组的区别是什么列表可变元组不可变。, 如何读取文件使用open()函数例如with open(file.txt, r) as f:, 什么是装饰器装饰器是修改其他函数功能的函数。, 如何安装第三方库使用pip install package_name命令。, 异常处理怎么做使用try-except语句块。, 虚拟环境有什么作用隔离项目依赖避免版本冲突。, 如何遍历字典使用for key, value in dict.items():, 列表推导式怎么写[expression for item in iterable if condition], 模块和包的区别模块是单个.py文件包是包含__init__.py的目录。 ] # 构建搜索库 search_system.add_documents(knowledge_base) # 用户提问 user_questions [ 怎么在Python中创建函数, 我想学文件操作该怎么读文件, 列表和元组有什么不同 ] print( 智能问答演示 \n) for question in user_questions: print(f用户提问{question}) results search_system.search(question, top_k2) if results: print(系统回答找到相关知识点) for result in results: print(f - {result[text]} (匹配度{result[score]:.3f})) else: print( 抱歉没有找到相关答案) print() # 演示文档相似性查找 print( 文档相似性分析 ) print(f知识库中第0条文档{knowledge_base[0]}) similar_docs search_system.find_similar_documents(0, top_k2) if similar_docs: print(与之相似的文档) for doc in similar_docs: print(f - {doc[text]} (相似度{doc[score]:.3f})) # 运行示例 build_qa_system()这个示例展示了如何用GTE向量构建一个实用的语义搜索系统。你可以把它扩展到真实场景比如公司内部知识库搜索产品文档检索客服问答匹配内容推荐系统4. 实用技巧与注意事项在实际使用中掌握一些小技巧能让你的代码更健壮、更高效。4.1 错误处理与重试机制网络服务总有可能出问题好的错误处理能让你的程序更稳定。import time from functools import wraps def retry_on_failure(max_retries3, delay1): 失败重试装饰器 def decorator(func): wraps(func) def wrapper(*args, **kwargs): last_exception None for attempt in range(max_retries): try: return func(*args, **kwargs) except Exception as e: last_exception e if attempt max_retries - 1: wait_time delay * (2 ** attempt) # 指数退避 print(f第{attempt 1}次尝试失败{wait_time}秒后重试...) time.sleep(wait_time) else: print(f所有{max_retries}次尝试均失败) raise last_exception return wrapper return decorator class RobustGTEClient(GTEClient): 增强版的GTE客户端带重试机制 retry_on_failure(max_retries3, delay2) def safe_get_embedding(self, text: str) - np.ndarray: 安全的向量获取自动重试 return self.get_embedding(text) def process_texts_with_progress(self, texts: List[str]) - List[np.ndarray]: 带进度条的批量处理 embeddings [] total len(texts) for i, text in enumerate(texts, 1): try: emb self.safe_get_embedding(text) embeddings.append(emb) # 显示进度 if i % 10 0 or i total: print(f处理进度{i}/{total} ({i/total*100:.1f}%)) except Exception as e: print(f处理第{i}条文本时出错{str(e)}) # 可以选择跳过或者添加一个空向量 embeddings.append(np.zeros(1024)) return embeddings # 使用增强版客户端 def demo_robust_client(): 演示健壮性处理 client RobustGTEClient() # 模拟一批文本 test_texts [ 机器学习是人工智能的核心技术, 深度学习基于神经网络, 自然语言处理让计算机理解人类语言, 计算机视觉识别图像内容, 强化学习通过试错进行决策 ] * 20 # 重复20次共100条 print(开始批量处理文本...) start_time time.time() embeddings client.process_texts_with_progress(test_texts) elapsed time.time() - start_time print(f\n处理完成) print(f总文本数{len(test_texts)}) print(f成功获取{len([e for e in embeddings if not np.all(e 0)])}) print(f总耗时{elapsed:.2f}秒) print(f平均每条{elapsed/len(test_texts)*1000:.1f}毫秒) # 运行演示 demo_robust_client()4.2 性能优化建议当处理大量文本时这些优化技巧能显著提升效率import concurrent.futures from threading import Lock class OptimizedGTEClient: 优化版的GTE客户端支持并发处理 def __init__(self, base_urlhttp://localhost:7860, max_workers4): self.base_url base_url self.max_workers max_workers self.timeout 30 self._lock Lock() # 用于线程安全 def _single_embedding(self, text): 单个文本向量化内部方法 data {text: text, task_type: embedding} response requests.post( f{self.base_url}/api/embed, jsondata, timeoutself.timeout ) return np.array(response.json()[embedding]) def batch_embedding_parallel(self, texts: List[str]) - List[np.ndarray]: 并行批量获取向量 embeddings [None] * len(texts) # 预分配列表 def process_item(idx, text): 处理单个文本 try: emb self._single_embedding(text) with self._lock: embeddings[idx] emb return True except Exception as e: print(f处理文本{idx}失败{str(e)}) with self._lock: embeddings[idx] np.zeros(1024) return False print(f开始并行处理 {len(texts)} 条文本使用 {self.max_workers} 个线程...) start_time time.time() with concurrent.futures.ThreadPoolExecutor(max_workersself.max_workers) as executor: # 提交所有任务 futures [] for idx, text in enumerate(texts): future executor.submit(process_item, idx, text) futures.append(future) # 等待所有任务完成并显示进度 completed 0 for future in concurrent.futures.as_completed(futures): completed 1 if completed % 20 0: print(f进度{completed}/{len(texts)}) elapsed time.time() - start_time print(f处理完成耗时{elapsed:.2f}秒) return embeddings def smart_batch_processing(self, texts: List[str], batch_size50) - List[np.ndarray]: 智能批量处理小批量并行 all_embeddings [] total_batches (len(texts) batch_size - 1) // batch_size for batch_idx in range(total_batches): start_idx batch_idx * batch_size end_idx min((batch_idx 1) * batch_size, len(texts)) batch_texts texts[start_idx:end_idx] print(f处理批次 {batch_idx 1}/{total_batches} ({len(batch_texts)}条)) batch_embeddings self.batch_embedding_parallel(batch_texts) all_embeddings.extend(batch_embeddings) # 批次间短暂暂停避免服务压力过大 if batch_idx total_batches - 1: time.sleep(0.5) return all_embeddings # 性能对比测试 def performance_comparison(): 对比不同处理方式的性能 # 生成测试数据 test_texts [f测试文本{i:04d} for i in range(200)] print( 性能对比测试 \n) # 方法1顺序处理 print(1. 顺序处理测试...) client1 GTEClient() start time.time() embeddings1 [] for text in test_texts[:50]: # 只测50条避免太慢 emb client1.get_embedding(text) embeddings1.append(emb) time1 time.time() - start print(f 50条文本顺序处理耗时{time1:.2f}秒\n) # 方法2并行处理 print(2. 并行处理测试...) client2 OptimizedGTEClient(max_workers4) start time.time() embeddings2 client2.batch_embedding_parallel(test_texts[:50]) time2 time.time() - start print(f 50条文本4线程并行耗时{time2:.2f}秒) print(f 性能提升{time1/time2:.1f}倍\n) # 方法3智能批量处理 print(3. 智能批量处理测试...) start time.time() embeddings3 client2.smart_batch_processing(test_texts, batch_size30) time3 time.time() - start print(f 200条文本智能批量处理耗时{time3:.2f}秒) print(f 平均每条{time3/200*1000:.1f}毫秒) # 运行性能测试 performance_comparison()5. 总结通过这篇文章你应该已经掌握了在Jupyter环境中调用GTE-Chinese-Large服务接口的完整方法。我们来回顾一下关键点核心收获服务化调用真方便不用自己加载模型、配置环境直接调用现成的服务接口省时省力三种调用方式任选从最简单的requests直接调用到封装好的GTEClient类再到高级的语义搜索应用满足不同层次的需求实际应用有套路文本向量化 → 相似度计算 → 语义检索这个流程可以解决很多实际问题健壮性很重要加上错误处理、重试机制你的代码才能在生产环境中稳定运行给初学者的建议先从“方式一”开始跑通最简单的例子建立信心然后用“方式二”的GTEClient类体验完整功能最后尝试修改“方式三”的示例应用到自己的项目中下一步可以探索把GTE向量和其他AI模型结合使用构建更复杂的语义搜索系统尝试不同的相似度计算算法优化批量处理的性能最重要的是动手实践。复制文章中的代码到Jupyter里运行看看效果然后修改参数、换自己的文本试试。遇到问题不用怕那正是学习的好机会。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。