层级 | 技术组件 | 说明 |
---|---|---|
存储层 | AWS S3 Amazon OpenSearch (向量数据库) |
存储原始PDF文件 支持向量检索的法律知识库 |
AI服务层 | OpenAI GPT-4 API Amazon SageMaker (LLM微调) Amazon Translate |
核心NLP处理 定制化法律模型训练 多语言翻译服务 |
计算层 | AWS Lambda (Python) ECS/EKS (C#微服务) Semantic Kernel |
无服务器文件解析 业务逻辑处理 多模型协调框架 |
应用层 | ASP.NET Core Web API React/Vue前端 Power BI/QuickSight |
RESTful接口服务 用户交互界面 数据可视化展示 |
DevOps | AWS CDK/CloudFormation CodePipeline X-Ray |
基础设施即代码 CI/CD自动化 分布式追踪 |
import PyPDF2
from transformers import AutoTokenizer, AutoModelForSequenceClassification
# PDF文本提取
def extract_text_from_pdf(s3_path):
text = ""
with open(s3_path, 'rb') as file:
reader = PyPDF2.PdfReader(file)
for page in reader.pages:
text += page.extract_text()
return text
# 使用HuggingFace模型分类
classifier = AutoModelForSequenceClassification.from_pretrained("nlpaueb/legal-bert-small-uncased")
tokenizer = AutoTokenizer.from_pretrained("nlpaueb/legal-bert-small-uncased")
def classify_document(text):
inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True, max_length=512)
outputs = classifier(**inputs)
return classifier.config.id2label[outputs.logits.argmax().item()] # 返回传票/判决书等类型
using OpenAI.Chat;
// 使用OpenAI结构化提取
var chatRequest = new ChatRequest
{
Messages = new List<Message> {
new Message {
Role = "system",
Content = "你是一个法律文书分析专家,请从以下文本中提取JSON格式数据:\n" +
"字段包括:case_number, parties, judgment_result, key_dates"
},
new Message {
Role = "user",
Content = documentText
}
},
ResponseFormat = ChatResponseFormat.Json
};
var response = await openAIClient.Chat.GetChatCompletionsAsync(chatRequest);
var structuredData = JsonSerializer.Deserialize<LegalDocument>(response.Choices[0].Message.Content);
from opensearchpy import OpenSearch
from sentence_transformers import SentenceTransformer
# 生成法律文本向量
model = SentenceTransformer('sentence-transformers/msmarco-bert-base-dot-v5')
vector = model.encode(legal_text)
# 存入OpenSearch
client = OpenSearch(
hosts=[{'host': 'search-legal-domain.us-west-2.es.amazonaws.com', 'port': 443}],
http_auth=('master', 'password'),
use_ssl=True
)
document = {
"content": legal_text,
"vector": vector.tolist()
}
client.index(index="legal-cases", body=document)
using Microsoft.SemanticKernel;
var kernel = Kernel.CreateBuilder()
.AddAzureOpenAIChatCompletion(
deploymentName: "gpt-4",
endpoint: "https://[your-endpoint].openai.azure.com/",
apiKey: Environment.GetEnvironmentVariable("AZURE_OPENAI_KEY"))
.Build();
// 法律风险分析函数
var riskAnalysis = kernel.CreateFunctionFromPrompt("""
分析以下案件信息,识别3个主要法律风险点:
{{$input}}
输出格式:Markdown列表
""");
var result = await kernel.InvokeAsync(riskAnalysis, new() {
["input"] = caseDetails
});
def generate_contract(template_path, context):
with open(template_path, 'r') as f:
template = f.read()
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "你是一个资深合同律师,请根据模板和案情生成合同"},
{"role": "user", "content": f"模板:{template}\n案情:{context}"}
],
temperature=0.3
)
return response.choices[0].message.content
用户上传PDF → S3触发Lambda →
→ 文本解析 → 分类模型 → OpenSearch存储 →
→ 信息提取微服务 → 前端展示 →
→ 风险分析 → SNS预警通知
合规性处理
性能优化
成本控制