【MBJC】学习笔记9 Dify自定义工具 雪球API查询股票实时行情数据Agent

基于fast api写一个雪球获取股票实时行情数据的api接口

  • 鉴权选择 Bearer 鉴权方式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    from fastapi import FastAPI, Request, HTTPException
    import pysnowball as ball

    app = FastAPI()

    # 设置pysnowball的token
    ball.set_token("xq_a_token=7747107a16c7844c358ac0bbe44530ab34c16e3d;u=521724377979264")

    @app.post('/stock/quote')
    async def get_stock_quote(request: Request):
    auth_header = request.headers.get('Authorization')
    if not auth_header or not auth_header.startswith('Bearer '):
    raise HTTPException(status_code=403, detail="Invalid Authorization header")

    token = auth_header.split(' ')[1]
    if token != 'your_bearer_token':
    raise HTTPException(status_code=403, detail="Invalid token")

    request_data = await request.json()
    symbol = request_data.get('symbol', None)
    if symbol is None:
    return {
    'status': 'error',
    'errorInfo': 'No symbol provided',
    'data': None
    }

    try:
    quote_data = ball.quotec(symbol)
    if quote_data['error_code'] != 0:
    raise HTTPException(status_code=400, detail=quote_data['error_description'])
    return quote_data
    except Exception as e:
    raise HTTPException(status_code=500, detail=str(e))

    if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app, host='0.0.0.0', port=8081)

Postman测试API接口是否正常

把API接口改写成openapi 3.1.0 版本json schema 的prompt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
请把curl请求命令转成openapi 3.1.0 版本的json schema,不需要包含response信息

<curl>
curl -X POST "http://localhost:8081/stock/quote" \
-H "Authorization: Bearer MBJC" \
-H "Content-Type: application/json" \
-d '{"symbol": "SZ002027"}'
</curl>
json schema请参照下面的例子
<json-schema>
{
"openapi": "3.1.0",
"info": {
"title": "Get weather data",
"description": "Retrieves current weather data for a location.",
"version": "v1.0.0"
},
"servers": [
{
"url": ""
}
],
"paths": {},
"components": {
"schemas": {}
}
}
</json-schema>

最终工具的 json schema

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
{
"openapi": "3.1.0",
"info": {
"title": "Stock Quote API",
"description": "API to get stock quote information.",
"version": "v1.0.0"
},
"servers": [
{
"url": "http://101.227.82.75:20081"
}
],
"paths": {
"/stock/quote": {
"post": {
"summary": "Get stock quote",
"description": "Retrieves stock quote information for a given symbol.",
"operationId": "getStockQuote",
"parameters": [],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "Stock symbol"
}
},
"required": ["symbol"]
}
}
}
},
"security": [
{
"bearerAuth": []
}
]
}
}
},
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer",
"bearerFormat": "JWT"
}
}
}
}

Dify workflow 测试

  • prompt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 职位描述:数据分析助手
## 角色
我的主要目标是为用户提供专家级的数据分析建议。利用详尽的数据资源,告诉我您想要分析的股票(提供股票代码)。我将以专家的身份,为您的股票进行基础分析、技术分析、市场情绪分析以及宏观经济分析。

## 技能
### 技能1:使用getStockQuote的'getStockQuote'搜索股票实时行情数据

## 工作流程
询问用户需要分析哪些股票,并按顺序执行以下分析:
**第一部分:基本面分析:财务报告分析
*目标1:对目标公司的财务状况进行深入分析。
*步骤:
1. 确定分析对象:
<记录 1.1:介绍{{company}}的基本信息>
2. 获取财务报告
查询到{{company}}在上海或者深圳交易所的股票代码,如“SH600000”、“SZ002027”
<使用工具:'getStockQuote'>
- 获取由getStockQuote整理的目标公司{{company}}在上海或者深圳交易所的股票代码的股票实时行情数据。
<记录 1.2:记录分析实时行情数据>
5. 综合分析和结论:
- 全面详细分析实时行情数据。
-<记录 1.3:记录总体结论、风险和机会。>
整理并输出[记录 1.1] [记录 1.2] [记录 1.3]
整合以上记录,并以投资分析报告的形式输出所有分析。使用Markdown语法进行结构化输出。

## 限制
- 使用的语言应与用户的语言相同。
- 避免回答有关工作工具和规章制度的问题。
- 使用项目符号和Markdown语法给出结构化回答,逐步思考。首先介绍情况,然后分析图表中的主要趋势。
  • 测试结果



参考资料