<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>AI 实战 on 文艺技术笔记</title>
        <link>https://wenyiblog.top/categories/ai-%E5%AE%9E%E6%88%98/</link>
        <description>Recent content in AI 实战 on 文艺技术笔记</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <copyright>文艺技术笔记 | 软件工程师文艺</copyright>
        <lastBuildDate>Sat, 06 Jun 2026 09:00:00 +0800</lastBuildDate><atom:link href="https://wenyiblog.top/categories/ai-%E5%AE%9E%E6%88%98/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Gemma 4 12B 本地部署与全方位实测：谷歌开源多模态甜点级模型</title>
        <link>https://wenyiblog.top/2026/06/gemma4-12b-local-deploy/</link>
        <pubDate>Sat, 06 Jun 2026 09:00:00 +0800</pubDate>
        
        <guid>https://wenyiblog.top/2026/06/gemma4-12b-local-deploy/</guid>
        <description>&lt;p&gt;在本地部署 AI 大模型的玩家，常常面临一个两难的抉择：体量小的模型能力不够，体量大的模型普通电脑又根本跑不动。昨晚，谷歌最新发布的 &lt;strong&gt;Gemma 4 12B&lt;/strong&gt; 开放模型，或许成为了目前最完美的&amp;quot;甜点级&amp;quot;平衡点。&lt;/p&gt;
