1.环境准备
# 1. 安装依赖
pip3 install llama-index
# 2. 创建 data 文件夹并放入文档
mkdir data
# 放入 .txt, .pdf, .docx 等文件
# 3. 创建 .env 文件写入 DASHSCOPE_API_KEY、DASHSCOPE_BASE_URL官网提供一个最简单版本,但由于官方使用的OpenAI, 国内不友好,这里我们将LLM改为千问;
2.创建文件.env,存放BASE_URL和API_KEY
DASHSCOPE_API_KEY = "sk-XXXXXXXXXXXXXXXXXXXXXXXX5c"
DASHSCOPE_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"3.创建script.py
import os
# ---- monkey-patch: 绕过 LlamaIndex 对非 OpenAI 模型名的严格校验 ----
import llama_index.llms.openai.base as llm_base
from llama_index.core.base.llms.types import CompletionResponse
_original_contextsize = llm_base.openai_modelname_to_contextsize
def _patched_contextsize(modelname: str) -> int:
try:
return _original_contextsize(modelname)
except ValueError:
# 非 OpenAI 模型(如 qwen-plus / deepseek-chat)默认返回 128K
return 131072
llm_base.openai_modelname_to_contextsize = _patched_contextsize
# monkey-patch _complete: 将 completions API 调用改为 chat completions(非 OpenAI 兼容接口需要)
_original_complete = llm_base.OpenAI._complete
def _patched_complete(self, prompt: str, **kwargs):
client = self._get_client()
all_kwargs = self._get_model_kwargs(**kwargs)
if self.reuse_client:
response = client.chat.completions.create(
messages=[{"role": "user", "content": prompt}],
stream=False,
**all_kwargs,
)
else:
with client:
response = client.chat.completions.create(
messages=[{"role": "user", "content": prompt}],
stream=False,
**all_kwargs,
)
text = response.choices[0].message.content or ""
return CompletionResponse(
text=text,
raw=response,
additional_kwargs=self._get_response_token_counts(response),
)
llm_base.OpenAI._complete = _patched_complete
# ----------------------------------------------------------------------
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
# 设置阿里云百炼 DashScope 作为默认模型
DASHSCOPE_API_KEY = os.getenv("DASHSCOPE_API_KEY")
DASHSCOPE_BASE_URL = os.getenv("DASHSCOPE_BASE_URL")
# LLM 模型 —— 显式配置 api_base 指向 DashScope
Settings.llm = OpenAI(
model="qwen-plus",
api_base=DASHSCOPE_BASE_URL,
api_key=DASHSCOPE_API_KEY,
max_tokens=4096, # 设置 max_tokens 以短路跳过 tiktoken 校验
)
# Embedding 模型 —— model 传入枚举支持的值以通过校验, model_name 覆盖为实际模型名
Settings.embed_model = OpenAIEmbedding(
model="text-embedding-3-small",
model_name="text-embedding-v4",
api_base=DASHSCOPE_BASE_URL,
api_key=DASHSCOPE_API_KEY,
embed_batch_size=10, # DashScope 限制 batch size ≤ 20
)
# 然后正常使用 LlamaIndex
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
response = query_engine.query("如何办理境外银行账号?")
print(response)
4.执行
# 运行
python3 script.py执行效果(选这个资料证明一定不是千问给我的回答)
根据提供的上下文信息,办理境外银行账号(主要针对港股和美股投资场景)需分地区操作,且受政策、身份、地域限制严格。具体如下:
### 一、香港银行账户(适合内地居民)
- **两类银行可选**:
- **传统线下银行**(如汇丰、中银香港、渣打、恒生):
✅ 必须本人赴港,提前预约(汇丰通过App预约;中银可通过微信公众号“中银香港微服务”线上预约);
✅ 需备齐材料:有效护照/港澳通行证、地址证明、社保证明、银行流水、在职证明等(以各银行App最新要求为准);
✅ 建议出发前开通手机港澳漫游,安装好目标银行App,到港后可购本地流量卡或使用免费WiFi(如西九龙站、酒店、商场);
⚠️ **重要提醒(截至5月29日)**:汇丰、中银香港已普遍暂停接受内地客户新开户;汇立等虚拟银行也在收紧审核,大量申请被拒——建议尽快行动。
- **虚拟线上银行**(如众安、蚂蚁、天星、汇立):
✅ 无需临柜,但**开户时申请人必须身在香港 + 连接香港本地网络**(即仍需本人赴港);
❌ 不支持纯远程(如在内地用VPN)开户。
- **特别通道(绕过赴港限制)**:
- 若已是**内地汇丰“卓越理财”客户**(资产≥50万元人民币),可联系客户经理**远程开通香港汇丰账户**,无需赴港;
- 若为**内地渣打“优先理财”客户**(同为50万元门槛),也可申请远程开通香港渣打账户。
- **注意事项**:
- 香港账户普遍收取月费,需维持最低结余(如汇丰约1万港币)才能豁免,不建议多开;
- 如需出入境记录证明,可在微信小程序“12367”下载。
---
### 二、美国银行账户(无SSN/ITIN的内地居民)
- **远程开户极难,成功率低**:
- 大多数主流银行(如Chase、Bank of America)要求美国税号(SSN或ITIN)+ 美国住址 + 本人到场;
- **华美银行(East West Bank)是少数例外**:
• 可凭中国护照+身份证在线申请;
• 提供两个产品:
▪ **华美(线下实体银行)**:月均资产≥1500美元免月费;
▪ **华美 Velo(纯线上)**:需缴300美元开户费,且月均资产≥25000美元才免月费,风控更严。
- **替代方案(需额外成本与风险)**:
- 租用美国代收地址(如iPostal1、Anytime Mailbox,月费$10–30),配合ITIN尝试申请Capital One或SoFi;
⚠️ 但因地址可能已被多人使用,**开户大概率被拒**;
- **强烈建议**:若已获ITIN,亲自飞赴美国(推荐洛杉矶/纽约华人区),一次性现场开户——体验接近本地居民,成功率高。
---
✅ 总结关键原则:
1. **赴港仍是当前最可行路径**(尤其对普通内地居民);
2. **远程开户仅限极少数银行且条件苛刻**(如内地达标客户远程开港银、华美直开);
3. **美国账户强烈建议“ITIN + 亲赴”组合**,避免代收地址带来的拒批风险;
4. 所有操作务必以银行最新官方要求为准——政策变动快,文中信息可能已更新。以上就是我们使用千问实现的LlamaIndex RAG的样例。