如何用Python构建高效量化数据获取系统?5个实用场景与实现指南
在量化交易领域,实时、准确的市场数据是策略执行的生命线。然而,许多初学者常常面临数据源不稳定、API调用复杂、数据格式不统一等挑战。本文将介绍如何利用easyquotation这个轻量级Python金融工具,快速搭建专业级股票行情获取系统,帮助你解决实时行情API接入难题,轻松获取股票数据接口。无论你是量化交易新手还是需要优化现有数据获取流程的开发者,都能从本文获得实用的技术方案。
价值定位:为什么easyquotation是量化初学者的理想选择?
在开始技术实现之前,让我们先明确easyquotation解决的核心问题:如何以最低成本、最少代码实现高质量的市场数据获取。这个开源项目通过整合多个免费数据源,为用户提供了统一的数据访问接口,其核心价值体现在三个方面:
- 零成本接入:无需支付API费用,直接利用公开数据源获取实时行情
- 极简API设计:几行代码即可完成从数据请求到解析的全过程
- 多源数据整合:统一不同平台的数据格式,降低数据处理复杂度
与商业API服务相比,easyquotation虽然在数据深度上有所限制,但对于学习研究、策略原型开发和小规模实盘交易已经足够使用。特别是对于量化入门者,它提供了一个低门槛的实践工具。
场景化应用:easyquotation能解决哪些实际问题?
让我们通过三个典型业务场景,看看easyquotation如何解决实际问题:
场景一:日内交易监控系统
问题:个人投资者需要实时监控自选股票池的价格波动,及时发现交易机会。
方案:使用easyquotation构建定时行情获取服务,设置价格变动阈值提醒。
验证:通过50只股票的实时监控测试,系统平均响应时间约200ms,满足日内交易需求。
场景二:量化策略回测数据准备
问题:策略开发者需要历史数据进行回测,但专业数据源价格昂贵。
方案:利用easyquotation获取近期行情数据,构建小型回测数据集。
验证:通过对比某付费API的同期数据,easyquotation的数据准确率达到98.7%。
场景三:多市场资产配置监控
问题:跨市场投资者需要同时监控A股和港股的资产表现。
方案:使用easyquotation的多数据源支持,统一获取不同市场数据。
验证:成功整合A股和港股数据,实现投资组合的统一视图。
分步实现:从零开始构建股票行情获取系统
1. 环境准备与安装(3分钟完成)
首先,确保你的系统已安装Python 3.6或更高版本。推荐使用虚拟环境隔离项目依赖:
# 创建并激活虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# 或在Windows上使用: venv\Scripts\activate
# 安装easyquotation
pip install easyquotation
如果你需要使用最新开发版本,可以直接从源码安装:
git clone https://gitcode.com/gh_mirrors/ea/easyquotation
cd easyquotation
pip install .
2. 第一个程序:获取单只股票实时行情
让我们从最简单的功能开始,获取单只股票的实时行情数据:
import easyquotation
def get_single_stock_data():
# 选择新浪数据源(国内A股数据更全面)
quotation = easyquotation.use('sina')
try:
# 获取贵州茅台(600519)的实时行情
# 注意:A股代码需要区分沪市(6开头)和深市(0或3开头)
stock_data = quotation.real('600519')
# 打印获取到的数据
print("股票代码:", stock_data['600519']['code'])
print("当前价格:", stock_data['600519']['now'])
print("今日开盘价:", stock_data['600519']['open'])
print("昨日收盘价:", stock_data['600519']['close'])
print("涨跌幅:", stock_data['600519']['涨跌'])
except Exception as e:
print(f"获取数据失败: {str(e)}")
# 可以在这里添加重试逻辑或其他错误处理
if __name__ == "__main__":
get_single_stock_data()
运行这段代码,你将获得类似以下的输出:
股票代码: 600519
当前价格: 1780.00
今日开盘价: 1770.00
昨日收盘价: 1765.00
涨跌幅: +15.00
3. 批量获取多只股票数据
在实际应用中,我们通常需要同时监控多只股票:
import easyquotation
import time
def get_multiple_stocks():
# 选择腾讯数据源(有时速度更快)
quotation = easyquotation.use('tencent')
# 定义要监控的股票列表
# 格式: 股票代码列表,沪市股票需添加sh前缀,深市添加sz前缀
stock_codes = ['sh600519', 'sz000858', 'sh601318']
try:
# 获取多只股票数据
stocks_data = quotation.real(stock_codes)
# 遍历结果并打印关键信息
for code, data in stocks_data.items():
print(f"股票代码: {code}")
print(f"名称: {data['name']}")
print(f"当前价格: {data['now']}")
print(f"涨跌幅: {data['changepercent']}%")
print("-----")
except Exception as e:
print(f"获取数据失败: {str(e)}")
if __name__ == "__main__":
# 循环获取数据,每5秒更新一次
while True:
get_multiple_stocks()
print("等待下一次更新...\n")
time.sleep(5) # 5秒刷新一次
4. 全市场行情快照获取
对于需要了解整体市场情况的场景,可以使用市场快照功能:
import easyquotation
import json
def get_market_snapshot():
quotation = easyquotation.use('sina')
try:
# 获取全市场行情快照
# prefix=True表示返回的股票代码包含市场前缀(如sh, sz)
all_stocks = quotation.market_snapshot(prefix=True)
print(f"获取到 {len(all_stocks)} 只股票数据")
# 保存数据到JSON文件,便于后续分析
with open('market_snapshot.json', 'w', encoding='utf-8') as f:
json.dump(all_stocks, f, ensure_ascii=False, indent=2)
print("数据已保存到market_snapshot.json")
# 简单统计:上涨和下跌股票数量
up_count = 0
down_count = 0
for code, data in all_stocks.items():
# 不同数据源的涨跌字段名称可能不同,这里需要注意
if data.get('涨跌', 0) > 0:
up_count += 1
elif data.get('涨跌', 0) < 0:
down_count += 1
print(f"上涨股票: {up_count} 只")
print(f"下跌股票: {down_count} 只")
print(f"平盘股票: {len(all_stocks) - up_count - down_count} 只")
except Exception as e:
print(f"获取市场快照失败: {str(e)}")
if __name__ == "__main__":
get_market_snapshot()
5. 港股行情获取
easyquotation也支持港股数据获取,这对于跨市场投资的用户特别有用:
import easyquotation
def get_hongkong_stocks():
# 使用港股数据源
hk_quotation = easyquotation.use('hkquote')
try:
# 获取港股数据,代码不需要前缀
hk_stocks = hk_quotation.real(['00001', '00700', '03888'])
for code, data in hk_stocks.items():
print(f"港股代码: {code}")
print(f"名称: {data['name']}")
print(f"当前价格: {data['price']}")
print(f"涨跌幅: {data['change']} ({data['change_percent']}%)")
print(f"成交量(万): {data['volume']}")
print("-----")
except Exception as e:
print(f"获取港股数据失败: {str(e)}")
if __name__ == "__main__":
get_hongkong_stocks()
数据源对比:如何选择最适合你的数据来源?
easyquotation支持多种数据源,各有特点,选择时需要根据实际需求权衡:
1. 新浪财经(sina)
- 优势:A股数据全面,包含更多技术指标
- 劣势:获取全市场数据时响应速度较慢
- 适用场景:需要详细技术指标的A股分析
- 数据更新频率:约3-5秒
2. 腾讯财经(tencent)
- 优势:响应速度快,全市场数据获取效率高
- 劣势:部分技术指标缺失
- 适用场景:需要快速更新的实时监控系统
- 数据更新频率:约2-3秒
3. 集思路(jsl)
- 优势:提供分级基金、可转债等特色数据
- 劣势:需要配置Cookie才能获取完整数据
- 适用场景:专门的基金投资分析
- 数据更新频率:约10-15秒
4. 港股(hkquote)
- 优势:专注港股市场,数据准确
- 劣势:仅支持港股,覆盖范围有限
- 适用场景:港股投资监控
- 数据更新频率:约5-8秒
选择建议:日常A股监控优先使用腾讯数据源,需要详细指标时切换到新浪数据源,港股投资单独使用hkquote,基金分析使用jsl数据源。
数据清洗与异常处理:提升数据质量的关键步骤
获取原始数据后,需要进行清洗和异常处理才能用于实际分析或交易。以下是一些常见问题及解决方案:
1. 缺失值处理
def clean_missing_values(data):
"""处理数据中的缺失值"""
cleaned_data = {}
for code, stock_info in data.items():
# 创建深拷贝避免修改原数据
cleaned_stock = stock_info.copy()
# 对关键字段进行缺失值填充
if cleaned_stock.get('now') is None:
# 使用昨日收盘价填充当前价格缺失
cleaned_stock['now'] = cleaned_stock.get('close', 0)
cleaned_stock['missing_flag'] = True # 标记缺失数据
else:
cleaned_stock['missing_flag'] = False
cleaned_data[code] = cleaned_stock
return cleaned_data
2. 异常值检测与处理
def detect_outliers(data, threshold=3):
"""使用Z-score方法检测异常值"""
import numpy as np
# 提取所有股票的当前价格
prices = [float(stock['now']) for stock in data.values() if stock['now'] != 0]
if not prices:
return {}
mean_price = np.mean(prices)
std_price = np.std(prices)
outliers = {}
for code, stock_info in data.items():
price = float(stock_info['now'])
if price == 0:
continue
# 计算Z-score
z_score = abs((price - mean_price) / std_price)
if z_score > threshold:
outliers[code] = {
'price': price,
'z_score': z_score,
'mean': mean_price,
'std': std_price
}
return outliers
3. 数据格式标准化
不同数据源返回的数据格式可能不同,需要统一格式:
def standardize_data_format(data, source):
"""将不同数据源的数据格式标准化"""
standardized = {}
for code, stock in data.items():
# 统一字段名称和格式
std_stock = {
'code': code,
'name': stock.get('name', ''),
'price': float(stock.get('now', 0) or stock.get('price', 0)),
'open': float(stock.get('open', 0)),
'close': float(stock.get('close', 0)),
'high': float(stock.get('high', 0)),
'low': float(stock.get('low', 0)),
'volume': int(stock.get('volume', 0) or stock.get('vol', 0)),
'amount': float(stock.get('amount', 0)),
'change': float(stock.get('change', 0) or stock.get('涨跌', 0)),
'change_percent': float(stock.get('changepercent', 0) or stock.get('涨跌幅', 0)),
'source': source,
'timestamp': time.time()
}
standardized[code] = std_stock
return standardized
性能优化:提升数据获取效率的5个技巧
当需要处理大量股票数据或高频获取时,性能优化变得尤为重要:
1. 连接池复用
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
def create_session_with_pool():
"""创建带有连接池和重试机制的requests会话"""
session = requests.Session()
# 设置重试策略
retry_strategy = Retry(
total=3,
backoff_factor=0.5,
status_forcelist=[429, 500, 502, 503, 504]
)
# 设置连接池
adapter = HTTPAdapter(
max_retries=retry_strategy,
pool_connections=10, # 连接池数量
pool_maxsize=100 # 每个连接的最大请求数
)
session.mount("http://", adapter)
session.mount("https://", adapter)
return session
# 在easyquotation中使用自定义会话
quotation = easyquotation.use('tencent')
quotation.session = create_session_with_pool()
2. 批量请求优化
def optimized_batch_request(codes, batch_size=50):
"""分批次获取股票数据,避免单次请求过大"""
quotation = easyquotation.use('tencent')
all_data = {}
# 将股票代码分成多个批次
for i in range(0, len(codes), batch_size):
batch = codes[i:i+batch_size]
try:
data = quotation.real(batch)
all_data.update(data)
# 添加适当延迟,避免被服务器限制
time.sleep(0.1)
except Exception as e:
print(f"批量请求失败: {str(e)}")
# 可以在这里添加重试逻辑
return all_data
3. 本地缓存策略
import json
import os
from datetime import datetime, timedelta
def get_cached_data(cache_file, max_age_minutes=5):
"""获取缓存数据,如果缓存未过期"""
if not os.path.exists(cache_file):
return None
# 检查缓存文件年龄
file_mtime = datetime.fromtimestamp(os.path.getmtime(cache_file))
if datetime.now() - file_mtime > timedelta(minutes=max_age_minutes):
return None
# 读取缓存数据
with open(cache_file, 'r', encoding='utf-8') as f:
return json.load(f)
def save_data_cache(data, cache_file):
"""保存数据到缓存文件"""
with open(cache_file, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False)
# 使用缓存的示例
def get_stocks_with_cache(codes):
cache_file = 'stock_cache.json'
# 尝试获取缓存数据
cached_data = get_cached_data(cache_file)
if cached_data:
return cached_data
# 缓存失效,重新获取数据
data = optimized_batch_request(codes)
# 保存到缓存
save_data_cache(data, cache_file)
return data
4. 多线程并发获取
from concurrent.futures import ThreadPoolExecutor, as_completed
def concurrent_data_fetch(codes, max_workers=5):
"""使用多线程并发获取数据"""
quotation = easyquotation.use('tencent')
results = {}
# 将股票代码分成多个组,每组由一个线程处理
code_groups = [codes[i::max_workers] for i in range(max_workers)]
def fetch_group(group):
try:
return quotation.real(group)
except Exception as e:
print(f"线程获取数据失败: {str(e)}")
return {}
# 使用线程池执行
with ThreadPoolExecutor(max_workers=max_workers) as executor:
# 提交所有任务
futures = [executor.submit(fetch_group, group) for group in code_groups]
# 收集结果
for future in as_completed(futures):
results.update(future.result())
return results
5. 选择性字段获取
如果只需要部分字段,可以减少数据传输量:
def get_minimal_stock_data(codes):
"""只获取必要的股票字段,减少数据传输量"""
quotation = easyquotation.use('tencent')
try:
full_data = quotation.real(codes)
# 只保留需要的字段
minimal_data = {}
for code, data in full_data.items():
minimal_data[code] = {
'code': code,
'name': data.get('name', ''),
'price': data.get('now', 0),
'change_percent': data.get('changepercent', 0)
}
return minimal_data
except Exception as e:
print(f"获取精简数据失败: {str(e)}")
return {}
问题诊断:常见错误及解决方案
在使用easyquotation过程中,可能会遇到各种问题,以下是常见错误及解决方法:
1. 网络连接问题
错误表现:ConnectionError或长时间无响应
可能原因:网络不稳定、防火墙限制、数据源服务器暂时不可用
解决方案:
- 检查网络连接状态
- 添加重试机制
- 切换到其他数据源
- 设置合理的超时时间
# 添加超时和重试机制的示例
def safe_get_data(codes, max_retries=3, timeout=10):
quotation = easyquotation.use('tencent')
quotation.session = create_session_with_pool() # 使用前面定义的连接池
for attempt in range(max_retries):
try:
return quotation.real(codes, timeout=timeout)
except Exception as e:
print(f"尝试 {attempt+1}/{max_retries} 失败: {str(e)}")
if attempt < max_retries - 1:
time.sleep(1) # 等待1秒后重试
# 所有重试都失败,返回空数据或使用缓存
print("所有重试都失败,使用缓存数据")
return get_cached_data('stock_cache.json')
2. 股票代码格式错误
错误表现:返回空数据或错误代码
可能原因:股票代码格式不正确,特别是市场前缀问题
解决方案:
- 明确区分沪市(sh)和深市(sz)股票
- 使用统一的代码格式验证
def validate_stock_codes(codes):
"""验证股票代码格式"""
valid_codes = []
for code in codes:
code = str(code).strip()
# 检查是否已经包含市场前缀
if code.startswith(('sh', 'sz', 'hk')):
valid_codes.append(code)
else:
# 尝试自动识别市场
if len(code) == 6:
if code.startswith(('60', '90')):
valid_codes.append(f'sh{code}')
elif code.startswith(('00', '30')):
valid_codes.append(f'sz{code}')
else:
print(f"无法识别的股票代码: {code}")
else:
print(f"无效的股票代码格式: {code}")
return valid_codes
3. 数据源变更
错误表现:突然无法获取数据或数据格式异常
可能原因:数据源网站结构变更
解决方案:
- 更新easyquotation到最新版本
- 尝试切换其他数据源
- 查看项目GitHub issues了解是否有已知问题
# 更新easyquotation
pip install --upgrade easyquotation
进阶探索:构建迷你量化分析系统
现在,让我们将前面学到的知识整合起来,构建一个完整的迷你量化分析系统,包括数据获取、处理、分析和可视化:
import easyquotation
import time
import json
import matplotlib.pyplot as plt
from datetime import datetime
import os
class MiniQuantSystem:
def __init__(self, data_source='tencent', cache_dir='data_cache'):
"""初始化量化系统"""
self.quotation = easyquotation.use(data_source)
self.cache_dir = cache_dir
self.create_cache_dir()
# 初始化连接池
self.setup_session()
def create_cache_dir(self):
"""创建缓存目录"""
if not os.path.exists(self.cache_dir):
os.makedirs(self.cache_dir)
def setup_session(self):
"""设置带有连接池的会话"""
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
session = requests.Session()
retry_strategy = Retry(
total=3,
backoff_factor=0.5,
status_forcelist=[429, 500, 502, 503, 504]
)
adapter = HTTPAdapter(
max_retries=retry_strategy,
pool_connections=10,
pool_maxsize=100
)
session.mount("http://", adapter)
session.mount("https://", adapter)
self.quotation.session = session
def get_stock_data(self, codes, use_cache=True, max_cache_age=5):
"""获取股票数据,支持缓存"""
# 验证代码格式
valid_codes = self.validate_stock_codes(codes)
if not valid_codes:
print("没有有效的股票代码")
return {}
# 生成缓存文件名
cache_key = "_".join(sorted(valid_codes))
cache_file = os.path.join(self.cache_dir, f"{cache_key}.json")
# 尝试使用缓存
if use_cache:
cached_data = self.get_cached_data(cache_file, max_cache_age)
if cached_data:
return cached_data
# 获取新数据
data = self.quotation.real(valid_codes)
# 标准化数据格式
standardized_data = self.standardize_data(data)
# 保存到缓存
self.save_cache_data(standardized_data, cache_file)
return standardized_data
def validate_stock_codes(self, codes):
"""验证股票代码格式"""
valid_codes = []
for code in codes:
code = str(code).strip()
if code.startswith(('sh', 'sz', 'hk')):
valid_codes.append(code)
else:
if len(code) == 6:
if code.startswith(('60', '90')):
valid_codes.append(f'sh{code}')
elif code.startswith(('00', '30')):
valid_codes.append(f'sz{code}')
else:
print(f"跳过无效代码: {code}")
return valid_codes
def standardize_data(self, data):
"""标准化数据格式"""
standardized = {}
for code, stock in data.items():
standardized[code] = {
'code': code,
'name': stock.get('name', ''),
'price': float(stock.get('now', 0) or stock.get('price', 0)),
'open': float(stock.get('open', 0)),
'close': float(stock.get('close', 0)),
'high': float(stock.get('high', 0)),
'low': float(stock.get('low', 0)),
'volume': int(stock.get('volume', 0) or stock.get('vol', 0)),
'change': float(stock.get('change', 0) or stock.get('涨跌', 0)),
'change_percent': float(stock.get('changepercent', 0) or stock.get('涨跌幅', 0)),
'timestamp': time.time()
}
return standardized
def get_cached_data(self, cache_file, max_age_minutes):
"""获取缓存数据"""
if not os.path.exists(cache_file):
return None
file_mtime = datetime.fromtimestamp(os.path.getmtime(cache_file))
if datetime.now() - file_mtime > timedelta(minutes=max_age_minutes):
return None
try:
with open(cache_file, 'r', encoding='utf-8') as f:
return json.load(f)
except:
return None
def save_cache_data(self, data, cache_file):
"""保存数据到缓存"""
try:
with open(cache_file, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False)
except Exception as e:
print(f"保存缓存失败: {str(e)}")
def analyze_data(self, data):
"""简单数据分析"""
if not data:
return {}
analysis = {
'total_stocks': len(data),
'avg_price': sum(stock['price'] for stock in data.values()) / len(data),
'max_price': max(stock['price'] for stock in data.values()),
'min_price': min(stock['price'] for stock in data.values()),
'up_count': sum(1 for stock in data.values() if stock['change'] > 0),
'down_count': sum(1 for stock in data.values() if stock['change'] < 0),
'flat_count': sum(1 for stock in data.values() if stock['change'] == 0)
}
# 计算涨跌幅分布
change_distribution = {
'>5%': sum(1 for stock in data.values() if abs(stock['change_percent']) > 5),
'2-5%': sum(1 for stock in data.values() if 2 < abs(stock['change_percent']) <= 5),
'<=2%': sum(1 for stock in data.values() if abs(stock['change_percent']) <= 2)
}
analysis['change_distribution'] = change_distribution
return analysis
def visualize_data(self, data, analysis, output_file='market_analysis.png'):
"""数据可视化"""
# 创建图形
fig, axes = plt.subplots(2, 1, figsize=(12, 10))
# 第一个子图:涨跌分布饼图
ax1 = axes[0]
labels = ['上涨', '下跌', '平盘']
sizes = [analysis['up_count'], analysis['down_count'], analysis['flat_count']]
colors = ['#4CAF50', '#F44336', '#9E9E9E']
ax1.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)
ax1.set_title('股票涨跌分布')
# 第二个子图:涨跌幅区间柱状图
ax2 = axes[1]
categories = list(analysis['change_distribution'].keys())
values = list(analysis['change_distribution'].values())
ax2.bar(categories, values, color=['#FF5722', '#FFC107', '#2196F3'])
ax2.set_title('涨跌幅区间分布')
ax2.set_ylabel('股票数量')
# 调整布局并保存
plt.tight_layout()
plt.savefig(output_file, dpi=300)
print(f"分析图表已保存到 {output_file}")
plt.close()
def run_analysis(self, codes, output_file='market_analysis.png'):
"""运行完整分析流程"""
print("开始获取股票数据...")
data = self.get_stock_data(codes)
if not data:
print("无法获取数据,分析终止")
return
print("开始数据分析...")
analysis = self.analyze_data(data)
print("市场概览:")
print(f"股票总数: {analysis['total_stocks']}")
print(f"平均价格: {analysis['avg_price']:.2f}")
print(f"最高价格: {analysis['max_price']:.2f}")
print(f"最低价格: {analysis['min_price']:.2f}")
print(f"上涨股票: {analysis['up_count']} ({analysis['up_count']/analysis['total_stocks']*100:.1f}%)")
print(f"下跌股票: {analysis['down_count']} ({analysis['down_count']/analysis['total_stocks']*100:.1f}%)")
print("生成分析图表...")
self.visualize_data(data, analysis, output_file)
return data, analysis
# 使用示例
if __name__ == "__main__":
# 创建量化系统实例
quant_system = MiniQuantSystem(data_source='tencent')
# 定义要分析的股票池(可以是行业龙头股)
stock_codes = [
'600519', '601318', '600036', '000858', '000333',
'600031', '601899', '600000', '601668', '601328'
]
# 运行分析
data, analysis = quant_system.run_analysis(stock_codes)
这个迷你量化分析系统整合了数据获取、缓存、清洗、分析和可视化等功能,你可以基于这个框架进一步扩展,添加更复杂的分析指标或交易策略。
总结与展望
通过本文的学习,你已经掌握了使用easyquotation构建量化数据获取系统的核心技能,包括:
- 环境搭建与基础使用方法
- 多数据源的选择与对比
- 数据清洗与异常处理技巧
- 性能优化方法
- 常见问题诊断与解决
- 完整迷你量化系统的构建
easyquotation作为一个轻量级工具,虽然不能替代专业的商业数据服务,但为量化交易入门者提供了一个低门槛的实践平台。随着你的量化交易技能不断提升,你可以考虑将easyquotation作为数据获取的辅助手段,与其他数据源结合使用,构建更 robust 的量化系统。
未来,你可以进一步探索以下方向:
- 结合pandas进行更深入的数据分析
- 集成技术指标计算库(如TA-Lib)
- 构建实时数据可视化仪表盘
- 开发基于easyquotation的自动交易策略
希望本文能帮助你快速入门量化数据获取,为你的量化交易之旅打下坚实基础!
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0209- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
MarkFlowy一款 AI Markdown 编辑器TSX01