&lt;p&gt;它不仅拥有 &lt;strong&gt;120 亿参数&lt;/strong&gt;，还首次在中型开源模型中加入了&lt;strong&gt;原生音频理解能力&lt;/strong&gt;，支持图像、文本和音频的统一多模态输入，关键是它能直接流畅地运行在你的笔记本电脑或消费级显卡上！&lt;/p&gt;
&lt;p&gt;本文将带大家深度拆解 Gemma 4 12B 的核心亮点、手把手教你如何进行本地部署，并奉上五项压力实测结果。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;一核心亮点为什么说它是甜点级神器&#34;&gt;&lt;a href=&#34;#%e4%b8%80%e6%a0%b8%e5%bf%83%e4%ba%ae%e7%82%b9%e4%b8%ba%e4%bb%80%e4%b9%88%e8%af%b4%e5%ae%83%e6%98%af%e7%94%9c%e7%82%b9%e7%ba%a7%e7%a5%9e%e5%99%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;一、核心亮点：为什么说它是&amp;quot;甜点级&amp;quot;神器？
&lt;/h2&gt;&lt;p&gt;Gemma 4 是谷歌最新一代的开放模型家族。其中，&lt;strong&gt;12B（120亿参数）版本&lt;/strong&gt;正好切中了轻量级与超大模型之间的黄金分割点。相比上一代，它带来了三个颠覆性的升级：&lt;/p&gt;
&lt;h3 id=&#34;1-原生音频输入支持&#34;&gt;&lt;a href=&#34;#1-%e5%8e%9f%e7%94%9f%e9%9f%b3%e9%a2%91%e8%be%93%e5%85%a5%e6%94%af%e6%8c%81&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1. 原生音频输入支持
&lt;/h3&gt;&lt;p&gt;Gemma 系列首次在中型模型中加入原生音频理解。它无需额外挂载语音识别模型，就能直接&amp;quot;听懂&amp;quot;录音、语音和视频中的声音。&lt;/p&gt;
&lt;h3 id=&#34;2-统一的无编码器架构encoder-free&#34;&gt;&lt;a href=&#34;#2-%e7%bb%9f%e4%b8%80%e7%9a%84%e6%97%a0%e7%bc%96%e7%a0%81%e5%99%a8%e6%9e%b6%e6%9e%84encoder-free&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;2. 统一的无编码器架构（Encoder-free）
&lt;/h3&gt;&lt;p&gt;传统的通用多模态模型，通常需要图片编码器、音频编码器和大模型三套系统协同。而 Gemma 4 采用了统一架构，图片、声音、文本直接输入大模型，大幅降低了解析延迟，推理效率极高。&lt;/p&gt;
&lt;h3 id=&#34;3-256k-超长上下文&#34;&gt;&lt;a href=&#34;#3-256k-%e8%b6%85%e9%95%bf%e4%b8%8a%e4%b8%8b%e6%96%87&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;3. 256K 超长上下文
&lt;/h3&gt;&lt;p&gt;最新版支持高达 256K 的上下文窗口，这意味着你可以一次性把数百页的 PDF 技术文档，甚至一整个项目的代码仓库直接丢给它进行分析。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;二手把手教学利用-llamacpp-实现本地高效部署&#34;&gt;&lt;a href=&#34;#%e4%ba%8c%e6%89%8b%e6%8a%8a%e6%89%8b%e6%95%99%e5%ad%a6%e5%88%a9%e7%94%a8-llamacpp-%e5%ae%9e%e7%8e%b0%e6%9c%ac%e5%9c%b0%e9%ab%98%e6%95%88%e9%83%a8%e7%bd%b2&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;二、手把手教学：利用 llama.cpp 实现本地高效部署
&lt;/h2&gt;&lt;p&gt;我们推荐使用 &lt;strong&gt;llama.cpp&lt;/strong&gt; 进行部署，因为它不仅支持 NVIDIA 显卡，对 AMD、Intel 显卡以及纯 CPU 运行都有很好的支持。&lt;/p&gt;
&lt;h3 id=&#34;1-硬件配置与模型版本选择&#34;&gt;&lt;a href=&#34;#1-%e7%a1%ac%e4%bb%b6%e9%85%8d%e7%bd%ae%e4%b8%8e%e6%a8%a1%e5%9e%8b%e7%89%88%e6%9c%ac%e9%80%89%e6%8b%a9&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1. 硬件配置与模型版本选择
&lt;/h3&gt;&lt;p&gt;根据你电脑的显存大小，选择下载对应的量化版本：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;显存&lt;/th&gt;
&lt;th&gt;推荐版本&lt;/th&gt;
&lt;th&gt;模型大小&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;6G - 8G&lt;/td&gt;
&lt;td&gt;Q4_K_M 量化版&lt;/td&gt;
&lt;td&gt;约 7GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12G&lt;/td&gt;
&lt;td&gt;Q8 量化版&lt;/td&gt;
&lt;td&gt;约 13GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24G（3090/4090）&lt;/td&gt;
&lt;td&gt;BF16 全量版&lt;/td&gt;
&lt;td&gt;约 23GB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;重要提示&lt;/strong&gt;：如果需要体验多模态能力，除了主模型外，还必须下载对应的&lt;strong&gt;多模态组件文件&lt;/strong&gt;（以 &lt;code&gt;mM&lt;/code&gt; 开头、&lt;code&gt;.gguf&lt;/code&gt; 结尾，大小约 150MB，版本需与主模型对应）。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;2-部署操作步骤&#34;&gt;&lt;a href=&#34;#2-%e9%83%a8%e7%bd%b2%e6%93%8d%e4%bd%9c%e6%ad%a5%e9%aa%a4&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;2. 部署操作步骤
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;第一步：准备目录&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;下载最新版本的 &lt;code&gt;llama.cpp&lt;/code&gt; Windows 编译版并解压。在解压后的根目录下新建一个名为 &lt;code&gt;models&lt;/code&gt; 的文件夹。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二步：放置模型&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;将下载好的 &lt;strong&gt;Gemma 4 12B 主模型&lt;/strong&gt; 和 &lt;strong&gt;多模态组件文件&lt;/strong&gt; 一起放入 &lt;code&gt;models&lt;/code&gt; 文件夹中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三步：编写启动脚本&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在 &lt;code&gt;llama.cpp&lt;/code&gt; 的根目录下新建一个文本文档，粘贴经过优化后的启动命令。为了防止中文乱码，保存时请将编码格式设置为 &lt;strong&gt;UTF-8&lt;/strong&gt;，并将文件后缀名修改为 &lt;code&gt;.bat&lt;/code&gt;（例如 &lt;code&gt;启动本地服务.bat&lt;/code&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四步：启动服务&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;双击运行该 &lt;code&gt;.bat&lt;/code&gt; 脚本。根据你的硬件需求选择运行模式（纯文本/多模态/极限显存模式）。当终端打印出本地访问链接（如 &lt;code&gt;http://127.0.0.1:8080&lt;/code&gt;）时，代表启动成功。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第五步：前端交互&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在浏览器中打开该链接，即可看到一个非常清爽的 Web 交互界面，此时模型已完全运行在你的本地环境中！&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;三硬核实测五项压力测试它到底香不香&#34;&gt;&lt;a href=&#34;#%e4%b8%89%e7%a1%ac%e6%a0%b8%e5%ae%9e%e6%b5%8b%e4%ba%94%e9%a1%b9%e5%8e%8b%e5%8a%9b%e6%b5%8b%e8%af%95%e5%ae%83%e5%88%b0%e5%ba%95%e9%a6%99%e4%b8%8d%e9%a6%99&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;三、硬核实测：五项压力测试，它到底香不香？
&lt;/h2&gt;&lt;p&gt;为了测试这个 12B &amp;ldquo;甜点级&amp;quot;模型的极限，我们对其进行了代码、音频、视觉、长文本以及高难度数数等五项全面测试，实测结果出乎意料：&lt;/p&gt;
&lt;h3 id=&#34;测试-1逻辑与代码修补能力-&#34;&gt;&lt;a href=&#34;#%e6%b5%8b%e8%af%95-1%e9%80%bb%e8%be%91%e4%b8%8e%e4%bb%a3%e7%a0%81%e4%bf%ae%e8%a1%a5%e8%83%bd%e5%8a%9b-&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;测试 1：逻辑与代码修补能力 ✅
&lt;/h3&gt;&lt;p&gt;我们故意丢给它一段&lt;strong&gt;有严重 Bug、无法正常控制且视觉极度简陋&lt;/strong&gt;的网页飞机大战游戏代码，让它进行修复。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结果&lt;/strong&gt;：大模型本地生成速度非常快，达到了约 &lt;strong&gt;46 token/s&lt;/strong&gt;。不仅完美修复了代码中的逻辑 Bug，让飞机能够正常控制加速和转弯，甚至还自作主张地帮我们将简陋的飞机模型进行了结构优化，使其看起来更加逼真。代码功底极其扎实。&lt;/p&gt;
&lt;h3 id=&#34;测试-2原生音频多模态理解-&#34;&gt;&lt;a href=&#34;#%e6%b5%8b%e8%af%95-2%e5%8e%9f%e7%94%9f%e9%9f%b3%e9%a2%91%e5%a4%9a%e6%a8%a1%e6%80%81%e7%90%86%e8%a7%a3-&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;测试 2：原生音频多模态理解 ✅
&lt;/h3&gt;&lt;p&gt;通过界面的音频上传按钮，直接上传了一段普通的录音语音文件，要求模型听完后&amp;quot;用中文总结核心内容&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结果&lt;/strong&gt;：基于其无编码器的原生音频架构，它无需经过语音转文字（STT）的中间步骤，直接听懂了音频内容，并给出了非常精准、有条理的中文核心大意总结。&lt;/p&gt;
&lt;h3 id=&#34;测试-3图像理解与视觉延伸-&#34;&gt;&lt;a href=&#34;#%e6%b5%8b%e8%af%95-3%e5%9b%be%e5%83%8f%e7%90%86%e8%a7%a3%e4%b8%8e%e8%a7%86%e8%a7%89%e5%bb%b6%e4%bc%b8-&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;测试 3：图像理解与视觉延伸 ✅
&lt;/h3&gt;&lt;p&gt;我们截取了一张 Windows 系统日常使用中常见的报错蓝屏/错误代码截图，上传给模型并提问：&amp;ldquo;分析图片并提供解决方法。&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结果&lt;/strong&gt;：模型识别速度极快，立马识别出了截图中的错误类型，并针对性地给出了 4 个详细的排查与修复步骤，对小白用户非常友好。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;进阶玩法&lt;/strong&gt;：在随后的测试中，我们给出一张静态图并输入简单的动态提示词，它甚至能通过输出特定的图像数据，&amp;ldquo;让静态图直接动起来&amp;rdquo;，展示了极强的多模态延展潜力。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;测试-4256k-超长上下文大海捞针-&#34;&gt;&lt;a href=&#34;#%e6%b5%8b%e8%af%95-4256k-%e8%b6%85%e9%95%bf%e4%b8%8a%e4%b8%8b%e6%96%87%e5%a4%a7%e6%b5%b7%e6%8d%9e%e9%92%88-&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;测试 4：256K 超长上下文&amp;quot;大海捞针&amp;quot; ✅
&lt;/h3&gt;&lt;p&gt;长文本测试中，我们准备了一个长达数十万字的庞大文本，并在文中的隐蔽角落随机插入了一行特定密码（大海捞针测试）。随后将该文本以及一份 145 页的超大 PDF 报告丢给它。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结果&lt;/strong&gt;：面对高密度的文本，大模型仅用几秒钟时间，就极其精准、一字不差地帮我们把藏在数十万字里的密码给&amp;quot;捞&amp;quot;了出来。同时，面对 145 页的 PDF 行业报告，它也只用了几秒钟就完成了一份高质量的中文分析与总结摘要，堪称打工人必备的生产力工具。&lt;/p&gt;
&lt;h3 id=&#34;测试-5高难度视觉数数-&#34;&gt;&lt;a href=&#34;#%e6%b5%8b%e8%af%95-5%e9%ab%98%e9%9a%be%e5%ba%a6%e8%a7%86%e8%a7%89%e6%95%b0%e6%95%b0-&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;测试 5：高难度视觉数数 ❌
&lt;/h3&gt;&lt;p&gt;最后，我们抱持着侥幸心理给它出了一个经典的视觉难题：上传了一张手部紧握着一束筷子的照片（由于重叠和手指遮挡，极难数清），让它数出有多少根筷子。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;结果&lt;/strong&gt;：这一次它翻车了。画面中实际清晰可数的是 8 双（共 16 根）筷子，但模型经过一番犹豫后，给出了&amp;quot;大约 20 到 22 根&amp;quot;的错误估算。看来，对于中型本地模型而言，空间重叠物体的精确计数依然是一大软肋。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;四总结与部署建议&#34;&gt;&lt;a href=&#34;#%e5%9b%9b%e6%80%bb%e7%bb%93%e4%b8%8e%e9%83%a8%e7%bd%b2%e5%bb%ba%e8%ae%ae&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;四、总结与部署建议
&lt;/h2&gt;&lt;p&gt;通过全方位的本地实测，谷歌 Gemma 4 12B 的整体表现令人惊艳。除了在极端空间视觉数数上稍显逊色外，它在&lt;strong&gt;代码编写、原生音频解析、长文本高速度分析以及图像逻辑推理&lt;/strong&gt;等维度，都展现出了媲美商用闭源大模型的实力。&lt;/p&gt;
&lt;p&gt;更重要的是，这一切都是&lt;strong&gt;完全免费、高度隐私且完全运行在你本地电脑上&lt;/strong&gt;的。如果你的显卡显存在 8G 到 12G 及以上，强烈建议按照本文的教程部署一套，它绝对会成为你日常工作和开发中不可或缺的 AI 得力助手！&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;📝 &lt;strong&gt;部署资源&lt;/strong&gt;：模型下载地址、llama.cpp 编译指南及启动脚本模板，关注后续更新获取。&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>ITK 服务端开发：External 与 Internal 实战</title>
        <link>https://wenyiblog.top/2026/06/tc-8-itk-dev/</link>
        <pubDate>Fri, 05 Jun 2026 10:00:00 +0800</pubDate>
        
        <guid>https://wenyiblog.top/2026/06/tc-8-itk-dev/</guid>
        <description>&lt;p&gt;ITK（Integration Toolkit）是 Teamcenter 最核心、最强大的二次开发接口。分为 External ITK 和 Internal ITK 两种方式。&lt;/p&gt;
