需绕过CodeGeeX默认输出限制,通过urllib.parse解析、正则捕获、提示词引导JSON输出或Shell管道四种方式,精准提取URL协议及查询参数。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜
如果您需要从CodeGeeX生成或处理的URL字符串中精确提取协议(如http、https、file)及查询参数(如?name=value&sort=asc),则需绕过其默认输出格式限制,直接对返回的URL文本进行结构化解析。以下是实现该目标的多种技术路径:
一、使用Python内置urllib.parse模块解析
该方法利用标准库中的
与
函数,可无依赖地完成协议分离与参数键值对解构,适用于CodeGeeX输出纯文本URL后的后处理阶段。
1、将CodeGeeX返回的URL字符串赋值给变量
,例如
。
2、导入模块:
。
3、调用
,获取
(协议)、
(域名)、
(路径)等属性。
4、调用
,得到形如
的标准字典。
5、提取协议:
parsed.scheme
;提取全部参数键名:
list(params_dict.keys())
;提取某参数首值:
params_dict.get('id', [''])[0]
。
二、借助正则表达式精准捕获协议与关键参数
当URL格式不规范(如缺失
、含嵌套问号或锚点)或需跳过标准库解析限制时,正则表达式提供更灵活的模式匹配能力,尤其适配CodeGeeX可能生成的非标准链接片段。
1、定义正则模式:
。
2、使用
执行匹配。
3、若匹配成功,通过
获取协议部分。
4、通过
提取完整查询字符串,再以
分割并逐项用
拆解为键值对。
5、关键提取结果应高亮标注:
协议字段位于捕获组1,原始查询参数串位于捕获组3
。
三、在CodeGeeX提示词中嵌入结构化输出指令
通过设计明确的系统提示(system prompt)与few-shot示例,引导CodeGeeX直接输出JSON格式解析结果,避免客户端二次解析,提升端到端效率。
1、设置系统消息为:
。
2、提供示例输入输出对:
。
3、向CodeGeeX提交待解析URL作为用户消息。
4、接收响应后,直接调用
解析,无需额外正则或URL库。
5、确保输出始终为严格JSON:
禁止任何解释性文字、Markdown标记或额外空格
。
四、利用CodeGeeX2命令行工具配合Shell管道解析
若在终端环境中批量处理CodeGeeX2生成的URL列表(如从
导出),可通过Linux/Unix管道链式调用标准工具完成协议与参数提取,无需编写Python脚本。
1、运行CodeGeeX2生成URL列表并输出至stdout,例如:
2、使用
提取所有HTTP/HTTPS URL。
3、使用
截取协议部分(如
)。
4、使用
提取首个参数名(如
)。
5、组合管道命令时,关键分隔符必须显式声明:
协议识别依赖于开头的https?://,参数提取依赖于首个?与后续&的相对位置
。
urlparseparse_qsurl_str"https://api.example.com/v1/data?id=123&format=json"from urllib.parse import urlparse, parse_qsparsed = urlparse(url_str)schemenetlocpathparams_dict = parse_qs(parsed.query){'id': ['123'], 'format': ['json']}://pattern = r'^([a-zA-Z][a-zA-Z0-9+.-]*):\/\/([^?#]+)(?:\?([^#]*))?(?:#(.*))?$'re.match(pattern, url_str)match.group(1)match.group(3)&="你是一个URL解析器,仅输出合法JSON,包含字段:scheme(字符串)、host(字符串)、path(字符串)、params(对象,键为参数名,值为字符串数组)"{"input": "https://x.com/search?q=ai&src=typed_query", "output": {"scheme": "https", "host": "x.com", "path": "/search", "params": {"q": ["ai"], "src": ["typed_query"]}}}json.loads()example_inputs.jsonlpython demo/run_demo.py --model-path THUDM/codegeex2-6b shell 。grep -oE 'https?://[^[:space:]]+'awk -F'[?:&]' '{print $1}'httpssed 's/.*?//; s/&.*$//'q