Appearance
构建工具
在智能体(agent)系统中,工具的设计与使用具有重要的作用。工具(如API、数据库、爬虫等)为大模型提供了与外界交互的接口,使其能够执行复杂任务或获取实时信息,而不仅仅依赖语言模型的知识。因此,工具的合理构建和使用能够显著增强智能体的实用性与精确性。
为了让大模型更容易理解和使用工具,工具的设计应遵循以下规范性原则:
功能明确性
每个工具的功能应具有单一性,避免复杂混合功能。清晰的功能描述和输入/输出参数能够帮助大模型快速理解工具的作用并有效调用。
接口标准化
工具的接口应遵循统一的标准(如RESTful API规范),包括使用一致的命名规则、数据格式和错误处理机制,以便于大模型解析和调用。
输入输出的简洁性
工具的输入参数应尽量简洁明确,避免冗余信息,同时输出结果应具有结构化格式(如JSON),方便模型解析和处理。
可扩展性与文档化
每个工具的设计都应支持扩展,允许未来根据需求增添新功能。同时,详细的文档和示例能够帮助大模型更好地理解工具的使用场景和限制。
容错性设计
工具的使用过程中可能会发生异常或错误,容错设计应包括详细的错误反馈信息,以帮助大模型识别问题并采取相应措施。
构建规范
要求
使用Swagger 3在代码中进行Rest接口描述
- Java 使用
Springdoc - Python 使用
flask_restx或 基于Pydantic的注解
示例 (以Java示例)
工具入口 ToolsController
此controller作为所有LLM工具入口,用于根据业务需求进行接口整合并发布为工具。
注意,其中 description 、operationId等描述需符合自然语言理解。
入参要求
- 禁止使用数组或集合等复杂结构数据格式,比如
javascript
// bad, stockCodes 是数组的方式入参,agent在调用工具时传入值格式错误率很高
{
stockCodes: ["000001", "000002"]
}
// good, stockCodes 以字符串且逗号分隔的方式入参,agent在参数传递时正确率高。
{
stockCodes: "000001,000002"
}// bad, stockCodes 是数组的方式入参,agent在调用工具时传入值格式错误率很高
{
stockCodes: ["000001", "000002"]
}
// good, stockCodes 以字符串且逗号分隔的方式入参,agent在参数传递时正确率高。
{
stockCodes: "000001,000002"
}示例
java
@Tag(name = "ToolsController", description = "工具")
@RestController
@RequestMapping(value = "/tools")
public class ToolsController {
@Resource
QuoteV2Controller quoteV2Controller;
@Resource
StockData stockData;
@Parameters({
@Parameter(name = "stockCodes", description = "股票代码,多个代码以英文逗号隔开。", in = ParameterIn.QUERY)
})
@Operation(operationId = "listStockRealQuote", description = "获取指定股票代码的最新开盘价、最高价、最低价、收盘价和交易量等信息。")
@GetMapping("/real-quote/stock")
public Map<String, StockRealQuoteTool> getStockRealQuote(String stockCodes){
if(BeanUtils.isEmpty(stockCodes)){
return null;
}
// 参数转换
List<String> codes = Arrays.asList(stockCodes.split(","));
StockCodeParams stockCodeParams = new StockCodeParams();
stockCodeParams.setStockCodes(codes);
int page = 1;
int pageSize = 9999;
String sortColumn = "stockCode";
String sortOrder = "asc";
// 实时行情
List<StockRealQuote> realQuotes = quoteV2Controller.listStockRealQuotesFromCache(stockCodeParams);
Map<String, StockRealQuote> realQuoteMap = realQuotes.stream()
.collect(Collectors.toMap(StockRealQuote::getStockCode, o -> o));
// 扩展行情
List<StockRealQuoteExtRest> realQuoteExt = quoteV2Controller.listStockRealQuoteExt(stockCodeParams,
sortColumn, sortOrder, null, page, pageSize).getData();
Map<String, StockRealQuoteExtRest> realQuoteExtMap = realQuoteExt.stream()
.collect(Collectors.toMap(StockRealQuoteExtRest::getStockCode, o -> o));
// 扩展价格行情
List<StockQuotePriceExtRest> realQuotePriceExt = quoteV2Controller.listStockQuotePriceExtAtRest(stockCodeParams,
sortColumn, sortOrder, page, pageSize).getData();
Map<String, StockQuotePriceExtRest> realQuotePriceExtMap = realQuotePriceExt.stream()
.collect(Collectors.toMap(StockQuotePriceExtRest::getStockCode, o -> o));
// 涨停信息
List<StockQuoteKeepLimitRest> keepLimit = quoteV2Controller.listKeepLimitAtRest(stockCodeParams,
sortColumn, sortOrder, page, pageSize).getData();
Map<String, StockQuoteKeepLimitRest> keepLimitMap = keepLimit.stream()
.collect(Collectors.toMap(StockQuoteKeepLimitRest::getStockCode, o -> o));
Map<String, StockRealQuoteTool> result = new HashMap<>(0);
for (String code : stockCodeParams.getStockCodes()){
StockRealQuoteTool stockRealQuoteTool = new StockRealQuoteTool();
stockRealQuoteTool.setStockCode(code);
stockRealQuoteTool.setStockName(stockData.getStockNameFromCache(code));
stockRealQuoteTool.setStockRealQuote(realQuoteMap.get(code));
stockRealQuoteTool.setStockRealQuoteExt(realQuoteExtMap.get(code));
stockRealQuoteTool.setStockRealQuotePriceExt(realQuotePriceExtMap.get(code));
stockRealQuoteTool.setStockRealQuoteKeepLimit(keepLimitMap.get(code));
result.put(code, stockRealQuoteTool);
}
return result;
}
}@Tag(name = "ToolsController", description = "工具")
@RestController
@RequestMapping(value = "/tools")
public class ToolsController {
@Resource
QuoteV2Controller quoteV2Controller;
@Resource
StockData stockData;
@Parameters({
@Parameter(name = "stockCodes", description = "股票代码,多个代码以英文逗号隔开。", in = ParameterIn.QUERY)
})
@Operation(operationId = "listStockRealQuote", description = "获取指定股票代码的最新开盘价、最高价、最低价、收盘价和交易量等信息。")
@GetMapping("/real-quote/stock")
public Map<String, StockRealQuoteTool> getStockRealQuote(String stockCodes){
if(BeanUtils.isEmpty(stockCodes)){
return null;
}
// 参数转换
List<String> codes = Arrays.asList(stockCodes.split(","));
StockCodeParams stockCodeParams = new StockCodeParams();
stockCodeParams.setStockCodes(codes);
int page = 1;
int pageSize = 9999;
String sortColumn = "stockCode";
String sortOrder = "asc";
// 实时行情
List<StockRealQuote> realQuotes = quoteV2Controller.listStockRealQuotesFromCache(stockCodeParams);
Map<String, StockRealQuote> realQuoteMap = realQuotes.stream()
.collect(Collectors.toMap(StockRealQuote::getStockCode, o -> o));
// 扩展行情
List<StockRealQuoteExtRest> realQuoteExt = quoteV2Controller.listStockRealQuoteExt(stockCodeParams,
sortColumn, sortOrder, null, page, pageSize).getData();
Map<String, StockRealQuoteExtRest> realQuoteExtMap = realQuoteExt.stream()
.collect(Collectors.toMap(StockRealQuoteExtRest::getStockCode, o -> o));
// 扩展价格行情
List<StockQuotePriceExtRest> realQuotePriceExt = quoteV2Controller.listStockQuotePriceExtAtRest(stockCodeParams,
sortColumn, sortOrder, page, pageSize).getData();
Map<String, StockQuotePriceExtRest> realQuotePriceExtMap = realQuotePriceExt.stream()
.collect(Collectors.toMap(StockQuotePriceExtRest::getStockCode, o -> o));
// 涨停信息
List<StockQuoteKeepLimitRest> keepLimit = quoteV2Controller.listKeepLimitAtRest(stockCodeParams,
sortColumn, sortOrder, page, pageSize).getData();
Map<String, StockQuoteKeepLimitRest> keepLimitMap = keepLimit.stream()
.collect(Collectors.toMap(StockQuoteKeepLimitRest::getStockCode, o -> o));
Map<String, StockRealQuoteTool> result = new HashMap<>(0);
for (String code : stockCodeParams.getStockCodes()){
StockRealQuoteTool stockRealQuoteTool = new StockRealQuoteTool();
stockRealQuoteTool.setStockCode(code);
stockRealQuoteTool.setStockName(stockData.getStockNameFromCache(code));
stockRealQuoteTool.setStockRealQuote(realQuoteMap.get(code));
stockRealQuoteTool.setStockRealQuoteExt(realQuoteExtMap.get(code));
stockRealQuoteTool.setStockRealQuotePriceExt(realQuotePriceExtMap.get(code));
stockRealQuoteTool.setStockRealQuoteKeepLimit(keepLimitMap.get(code));
result.put(code, stockRealQuoteTool);
}
return result;
}
}实体类
在描述实体类时,需明确的对该实体类及实体类的属性含义做描述,包含但不限于 周期、单位、范围等
java
/**
* @author kenneth
* @date 2024/10/9
**/
@Schema(description = "股票行情信息(工具)")
@Data
public class StockRealQuoteTool {
@Schema(description = "股票代码")
private String stockCode;
@Schema(description = "股票名称")
private String stockName;
@Schema(description = "基本实时行情信息")
private StockRealQuote stockRealQuote;
@Schema(description = "扩展实时行情信息")
private StockRealQuoteExtRest stockRealQuoteExt;
@Schema(description = "扩展实时行情价格信息")
private StockQuotePriceExtRest stockRealQuotePriceExt;
@Schema(description = "扩展实时行情涨停信息")
private StockQuoteKeepLimitRest stockRealQuoteKeepLimit;
}
/**
* @author kenneth
* @date 2024/9/18
**/
@ApiModel(value = "StockCodeParams", description = "股票代码")
@Data
public class StockCodeParams {
@ApiModelProperty("股票代码")
@Schema(description = "股票代码(单股票示例:['000001'],多股票示例: ['600839','000002'])")
private List<String> stockCodes;
}/**
* @author kenneth
* @date 2024/10/9
**/
@Schema(description = "股票行情信息(工具)")
@Data
public class StockRealQuoteTool {
@Schema(description = "股票代码")
private String stockCode;
@Schema(description = "股票名称")
private String stockName;
@Schema(description = "基本实时行情信息")
private StockRealQuote stockRealQuote;
@Schema(description = "扩展实时行情信息")
private StockRealQuoteExtRest stockRealQuoteExt;
@Schema(description = "扩展实时行情价格信息")
private StockQuotePriceExtRest stockRealQuotePriceExt;
@Schema(description = "扩展实时行情涨停信息")
private StockQuoteKeepLimitRest stockRealQuoteKeepLimit;
}
/**
* @author kenneth
* @date 2024/9/18
**/
@ApiModel(value = "StockCodeParams", description = "股票代码")
@Data
public class StockCodeParams {
@ApiModelProperty("股票代码")
@Schema(description = "股票代码(单股票示例:['000001'],多股票示例: ['600839','000002'])")
private List<String> stockCodes;
}工具导出和管理
通过Swagger的描述语言 OpenAPI
通过apifox导出 ToolsController下的swagger描述,并上传至工具git仓库。
注意:
目录结构: 分类/服务名/工具名.json,如:
| - stock
|---- common-services
|------ 股票实时行情.json
保存的文件名为 {title}.json,比如
股票实时行情.jsonopenapi描述中的
info.title和info.description必须符合自然语言的逻辑配置。这两个值用于dify、coze等平台配置的工具名称,所有平台需保持一致。
描述示例如下:
json
{
"openapi": "3.0.1",
"info": {
"title": "股票实时行情",
"description": "获取指定股票代码的最新开盘价、最高价、最低价、收盘价和交易量等信息。",
"version": "1.0.0"
},
"tags": [
{
"name": "springdoc"
},
{
"name": "springdoc/ToolsController"
},
{
"name": "ToolsController"
}
],
"paths": {
"/common/tools/real-quote/stock": {
"get": {
"summary": "listStockRealQuote",
"deprecated": false,
"description": "获取股票实时行情数据",
"operationId": "listStockRealQuote",
"tags": [
"springdoc/ToolsController",
"ToolsController"
],
"parameters": [
{
"name": "stockCodes",
"in": "query",
"description": "股票代码,多个代码以英文逗号隔开。",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": {
"$ref": "#/components/schemas/StockRealQuoteTool"
},
"properties": {}
}
}
},
"headers": {}
},
"400": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": {
"type": "object"
},
"properties": {}
}
}
},
"headers": {}
},
"451": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": {
"type": "object"
},
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
}
},
"components": {
"schemas": {
"StockQuoteKeepLimitRest": {
"type": "object",
"properties": {
"stockCode": {
"type": "string",
"description": "股票代码"
},
"keepLimitUpAmount": {
"type": "integer",
"description": "今日连续涨停次数",
"format": "int32"
},
"limitUpTime": {
"type": "string",
"description": "今日涨停时间",
"format": "date-time"
},
"preKeepLimitUpAmount": {
"type": "integer",
"description": "昨日连续涨停次数",
"format": "int32"
},
"prePubDate": {
"type": "string",
"description": "昨日发布日期",
"format": "date-time"
},
"stockName": {
"type": "string",
"description": "股票名称"
},
"price": {
"type": "number",
"description": "价格",
"format": "double"
},
"industryCode": {
"type": "string",
"description": "行业代码"
},
"industryName": {
"type": "string",
"description": "行业名称"
}
},
"description": "股票涨跌停信息"
},
"StockRealQuote": {
"type": "object",
"properties": {
"stockCode": {
"type": "string",
"description": "股票代码"
},
"stockName": {
"type": "string",
"description": "股票名称"
},
"marketType": {
"type": "string",
"description": "市场类型"
},
"openPrice": {
"type": "number",
"description": "开盘价",
"format": "double"
},
"closePriceYDay": {
"type": "number",
"description": "昨收价",
"format": "double"
},
"currentPrice": {
"type": "number",
"description": "最新价",
"format": "double"
},
"changeRatio": {
"type": "number",
"description": "涨跌幅",
"format": "double"
},
"highPrice": {
"type": "number",
"description": "最高价",
"format": "double"
},
"lowPrice": {
"type": "number",
"description": "最低价",
"format": "double"
},
"dataTime": {
"type": "string",
"description": "数据时间",
"format": "date-time"
},
"sysTime": {
"type": "string",
"description": "系统时间",
"format": "date-time"
},
"status": {
"type": "string",
"description": "状态"
}
},
"description": "实时行情"
},
"StockRealQuoteTool": {
"type": "object",
"properties": {
"stockCode": {
"type": "string",
"description": "股票代码"
},
"stockName": {
"type": "string",
"description": "股票名称"
},
"stockRealQuote": {
"$ref": "#/components/schemas/StockRealQuote"
},
"stockRealQuoteExt": {
"type": "object",
"properties": {}
},
"stockRealQuotePriceExt": {
"type": "object",
"properties": {}
},
"stockRealQuoteKeepLimit": {
"$ref": "#/components/schemas/StockQuoteKeepLimitRest"
}
},
"description": "股票行情信息(工具)"
},
"StockQuotePriceExtRest": {
"type": "object",
"properties": {
"stockCode": {
"type": "string",
"description": "股票代码"
},
"price": {
"type": "number",
"description": "股价",
"format": "double"
},
"changeRatio": {
"type": "number",
"description": "涨跌幅",
"format": "double"
},
"prePrice": {
"type": "number",
"description": "昨收价",
"format": "double"
},
"dateB4D": {
"type": "string",
"description": "近4D日期",
"format": "date-time"
},
"priceB4D": {
"type": "number",
"description": "近4D价格",
"format": "double"
},
"changeRatioB1W": {
"type": "number",
"description": "近1周涨跌幅",
"format": "double"
},
"dateB9D": {
"type": "string",
"description": "近9D日期",
"format": "date-time"
},
"priceB9D": {
"type": "number",
"description": "近9D日价格",
"format": "double"
},
"changeRatioB10D": {
"type": "number",
"description": "近10日涨跌幅",
"format": "double"
},
"dateB29D": {
"type": "string",
"description": "近29D日期",
"format": "date-time"
},
"priceB29D": {
"type": "number",
"description": "近29D价格",
"format": "double"
},
"changeRatioB1M": {
"type": "number",
"description": "近1月涨跌幅",
"format": "double"
},
"highPriceDate60D": {
"type": "string",
"description": "创新高日期(60D)",
"format": "date-time"
},
"highPrice60D": {
"type": "number",
"description": "创新高价格(60D)",
"format": "double"
},
"highVolumeDate60D": {
"type": "string",
"description": "成交量新高日期(60D)",
"format": "date-time"
},
"highVolume60D": {
"type": "number",
"description": "成交量新高(60D)",
"format": "double"
},
"highTurnoverDate60D": {
"type": "string",
"description": "成交额新高(60D)",
"format": "date-time"
},
"highTurnover60D": {
"type": "number",
"description": "成交额新高(60D)",
"format": "double"
},
"stockName": {
"type": "string",
"description": "股票名称"
}
},
"description": "股票行情价格信息"
},
"StockRealQuoteExtRest": {
"type": "object",
"properties": {
"stockCode": {
"type": "string",
"description": "股票代码"
},
"stockName": {
"type": "string",
"description": "股票名称"
},
"marketType": {
"type": "string",
"description": "市场类型"
},
"openPrice": {
"type": "number",
"description": "开盘价",
"format": "double"
},
"closePriceYDay": {
"type": "number",
"description": "昨收价",
"format": "double"
},
"currentPrice": {
"type": "number",
"description": "最新价",
"format": "double"
},
"changeRatio": {
"type": "number",
"description": "涨跌幅",
"format": "double"
},
"highPrice": {
"type": "number",
"description": "最高价",
"format": "double"
},
"lowPrice": {
"type": "number",
"description": "最低价",
"format": "double"
},
"dataTime": {
"type": "string",
"description": "数据时间",
"format": "date-time"
},
"sysTime": {
"type": "string",
"description": "系统时间",
"format": "date-time"
},
"status": {
"type": "string",
"description": "状态"
},
"dealStockAmount": {
"type": "number",
"description": "成交股票数(单位:股)",
"format": "double"
},
"dealMoney": {
"type": "number",
"description": "成交金额(单位:元)",
"format": "double"
},
"limitUpTime": {
"type": "string",
"description": "涨停时间(Last)",
"format": "date-time"
},
"limitDownTime": {
"type": "string",
"description": "跌停时间(Last)",
"format": "date-time"
},
"limitUpPrice": {
"type": "number",
"description": "涨停价",
"format": "double"
},
"limitDownPrice": {
"type": "number",
"description": "跌停价",
"format": "double"
},
"industryCode": {
"type": "string",
"description": "行业代码(申万二级)"
},
"industryName": {
"type": "string",
"description": "行业名称(申万二级)"
},
"industryLV1Code": {
"type": "string",
"description": "行业代码(申万一级)"
},
"industryLV1Name": {
"type": "string",
"description": "行业名称(申万一级)"
},
"circulationValue": {
"type": "number",
"description": "流通市值(T-1日)",
"format": "double"
},
"totalValue": {
"type": "number",
"description": "总市值(T日)",
"format": "double"
}
},
"description": "股票行情扩展信息"
}
},
"securitySchemes": {}
},
"servers": [
{
"url": "https://aistock-retail.test.investoday.net",
"description": "测试环境"
},
{
"url": "https://ai.investoday.net",
"description": "正式环境(外网)"
},
{
"url": "http://10.9.1.27:9306",
"description": "正式环境(内网)(无API"
},
{
"url": "http://10.9.1.27:9306/api",
"description": "正式环境(内网)(有API)"
}
]
}{
"openapi": "3.0.1",
"info": {
"title": "股票实时行情",
"description": "获取指定股票代码的最新开盘价、最高价、最低价、收盘价和交易量等信息。",
"version": "1.0.0"
},
"tags": [
{
"name": "springdoc"
},
{
"name": "springdoc/ToolsController"
},
{
"name": "ToolsController"
}
],
"paths": {
"/common/tools/real-quote/stock": {
"get": {
"summary": "listStockRealQuote",
"deprecated": false,
"description": "获取股票实时行情数据",
"operationId": "listStockRealQuote",
"tags": [
"springdoc/ToolsController",
"ToolsController"
],
"parameters": [
{
"name": "stockCodes",
"in": "query",
"description": "股票代码,多个代码以英文逗号隔开。",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": {
"$ref": "#/components/schemas/StockRealQuoteTool"
},
"properties": {}
}
}
},
"headers": {}
},
"400": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": {
"type": "object"
},
"properties": {}
}
}
},
"headers": {}
},
"451": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "object",
"additionalProperties": {
"type": "object"
},
"properties": {}
}
}
},
"headers": {}
}
},
"security": []
}
}
},
"components": {
"schemas": {
"StockQuoteKeepLimitRest": {
"type": "object",
"properties": {
"stockCode": {
"type": "string",
"description": "股票代码"
},
"keepLimitUpAmount": {
"type": "integer",
"description": "今日连续涨停次数",
"format": "int32"
},
"limitUpTime": {
"type": "string",
"description": "今日涨停时间",
"format": "date-time"
},
"preKeepLimitUpAmount": {
"type": "integer",
"description": "昨日连续涨停次数",
"format": "int32"
},
"prePubDate": {
"type": "string",
"description": "昨日发布日期",
"format": "date-time"
},
"stockName": {
"type": "string",
"description": "股票名称"
},
"price": {
"type": "number",
"description": "价格",
"format": "double"
},
"industryCode": {
"type": "string",
"description": "行业代码"
},
"industryName": {
"type": "string",
"description": "行业名称"
}
},
"description": "股票涨跌停信息"
},
"StockRealQuote": {
"type": "object",
"properties": {
"stockCode": {
"type": "string",
"description": "股票代码"
},
"stockName": {
"type": "string",
"description": "股票名称"
},
"marketType": {
"type": "string",
"description": "市场类型"
},
"openPrice": {
"type": "number",
"description": "开盘价",
"format": "double"
},
"closePriceYDay": {
"type": "number",
"description": "昨收价",
"format": "double"
},
"currentPrice": {
"type": "number",
"description": "最新价",
"format": "double"
},
"changeRatio": {
"type": "number",
"description": "涨跌幅",
"format": "double"
},
"highPrice": {
"type": "number",
"description": "最高价",
"format": "double"
},
"lowPrice": {
"type": "number",
"description": "最低价",
"format": "double"
},
"dataTime": {
"type": "string",
"description": "数据时间",
"format": "date-time"
},
"sysTime": {
"type": "string",
"description": "系统时间",
"format": "date-time"
},
"status": {
"type": "string",
"description": "状态"
}
},
"description": "实时行情"
},
"StockRealQuoteTool": {
"type": "object",
"properties": {
"stockCode": {
"type": "string",
"description": "股票代码"
},
"stockName": {
"type": "string",
"description": "股票名称"
},
"stockRealQuote": {
"$ref": "#/components/schemas/StockRealQuote"
},
"stockRealQuoteExt": {
"type": "object",
"properties": {}
},
"stockRealQuotePriceExt": {
"type": "object",
"properties": {}
},
"stockRealQuoteKeepLimit": {
"$ref": "#/components/schemas/StockQuoteKeepLimitRest"
}
},
"description": "股票行情信息(工具)"
},
"StockQuotePriceExtRest": {
"type": "object",
"properties": {
"stockCode": {
"type": "string",
"description": "股票代码"
},
"price": {
"type": "number",
"description": "股价",
"format": "double"
},
"changeRatio": {
"type": "number",
"description": "涨跌幅",
"format": "double"
},
"prePrice": {
"type": "number",
"description": "昨收价",
"format": "double"
},
"dateB4D": {
"type": "string",
"description": "近4D日期",
"format": "date-time"
},
"priceB4D": {
"type": "number",
"description": "近4D价格",
"format": "double"
},
"changeRatioB1W": {
"type": "number",
"description": "近1周涨跌幅",
"format": "double"
},
"dateB9D": {
"type": "string",
"description": "近9D日期",
"format": "date-time"
},
"priceB9D": {
"type": "number",
"description": "近9D日价格",
"format": "double"
},
"changeRatioB10D": {
"type": "number",
"description": "近10日涨跌幅",
"format": "double"
},
"dateB29D": {
"type": "string",
"description": "近29D日期",
"format": "date-time"
},
"priceB29D": {
"type": "number",
"description": "近29D价格",
"format": "double"
},
"changeRatioB1M": {
"type": "number",
"description": "近1月涨跌幅",
"format": "double"
},
"highPriceDate60D": {
"type": "string",
"description": "创新高日期(60D)",
"format": "date-time"
},
"highPrice60D": {
"type": "number",
"description": "创新高价格(60D)",
"format": "double"
},
"highVolumeDate60D": {
"type": "string",
"description": "成交量新高日期(60D)",
"format": "date-time"
},
"highVolume60D": {
"type": "number",
"description": "成交量新高(60D)",
"format": "double"
},
"highTurnoverDate60D": {
"type": "string",
"description": "成交额新高(60D)",
"format": "date-time"
},
"highTurnover60D": {
"type": "number",
"description": "成交额新高(60D)",
"format": "double"
},
"stockName": {
"type": "string",
"description": "股票名称"
}
},
"description": "股票行情价格信息"
},
"StockRealQuoteExtRest": {
"type": "object",
"properties": {
"stockCode": {
"type": "string",
"description": "股票代码"
},
"stockName": {
"type": "string",
"description": "股票名称"
},
"marketType": {
"type": "string",
"description": "市场类型"
},
"openPrice": {
"type": "number",
"description": "开盘价",
"format": "double"
},
"closePriceYDay": {
"type": "number",
"description": "昨收价",
"format": "double"
},
"currentPrice": {
"type": "number",
"description": "最新价",
"format": "double"
},
"changeRatio": {
"type": "number",
"description": "涨跌幅",
"format": "double"
},
"highPrice": {
"type": "number",
"description": "最高价",
"format": "double"
},
"lowPrice": {
"type": "number",
"description": "最低价",
"format": "double"
},
"dataTime": {
"type": "string",
"description": "数据时间",
"format": "date-time"
},
"sysTime": {
"type": "string",
"description": "系统时间",
"format": "date-time"
},
"status": {
"type": "string",
"description": "状态"
},
"dealStockAmount": {
"type": "number",
"description": "成交股票数(单位:股)",
"format": "double"
},
"dealMoney": {
"type": "number",
"description": "成交金额(单位:元)",
"format": "double"
},
"limitUpTime": {
"type": "string",
"description": "涨停时间(Last)",
"format": "date-time"
},
"limitDownTime": {
"type": "string",
"description": "跌停时间(Last)",
"format": "date-time"
},
"limitUpPrice": {
"type": "number",
"description": "涨停价",
"format": "double"
},
"limitDownPrice": {
"type": "number",
"description": "跌停价",
"format": "double"
},
"industryCode": {
"type": "string",
"description": "行业代码(申万二级)"
},
"industryName": {
"type": "string",
"description": "行业名称(申万二级)"
},
"industryLV1Code": {
"type": "string",
"description": "行业代码(申万一级)"
},
"industryLV1Name": {
"type": "string",
"description": "行业名称(申万一级)"
},
"circulationValue": {
"type": "number",
"description": "流通市值(T-1日)",
"format": "double"
},
"totalValue": {
"type": "number",
"description": "总市值(T日)",
"format": "double"
}
},
"description": "股票行情扩展信息"
}
},
"securitySchemes": {}
},
"servers": [
{
"url": "https://aistock-retail.test.investoday.net",
"description": "测试环境"
},
{
"url": "https://ai.investoday.net",
"description": "正式环境(外网)"
},
{
"url": "http://10.9.1.27:9306",
"description": "正式环境(内网)(无API"
},
{
"url": "http://10.9.1.27:9306/api",
"description": "正式环境(内网)(有API)"
}
]
}