&lt;h2 id=&#34;external-itk独立程序&#34;&gt;&lt;a href=&#34;#external-itk%e7%8b%ac%e7%ab%8b%e7%a8%8b%e5%ba%8f&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;External ITK（独立程序）
&lt;/h2&gt;&lt;p&gt;External ITK 是独立运行的程序，通过 ITK API 登录 Teamcenter 并执行操作。常用于数据导入导出工具、批量处理工具等。&lt;/p&gt;
&lt;h3 id=&#34;最简单的-external-itk-程序c&#34;&gt;&lt;a href=&#34;#%e6%9c%80%e7%ae%80%e5%8d%95%e7%9a%84-external-itk-%e7%a8%8b%e5%ba%8fc&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;最简单的 External ITK 程序（C）
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Train.c
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#include&lt;/span&gt; &lt;span class=&#34;cpf&#34;&gt;&amp;lt;tc/tc.h&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;ITK_user_main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;ITK_auto_login&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ITK_ok&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nf&#34;&gt;printf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Hello PDM!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;ITK_exit_module&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TRUE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;编译和执行&#34;&gt;&lt;a href=&#34;#%e7%bc%96%e8%af%91%e5%92%8c%e6%89%a7%e8%a1%8c&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;编译和执行
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 设置环境变量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;MSDEV_HOME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;C:&lt;span class=&#34;se&#34;&gt;\P&lt;/span&gt;ROGRA~1&lt;span class=&#34;se&#34;&gt;\M&lt;/span&gt;ICROS~4&lt;span class=&#34;se&#34;&gt;\V&lt;/span&gt;C
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 编译&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;compile -DIPLIB&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;none Train.c
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 链接&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;linkitk -o Train Train.obj
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 执行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;template -u&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;user&amp;gt; -p&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;password&amp;gt; -g&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;group&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;internal-itk嵌入-tc-服务&#34;&gt;&lt;a href=&#34;#internal-itk%e5%b5%8c%e5%85%a5-tc-%e6%9c%8d%e5%8a%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Internal ITK（嵌入 TC 服务）
&lt;/h2&gt;&lt;p&gt;Internal ITK 运行在 Teamcenter Server 进程内，推荐使用 Custom Hooks 方式：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 1. 定义 Site Preference（允许多值）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IMAN_customization_libraries&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;site&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 2. 设置环境变量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;IMAN_USER_LIB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IMAN_DATA&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 3. 实现回调注册函数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extern&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;__declspec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dllexport&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;cust1_register_callbacks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nf&#34;&gt;CUSTOM_register_exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;cust1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s&#34;&gt;&amp;#34;User Exit Function&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CUSTOM_EXIT_ftn_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;your_function_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ITK_ok&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;user-exits用户出口&#34;&gt;&lt;a href=&#34;#user-exits%e7%94%a8%e6%88%b7%e5%87%ba%e5%8f%a3&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;User Exits（用户出口）
&lt;/h2&gt;&lt;p&gt;修改 %TC_ROOT%\sample 内以 USER_ 开头的函数。示例：自定义 Item ID 编码规则：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;CUSTOM_register_exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;cust1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;USER_new_item_id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CUSTOM_EXIT_ftn_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CUST_new_item_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;aom-数据对象操作标准流程&#34;&gt;&lt;a href=&#34;#aom-%e6%95%b0%e6%8d%ae%e5%af%b9%e8%b1%a1%e6%93%8d%e4%bd%9c%e6%a0%87%e5%87%86%e6%b5%81%e7%a8%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;AOM 数据对象操作标准流程
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;操作&lt;/th&gt;
&lt;th&gt;步骤&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;修改对象&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AOM_load() → AOM_lock() → AOM_set_xxx() → AOM_save() → AOM_unlock()&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;创建对象&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;创建对象 → AOM_save() → AOM_unlock()&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;删除对象&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AOM_load() → AOM_lock_for_delete() → AOM_delete()&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ Internal ITK 修改会影响整个 TC 服务，务必在测试环境充分验证后再部署到生产环境。&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>Java API 与 SOA 服务开发实战指南</title>
        <link>https://wenyiblog.top/2026/06/tc-9-java-soa-dev/</link>
        <pubDate>Fri, 05 Jun 2026 10:00:00 +0800</pubDate>
        
        <guid>https://wenyiblog.top/2026/06/tc-9-java-soa-dev/</guid>
        <description>&lt;p&gt;Teamcenter Java API 适用于 Web 应用、集成服务和外部系统对接。SOA（Service-Oriented Architecture）是 TC 提供的标准 Web 服务接口。&lt;/p&gt;
