基于阿里云百炼的税法AI助手平台搭建
背景与问题
税法咨询是一个高频且复杂的场景。税法条款数量庞大,并且会根据经济政策动态调整,普通纳税人很难自行检索;人工税务咨询服务受时间和人力限制,难以做到7×24小时响应。企业和个人需要一种能够快速理解自然语言提问,并给出法规依据和答案的智能助手。
大语言模型虽然在语义理解上表现出色,但通用模型在税法专用领域有两个问题:一是训练数据时效性不足;二是可能生成无依据的内容。因此,需要构建一个结合领域知识库和大模型的AI助手平台,确保回答有据可查、可溯源。
方案设计:基于阿里云原生服务的分层架构
本平台采用“客户端-API网关-函数计算-大模型/知识库-数据库”的分层架构,整体架构如图所示:
客户端:Web页面 / 钉钉机器人 / 微信小程序
↓ HTTPS
接入层:阿里云API网关(签名认证、限流、日志)
↓ 函数计算触发器
业务层:函数计算(Python 3.9,业务编排、调用外部API)
↓ 百炼API
模型层:阿里云百炼(通义千问大模型 + 专属知识库)
↓ 结果回传
数据层:表格存储Tablestore(问答记录、用户反馈)
各模块职责如下:
- 客户端与接入层:通过HTTPS调用API网关暴露的统一接口,API网关提供AppKey认证、QPS限流、IP白名单能力,防止外部恶意请求。
- 业务层:函数计算是事件驱动的Serverless计算服务,无需管理服务器。在函数中解析参数、调用百炼、保存记录。
- 模型层:阿里云百炼是大模型开发平台,支持上传知识库并实现检索增强生成(RAG),让模型基于最新法规文档作答。
- 数据层:表格存储提供高性能、低成本的NoSQL服务,适合保存高并发写入的问答日志,并支持生命周期管理。
实现步骤
1. 开通服务并创建API Key
在阿里云控制台开通函数计算、API网关、表格存储、百炼和日志服务。进入百炼控制台,在API-KEY管理页面创建一个API Key,保存好,后续作为环境变量使用。
2. 准备知识库
在百炼控制台的知识库功能中,创建知识库并上传《企业所得税法》《增值税暂行条例》《税收征收管理法》等官方文件。平台自动将文档切分、向量化。建议文件命名规范化,如“增值税暂行条例_2023.pdf”,便于模型引用。
3. 编写函数计算代码
在函数计算控制台创建一个函数,运行时选择Python 3.9,内存设为512MB,超时时间设为60秒。在环境变量中配置DASHSCOPE_API_KEY和表格存储相关密钥。代码逻辑见下一节。
4. 配置API网关
创建API分组,前端协议为HTTPS,后端服务类型选择函数计算。定义请求Body中的question字段为必填字符串,设置流控策略,例如每用户每秒不超过10次。发布到测试环境并验证。
5. 联调与优化
通过API网关的在线调试工具或Postman发送POST请求,观察返回结果。如果答案不够准确,可以调整系统提示词,要求模型引用具体法规条款,并在知识库中补充更多解释性材料。
6. 上线与监控
发布到生产环境后,使用阿里云日志服务收集函数计算日志,建立错误率与调用量看板。在表格存储中分析高频问题,持续更新知识库。
核心代码示例
下面是一个可运行的函数计算入口代码,集成了调用百炼和写入表格存储。需要依赖requests和tablestore,可在函数计算的requirements.txt中声明。
# -*- coding: utf-8 -*-
import json
import os
import time
import requests
from tablestore import OTSClient
API_KEY = os.environ['DASHSCOPE_API_KEY']
OTS_ENDPOINT = os.environ['OTS_ENDPOINT']
OTS_INSTANCE = os.environ['OTS_INSTANCE']
OTS_TABLE = os.environ['OTS_TABLE']
ots_client = OTSClient(OTS_ENDPOINT, os.environ['OTS_AK_ID'], os.environ['OTS_AK_SECRET'], OTS_INSTANCE)
def call_qwen(question):
url = 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation'
headers = {
'Authorization': f'Bearer {API_KEY}',
'Content-Type': 'application/json'
}
payload = {
'model': 'qwen-turbo',
'input': {
'messages': [
{
'role': 'system', 'content': '你是一名中国税法专家,回答要准确、简洁,并引用相关法规。'},
{
'role': 'user', 'content': question}
]
},
'parameters': {
'result_format': 'message',
'temperature': 0.1
}
}
resp = requests.post(url, json=payload, headers=headers)
resp.raise_for_status()
data = resp.json()
return data['output']['choices'][0]['message']['content']
def save_record(question, answer):
timestamp = int(time.time() * 1000)
primary_key = [('pk', f'qa_{timestamp}')]
attribute_columns = [('question', question), ('answer', answer), ('created_at', timestamp)]
ots_client.put_row(OTS_TABLE, primary_key, attribute_columns)
def handler(event, context):
if isinstance(event, str):
event = json.loads(event)
body = event.get('body', event)
if isinstance(body, str):
body = json.loads(body)
question = body.get('question', '').strip()
if not question:
return {
'statusCode': 400, 'body': json.dumps({
'error': 'question 不能为空'})}
try:
answer = call_qwen(question)
save_record(question, answer)
return {
'statusCode': 200,
'headers': {
'Content-Type': 'application/json'},
'body': json.dumps({
'answer': answer})
}
except Exception as e:
return {
'statusCode': 500, 'body': json.dumps({
'error': str(e)})}
关键步骤说明:
- 使用环境变量保存API Key和Tablestore密钥,避免硬编码。
- call_qwen函数封装了DashScope的文本生成接口,使用POST请求,结构简单。
- save_record函数将问答以主键为时间戳的形式写入Tablestore,方便后续统计。
- handler函数兼容API网关事件的字符串和dict两种格式。
- 返回体符合API网关集成响应格式,可直接被前端解析。
注意事项
- 密钥安全:所有敏感信息必须通过环境变量或KMS注入,严禁放入代码或日志。
- 模型幻觉:大模型回答需经知识库约束,建议在提示词中写明只能根据给定材料回答。
- 法规时效:需建立定期更新知识库的机制,例如用定时触发器检测最新法规。
- 成本控制:在API网关配置限流,并设置每日配额预警。
- 数据合规:表格存储应开启加密,并对客户端身份进行认证。
- 人工兜底:在平台中加入转人工功能,对高风险问题由税务专家复核。
总结
本文介绍了使用阿里云百炼、函数计算、API网关和表格存储搭建税法AI助手的全过程。方案充分利用Serverless弹性、大模型理解能力和知识库检索能力,开发成本低、上线速度快。架构层次清晰,可迁移到法律、金融、医疗等垂直领域。未来可结合PAI平台对模型微调,接入更多数据源,使回答更加智能可靠。