File size: 5,007 Bytes
3373b3e | 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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | import streamlit as st
import os
from openai import OpenAI
def get_mimo_client():
"""获取mimo API客户端"""
# 优先从环境变量读取
api_key = os.getenv("MIMO_API_KEY")
base_url = os.getenv("MIMO_BASE_URL")
# 如果环境变量没有,尝试从st.secrets读取
if not api_key:
try:
api_key = st.secrets["MIMO_API_KEY"]
except:
pass
if not base_url:
try:
base_url = st.secrets["MIMO_BASE_URL"]
except:
base_url = "https://api.xiaomimimo.com/v1"
if not api_key:
return None
return OpenAI(
api_key=api_key,
base_url=base_url
)
def summarize_document(text: str, max_length: int = 500) -> str:
"""文档摘要"""
client = get_mimo_client()
if not client:
return "错误:未配置 MIMO API Key,请在 Settings → Secrets 中配置"
try:
response = client.chat.completions.create(
model="mimo-v2.5-pro",
messages=[
{"role": "system", "content": "你是一个专业的文档摘要助手,请用简洁的语言总结文档核心内容。"},
{"role": "user", "content": f"请为以下文档生成摘要,控制在{max_length}字以内:\n\n{text}"}
],
max_tokens=1000
)
return response.choices[0].message.content
except Exception as e:
return f"API调用失败: {str(e)}"
def translate_document(text: str, target_lang: str = "英文") -> str:
"""文档翻译"""
client = get_mimo_client()
if not client:
return "错误:未配置 MIMO API Key,请在 Settings → Secrets 中配置"
try:
response = client.chat.completions.create(
model="mimo-v2.5-pro",
messages=[
{"role": "system", "content": f"你是一个专业的翻译助手,请将文档翻译成{target_lang},保持原文格式和专业术语。"},
{"role": "user", "content": f"请翻译以下文档:\n\n{text}"}
],
max_tokens=2000
)
return response.choices[0].message.content
except Exception as e:
return f"API调用失败: {str(e)}"
def organize_meeting_notes(notes: str) -> str:
"""会议纪要整理"""
client = get_mimo_client()
if not client:
return "错误:未配置 MIMO API Key,请在 Settings → Secrets 中配置"
try:
response = client.chat.completions.create(
model="mimo-v2.5-pro",
messages=[
{"role": "system", "content": "你是一个专业的会议纪要整理助手,请将杂乱的会议笔记整理成结构化的会议纪要格式,包含:会议主题、参会人员、主要议题、讨论要点、决议事项、待办事项。"},
{"role": "user", "content": f"请整理以下会议笔记:\n\n{notes}"}
],
max_tokens=1500
)
return response.choices[0].message.content
except Exception as e:
return f"API调用失败: {str(e)}"
def explain_contract_terms(text: str) -> str:
"""合同条款解读"""
client = get_mimo_client()
if not client:
return "错误:未配置 MIMO API Key,请在 Settings → Secrets 中配置"
try:
response = client.chat.completions.create(
model="mimo-v2.5-pro",
messages=[
{"role": "system", "content": "你是一个法律顾问助手,请用通俗易懂的语言解释合同条款,指出可能的风险点和注意事项。"},
{"role": "user", "content": f"请解读以下合同条款:\n\n{text}"}
],
max_tokens=1500
)
return response.choices[0].message.content
except Exception as e:
return f"API调用失败: {str(e)}"
def generate_ppt_content(topic: str, slides_count: int = 10, style: str = "商务") -> dict:
"""生成PPT内容"""
client = get_mimo_client()
if not client:
return None
prompt = f"""请为以下主题生成PPT内容,要求:
- 主题:{topic}
- 页数:{slides_count}页
- 风格:{style}
请以JSON格式返回,结构如下:
{{
"title": "PPT标题",
"slides": [
{{
"title": "页面标题",
"content": ["要点1", "要点2", "要点3"],
"notes": "演讲者备注"
}}
]
}}"""
try:
response = client.chat.completions.create(
model="mimo-v2.5-pro",
messages=[
{"role": "system", "content": "你是一个专业的PPT内容创作助手,请生成结构清晰、内容专业的PPT大纲。"},
{"role": "user", "content": prompt}
],
max_tokens=3000
)
import json
return json.loads(response.choices[0].message.content)
except Exception as e:
st.error(f"API调用失败: {str(e)}")
return None
|