&lt;h2 id=&#34;java-api-基本示例&#34;&gt;&lt;a href=&#34;#java-api-%e5%9f%ba%e6%9c%ac%e7%a4%ba%e4%be%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Java API 基本示例
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;com.teamcenter.soa.client.*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;com.teamcenter.soa.client.connection.*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;com.teamcenter.services.strong.core.*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 1. 建立 SOA 连接&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Connection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ConnectionFactory&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getConnection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://tc-server:7001/tc&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;login&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;infodba&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;infodba&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;dba&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 2. 获取 DataManagementService&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataManagementService&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dmService&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataManagementService&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getService&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 3. 执行查询&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ServiceData&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queryData&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dmService&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;executeSavedQuery&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Find Item...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;000001&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 4. 操作业务对象&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queryData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;sizeOfPlainObjects&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ModelObject&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;queryData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getPlainObject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;objId&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getStringProperty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;item_id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setStringProperty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;object_desc&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;新描述&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dmService&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;saveObjects&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ModelObject&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 5. 注销&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;logout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;核心-api-模块&#34;&gt;&lt;a href=&#34;#%e6%a0%b8%e5%bf%83-api-%e6%a8%a1%e5%9d%97&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;核心 API 模块
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模块&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Session Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;通过 SessionManager 建立连接、登录、注销&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Model API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;操作零部件、BOM、文件夹、数据集等业务对象&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Query API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;执行查询（saved query、by example）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SOA Service API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;通过 SOA 调用 TC 服务&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;File Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;通过 FMS 上传/下载文件&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;soa-服务开发要点&#34;&gt;&lt;a href=&#34;#soa-%e6%9c%8d%e5%8a%a1%e5%bc%80%e5%8f%91%e8%a6%81%e7%82%b9&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;SOA 服务开发要点
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;服务发现&lt;/strong&gt;：使用 &lt;code&gt;tcsoap&lt;/code&gt; 或 &lt;code&gt;tcws&lt;/code&gt; 访问服务 WSDL&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;认证机制&lt;/strong&gt;：通过 Token 或 Basic Auth 进行身份验证&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;事务管理&lt;/strong&gt;：SOA 调用支持事务回滚&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;性能优化&lt;/strong&gt;：批量操作使用 &lt;code&gt;bulk&lt;/code&gt; 接口，减少网络往返&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;实际案例工作移交-webservice&#34;&gt;&lt;a href=&#34;#%e5%ae%9e%e9%99%85%e6%a1%88%e4%be%8b%e5%b7%a5%e4%bd%9c%e7%a7%bb%e4%ba%a4-webservice&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;实际案例：工作移交 WebService
&lt;/h2&gt;&lt;p&gt;通过 SOA 实现跨系统的工作流移交：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;接收外部系统传来的审批请求&lt;/li&gt;
&lt;li&gt;调用 TC Workflow Service 创建审批流程&lt;/li&gt;
&lt;li&gt;返回流程实例 ID 和状态&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 Java/SOA 开发适合构建 Web 门户、移动端后端、ERP 集成等场景。对于底层数据处理，仍推荐 ITK。&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>从零搭建智能客服：RAG &#43; LLM 实战指南</title>
        <link>https://wenyiblog.top/2026/06/rag-chatbot-guide/</link>
        <pubDate>Fri, 05 Jun 2026 10:00:00 +0800</pubDate>
        
        <guid>https://wenyiblog.top/2026/06/rag-chatbot-guide/</guid>
        <description>&lt;h2 id=&#34;为什么选-rag&#34;&gt;&lt;a href=&#34;#%e4%b8%ba%e4%bb%80%e4%b9%88%e9%80%89-rag&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;为什么选 RAG？
&lt;/h2&gt;&lt;p&gt;传统的对话机器人依赖规则匹配和意图分类，维护成本高且灵活性差。RAG（Retrieval-Augmented Generation）通过检索增强生成，让大模型能够基于企业知识库回答问题，既保持了 LLM 的泛化能力，又确保了回答的准确性。&lt;/p&gt;
&lt;h2 id=&#34;核心架构&#34;&gt;&lt;a href=&#34;#%e6%a0%b8%e5%bf%83%e6%9e%b6%e6%9e%84&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;核心架构
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;用户提问 → Embedding → 向量检索 → 相关知识 → Prompt 组装 → LLM 生成 → 回答
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;1-知识库构建&#34;&gt;&lt;a href=&#34;#1-%e7%9f%a5%e8%af%86%e5%ba%93%e6%9e%84%e5%bb%ba&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1. 知识库构建
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;文档清洗与分块（chunk_size: 500-1000 tokens）&lt;/li&gt;
&lt;li&gt;向量化存储（Milvus / Chroma / FAISS）&lt;/li&gt;
&lt;li&gt;元数据标注（来源、时间、置信度）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-检索策略&#34;&gt;&lt;a href=&#34;#2-%e6%a3%80%e7%b4%a2%e7%ad%96%e7%95%a5&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;2. 检索策略
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;混合检索：BM25 + 向量相似度&lt;/li&gt;
&lt;li&gt;重排序：Cross-Encoder 精排&lt;/li&gt;
&lt;li&gt;多路召回保证覆盖率&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-prompt-设计要点&#34;&gt;&lt;a href=&#34;#3-prompt-%e8%ae%be%e8%ae%a1%e8%a6%81%e7%82%b9&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;3. Prompt 设计要点
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;角色设定 + 上下文限制 + 输出格式约束&lt;/li&gt;
&lt;li&gt;防止幻觉：添加&amp;quot;如果不确定请说不知道&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;踩坑记录&#34;&gt;&lt;a href=&#34;#%e8%b8%a9%e5%9d%91%e8%ae%b0%e5%bd%95&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;踩坑记录
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Chunk 太大：检索不精确；太小：上下文断裂&lt;/li&gt;
&lt;li&gt;Embedding 模型选择：中文推荐 BGE / M3E&lt;/li&gt;
&lt;li&gt;延迟优化：向量索引 + 缓存策略&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;💡 完整代码和部署脚本已开源，关注后续更新。&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>二次开发入门：BMIDE 业务建模完整教程</title>
        <link>https://wenyiblog.top/2026/06/tc-7-bmide-dev/</link>
        <pubDate>Fri, 05 Jun 2026 10:00:00 +0800</pubDate>
        
        <guid>https://wenyiblog.top/2026/06/tc-7-bmide-dev/</guid>
        <description>&lt;p&gt;BMIDE（Business Modeler IDE）是 Teamcenter 的业务建模工具，用于扩展数据模型而无需编写代码。它是所有二次开发的起点。&lt;/p&gt;
&lt;h2 id=&#34;bmide-开发完整流程&#34;&gt;&lt;a href=&#34;#bmide-%e5%bc%80%e5%8f%91%e5%ae%8c%e6%95%b4%e6%b5%81%e7%a8%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;BMIDE 开发完整流程
&lt;/h2&gt;&lt;h3 id=&#34;1-创建-commonitem继承自-item&#34;&gt;&lt;a href=&#34;#1-%e5%88%9b%e5%bb%ba-commonitem%e7%bb%a7%e6%89%bf%e8%87%aa-item&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1. 创建 CommonItem（继承自 Item）
&lt;/h3&gt;&lt;p&gt;在 Business Object 上通过 Item 创建新的类型 CommonItem，添加自定义属性：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Attribute Type&lt;/th&gt;
&lt;th&gt;String Length&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A2_Customer&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;2-创建-sampleitem继承自-commonitem&#34;&gt;&lt;a href=&#34;#2-%e5%88%9b%e5%bb%ba-sampleitem%e7%bb%a7%e6%89%bf%e8%87%aa-commonitem&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;2. 创建 SampleItem（继承自 CommonItem）
&lt;/h3&gt;&lt;p&gt;添加 MakeBuy 属性：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Attribute Type&lt;/th&gt;
&lt;th&gt;String Length&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A2_MakeBuy&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;同时为 Item Revision 添加属性：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Attribute Type&lt;/th&gt;
&lt;th&gt;默认值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A2_Material&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A2_Approved&lt;/td&gt;
&lt;td&gt;Logical&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;3-设置属性可见性与常量&#34;&gt;&lt;a href=&#34;#3-%e8%ae%be%e7%bd%ae%e5%b1%9e%e6%80%a7%e5%8f%af%e8%a7%81%e6%80%a7%e4%b8%8e%e5%b8%b8%e9%87%8f&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;3. 设置属性可见性与常量
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Required = true&lt;/strong&gt; → 属性变为必填&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visible = false&lt;/strong&gt; → 属性在界面上不可见&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modifiable = Write&lt;/strong&gt; → 属性可编辑&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;4-deploy-部署数据模型&#34;&gt;&lt;a href=&#34;#4-deploy-%e9%83%a8%e7%bd%b2%e6%95%b0%e6%8d%ae%e6%a8%a1%e5%9e%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;4. Deploy 部署数据模型
&lt;/h3&gt;&lt;p&gt;保存数据模型后，通过 BMIDE 的部署功能将数据模型写入数据库。部署完成后 log 显示 Success。&lt;/p&gt;
&lt;h3 id=&#34;5-验证数据模型&#34;&gt;&lt;a href=&#34;#5-%e9%aa%8c%e8%af%81%e6%95%b0%e6%8d%ae%e6%a8%a1%e5%9e%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;5. 验证数据模型
&lt;/h3&gt;&lt;p&gt;用管理员帐号登录 Teamcenter，通过 New → Item 可以看到 CommonItem 和 SampleItem。&lt;/p&gt;
&lt;h3 id=&#34;6-xml-rendering-stylesheet界面显示配置&#34;&gt;&lt;a href=&#34;#6-xml-rendering-stylesheet%e7%95%8c%e9%9d%a2%e6%98%be%e7%a4%ba%e9%85%8d%e7%bd%ae&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;6. XML Rendering Stylesheet（界面显示配置）
&lt;/h3&gt;&lt;p&gt;通过 XML 样式表控制属性在界面上的显示顺序和分组：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;a2_Customer&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;a2_MakeBuy&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;7-lovlist-of-values创建&#34;&gt;&lt;a href=&#34;#7-lovlist-of-values%e5%88%9b%e5%bb%ba&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;7. LOV（List of Values）创建
&lt;/h3&gt;&lt;p&gt;在 Extensions 下的 LOV 文件夹中创建值列表，或通过 XML 导入：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;TcLOV&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;A2_Effects_lov&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;lovType=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;ListOfValuesString&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;usage=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Exhaustive&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;&amp;lt;TcLOVValue&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Environment&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;&amp;lt;TcLOVValue&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Hardware&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;&amp;lt;TcLOVValue&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Software&amp;#34;&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/TcLOV&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;💡 BMIDE 建模是零代码开发，但需要深入理解 TC 的数据模型结构。建议先掌握 Item/Revision/Form 的关系再进行扩展。&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        
    </channel>
</rss>
